-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86: Add support for 0x22/0x23 port I/O configuration space
Define macros and accessors for the configuration space addressed indirectly with an index register and a data register at the port I/O locations of 0x22 and 0x23 respectively. This space is defined by the Intel MultiProcessor Specification for the IMCR register used to switch between the PIC and the APIC mode[1], by Cyrix processors for their configuration[2][3], and also some chipsets. Given the lack of atomicity with the indirect addressing a spinlock is required to protect accesses, although for Cyrix processors it is enough if accesses are executed with interrupts locally disabled, because the registers are local to the accessing CPU, and IMCR is only ever poked at by the BSP and early enough for interrupts not to have been configured yet. Therefore existing code does not have to change or use the new spinlock and neither it does. Put the spinlock in a library file then, so that it does not get pulled unnecessarily for configurations that do not refer it. Convert Cyrix accessors to wrappers so as to retain the brevity and clarity of the `getCx86' and `setCx86' calls. References: [1] "MultiProcessor Specification", Version 1.4, Intel Corporation, Order Number: 242016-006, May 1997, Section 3.6.2.1 "PIC Mode", pp. 3-7, 3-8 [2] "5x86 Microprocessor", Cyrix Corporation, Order Number: 94192-00, July 1995, Section 2.3.2.4 "Configuration Registers", p. 2-23 [3] "6x86 Processor", Cyrix Corporation, Order Number: 94175-01, March 1996, Section 2.4.4 "6x86 Configuration Registers", p. 2-23 Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/alpine.DEB.2.21.2107182353140.9461@angie.orcam.me.uk
- Loading branch information
Maciej W. Rozycki
authored and
Thomas Gleixner
committed
Aug 10, 2021
1 parent
36a21d5
commit fb6a040
Showing
5 changed files
with
54 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
/* | ||
* Support for the configuration register space at port I/O locations | ||
* 0x22 and 0x23 variously used by PC architectures, e.g. the MP Spec, | ||
* Cyrix CPUs, numerous chipsets. | ||
*/ | ||
#ifndef _ASM_X86_PC_CONF_REG_H | ||
#define _ASM_X86_PC_CONF_REG_H | ||
|
||
#include <linux/io.h> | ||
#include <linux/spinlock.h> | ||
#include <linux/types.h> | ||
|
||
#define PC_CONF_INDEX 0x22 | ||
#define PC_CONF_DATA 0x23 | ||
|
||
#define PC_CONF_MPS_IMCR 0x70 | ||
|
||
extern raw_spinlock_t pc_conf_lock; | ||
|
||
static inline u8 pc_conf_get(u8 reg) | ||
{ | ||
outb(reg, PC_CONF_INDEX); | ||
return inb(PC_CONF_DATA); | ||
} | ||
|
||
static inline void pc_conf_set(u8 reg, u8 data) | ||
{ | ||
outb(reg, PC_CONF_INDEX); | ||
outb(data, PC_CONF_DATA); | ||
} | ||
|
||
#endif /* _ASM_X86_PC_CONF_REG_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Support for the configuration register space at port I/O locations | ||
* 0x22 and 0x23 variously used by PC architectures, e.g. the MP Spec, | ||
* Cyrix CPUs, numerous chipsets. As the space is indirectly addressed | ||
* it may have to be protected with a spinlock, depending on the context. | ||
*/ | ||
|
||
#include <linux/spinlock.h> | ||
|
||
#include <asm/pc-conf-reg.h> | ||
|
||
DEFINE_RAW_SPINLOCK(pc_conf_lock); |