aboutsummaryrefslogtreecommitdiff
path: root/src/southbridge/intel/lynxpoint/early_me.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2012-11-02 09:16:46 -0500
committerRonald G. Minnich <rminnich@gmail.com>2013-03-14 06:26:42 +0100
commit9aa031e47157e37e8f3cd80cbc80215e2843eaa9 (patch)
tree00df9615618ba326c925af63817c8f5c1e5cfb98 /src/southbridge/intel/lynxpoint/early_me.c
parentdc278f8fd0318caf0c11330478dff8453bb1107d (diff)
lynxpoint: Management Engine Updates
The ME9 requirements have added some registers and changed some of the MBP state machine. Implement the changes found so far in the ME9 BWG. There were a couple of reigster renames, but the majority of th churn in the me.h header file is just introducing the data structures in the same order as the ME9 BWG. Change-Id: I51b0bb6620eff4979674ea99992ddab65a8abc18 Signed-Off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/2620 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/southbridge/intel/lynxpoint/early_me.c')
-rw-r--r--src/southbridge/intel/lynxpoint/early_me.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/southbridge/intel/lynxpoint/early_me.c b/src/southbridge/intel/lynxpoint/early_me.c
index 5b266cc10c..1eb30a1ff7 100644
--- a/src/southbridge/intel/lynxpoint/early_me.c
+++ b/src/southbridge/intel/lynxpoint/early_me.c
@@ -56,12 +56,12 @@ static inline void pci_write_dword_ptr(void *ptr, int offset)
void intel_early_me_status(void)
{
struct me_hfs hfs;
- struct me_gmes gmes;
+ struct me_hfs2 hfs2;
pci_read_dword_ptr(&hfs, PCI_ME_HFS);
- pci_read_dword_ptr(&gmes, PCI_ME_GMES);
+ pci_read_dword_ptr(&hfs2, PCI_ME_HFS2);
- intel_me_status(&hfs, &gmes);
+ intel_me_status(&hfs, &hfs2);
}
int intel_early_me_init(void)
@@ -73,6 +73,7 @@ int intel_early_me_init(void)
printk(BIOS_INFO, "Intel ME early init\n");
/* Wait for ME UMA SIZE VALID bit to be set */
+ /* FIXME: ME9 BGW indicates a 5 sec poll timeout. */
for (count = ME_RETRY; count > 0; --count) {
pci_read_dword_ptr(&uma, PCI_ME_UMA);
if (uma.valid)
@@ -147,6 +148,13 @@ int intel_early_me_init_done(u8 status)
pci_write_dword_ptr(&did, PCI_ME_H_GS);
+ /*
+ * The ME firmware does not respond with an ACK when NOMEM or ERROR
+ * are sent.
+ */
+ if (status == ME_INIT_STATUS_NOMEM || status == ME_INIT_STATUS_ERROR)
+ return 0;
+
/* Must wait for ME acknowledgement */
for (count = ME_RETRY; count > 0; --count) {
pci_read_dword_ptr(&hfs, PCI_ME_HFS);
@@ -195,7 +203,9 @@ int intel_early_me_init_done(u8 status)
/* Perform the requested reset */
if (reset) {
outb(reset, 0xcf9);
- hlt();
+ while (1) {
+ hlt();
+ }
}
return -1;
}