From: Joshua Wise Date: Sat, 10 Oct 2009 20:54:14 +0000 (-0400) Subject: Finally move the LEGKEY garbage into ich2/. X-Git-Url: http://git.joshuawise.com/netwatch.git/commitdiff_plain/2768393fc00a378e42139872bf47fe02ea6f3751?ds=sidebyside Finally move the LEGKEY garbage into ich2/. --- diff --git a/grubload/main.c b/grubload/main.c index 904b1e3..72524d8 100644 --- a/grubload/main.c +++ b/grubload/main.c @@ -60,20 +60,11 @@ void c_start(unsigned int magic, struct mb_info *mbinfo) if (mbinfo->mod_cnt != 1) panic("Expected exactly one module; cannot continue."); - outputf("Current SMRAMC state is: %02x", pci_read8(0, 0, 0, 0x70)); - outputf("Current USB state is: %04x %04x", pci_read16(0, 31, 2, 0xC0), pci_read16(0, 31, 4, 0xC0)); - outputf("Current SMI state is: %08x", inl(0x830)); + outputf("Current SMRAMC state is: %02x", (unsigned char)smram_save_state()); + outputf("Current SMI state is: %08x", inl(0x830)); // XXX ICH2 specific smi_disable(); - /* Try really hard to shut up USB_LEGKEY. */ - pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0)); - pci_write16(0, 31, 2, 0xC0, 0); - pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0)); - pci_write16(0, 31, 4, 0xC0, 0); -/* - pci_bus_enum(); -*/ /* Open the SMRAM aperture and load our ELF. */ old_smramc = smram_save_state(); @@ -92,7 +83,7 @@ void c_start(unsigned int magic, struct mb_info *mbinfo) info->firstrun(); smram_restore_state(old_smramc); - outputf("New SMRAMC state is: %02x", pci_read8(0, 0, 0, 0x70)); + outputf("New SMRAMC state is: %02x", (unsigned char)smram_save_state()); puts("Waiting for a bit before returning to real mode..."); for (i=0; i<0x500000; i++) diff --git a/ich2/smi.c b/ich2/smi.c index 8865eab..0e43185 100644 --- a/ich2/smi.c +++ b/ich2/smi.c @@ -33,6 +33,15 @@ void smi_disable() { unsigned short smi_en = _get_PMBASE() + ICH2_PMBASE_SMI_EN; outl(smi_en, inl(smi_en) & ~ICH2_SMI_EN_GBL_SMI_EN); + + /* Try really hard to shut up USB_LEGKEY. */ + pci_write16(ICH2_USB0_BUS, ICH2_USB0_DEV, ICH2_USB0_FN, ICH2_USB_LEGKEY, 0x0); + pci_write16(ICH2_USB0_BUS, ICH2_USB0_DEV, ICH2_USB0_FN, ICH2_USB_LEGKEY, + pci_read16(ICH2_USB0_BUS, ICH2_USB0_DEV, ICH2_USB0_FN, ICH2_USB_LEGKEY)); + pci_write16(ICH2_USB1_BUS, ICH2_USB1_DEV, ICH2_USB1_FN, ICH2_USB_LEGKEY, 0x0); + pci_write16(ICH2_USB1_BUS, ICH2_USB1_DEV, ICH2_USB1_FN, ICH2_USB_LEGKEY, + pci_read16(ICH2_USB1_BUS, ICH2_USB1_DEV, ICH2_USB1_FN, ICH2_USB_LEGKEY)); + } void smi_enable() diff --git a/include/reg-82801b.h b/include/reg-82801b.h index 3192228..4675d34 100644 --- a/include/reg-82801b.h +++ b/include/reg-82801b.h @@ -134,6 +134,8 @@ #define ICH2_USB1_DEV 31 #define ICH2_USB1_FN 4 +#define ICH2_USB_LEGKEY 0xC0 + #define ICH2_SMBUS_BUS 0 #define ICH2_SMBUS_DEV 31 #define ICH2_SMBUS_FN 3 diff --git a/netwatch/firstrun.c b/netwatch/firstrun.c index 66b08d4..e2a8f4b 100644 --- a/netwatch/firstrun.c +++ b/netwatch/firstrun.c @@ -36,12 +36,6 @@ void smi_init() { outputf("NetWatch running"); - /* Try really hard to shut up USB_LEGKEY. */ - pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0)); - pci_write16(0, 31, 2, 0xC0, 0); - pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0)); - pci_write16(0, 31, 4, 0xC0, 0); - /* Turn on the SMIs we want */ smi_disable(); diff --git a/netwatch/smi.c b/netwatch/smi.c index e551ac4..88570a6 100644 --- a/netwatch/smi.c +++ b/netwatch/smi.c @@ -74,14 +74,8 @@ extern void timer_handler(smi_event_t ev); extern void kbc_handler(smi_event_t ev); extern void gbl_rls_handler(smi_event_t ev); -void __firstrun_stub() { - - /* Try really hard to shut up USB_LEGKEY. */ - pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0)); - pci_write16(0, 31, 2, 0xC0, 0); - pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0)); - pci_write16(0, 31, 4, 0xC0, 0); - +void __firstrun_stub() +{ /* Turn on the SMIs we want */ smi_disable();