reg_access: Forcewake as necessary

Don't try to be smart. Just poke all forcewake bits if it seems we need
it.

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
This commit is contained in:
Ben Widawsky 2013-02-21 22:05:36 -08:00 committed by Jesse Barnes
parent 67ed990604
commit a59b0ee5d4
2 changed files with 25 additions and 0 deletions

View File

@ -12,6 +12,7 @@ extern int intel_register_access_init(struct pci_device *pci_dev, int safe);
extern uint32_t intel_register_read(uint32_t reg);
extern uint32_t intel_register_write(uint32_t reg, uint32_t val);
extern void intel_register_access_fini();
extern int intel_register_access_needs_wake();
extern unsigned short pcidev_to_devid(struct pci_device *pci_dev);
%}
@ -23,4 +24,5 @@ extern int intel_register_access_init(struct pci_device *pci_dev, int safe);
extern uint32_t intel_register_read(uint32_t reg);
extern uint32_t intel_register_write(uint32_t reg, uint32_t val);
extern void intel_register_access_fini();
extern int intel_register_access_needs_wake();
extern unsigned short pcidev_to_devid(struct pci_device *pci_dev);

View File

@ -9,12 +9,35 @@ def read(reg):
def write(reg, val):
chipset.intel_register_write(reg, val)
def gen6_forcewake_get():
write(0xa18c, 0x1)
read("0xa180")
def mt_forcewake_get():
write(0xa188, 0x10001)
read("0xa180")
def vlv_forcewake_get():
write(0x1300b0, 0x10001)
read("0x1300b4")
# don't be clever, just try all possibilities
def get_wake():
gen6_forcewake_get()
mt_forcewake_get()
vlv_forcewake_get()
def init():
pci_dev = chipset.intel_get_pci_device()
ret = chipset.intel_register_access_init(pci_dev, 0)
if ret != 0:
print("Register access init failed");
return False
if chipset.intel_register_access_needs_wake():
print("Forcing forcewake. Don't expect your system to work after this.")
get_wake()
return True
if __name__ == "__main__":