void intel_me_hsio_version(uint16_t *version, uint16_t *checksum) { int count; u32 hsiover; struct me_hfs hfs; /* Query for HSIO version, overloads H_GS and HFS */ pci_write_config32(PCH_DEV_ME, PCI_ME_H_GS, ME_HSIO_MESSAGE | ME_HSIO_CMD_GETHSIOVER); /* Must wait for ME acknowledgement */ for (count = ME_RETRY; count > 0; --count) { me_read_dword_ptr(&hfs, PCI_ME_HFS); if (hfs.bios_msg_ack) break; udelay(ME_DELAY); } if (!count) { printk(BIOS_ERR, "ERROR: ME failed to respond\n"); return; } /* HSIO version should be in HFS_5 */ hsiover = pci_read_config32(PCH_DEV_ME, PCI_ME_HFS5); *version = hsiover >> 16; *checksum = hsiover & 0xffff; printk(BIOS_DEBUG, "ME: HSIO Version : %d (CRC 0x%04x)\n", *version, *checksum); /* Reset registers to normal behavior */ pci_write_config32(PCH_DEV_ME, PCI_ME_H_GS, ME_HSIO_MESSAGE | ME_HSIO_CMD_GETHSIOVER); }
int intel_me_hsio_version(struct udevice *dev, uint16_t *versionp, uint16_t *checksump) { int count; u32 hsiover; struct me_hfs hfs; /* Query for HSIO version, overloads H_GS and HFS */ dm_pci_write_config32(dev, PCI_ME_H_GS, ME_HSIO_MESSAGE | ME_HSIO_CMD_GETHSIOVER); /* Must wait for ME acknowledgement */ for (count = ME_RETRY; count > 0; --count) { me_read_dword_ptr(dev, &hfs, PCI_ME_HFS); if (hfs.bios_msg_ack) break; udelay(ME_DELAY); } if (!count) { debug("ERROR: ME failed to respond\n"); return -ETIMEDOUT; } /* HSIO version should be in HFS_5 */ dm_pci_read_config32(dev, PCI_ME_HFS5, &hsiover); *versionp = hsiover >> 16; *checksump = hsiover & 0xffff; debug("ME: HSIO Version : %d (CRC 0x%04x)\n", *versionp, *checksump); /* Reset registers to normal behavior */ dm_pci_write_config32(dev, PCI_ME_H_GS, ME_HSIO_MESSAGE | ME_HSIO_CMD_GETHSIOVER); return 0; }
void intel_me_status(void) { struct me_hfs _hfs, *hfs = &_hfs; struct me_hfs2 _hfs2, *hfs2 = &_hfs2; me_read_dword_ptr(hfs, PCI_ME_HFS); me_read_dword_ptr(hfs2, PCI_ME_HFS2); /* Check Current States */ printk(BIOS_DEBUG, "ME: FW Partition Table : %s\n", hfs->fpt_bad ? "BAD" : "OK"); printk(BIOS_DEBUG, "ME: Bringup Loader Failure : %s\n", hfs->ft_bup_ld_flr ? "YES" : "NO"); printk(BIOS_DEBUG, "ME: Firmware Init Complete : %s\n", hfs->fw_init_complete ? "YES" : "NO"); printk(BIOS_DEBUG, "ME: Manufacturing Mode : %s\n", hfs->mfg_mode ? "YES" : "NO"); printk(BIOS_DEBUG, "ME: Boot Options Present : %s\n", hfs->boot_options_present ? "YES" : "NO"); printk(BIOS_DEBUG, "ME: Update In Progress : %s\n", hfs->update_in_progress ? "YES" : "NO"); printk(BIOS_DEBUG, "ME: Current Working State : %s\n", me_cws_values[hfs->working_state]); printk(BIOS_DEBUG, "ME: Current Operation State : %s\n", me_opstate_values[hfs->operation_state]); printk(BIOS_DEBUG, "ME: Current Operation Mode : %s\n", me_opmode_values[hfs->operation_mode]); printk(BIOS_DEBUG, "ME: Error Code : %s\n", me_error_values[hfs->error_code]); printk(BIOS_DEBUG, "ME: Progress Phase : %s\n", me_progress_values[hfs2->progress_code]); printk(BIOS_DEBUG, "ME: Power Management Event : %s\n", me_pmevent_values[hfs2->current_pmevent]); printk(BIOS_DEBUG, "ME: Progress Phase State : "); switch (hfs2->progress_code) { case ME_HFS2_PHASE_ROM: /* ROM Phase */ printk(BIOS_DEBUG, "%s", me_progress_rom_values[hfs2->current_state]); break; case ME_HFS2_PHASE_UKERNEL: /* uKernel Phase */ printk(BIOS_DEBUG, "0x%02x", hfs2->current_state); break; case ME_HFS2_PHASE_BUP: /* Bringup Phase */ if (hfs2->current_state < ARRAY_SIZE(me_progress_bup_values) && me_progress_bup_values[hfs2->current_state]) printk(BIOS_DEBUG, "%s", me_progress_bup_values[hfs2->current_state]); else printk(BIOS_DEBUG, "0x%02x", hfs2->current_state); break; case ME_HFS2_PHASE_POLICY: /* Policy Module Phase */ if (hfs2->current_state < ARRAY_SIZE(me_progress_policy_values) && me_progress_policy_values[hfs2->current_state]) printk(BIOS_DEBUG, "%s", me_progress_policy_values[hfs2->current_state]); else printk(BIOS_DEBUG, "0x%02x", hfs2->current_state); break; case ME_HFS2_PHASE_HOST_COMM: /* Host Communication Phase */ if (!hfs2->current_state) printk(BIOS_DEBUG, "Host communication established"); else printk(BIOS_DEBUG, "0x%02x", hfs2->current_state); break; default: printk(BIOS_DEBUG, "Unknown phase: 0x%02x state: 0x%02x", hfs2->progress_code, hfs2->current_state); } printk(BIOS_DEBUG, "\n"); }