|
@@ -97,15 +97,31 @@ static bool mei_me_quirk_probe(struct pci_dev *pdev,
|
|
const struct pci_device_id *ent)
|
|
const struct pci_device_id *ent)
|
|
{
|
|
{
|
|
u32 reg;
|
|
u32 reg;
|
|
- if (ent->device == MEI_DEV_ID_PBG_1) {
|
|
|
|
- pci_read_config_dword(pdev, 0x48, ®);
|
|
|
|
- /* make sure that bit 9 is up and bit 10 is down */
|
|
|
|
- if ((reg & 0x600) == 0x200) {
|
|
|
|
- dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n");
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ /* Cougar Point || Patsburg */
|
|
|
|
+ if (ent->device == MEI_DEV_ID_CPT_1 ||
|
|
|
|
+ ent->device == MEI_DEV_ID_PBG_1) {
|
|
|
|
+ pci_read_config_dword(pdev, PCI_CFG_HFS_2, ®);
|
|
|
|
+ /* make sure that bit 9 (NM) is up and bit 10 (DM) is down */
|
|
|
|
+ if ((reg & 0x600) == 0x200)
|
|
|
|
+ goto no_mei;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /* Lynx Point */
|
|
|
|
+ if (ent->device == MEI_DEV_ID_LPT_H ||
|
|
|
|
+ ent->device == MEI_DEV_ID_LPT_W ||
|
|
|
|
+ ent->device == MEI_DEV_ID_LPT_HR) {
|
|
|
|
+ /* Read ME FW Status check for SPS Firmware */
|
|
|
|
+ pci_read_config_dword(pdev, PCI_CFG_HFS_1, ®);
|
|
|
|
+ /* if bits [19:16] = 15, running SPS Firmware */
|
|
|
|
+ if ((reg & 0xf0000) == 0xf0000)
|
|
|
|
+ goto no_mei;
|
|
|
|
+ }
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
|
|
+
|
|
|
|
+no_mei:
|
|
|
|
+ dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n");
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
/**
|
|
/**
|
|
* mei_probe - Device Initialization Routine
|
|
* mei_probe - Device Initialization Routine
|