diff options
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/pnd2_edac.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/edac/pnd2_edac.c b/drivers/edac/pnd2_edac.c index 2b16b95201eb..89cdd9a7a733 100644 --- a/drivers/edac/pnd2_edac.c +++ b/drivers/edac/pnd2_edac.c @@ -236,12 +236,23 @@ static u64 get_sideband_reg_base_addr(void) { struct pci_dev *pdev; u32 hi, lo; + u8 hidden; pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x19dd, NULL); if (pdev) { + /* Unhide the P2SB device, if it's hidden */ + pci_read_config_byte(pdev, 0xe1, &hidden); + if (hidden) + pci_write_config_byte(pdev, 0xe1, 0); + pci_read_config_dword(pdev, 0x10, &lo); pci_read_config_dword(pdev, 0x14, &hi); lo &= 0xfffffff0; + + /* Hide the P2SB device, if it was hidden before */ + if (hidden) + pci_write_config_byte(pdev, 0xe1, hidden); + pci_dev_put(pdev); return (U64_LSHIFT(hi, 32) | U64_LSHIFT(lo, 0)); } else { |