diff options
| -rw-r--r-- | arch/x86/Kconfig | 7 | ||||
| -rw-r--r-- | arch/x86/include/asm/iosf_mbi.h | 55 | ||||
| -rw-r--r-- | arch/x86/kernel/iosf_mbi.c | 13 |
3 files changed, 69 insertions, 6 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 650433ab184f..7d5feb5908dd 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -2377,12 +2377,9 @@ config X86_DMA_REMAP | |||
| 2377 | depends on STA2X11 | 2377 | depends on STA2X11 |
| 2378 | 2378 | ||
| 2379 | config IOSF_MBI | 2379 | config IOSF_MBI |
| 2380 | bool | 2380 | tristate |
| 2381 | default m | ||
| 2381 | depends on PCI | 2382 | depends on PCI |
| 2382 | ---help--- | ||
| 2383 | To be selected by modules requiring access to the Intel OnChip System | ||
| 2384 | Fabric (IOSF) Sideband MailBox Interface (MBI). For MBI platforms | ||
| 2385 | enumerable by PCI. | ||
| 2386 | 2383 | ||
| 2387 | source "net/Kconfig" | 2384 | source "net/Kconfig" |
| 2388 | 2385 | ||
diff --git a/arch/x86/include/asm/iosf_mbi.h b/arch/x86/include/asm/iosf_mbi.h index 8e71c7941767..57995f0596a6 100644 --- a/arch/x86/include/asm/iosf_mbi.h +++ b/arch/x86/include/asm/iosf_mbi.h | |||
| @@ -50,6 +50,32 @@ | |||
| 50 | #define BT_MBI_PCIE_READ 0x00 | 50 | #define BT_MBI_PCIE_READ 0x00 |
| 51 | #define BT_MBI_PCIE_WRITE 0x01 | 51 | #define BT_MBI_PCIE_WRITE 0x01 |
| 52 | 52 | ||
| 53 | /* Quark available units */ | ||
| 54 | #define QRK_MBI_UNIT_HBA 0x00 | ||
| 55 | #define QRK_MBI_UNIT_HB 0x03 | ||
| 56 | #define QRK_MBI_UNIT_RMU 0x04 | ||
| 57 | #define QRK_MBI_UNIT_MM 0x05 | ||
| 58 | #define QRK_MBI_UNIT_MMESRAM 0x05 | ||
| 59 | #define QRK_MBI_UNIT_SOC 0x31 | ||
| 60 | |||
| 61 | /* Quark read/write opcodes */ | ||
| 62 | #define QRK_MBI_HBA_READ 0x10 | ||
| 63 | #define QRK_MBI_HBA_WRITE 0x11 | ||
| 64 | #define QRK_MBI_HB_READ 0x10 | ||
| 65 | #define QRK_MBI_HB_WRITE 0x11 | ||
| 66 | #define QRK_MBI_RMU_READ 0x10 | ||
| 67 | #define QRK_MBI_RMU_WRITE 0x11 | ||
| 68 | #define QRK_MBI_MM_READ 0x10 | ||
| 69 | #define QRK_MBI_MM_WRITE 0x11 | ||
| 70 | #define QRK_MBI_MMESRAM_READ 0x12 | ||
| 71 | #define QRK_MBI_MMESRAM_WRITE 0x13 | ||
| 72 | #define QRK_MBI_SOC_READ 0x06 | ||
| 73 | #define QRK_MBI_SOC_WRITE 0x07 | ||
| 74 | |||
| 75 | #if IS_ENABLED(CONFIG_IOSF_MBI) | ||
| 76 | |||
| 77 | bool iosf_mbi_available(void); | ||
| 78 | |||
| 53 | /** | 79 | /** |
| 54 | * iosf_mbi_read() - MailBox Interface read command | 80 | * iosf_mbi_read() - MailBox Interface read command |
| 55 | * @port: port indicating subunit being accessed | 81 | * @port: port indicating subunit being accessed |
| @@ -87,4 +113,33 @@ int iosf_mbi_write(u8 port, u8 opcode, u32 offset, u32 mdr); | |||
| 87 | */ | 113 | */ |
| 88 | int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32 mask); | 114 | int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32 mask); |
| 89 | 115 | ||
| 116 | #else /* CONFIG_IOSF_MBI is not enabled */ | ||
| 117 | static inline | ||
| 118 | bool iosf_mbi_available(void) | ||
| 119 | { | ||
| 120 | return false; | ||
| 121 | } | ||
| 122 | |||
| 123 | static inline | ||
| 124 | int iosf_mbi_read(u8 port, u8 opcode, u32 offset, u32 *mdr) | ||
| 125 | { | ||
| 126 | WARN(1, "IOSF_MBI driver not available"); | ||
| 127 | return -EPERM; | ||
| 128 | } | ||
| 129 | |||
| 130 | static inline | ||
| 131 | int iosf_mbi_write(u8 port, u8 opcode, u32 offset, u32 mdr) | ||
| 132 | { | ||
| 133 | WARN(1, "IOSF_MBI driver not available"); | ||
| 134 | return -EPERM; | ||
| 135 | } | ||
| 136 | |||
| 137 | static inline | ||
| 138 | int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32 mask) | ||
| 139 | { | ||
| 140 | WARN(1, "IOSF_MBI driver not available"); | ||
| 141 | return -EPERM; | ||
| 142 | } | ||
| 143 | #endif /* CONFIG_IOSF_MBI */ | ||
| 144 | |||
| 90 | #endif /* IOSF_MBI_SYMS_H */ | 145 | #endif /* IOSF_MBI_SYMS_H */ |
diff --git a/arch/x86/kernel/iosf_mbi.c b/arch/x86/kernel/iosf_mbi.c index c3aae6672843..d30acdc1229d 100644 --- a/arch/x86/kernel/iosf_mbi.c +++ b/arch/x86/kernel/iosf_mbi.c | |||
| @@ -25,6 +25,9 @@ | |||
| 25 | 25 | ||
| 26 | #include <asm/iosf_mbi.h> | 26 | #include <asm/iosf_mbi.h> |
| 27 | 27 | ||
| 28 | #define PCI_DEVICE_ID_BAYTRAIL 0x0F00 | ||
| 29 | #define PCI_DEVICE_ID_QUARK_X1000 0x0958 | ||
| 30 | |||
| 28 | static DEFINE_SPINLOCK(iosf_mbi_lock); | 31 | static DEFINE_SPINLOCK(iosf_mbi_lock); |
| 29 | 32 | ||
| 30 | static inline u32 iosf_mbi_form_mcr(u8 op, u8 port, u8 offset) | 33 | static inline u32 iosf_mbi_form_mcr(u8 op, u8 port, u8 offset) |
| @@ -177,6 +180,13 @@ int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32 mask) | |||
| 177 | } | 180 | } |
| 178 | EXPORT_SYMBOL(iosf_mbi_modify); | 181 | EXPORT_SYMBOL(iosf_mbi_modify); |
| 179 | 182 | ||
| 183 | bool iosf_mbi_available(void) | ||
| 184 | { | ||
| 185 | /* Mbi isn't hot-pluggable. No remove routine is provided */ | ||
| 186 | return mbi_pdev; | ||
| 187 | } | ||
| 188 | EXPORT_SYMBOL(iosf_mbi_available); | ||
| 189 | |||
| 180 | static int iosf_mbi_probe(struct pci_dev *pdev, | 190 | static int iosf_mbi_probe(struct pci_dev *pdev, |
| 181 | const struct pci_device_id *unused) | 191 | const struct pci_device_id *unused) |
| 182 | { | 192 | { |
| @@ -193,7 +203,8 @@ static int iosf_mbi_probe(struct pci_dev *pdev, | |||
| 193 | } | 203 | } |
| 194 | 204 | ||
| 195 | static DEFINE_PCI_DEVICE_TABLE(iosf_mbi_pci_ids) = { | 205 | static DEFINE_PCI_DEVICE_TABLE(iosf_mbi_pci_ids) = { |
| 196 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0F00) }, | 206 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_BAYTRAIL) }, |
| 207 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_QUARK_X1000) }, | ||
| 197 | { 0, }, | 208 | { 0, }, |
| 198 | }; | 209 | }; |
| 199 | MODULE_DEVICE_TABLE(pci, iosf_mbi_pci_ids); | 210 | MODULE_DEVICE_TABLE(pci, iosf_mbi_pci_ids); |
