aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/pci-me.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/mei/pci-me.c')
-rw-r--r--drivers/misc/mei/pci-me.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
index 1c8fd3a3e135..95889e2e31ff 100644
--- a/drivers/misc/mei/pci-me.c
+++ b/drivers/misc/mei/pci-me.c
@@ -97,15 +97,31 @@ static bool mei_me_quirk_probe(struct pci_dev *pdev,
97 const struct pci_device_id *ent) 97 const struct pci_device_id *ent)
98{ 98{
99 u32 reg; 99 u32 reg;
100 if (ent->device == MEI_DEV_ID_PBG_1) { 100 /* Cougar Point || Patsburg */
101 pci_read_config_dword(pdev, 0x48, &reg); 101 if (ent->device == MEI_DEV_ID_CPT_1 ||
102 /* make sure that bit 9 is up and bit 10 is down */ 102 ent->device == MEI_DEV_ID_PBG_1) {
103 if ((reg & 0x600) == 0x200) { 103 pci_read_config_dword(pdev, PCI_CFG_HFS_2, &reg);
104 dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n"); 104 /* make sure that bit 9 (NM) is up and bit 10 (DM) is down */
105 return false; 105 if ((reg & 0x600) == 0x200)
106 } 106 goto no_mei;
107 } 107 }
108
109 /* Lynx Point */
110 if (ent->device == MEI_DEV_ID_LPT_H ||
111 ent->device == MEI_DEV_ID_LPT_W ||
112 ent->device == MEI_DEV_ID_LPT_HR) {
113 /* Read ME FW Status check for SPS Firmware */
114 pci_read_config_dword(pdev, PCI_CFG_HFS_1, &reg);
115 /* if bits [19:16] = 15, running SPS Firmware */
116 if ((reg & 0xf0000) == 0xf0000)
117 goto no_mei;
118 }
119
108 return true; 120 return true;
121
122no_mei:
123 dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n");
124 return false;
109} 125}
110/** 126/**
111 * mei_probe - Device Initialization Routine 127 * mei_probe - Device Initialization Routine