<p>Nico Huber has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25513">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: sb/intel/bd82x6x/me: Try implementing HMRFPO message<br><br>Change-Id: I2664fc66a55b3b5cb8997114a8622a47181dd911<br>---<br>M src/mainboard/lenovo/t420/cmos.layout<br>M src/mainboard/lenovo/t420/devicetree.cb<br>M src/southbridge/intel/bd82x6x/me.c<br>M src/southbridge/intel/bd82x6x/me.h<br>M src/southbridge/intel/bd82x6x/me_8.x.c<br>5 files changed, 170 insertions(+), 48 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/13/25513/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mainboard/lenovo/t420/cmos.layout b/src/mainboard/lenovo/t420/cmos.layout</span><br><span>index 5a9e570..da1afb4 100644</span><br><span>--- a/src/mainboard/lenovo/t420/cmos.layout</span><br><span>+++ b/src/mainboard/lenovo/t420/cmos.layout</span><br><span>@@ -74,6 +74,8 @@</span><br><span> # coreboot config options: cpu</span><br><span> #424 8 r 0 unused</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+424 1 e 1 request_hmrfpo</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # coreboot config options: northbridge</span><br><span> 432 3 e 11 gfx_uma_size</span><br><span> 435 2 e 12 hybrid_graphics_mode</span><br><span>diff --git a/src/mainboard/lenovo/t420/devicetree.cb b/src/mainboard/lenovo/t420/devicetree.cb</span><br><span>index bed406a..fe05a50 100644</span><br><span>--- a/src/mainboard/lenovo/t420/devicetree.cb</span><br><span>+++ b/src/mainboard/lenovo/t420/devicetree.cb</span><br><span>@@ -76,7 +76,7 @@</span><br><span> register "spi_uvscc" = "0x2005"</span><br><span> register "spi_lvscc" = "0x2005"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- device pci 16.0 off end # Management Engine Interface 1</span><br><span style="color: hsl(120, 100%, 40%);">+ device pci 16.0 on end # Management Engine Interface 1</span><br><span> device pci 16.1 off end # Management Engine Interface 2</span><br><span> device pci 16.2 off end # Management Engine IDE-R</span><br><span> device pci 16.3 off end # Management Engine KT</span><br><span>diff --git a/src/southbridge/intel/bd82x6x/me.c b/src/southbridge/intel/bd82x6x/me.c</span><br><span>index a5c5e52..1b88a3d 100644</span><br><span>--- a/src/southbridge/intel/bd82x6x/me.c</span><br><span>+++ b/src/southbridge/intel/bd82x6x/me.c</span><br><span>@@ -27,6 +27,7 @@</span><br><span> #include <console/console.h></span><br><span> #include <device/pci_ids.h></span><br><span> #include <device/pci_def.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <pc80/mc146818rtc.h></span><br><span> #include <string.h></span><br><span> #include <delay.h></span><br><span> #include <elog.h></span><br><span>@@ -458,39 +459,6 @@</span><br><span> }</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#if IS_ENABLED(CONFIG_CHROMEOS) && 0 /* DISABLED */</span><br><span style="color: hsl(0, 100%, 40%);">-/* Tell ME to issue a global reset */</span><br><span style="color: hsl(0, 100%, 40%);">-int mkhi_global_reset(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct me_global_reset reset = {</span><br><span style="color: hsl(0, 100%, 40%);">- .request_origin = GLOBAL_RESET_BIOS_POST,</span><br><span style="color: hsl(0, 100%, 40%);">- .reset_type = CBM_RR_GLOBAL_RESET,</span><br><span style="color: hsl(0, 100%, 40%);">- };</span><br><span style="color: hsl(0, 100%, 40%);">- struct mkhi_header mkhi = {</span><br><span style="color: hsl(0, 100%, 40%);">- .group_id = MKHI_GROUP_ID_CBM,</span><br><span style="color: hsl(0, 100%, 40%);">- .command = MKHI_GLOBAL_RESET,</span><br><span style="color: hsl(0, 100%, 40%);">- };</span><br><span style="color: hsl(0, 100%, 40%);">- struct mei_header mei = {</span><br><span style="color: hsl(0, 100%, 40%);">- .is_complete = 1,</span><br><span style="color: hsl(0, 100%, 40%);">- .length = sizeof(mkhi) + sizeof(reset),</span><br><span style="color: hsl(0, 100%, 40%);">- .host_address = MEI_HOST_ADDRESS,</span><br><span style="color: hsl(0, 100%, 40%);">- .client_address = MEI_ADDRESS_MKHI,</span><br><span style="color: hsl(0, 100%, 40%);">- };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_NOTICE, "ME: Requesting global reset\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Send request and wait for response */</span><br><span style="color: hsl(0, 100%, 40%);">- if (mei_sendrecv(&mei, &mkhi, &reset, NULL, 0) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- /* No response means reset will happen shortly... */</span><br><span style="color: hsl(0, 100%, 40%);">- halt();</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* If the ME responded it rejected the reset request */</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_ERR, "ME: Global Reset failed\n");</span><br><span style="color: hsl(0, 100%, 40%);">- return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #ifdef __SMM__</span><br><span> static void intel_me7_finalize_smm(void)</span><br><span> {</span><br><span>@@ -543,6 +511,75 @@</span><br><span> }</span><br><span> #else /* !__SMM__ */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int mkhi_hmrfpo_enable(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ u64 send = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct {</span><br><span style="color: hsl(120, 100%, 40%);">+ u64 unknown;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 status;</span><br><span style="color: hsl(120, 100%, 40%);">+ } receive;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mkhi_header mkhi = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .group_id = MKHI_GROUP_ID_HMRFPO,</span><br><span style="color: hsl(120, 100%, 40%);">+ .command = MKHI_HMRFPO_ENABLE,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mei_header mei = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .is_complete = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ .length = sizeof(mkhi) + sizeof(send),</span><br><span style="color: hsl(120, 100%, 40%);">+ .host_address = MEI_HOST_ADDRESS,</span><br><span style="color: hsl(120, 100%, 40%);">+ .client_address = MEI_ADDRESS_MKHI,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send request and wait for response */</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_NOTICE, "ME: %s\n", __FUNCTION__);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mei_sendrecv(&mei, &mkhi, &send, &receive, sizeof(receive)) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_ERR, "ME: HMRFPO ENABLE message failed\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (receive.status != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_ERR, "ME: HMRFPO ENABLE returned with error\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int mkhi_hmrfpo_disable(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Tell ME to issue a global reset */</span><br><span style="color: hsl(120, 100%, 40%);">+static int mkhi_global_reset(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct me_global_reset reset = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .request_origin = GLOBAL_RESET_BIOS_POST,</span><br><span style="color: hsl(120, 100%, 40%);">+ .reset_type = CBM_RR_GLOBAL_RESET,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mkhi_header mkhi = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .group_id = MKHI_GROUP_ID_CBM,</span><br><span style="color: hsl(120, 100%, 40%);">+ .command = MKHI_GLOBAL_RESET,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mei_header mei = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .is_complete = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ .length = sizeof(mkhi) + sizeof(reset),</span><br><span style="color: hsl(120, 100%, 40%);">+ .host_address = MEI_HOST_ADDRESS,</span><br><span style="color: hsl(120, 100%, 40%);">+ .client_address = MEI_ADDRESS_MKHI,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_NOTICE, "ME: Requesting global reset\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send request and wait for response */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mei_sendrecv(&mei, &mkhi, &reset, NULL, 0) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* No response means reset will happen shortly... */</span><br><span style="color: hsl(120, 100%, 40%);">+ halt();</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* If the ME responded it rejected the reset request */</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_ERR, "ME: Global Reset failed\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Determine the path that we should take based on ME status */</span><br><span> static me_bios_path intel_me_path(device_t dev)</span><br><span> {</span><br><span>@@ -697,6 +734,9 @@</span><br><span> /* Check whether ME is present and do basic init */</span><br><span> static void intel_me_init(device_t dev)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ u8 request_hmrfpo = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct me_hfs hfs;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> me_bios_path path = intel_me_path(dev);</span><br><span> </span><br><span> /* Do initial setup and determine the BIOS path */</span><br><span>@@ -716,6 +756,17 @@</span><br><span> if (intel_mei_setup(dev) < 0)</span><br><span> break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Unlock ME if requested. */</span><br><span style="color: hsl(120, 100%, 40%);">+ get_option(&request_hmrfpo, "request_hmrfpo");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (request_hmrfpo) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Unlock ME flash region */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mkhi_hmrfpo_enable() == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Issue global reset */</span><br><span style="color: hsl(120, 100%, 40%);">+ mkhi_global_reset();</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #if (CONFIG_DEFAULT_CONSOLE_LOGLEVEL >= BIOS_DEBUG)</span><br><span> /* Print ME firmware version */</span><br><span> mkhi_get_fw_version();</span><br><span>@@ -729,9 +780,22 @@</span><br><span> */</span><br><span> break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ case ME_DISABLE_BIOS_PATH:</span><br><span style="color: hsl(120, 100%, 40%);">+ pci_read_dword_ptr(dev, &hfs, PCI_ME_HFS);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hfs.operation_mode == ME_HFS_MODE_OVER_MEI) {</span><br><span style="color: hsl(120, 100%, 40%);">+ mkhi_hmrfpo_disable();</span><br><span style="color: hsl(120, 100%, 40%);">+ get_option(&request_hmrfpo, "request_hmrfpo");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (request_hmrfpo) {</span><br><span style="color: hsl(120, 100%, 40%);">+ request_hmrfpo = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ set_option("request_hmrfpo", &request_hmrfpo);</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ mkhi_global_reset();</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> case ME_ERROR_BIOS_PATH:</span><br><span> case ME_RECOVERY_BIOS_PATH:</span><br><span style="color: hsl(0, 100%, 40%);">- case ME_DISABLE_BIOS_PATH:</span><br><span> case ME_FIRMWARE_UPDATE_BIOS_PATH:</span><br><span> break;</span><br><span> }</span><br><span>diff --git a/src/southbridge/intel/bd82x6x/me.h b/src/southbridge/intel/bd82x6x/me.h</span><br><span>index f95a0b4..0f68d6a 100644</span><br><span>--- a/src/southbridge/intel/bd82x6x/me.h</span><br><span>+++ b/src/southbridge/intel/bd82x6x/me.h</span><br><span>@@ -181,6 +181,7 @@</span><br><span> </span><br><span> #define MKHI_GROUP_ID_CBM 0x00</span><br><span> #define MKHI_GROUP_ID_FWCAPS 0x03</span><br><span style="color: hsl(120, 100%, 40%);">+#define MKHI_GROUP_ID_HMRFPO 0x05</span><br><span> #define MKHI_GROUP_ID_MDES 0x08</span><br><span> #define MKHI_GROUP_ID_GEN 0xff</span><br><span> </span><br><span>@@ -188,6 +189,10 @@</span><br><span> </span><br><span> #define MKHI_FWCAPS_GET_RULE 0x02</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define MKHI_HMRFPO_ENABLE 0x01</span><br><span style="color: hsl(120, 100%, 40%);">+#define MKHI_HMRFPO_LOCK 0x02</span><br><span style="color: hsl(120, 100%, 40%);">+#define MKHI_HMRFPO_DISABLE 0x04</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define MKHI_MDES_ENABLE 0x09</span><br><span> </span><br><span> #define MKHI_GET_FW_VERSION 0x02</span><br><span>diff --git a/src/southbridge/intel/bd82x6x/me_8.x.c b/src/southbridge/intel/bd82x6x/me_8.x.c</span><br><span>index 6463f96..1e040d2 100644</span><br><span>--- a/src/southbridge/intel/bd82x6x/me_8.x.c</span><br><span>+++ b/src/southbridge/intel/bd82x6x/me_8.x.c</span><br><span>@@ -27,6 +27,7 @@</span><br><span> #include <console/console.h></span><br><span> #include <device/pci_ids.h></span><br><span> #include <device/pci_def.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <pc80/mc146818rtc.h></span><br><span> #include <string.h></span><br><span> #include <delay.h></span><br><span> #include <elog.h></span><br><span>@@ -425,7 +426,45 @@</span><br><span> }</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#if IS_ENABLED(CONFIG_CHROMEOS) && 0 /* DISABLED */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef __SMM__</span><br><span style="color: hsl(120, 100%, 40%);">+static int mkhi_hmrfpo_enable(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ u64 send = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct {</span><br><span style="color: hsl(120, 100%, 40%);">+ u64 unknown;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 status;</span><br><span style="color: hsl(120, 100%, 40%);">+ } receive;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mkhi_header mkhi = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .group_id = MKHI_GROUP_ID_HMRFPO,</span><br><span style="color: hsl(120, 100%, 40%);">+ .command = MKHI_HMRFPO_ENABLE,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mei_header mei = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .is_complete = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ .length = sizeof(mkhi) + sizeof(send),</span><br><span style="color: hsl(120, 100%, 40%);">+ .host_address = MEI_HOST_ADDRESS,</span><br><span style="color: hsl(120, 100%, 40%);">+ .client_address = MEI_ADDRESS_MKHI,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send request and wait for response */</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_NOTICE, "ME: %s\n", __FUNCTION__);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mei_sendrecv(&mei, &mkhi, &send, &receive, sizeof(receive)) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_ERR, "ME: HMRFPO ENABLE message failed\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (receive.status != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_ERR, "ME: HMRFPO ENABLE returned with error\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int mkhi_hmrfpo_disable(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Tell ME to issue a global reset */</span><br><span> static int mkhi_global_reset(void)</span><br><span> {</span><br><span>@@ -686,6 +725,8 @@</span><br><span> {</span><br><span> me_bios_path path = intel_me_path(dev);</span><br><span> me_bios_payload mbp_data;</span><br><span style="color: hsl(120, 100%, 40%);">+ u8 request_hmrfpo = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct me_hfs hfs;</span><br><span> </span><br><span> /* Do initial setup and determine the BIOS path */</span><br><span> printk(BIOS_NOTICE, "ME: BIOS path: %s\n", me_bios_path_values[path]);</span><br><span>@@ -707,19 +748,16 @@</span><br><span> if (intel_me_read_mbp(&mbp_data))</span><br><span> break;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#if IS_ENABLED(CONFIG_CHROMEOS) && 0 /* DISABLED */</span><br><span style="color: hsl(0, 100%, 40%);">- /*</span><br><span style="color: hsl(0, 100%, 40%);">- * Unlock ME in recovery mode.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">- if (vboot_recovery_mode_enabled()) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Unlock ME if requested. */</span><br><span style="color: hsl(120, 100%, 40%);">+ get_option(&request_hmrfpo, "request_hmrfpo");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (request_hmrfpo) {</span><br><span> /* Unlock ME flash region */</span><br><span style="color: hsl(0, 100%, 40%);">- mkhi_hmrfpo_enable();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Issue global reset */</span><br><span style="color: hsl(0, 100%, 40%);">- mkhi_global_reset();</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mkhi_hmrfpo_enable() == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Issue global reset */</span><br><span style="color: hsl(120, 100%, 40%);">+ mkhi_global_reset();</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span> </span><br><span> #if (CONFIG_DEFAULT_CONSOLE_LOGLEVEL >= BIOS_DEBUG)</span><br><span> me_print_fw_version(&mbp_data.fw_version_name);</span><br><span>@@ -732,9 +770,22 @@</span><br><span> */</span><br><span> break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ case ME_DISABLE_BIOS_PATH:</span><br><span style="color: hsl(120, 100%, 40%);">+ pci_read_dword_ptr(dev, &hfs, PCI_ME_HFS);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hfs.operation_mode == ME_HFS_MODE_OVER_MEI) {</span><br><span style="color: hsl(120, 100%, 40%);">+ mkhi_hmrfpo_disable();</span><br><span style="color: hsl(120, 100%, 40%);">+ get_option(&request_hmrfpo, "request_hmrfpo");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (request_hmrfpo) {</span><br><span style="color: hsl(120, 100%, 40%);">+ request_hmrfpo = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ set_option("request_hmrfpo", &request_hmrfpo);</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ mkhi_global_reset();</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> case ME_ERROR_BIOS_PATH:</span><br><span> case ME_RECOVERY_BIOS_PATH:</span><br><span style="color: hsl(0, 100%, 40%);">- case ME_DISABLE_BIOS_PATH:</span><br><span> case ME_FIRMWARE_UPDATE_BIOS_PATH:</span><br><span> break;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25513">change 25513</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/25513"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I2664fc66a55b3b5cb8997114a8622a47181dd911 </div>
<div style="display:none"> Gerrit-Change-Number: 25513 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Nico Huber <nico.h@gmx.de> </div>