|
@@ -181,6 +181,7 @@ struct e752x_pvt {
|
|
|
|
|
|
struct e752x_dev_info {
|
|
struct e752x_dev_info {
|
|
u16 err_dev;
|
|
u16 err_dev;
|
|
|
|
+ u16 ctl_dev;
|
|
const char *ctl_name;
|
|
const char *ctl_name;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -207,12 +208,15 @@ struct e752x_error_info {
|
|
static const struct e752x_dev_info e752x_devs[] = {
|
|
static const struct e752x_dev_info e752x_devs[] = {
|
|
[E7520] = {
|
|
[E7520] = {
|
|
.err_dev = PCI_DEVICE_ID_INTEL_7520_1_ERR,
|
|
.err_dev = PCI_DEVICE_ID_INTEL_7520_1_ERR,
|
|
|
|
+ .ctl_dev = PCI_DEVICE_ID_INTEL_7520_0,
|
|
.ctl_name = "E7520"},
|
|
.ctl_name = "E7520"},
|
|
[E7525] = {
|
|
[E7525] = {
|
|
.err_dev = PCI_DEVICE_ID_INTEL_7525_1_ERR,
|
|
.err_dev = PCI_DEVICE_ID_INTEL_7525_1_ERR,
|
|
|
|
+ .ctl_dev = PCI_DEVICE_ID_INTEL_7525_0,
|
|
.ctl_name = "E7525"},
|
|
.ctl_name = "E7525"},
|
|
[E7320] = {
|
|
[E7320] = {
|
|
.err_dev = PCI_DEVICE_ID_INTEL_7320_1_ERR,
|
|
.err_dev = PCI_DEVICE_ID_INTEL_7320_1_ERR,
|
|
|
|
+ .ctl_dev = PCI_DEVICE_ID_INTEL_7320_0,
|
|
.ctl_name = "E7320"},
|
|
.ctl_name = "E7320"},
|
|
};
|
|
};
|
|
|
|
|
|
@@ -742,7 +746,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|
{
|
|
{
|
|
int rc = -ENODEV;
|
|
int rc = -ENODEV;
|
|
int index;
|
|
int index;
|
|
- u16 pci_data, stat;
|
|
|
|
|
|
+ u16 pci_data;
|
|
u32 stat32;
|
|
u32 stat32;
|
|
u16 stat16;
|
|
u16 stat16;
|
|
u8 stat8;
|
|
u8 stat8;
|
|
@@ -755,7 +759,6 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|
int drc_ddim; /* DRAM Data Integrity Mode 0=none,2=edac */
|
|
int drc_ddim; /* DRAM Data Integrity Mode 0=none,2=edac */
|
|
u32 dra;
|
|
u32 dra;
|
|
unsigned long last_cumul_size;
|
|
unsigned long last_cumul_size;
|
|
- struct pci_dev *pres_dev;
|
|
|
|
struct pci_dev *dev = NULL;
|
|
struct pci_dev *dev = NULL;
|
|
|
|
|
|
debugf0("%s(): mci\n", __func__);
|
|
debugf0("%s(): mci\n", __func__);
|
|
@@ -920,33 +923,9 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|
goto fail;
|
|
goto fail;
|
|
}
|
|
}
|
|
|
|
|
|
- /* Walk through the PCI table and clear errors */
|
|
|
|
- switch (dev_idx) {
|
|
|
|
- case E7520:
|
|
|
|
- dev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
|
|
|
- PCI_DEVICE_ID_INTEL_7520_0, NULL);
|
|
|
|
- break;
|
|
|
|
- case E7525:
|
|
|
|
- dev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
|
|
|
- PCI_DEVICE_ID_INTEL_7525_0, NULL);
|
|
|
|
- break;
|
|
|
|
- case E7320:
|
|
|
|
- dev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
|
|
|
- PCI_DEVICE_ID_INTEL_7320_0, NULL);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ dev = pci_get_device(PCI_VENDOR_ID_INTEL, e752x_devs[dev_idx].ctl_dev,
|
|
|
|
+ NULL);
|
|
pvt->dev_d0f0 = dev;
|
|
pvt->dev_d0f0 = dev;
|
|
- for (pres_dev = dev;
|
|
|
|
- ((struct pci_dev *) pres_dev->global_list.next != dev);
|
|
|
|
- pres_dev = (struct pci_dev *) pres_dev->global_list.next) {
|
|
|
|
- pci_read_config_dword(pres_dev, PCI_COMMAND, &stat32);
|
|
|
|
- stat = (u16) (stat32 >> 16);
|
|
|
|
- /* clear any error bits */
|
|
|
|
- if (stat32 & ((1 << 6) + (1 << 8)))
|
|
|
|
- pci_write_config_word(pres_dev, PCI_STATUS, stat);
|
|
|
|
- }
|
|
|
|
/* find the error reporting device and clear errors */
|
|
/* find the error reporting device and clear errors */
|
|
dev = pvt->dev_d0f1 = pci_dev_get(pvt->bridge_ck);
|
|
dev = pvt->dev_d0f1 = pci_dev_get(pvt->bridge_ck);
|
|
/* Turn off error disable & SMI in case the BIOS turned it on */
|
|
/* Turn off error disable & SMI in case the BIOS turned it on */
|