soc/intel/xeon_sp: Lock down IIO DFX Global registers

This is required for CbNT.

Change-Id: I565a95cd2e76cb1c648884be6d1954288f6e4804
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/47447
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Arthur Heymans 2020-11-10 15:55:31 +01:00 committed by Hung-Te Lin
parent 42a6f7e417
commit 7a36ca5a3a
4 changed files with 42 additions and 0 deletions

View File

@ -63,6 +63,9 @@ chip soc/intel/xeon_sp/cpx
device pci 05.0 on end # Intel SkyLake-E MM/Vt-d Configuration Registers device pci 05.0 on end # Intel SkyLake-E MM/Vt-d Configuration Registers
device pci 05.2 on end # Intel SkyLake-E RAS device pci 05.2 on end # Intel SkyLake-E RAS
device pci 05.4 on end # Intel SkyLake-E IOAPIC device pci 05.4 on end # Intel SkyLake-E IOAPIC
device pci 07.0 on end
device pci 07.4 on end
device pci 07.7 on end
device pci 08.0 on end # System peripheral: Intel SkyLake-E Ubox Registers device pci 08.0 on end # System peripheral: Intel SkyLake-E Ubox Registers
device pci 08.1 on end # Performance counters: Intel SkyLake-E Ubox Registers device pci 08.1 on end # Performance counters: Intel SkyLake-E Ubox Registers
device pci 08.2 on end # System peripheral: Intel SkyLake-E Ubox Registers device pci 08.2 on end # System peripheral: Intel SkyLake-E Ubox Registers

View File

@ -127,4 +127,8 @@
#define DMIRCBAR 0x50 #define DMIRCBAR 0x50
#define ERRINJCON 0x1d8 #define ERRINJCON 0x1d8
// IIO DFX Global D7F7 registers
#define IIO_DFX_TSWCTL0 0x30c
#define IIO_DFX_LCK_CTL 0x504
#endif /* _SOC_PCI_DEVS_H_ */ #endif /* _SOC_PCI_DEVS_H_ */

View File

@ -172,4 +172,8 @@
#define DMIRCBAR 0x50 #define DMIRCBAR 0x50
#define ERRINJCON 0x1d8 #define ERRINJCON 0x1d8
// IIO DFX Global D7F7 registers
#define IIO_DFX_TSWCTL0 0x30c
#define IIO_DFX_LCK_CTL 0x504
#endif /* _SOC_PCI_DEVS_H_ */ #endif /* _SOC_PCI_DEVS_H_ */

View File

@ -374,3 +374,34 @@ static const struct pci_driver dmi3_driver __pci_driver = {
.vendor = PCI_VENDOR_ID_INTEL, .vendor = PCI_VENDOR_ID_INTEL,
.device = DMI3_DEVID, .device = DMI3_DEVID,
}; };
static void iio_dfx_global_init(struct device *dev)
{
uint16_t reg16;
pci_or_config16(dev, IIO_DFX_LCK_CTL, 0x3ff);
reg16 = pci_read_config16(dev, IIO_DFX_TSWCTL0);
reg16 &= ~(1 << 4); // allow ib mmio cfg
reg16 &= ~(1 << 5); // ignore acs p2p ma lpbk
reg16 |= (1 << 3); // me disable
pci_write_config16(dev, IIO_DFX_TSWCTL0, reg16);
}
static const unsigned short iio_dfx_global_ids[] = {
0x202d,
0x203d,
0
};
static struct device_operations iio_dfx_global_ops = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
.init = iio_dfx_global_init,
.ops_pci = &soc_pci_ops,
};
static const struct pci_driver iio_dfx_global_driver __pci_driver = {
.ops = &iio_dfx_global_ops,
.vendor = PCI_VENDOR_ID_INTEL,
.devices = iio_dfx_global_ids,
};