<p>Subrata Banik has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/23650">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">drivers/intel/fsp2_0: Remove fsp_find_smbios_memory_info() from FSP2.0 driver<br><br>As per FSP 2.0 specification and FSP SOC integration guide, its not expected<br>that SMBIOS Memory Information GUID will be same for all platform. Hence<br>fsp_find_smbios_memory_info() function inside common/driver code is not<br>generic one.<br><br>Removing this function and making use of fsp_find_extension_hob_by_guid()<br>to find SMBIOS Memory Info GUID from platform code as needed.<br><br>Change-Id: Ifd5abcd3e0733cedf61fa3dda7230cf3da6b14ce<br>Signed-off-by: Subrata Banik <subrata.banik@intel.com><br>---<br>M src/drivers/intel/fsp2_0/hand_off_block.c<br>M src/drivers/intel/fsp2_0/include/fsp/util.h<br>M src/soc/intel/apollolake/meminit_util_apl.c<br>M src/soc/intel/apollolake/meminit_util_glk.c<br>M src/soc/intel/denverton_ns/romstage.c<br>5 files changed, 81 insertions(+), 54 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/50/23650/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/drivers/intel/fsp2_0/hand_off_block.c b/src/drivers/intel/fsp2_0/hand_off_block.c</span><br><span>index cce81f9..1e0b5c8 100644</span><br><span>--- a/src/drivers/intel/fsp2_0/hand_off_block.c</span><br><span>+++ b/src/drivers/intel/fsp2_0/hand_off_block.c</span><br><span>@@ -39,11 +39,6 @@</span><br><span>     0xb3, 0xdc, 0x27, 0x0b, 0x7b, 0xa9, 0xe4, 0xb0</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-const uint8_t smbios_memory_info_guid[16] = {</span><br><span style="color: hsl(0, 100%, 40%);">-   0x8c, 0x10, 0xa1, 0x01, 0xee, 0x9d, 0x84, 0x49,</span><br><span style="color: hsl(0, 100%, 40%);">- 0x88, 0xc3, 0xee, 0xe8, 0xc4, 0x9e, 0xfb, 0x89</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static const uint8_t uuid_fv_info[16] = {</span><br><span>        0x2e, 0x72, 0x8e, 0x79, 0xb2, 0x15, 0x13, 0x4e,</span><br><span>      0x8a, 0xe9, 0x6b, 0xa3, 0x0f, 0xf7, 0xf1, 0x67</span><br><span>@@ -304,8 +299,3 @@</span><br><span> {</span><br><span>    return fsp_find_extension_hob_by_guid(fsp_nv_storage_guid, size);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-const void *fsp_find_smbios_memory_info(size_t *size)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    return fsp_find_extension_hob_by_guid(smbios_memory_info_guid, size);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span>diff --git a/src/drivers/intel/fsp2_0/include/fsp/util.h b/src/drivers/intel/fsp2_0/include/fsp/util.h</span><br><span>index eeca491..e7778ec 100644</span><br><span>--- a/src/drivers/intel/fsp2_0/include/fsp/util.h</span><br><span>+++ b/src/drivers/intel/fsp2_0/include/fsp/util.h</span><br><span>@@ -74,7 +74,6 @@</span><br><span> void *fsp_get_hob_list_ptr(void);</span><br><span> const void *fsp_find_extension_hob_by_guid(const uint8_t *guid, size_t *size);</span><br><span> const void *fsp_find_nv_storage_data(size_t *size);</span><br><span style="color: hsl(0, 100%, 40%);">-const void *fsp_find_smbios_memory_info(size_t *size);</span><br><span> enum cb_err fsp_fill_lb_framebuffer(struct lb_framebuffer *framebuffer);</span><br><span> int fsp_find_range_hob(struct range_entry *re, const uint8_t guid[16]);</span><br><span> void fsp_display_fvi_version_hob(void);</span><br><span>diff --git a/src/soc/intel/apollolake/meminit_util_apl.c b/src/soc/intel/apollolake/meminit_util_apl.c</span><br><span>index b79abb0..f09f45b 100644</span><br><span>--- a/src/soc/intel/apollolake/meminit_util_apl.c</span><br><span>+++ b/src/soc/intel/apollolake/meminit_util_apl.c</span><br><span>@@ -21,6 +21,12 @@</span><br><span> #include <soc/meminit.h></span><br><span> #include <string.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define FSP_SMBIOS_MEMORY_INFO_GUID \</span><br><span style="color: hsl(120, 100%, 40%);">+{    \</span><br><span style="color: hsl(120, 100%, 40%);">+     0x8c, 0x10, 0xa1, 0x01, 0xee, 0x9d, 0x84, 0x49, \</span><br><span style="color: hsl(120, 100%, 40%);">+     0x88, 0xc3, 0xee, 0xe8, 0xc4, 0x9e, 0xfb, 0x89  \</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void save_lpddr4_dimm_info(const struct lpddr4_cfg *lp4cfg, size_t mem_sku)</span><br><span> {</span><br><span>   int channel, dimm, dimm_max, index;</span><br><span>@@ -30,6 +36,8 @@</span><br><span>      struct memory_info *mem_info;</span><br><span>        const CHANNEL_INFO *channel_info;</span><br><span>    const FSP_SMBIOS_MEMORY_INFO *memory_info_hob;</span><br><span style="color: hsl(120, 100%, 40%);">+        const uint8_t smbios_memory_info_guid[16] =</span><br><span style="color: hsl(120, 100%, 40%);">+                   FSP_SMBIOS_MEMORY_INFO_GUID;</span><br><span> </span><br><span>     if (mem_sku >= lp4cfg->num_skus) {</span><br><span>             printk(BIOS_ERR, "Too few LPDDR4 SKUs: 0x%zx/0x%zx\n",</span><br><span>@@ -37,7 +45,15 @@</span><br><span>                return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   memory_info_hob = fsp_find_smbios_memory_info(&hob_size);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Locate the memory info HOB */</span><br><span style="color: hsl(120, 100%, 40%);">+      memory_info_hob = fsp_find_extension_hob_by_guid(</span><br><span style="color: hsl(120, 100%, 40%);">+                             smbios_memory_info_guid,</span><br><span style="color: hsl(120, 100%, 40%);">+                              &hob_size);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (memory_info_hob == NULL || hob_size == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+               printk(BIOS_ERR, "SMBIOS memory info HOB is missing\n");</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>        /*</span><br><span>    * Allocate CBMEM area for DIMM information used to populate SMBIOS</span><br><span>diff --git a/src/soc/intel/apollolake/meminit_util_glk.c b/src/soc/intel/apollolake/meminit_util_glk.c</span><br><span>index 20e7cd2..21b09af 100644</span><br><span>--- a/src/soc/intel/apollolake/meminit_util_glk.c</span><br><span>+++ b/src/soc/intel/apollolake/meminit_util_glk.c</span><br><span>@@ -21,6 +21,12 @@</span><br><span> #include <soc/meminit.h></span><br><span> #include <string.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define FSP_SMBIOS_MEMORY_INFO_GUID       \</span><br><span style="color: hsl(120, 100%, 40%);">+{    \</span><br><span style="color: hsl(120, 100%, 40%);">+     0x8c, 0x10, 0xa1, 0x01, 0xee, 0x9d, 0x84, 0x49, \</span><br><span style="color: hsl(120, 100%, 40%);">+     0x88, 0xc3, 0xee, 0xe8, 0xc4, 0x9e, 0xfb, 0x89  \</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void save_lpddr4_dimm_info(const struct lpddr4_cfg *lp4cfg, size_t mem_sku)</span><br><span> {</span><br><span>   int channel, dimm, dimm_max, index, node;</span><br><span>@@ -31,15 +37,20 @@</span><br><span>      const CHANNEL_INFO *channel_info;</span><br><span>    const FSP_SMBIOS_MEMORY_INFO *memory_info_hob;</span><br><span>       const CONTROLLER_INFO *ctrl_info;</span><br><span style="color: hsl(120, 100%, 40%);">+     const uint8_t smbios_memory_info_guid[16] =</span><br><span style="color: hsl(120, 100%, 40%);">+                   FSP_SMBIOS_MEMORY_INFO_GUID;</span><br><span> </span><br><span>     if (mem_sku >= lp4cfg->num_skus) {</span><br><span>             printk(BIOS_ERR, "Too few LPDDR4 SKUs: 0x%zx/0x%zx\n",</span><br><span>                             mem_sku, lp4cfg->num_skus);</span><br><span>               return;</span><br><span>      }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Locate the memory info HOB */</span><br><span style="color: hsl(120, 100%, 40%);">+      memory_info_hob = fsp_find_extension_hob_by_guid(</span><br><span style="color: hsl(120, 100%, 40%);">+                             smbios_memory_info_guid,</span><br><span style="color: hsl(120, 100%, 40%);">+                              &hob_size);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     memory_info_hob = fsp_find_smbios_memory_info(&hob_size);</span><br><span style="color: hsl(0, 100%, 40%);">-   if (memory_info_hob == NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (memory_info_hob == NULL || hob_size == 0) {</span><br><span>              printk(BIOS_ERR, "SMBIOS memory info HOB is missing\n");</span><br><span>           return;</span><br><span>      }</span><br><span>diff --git a/src/soc/intel/denverton_ns/romstage.c b/src/soc/intel/denverton_ns/romstage.c</span><br><span>index e0286f3..f675933 100644</span><br><span>--- a/src/soc/intel/denverton_ns/romstage.c</span><br><span>+++ b/src/soc/intel/denverton_ns/romstage.c</span><br><span>@@ -30,6 +30,12 @@</span><br><span> </span><br><span> void __attribute__((weak)) mainboard_config_gpios(void) {}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define FSP_SMBIOS_MEMORY_INFO_GUID      \</span><br><span style="color: hsl(120, 100%, 40%);">+{    \</span><br><span style="color: hsl(120, 100%, 40%);">+     0x8c, 0x10, 0xa1, 0x01, 0xee, 0x9d, 0x84, 0x49, \</span><br><span style="color: hsl(120, 100%, 40%);">+     0x88, 0xc3, 0xee, 0xe8, 0xc4, 0x9e, 0xfb, 0x89  \</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #if IS_ENABLED(CONFIG_DISPLAY_HOBS)</span><br><span> static void display_fsp_smbios_memory_info_hob(void)</span><br><span> {</span><br><span>@@ -38,51 +44,56 @@</span><br><span>     const DIMM_INFO *dimm_info;</span><br><span>  const CHANNEL_INFO *channel_info;</span><br><span>    const FSP_SMBIOS_MEMORY_INFO *memory_info_hob;</span><br><span style="color: hsl(120, 100%, 40%);">+        const uint8_t smbios_memory_info_guid[16] =</span><br><span style="color: hsl(120, 100%, 40%);">+                   FSP_SMBIOS_MEMORY_INFO_GUID;</span><br><span> </span><br><span>     /* Locate the memory info HOB */</span><br><span style="color: hsl(0, 100%, 40%);">-        memory_info_hob = fsp_find_smbios_memory_info(&hob_size);</span><br><span style="color: hsl(120, 100%, 40%);">+ memory_info_hob = fsp_find_extension_hob_by_guid(</span><br><span style="color: hsl(120, 100%, 40%);">+                             smbios_memory_info_guid,</span><br><span style="color: hsl(120, 100%, 40%);">+                              &hob_size);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (memory_info_hob == NULL || hob_size == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+               printk(BIOS_ERR, "SMBIOS MEMORY_INFO_DATA_HOB not found\n");</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>        /* Display the data in the FSP_SMBIOS_MEMORY_INFO HOB */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (memory_info_hob) {</span><br><span style="color: hsl(0, 100%, 40%);">-          printk(BIOS_DEBUG, "FSP_SMBIOS_MEMORY_INFO HOB\n");</span><br><span style="color: hsl(0, 100%, 40%);">-           printk(BIOS_DEBUG, "    0x%02x: Revision\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  memory_info_hob->Revision);</span><br><span style="color: hsl(0, 100%, 40%);">-          printk(BIOS_DEBUG, "    0x%02x: MemoryType\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                        memory_info_hob->MemoryType);</span><br><span style="color: hsl(0, 100%, 40%);">-                printk(BIOS_DEBUG, "    %d: MemoryFrequencyInMHz\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  memory_info_hob->MemoryFrequencyInMHz);</span><br><span style="color: hsl(0, 100%, 40%);">-              printk(BIOS_DEBUG, "    %d: DataWidth in bits\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                     memory_info_hob->DataWidth);</span><br><span style="color: hsl(0, 100%, 40%);">-         printk(BIOS_DEBUG, "    0x%02x: ErrorCorrectionType\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                       memory_info_hob->ErrorCorrectionType);</span><br><span style="color: hsl(0, 100%, 40%);">-               printk(BIOS_DEBUG, "    0x%02x: ChannelCount\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      memory_info_hob->ChannelCount);</span><br><span style="color: hsl(0, 100%, 40%);">-              for (channel = 0; channel < memory_info_hob->ChannelCount;</span><br><span style="color: hsl(0, 100%, 40%);">-                        channel++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    channel_info = &memory_info_hob->ChannelInfo[channel];</span><br><span style="color: hsl(0, 100%, 40%);">-                   printk(BIOS_DEBUG, "  Channel %d\n", channel);</span><br><span style="color: hsl(0, 100%, 40%);">-                        printk(BIOS_DEBUG, "      0x%02x: ChannelId\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                               channel_info->ChannelId);</span><br><span style="color: hsl(0, 100%, 40%);">-                    printk(BIOS_DEBUG, "      0x%02x: DimmCount\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                               channel_info->DimmCount);</span><br><span style="color: hsl(0, 100%, 40%);">-                    for (dimm = 0; dimm < channel_info->DimmCount;</span><br><span style="color: hsl(0, 100%, 40%);">-                            dimm++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                               dimm_info = &channel_info->DimmInfo[dimm];</span><br><span style="color: hsl(0, 100%, 40%);">-                               printk(BIOS_DEBUG, "   DIMM %d\n", dimm);</span><br><span style="color: hsl(0, 100%, 40%);">-                             printk(BIOS_DEBUG, "      0x%02x: DimmId\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                  dimm_info->DimmId);</span><br><span style="color: hsl(0, 100%, 40%);">-                          printk(BIOS_DEBUG, "      %d: SizeInMb\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                    dimm_info->SizeInMb);</span><br><span style="color: hsl(0, 100%, 40%);">-                                printk(BIOS_DEBUG, "    0x%04x: MfgId\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                     dimm_info->MfgId);</span><br><span style="color: hsl(0, 100%, 40%);">-                           printk(BIOS_DEBUG, "%*.*s: ModulePartNum\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                  (int)sizeof(dimm_info->ModulePartNum),</span><br><span style="color: hsl(0, 100%, 40%);">-                                       (int)sizeof(dimm_info->ModulePartNum),</span><br><span style="color: hsl(0, 100%, 40%);">-                                       dimm_info->ModulePartNum);</span><br><span style="color: hsl(0, 100%, 40%);">-                   }</span><br><span style="color: hsl(120, 100%, 40%);">+     printk(BIOS_DEBUG, "FSP_SMBIOS_MEMORY_INFO HOB\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_DEBUG, "    0x%02x: Revision\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                memory_info_hob->Revision);</span><br><span style="color: hsl(120, 100%, 40%);">+        printk(BIOS_DEBUG, "    0x%02x: MemoryType\n",</span><br><span style="color: hsl(120, 100%, 40%);">+              memory_info_hob->MemoryType);</span><br><span style="color: hsl(120, 100%, 40%);">+      printk(BIOS_DEBUG, "    %d: MemoryFrequencyInMHz\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                memory_info_hob->MemoryFrequencyInMHz);</span><br><span style="color: hsl(120, 100%, 40%);">+    printk(BIOS_DEBUG, "    %d: DataWidth in bits\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           memory_info_hob->DataWidth);</span><br><span style="color: hsl(120, 100%, 40%);">+       printk(BIOS_DEBUG, "    0x%02x: ErrorCorrectionType\n",</span><br><span style="color: hsl(120, 100%, 40%);">+             memory_info_hob->ErrorCorrectionType);</span><br><span style="color: hsl(120, 100%, 40%);">+     printk(BIOS_DEBUG, "    0x%02x: ChannelCount\n",</span><br><span style="color: hsl(120, 100%, 40%);">+            memory_info_hob->ChannelCount);</span><br><span style="color: hsl(120, 100%, 40%);">+    for (channel = 0; channel < memory_info_hob->ChannelCount;</span><br><span style="color: hsl(120, 100%, 40%);">+              channel++) {</span><br><span style="color: hsl(120, 100%, 40%);">+          channel_info = &memory_info_hob->ChannelInfo[channel];</span><br><span style="color: hsl(120, 100%, 40%);">+         printk(BIOS_DEBUG, "  Channel %d\n", channel);</span><br><span style="color: hsl(120, 100%, 40%);">+              printk(BIOS_DEBUG, "      0x%02x: ChannelId\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     channel_info->ChannelId);</span><br><span style="color: hsl(120, 100%, 40%);">+          printk(BIOS_DEBUG, "      0x%02x: DimmCount\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     channel_info->DimmCount);</span><br><span style="color: hsl(120, 100%, 40%);">+          for (dimm = 0; dimm < channel_info->DimmCount;</span><br><span style="color: hsl(120, 100%, 40%);">+                  dimm++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     dimm_info = &channel_info->DimmInfo[dimm];</span><br><span style="color: hsl(120, 100%, 40%);">+                     printk(BIOS_DEBUG, "   DIMM %d\n", dimm);</span><br><span style="color: hsl(120, 100%, 40%);">+                   printk(BIOS_DEBUG, "      0x%02x: DimmId\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                dimm_info->DimmId);</span><br><span style="color: hsl(120, 100%, 40%);">+                        printk(BIOS_DEBUG, "      %d: SizeInMb\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                          dimm_info->SizeInMb);</span><br><span style="color: hsl(120, 100%, 40%);">+                      printk(BIOS_DEBUG, "    0x%04x: MfgId\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                           dimm_info->MfgId);</span><br><span style="color: hsl(120, 100%, 40%);">+                 printk(BIOS_DEBUG, "%*.*s: ModulePartNum\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                (int)sizeof(dimm_info->ModulePartNum),</span><br><span style="color: hsl(120, 100%, 40%);">+                             (int)sizeof(dimm_info->ModulePartNum),</span><br><span style="color: hsl(120, 100%, 40%);">+                             dimm_info->ModulePartNum);</span><br><span>                }</span><br><span style="color: hsl(0, 100%, 40%);">-       } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                printk(BIOS_DEBUG, "FSP_SMBIOS_MEMORY_INFO HOB not found!!!\n");</span><br><span>   }</span><br><span> }</span><br><span> #endif</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/23650">change 23650</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/23650"/><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: Ifd5abcd3e0733cedf61fa3dda7230cf3da6b14ce </div>
<div style="display:none"> Gerrit-Change-Number: 23650 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Subrata Banik <subrata.banik@intel.com> </div>