summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Usyskin <alexander.usyskin@intel.com>2015-08-02 15:20:51 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-08-03 20:33:54 -0400
commitbb9f4d26dda7d2a875cadc0f7eedee3d65d3d1f5 (patch)
treeae3cec0e9b0011eeb724bd87bc289ffc09d8f3ea
parent11830486c5717c713bb363b14944cda39e3034f9 (diff)
mei: me: d0i3: add flag to indicate D0i3 support
Detect d0i3 low power state during hw configuration, the value is set in HFS_1 pci config reigister. Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/misc/mei/hw-me-regs.h1
-rw-r--r--drivers/misc/mei/hw-me.c10
-rw-r--r--drivers/misc/mei/hw-me.h6
3 files changed, 14 insertions, 3 deletions
diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
index 6cfb198d5daf..4c8f05ea3651 100644
--- a/drivers/misc/mei/hw-me-regs.h
+++ b/drivers/misc/mei/hw-me-regs.h
@@ -123,6 +123,7 @@
123 123
124/* Host Firmware Status Registers in PCI Config Space */ 124/* Host Firmware Status Registers in PCI Config Space */
125#define PCI_CFG_HFS_1 0x40 125#define PCI_CFG_HFS_1 0x40
126# define PCI_CFG_HFS_1_D0I3_MSK 0x80000000
126#define PCI_CFG_HFS_2 0x48 127#define PCI_CFG_HFS_2 0x48
127#define PCI_CFG_HFS_3 0x60 128#define PCI_CFG_HFS_3 0x60
128#define PCI_CFG_HFS_4 0x64 129#define PCI_CFG_HFS_4 0x64
diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
index 43d7101ff993..17d6894b0fd2 100644
--- a/drivers/misc/mei/hw-me.c
+++ b/drivers/misc/mei/hw-me.c
@@ -176,12 +176,20 @@ static int mei_me_fw_status(struct mei_device *dev,
176 */ 176 */
177static void mei_me_hw_config(struct mei_device *dev) 177static void mei_me_hw_config(struct mei_device *dev)
178{ 178{
179 struct pci_dev *pdev = to_pci_dev(dev->dev);
179 struct mei_me_hw *hw = to_me_hw(dev); 180 struct mei_me_hw *hw = to_me_hw(dev);
180 u32 hcsr = mei_hcsr_read(dev); 181 u32 hcsr, reg;
182
181 /* Doesn't change in runtime */ 183 /* Doesn't change in runtime */
184 hcsr = mei_hcsr_read(dev);
182 dev->hbuf_depth = (hcsr & H_CBD) >> 24; 185 dev->hbuf_depth = (hcsr & H_CBD) >> 24;
183 186
184 hw->pg_state = MEI_PG_OFF; 187 hw->pg_state = MEI_PG_OFF;
188
189 reg = 0;
190 pci_read_config_dword(pdev, PCI_CFG_HFS_1, &reg);
191 hw->d0i3_supported =
192 ((reg & PCI_CFG_HFS_1_D0I3_MSK) == PCI_CFG_HFS_1_D0I3_MSK);
185} 193}
186 194
187/** 195/**
diff --git a/drivers/misc/mei/hw-me.h b/drivers/misc/mei/hw-me.h
index 6022d52af6f6..cf64847a35b9 100644
--- a/drivers/misc/mei/hw-me.h
+++ b/drivers/misc/mei/hw-me.h
@@ -50,13 +50,15 @@ struct mei_cfg {
50 * struct mei_me_hw - me hw specific data 50 * struct mei_me_hw - me hw specific data
51 * 51 *
52 * @cfg: per device generation config and ops 52 * @cfg: per device generation config and ops
53 * @mem_addr: io memory address 53 * @mem_addr: io memory address
54 * @pg_state: power gating state 54 * @pg_state: power gating state
55 * @d0i3_supported: di03 support
55 */ 56 */
56struct mei_me_hw { 57struct mei_me_hw {
57 const struct mei_cfg *cfg; 58 const struct mei_cfg *cfg;
58 void __iomem *mem_addr; 59 void __iomem *mem_addr;
59 enum mei_pg_state pg_state; 60 enum mei_pg_state pg_state;
61 bool d0i3_supported;
60}; 62};
61 63
62#define to_me_hw(dev) (struct mei_me_hw *)((dev)->hw) 64#define to_me_hw(dev) (struct mei_me_hw *)((dev)->hw)