<p>Philipp Deppenwiese has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/24942">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP / lib: Add blob_provider interface<br><br>* Add automated functions for blob mapping<br>  and region device retrival.<br>* Add hook function for region device access.<br>* Provide defines for easy usage.<br>* Add TPM measurements through hook function.<br><br>Change-Id: I8f161f680cb36fa6481a8bce6cf233263a828bf7<br>Signed-off-by: zaolin <zaolin@das-labor.org><br>---<br>M src/arch/x86/acpi.c<br>M src/cpu/amd/microcode/microcode.c<br>M src/cpu/intel/microcode/microcode.c<br>M src/cpu/via/nano/update_ucode.c<br>M src/device/oprom/realmode/x86.c<br>M src/device/oprom/yabel/vbe.c<br>M src/drivers/amd/agesa/def_callouts.c<br>M src/drivers/amd/agesa/state_machine.c<br>M src/drivers/intel/fsp1_0/fastboot_cache.c<br>M src/drivers/intel/fsp1_1/vbt.c<br>M src/drivers/intel/fsp2_0/memory_init.c<br>M src/drivers/intel/fsp2_0/silicon_init.c<br>M src/drivers/intel/fsp2_0/temp_ram_exit.c<br>M src/drivers/pc80/rtc/mc146818rtc.c<br>M src/drivers/pc80/rtc/mc146818rtc_boot.c<br>M src/drivers/siemens/nc_fpga/nc_fpga.c<br>A src/include/blob_provider.h<br>M src/lib/Makefile.inc<br>A src/lib/blob_provider.c<br>M src/lib/coreboot_table.c<br>M src/lib/spd_bin.c<br>M src/mainboard/amd/serengeti_cheetah/acpi_tables.c<br>M src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c<br>M src/mainboard/apple/macbookair4_2/early_southbridge.c<br>M src/mainboard/google/auron/variants/auron_paine/spd/spd.c<br>M src/mainboard/google/auron/variants/auron_yuna/spd/spd.c<br>M src/mainboard/google/auron/variants/gandof/spd/spd.c<br>M src/mainboard/google/auron/variants/lulu/spd/spd.c<br>M src/mainboard/google/auron/variants/samus/spd/spd.c<br>M src/mainboard/google/beltino/lan.c<br>M src/mainboard/google/butterfly/mainboard.c<br>M src/mainboard/google/chell/spd/spd.c<br>M src/mainboard/google/cyan/spd/spd.c<br>M src/mainboard/google/eve/spd/spd.c<br>M src/mainboard/google/glados/spd/spd.c<br>M src/mainboard/google/jecht/lan.c<br>M src/mainboard/google/lars/spd/spd.c<br>M src/mainboard/google/link/romstage.c<br>M src/mainboard/google/poppy/romstage.c<br>M src/mainboard/google/rambi/romstage.c<br>M src/mainboard/google/rambi/variants/ninja/lan.c<br>M src/mainboard/google/rambi/variants/sumo/lan.c<br>M src/mainboard/google/slippy/variants/falco/romstage.c<br>M src/mainboard/google/slippy/variants/leon/romstage.c<br>M src/mainboard/google/slippy/variants/peppy/romstage.c<br>M src/mainboard/google/slippy/variants/wolf/romstage.c<br>M src/mainboard/google/urara/boardid.c<br>M src/mainboard/hp/revolve_810_g1/romstage.c<br>M src/mainboard/intel/harcuvar/spd/spd.c<br>M src/mainboard/intel/kunimitsu/spd/spd_util.c<br>M src/mainboard/iwill/dk8_htx/acpi_tables.c<br>M src/mainboard/lenovo/s230u/romstage.c<br>M src/mainboard/lenovo/x1_carbon_gen1/romstage.c<br>M src/mainboard/samsung/lumpy/romstage.c<br>M src/mainboard/siemens/mc_apl1/mainboard.c<br>M src/mainboard/siemens/mc_apl1/ptn3460.c<br>M src/mainboard/siemens/mc_bdx1/mainboard.c<br>M src/mainboard/siemens/mc_tcu3/mainboard.c<br>M src/mainboard/siemens/mc_tcu3/ptn3460.c<br>M src/mainboard/siemens/mc_tcu3/romstage.c<br>M src/northbridge/amd/amdmct/mct_ddr3/s3utils.c<br>M src/northbridge/amd/pi/agesawrapper.c<br>M src/northbridge/intel/common/mrc_cache.c<br>M src/northbridge/intel/haswell/raminit.c<br>M src/northbridge/intel/sandybridge/raminit_mrc.c<br>M src/security/vboot/secdata_measurements.c<br>M src/soc/amd/common/block/pi/def_callouts.c<br>M src/soc/amd/common/block/psp/psp.c<br>M src/soc/intel/broadwell/romstage/raminit.c<br>M src/soc/intel/common/mma.c<br>M src/soc/intel/denverton_ns/chip.c<br>M src/soc/intel/fsp_broadwell_de/fsp/chipset_fsp_util.c<br>M src/soc/intel/quark/romstage/romstage.c<br>M src/soc/nvidia/tegra210/mtc.c<br>M src/soc/qualcomm/ipq40xx/blobs_init.c<br>M src/soc/qualcomm/ipq806x/blobs_init.c<br>M src/vendorcode/siemens/hwilib/hwilib.c<br>M src/vendorcode/siemens/hwilib/hwilib.h<br>78 files changed, 619 insertions(+), 277 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/42/24942/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c</span><br><span>index 601b6f0..e5e6483 100644</span><br><span>--- a/src/arch/x86/acpi.c</span><br><span>+++ b/src/arch/x86/acpi.c</span><br><span>@@ -47,6 +47,7 @@</span><br><span> #include <cpu/x86/lapic_def.h></span><br><span> #include <cpu/cpu.h></span><br><span> #include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> u8 acpi_checksum(u8 *table, u32 length)</span><br><span> {</span><br><span>@@ -1004,9 +1005,7 @@</span><br><span>         if (fw)</span><br><span>              return fw;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  dsdt_file = cbfs_boot_map_with_leak(</span><br><span style="color: hsl(0, 100%, 40%);">-                                 CONFIG_CBFS_PREFIX "/dsdt.aml",</span><br><span style="color: hsl(0, 100%, 40%);">-                               CBFS_TYPE_RAW, &dsdt_size);</span><br><span style="color: hsl(120, 100%, 40%);">+  dsdt_file = blob_provide_map(BLOB_DATA_ACPI_DSDT, NULL, &dsdt_size);</span><br><span>     if (!dsdt_file) {</span><br><span>            printk(BIOS_ERR, "No DSDT file, skipping ACPI tables\n");</span><br><span>          return current;</span><br><span>@@ -1019,8 +1018,7 @@</span><br><span>              return current;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   slic_file = cbfs_boot_map_with_leak(CONFIG_CBFS_PREFIX "/slic",</span><br><span style="color: hsl(0, 100%, 40%);">-                                    CBFS_TYPE_RAW, &slic_size);</span><br><span style="color: hsl(120, 100%, 40%);">+  slic_file = blob_provide_map(BLOB_DATA_ACPI_SLIC, NULL, &slic_size);</span><br><span>     if (slic_file</span><br><span>            && (slic_file->length > slic_size</span><br><span>          || slic_file->length < sizeof(acpi_header_t)</span><br><span>diff --git a/src/cpu/amd/microcode/microcode.c b/src/cpu/amd/microcode/microcode.c</span><br><span>index ec7e733..c7ec49e 100644</span><br><span>--- a/src/cpu/amd/microcode/microcode.c</span><br><span>+++ b/src/cpu/amd/microcode/microcode.c</span><br><span>@@ -203,7 +203,7 @@</span><br><span>            spin_lock(romstage_microcode_cbfs_lock());</span><br><span> #endif</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+                // TODO FIX ME BLOB</span><br><span>          ucode = cbfs_boot_map_with_leak(microcode_cbfs_file[i],</span><br><span>                                              CBFS_TYPE_MICROCODE, &ucode_len);</span><br><span>                if (!ucode) {</span><br><span>diff --git a/src/cpu/intel/microcode/microcode.c b/src/cpu/intel/microcode/microcode.c</span><br><span>index 59c3b8a..a37a84e 100644</span><br><span>--- a/src/cpu/intel/microcode/microcode.c</span><br><span>+++ b/src/cpu/intel/microcode/microcode.c</span><br><span>@@ -21,6 +21,7 @@</span><br><span> #if !defined(__ROMCC__)</span><br><span> #include <cbfs.h></span><br><span> #include <console/console.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> #else</span><br><span> #include <arch/cbfs.h></span><br><span> #endif</span><br><span>@@ -131,9 +132,8 @@</span><br><span>    ucode_updates = CBFS_SUBHEADER(microcode_file);</span><br><span>      microcode_len = ntohl(microcode_file->len);</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">- ucode_updates = cbfs_boot_map_with_leak(MICROCODE_CBFS_FILE,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            CBFS_TYPE_MICROCODE,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            &microcode_len);</span><br><span style="color: hsl(120, 100%, 40%);">+  ucode_updates =</span><br><span style="color: hsl(120, 100%, 40%);">+           blob_provide_map(BLOB_DATA_MICROCODE, NULL, &microcode_len);</span><br><span>         if (ucode_updates == NULL)</span><br><span>           return NULL;</span><br><span> #endif</span><br><span>diff --git a/src/cpu/via/nano/update_ucode.c b/src/cpu/via/nano/update_ucode.c</span><br><span>index 9ff66e7..d2d93c2 100644</span><br><span>--- a/src/cpu/via/nano/update_ucode.c</span><br><span>+++ b/src/cpu/via/nano/update_ucode.c</span><br><span>@@ -21,6 +21,7 @@</span><br><span> #include <cpu/cpu.h></span><br><span> #include <arch/cpu.h></span><br><span> #include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static ucode_update_status nano_apply_ucode(const nano_ucode_header *ucode)</span><br><span> {</span><br><span>@@ -107,8 +108,7 @@</span><br><span>  u32 *ucode_data;</span><br><span>     size_t ucode_len;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   ucode_data = cbfs_boot_map_with_leak("cpu_microcode_blob.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                             CBFS_TYPE_MICROCODE, &ucode_len);</span><br><span style="color: hsl(120, 100%, 40%);">+    ucode_data = blob_provide_map(BLOB_DATA_MICROCODE, NULL, &ucode_len);</span><br><span>    /* Oops, did you forget to include the microcode ? */</span><br><span>        if (ucode_data == NULL) {</span><br><span>            printk(BIOS_ALERT, "WARNING: No microcode file found in CBFS. "</span><br><span>diff --git a/src/device/oprom/realmode/x86.c b/src/device/oprom/realmode/x86.c</span><br><span>index d9fac36..7630333 100644</span><br><span>--- a/src/device/oprom/realmode/x86.c</span><br><span>+++ b/src/device/oprom/realmode/x86.c</span><br><span>@@ -30,6 +30,7 @@</span><br><span> #include <pc80/i8254.h></span><br><span> #include <string.h></span><br><span> #include <vbe.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> /* we use x86emu's register file representation */</span><br><span> #include <x86emu/regs.h></span><br><span>@@ -270,9 +271,8 @@</span><br><span>       vbe_set_mode(&mode_info);</span><br><span> #if IS_ENABLED(CONFIG_BOOTSPLASH)</span><br><span>   struct jpeg_decdata *decdata;</span><br><span style="color: hsl(0, 100%, 40%);">-   unsigned char *jpeg = cbfs_boot_map_with_leak("bootsplash.jpg",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       CBFS_TYPE_BOOTSPLASH,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned char *jpeg =</span><br><span style="color: hsl(120, 100%, 40%);">+     blob_provide_map(BLOB_DATA_BOOTSPLASH, NULL, NULL);</span><br><span>      if (!jpeg) {</span><br><span>                 printk(BIOS_DEBUG, "VBE: No bootsplash found.\n");</span><br><span>                 return;</span><br><span>diff --git a/src/device/oprom/yabel/vbe.c b/src/device/oprom/yabel/vbe.c</span><br><span>index 876df23..7f6f77e 100644</span><br><span>--- a/src/device/oprom/yabel/vbe.c</span><br><span>+++ b/src/device/oprom/yabel/vbe.c</span><br><span>@@ -58,6 +58,7 @@</span><br><span> #include "../../src/lib/jpeg.h"</span><br><span> </span><br><span> #include <vbe.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> // pointer to VBEInfoBuffer, set by vbe_prepare</span><br><span> u8 *vbe_info_buffer = 0;</span><br><span>@@ -745,9 +746,8 @@</span><br><span>        * cares. */</span><br><span>         // int imagesize = 1024*768*2;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      unsigned char *jpeg = cbfs_boot_map_with_leak("bootsplash.jpg",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       CBFS_TYPE_BOOTSPLASH,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned char *jpeg =</span><br><span style="color: hsl(120, 100%, 40%);">+     blob_provide_map(BLOB_DATA_BOOTSPLASH, NULL, NULL);</span><br><span>      if (!jpeg) {</span><br><span>                 DEBUG_PRINTF_VBE("Could not find bootsplash.jpg\n");</span><br><span>               return;</span><br><span>diff --git a/src/drivers/amd/agesa/def_callouts.c b/src/drivers/amd/agesa/def_callouts.c</span><br><span>index 21530a1..867acd7 100644</span><br><span>--- a/src/drivers/amd/agesa/def_callouts.c</span><br><span>+++ b/src/drivers/amd/agesa/def_callouts.c</span><br><span>@@ -149,6 +149,7 @@</span><br><span> AGESA_STATUS agesa_GfxGetVbiosImage(UINT32 Func, UINTN FchData, VOID *ConfigPrt)</span><br><span> {</span><br><span>  GFX_VBIOS_IMAGE_INFO  *pVbiosImageInfo = (GFX_VBIOS_IMAGE_INFO *)ConfigPrt;</span><br><span style="color: hsl(120, 100%, 40%);">+   // TODO FIX ME BLOB</span><br><span>  pVbiosImageInfo->ImagePtr = cbfs_boot_map_with_leak(</span><br><span>                      "pci"CONFIG_VGA_BIOS_ID".rom",</span><br><span>                   CBFS_TYPE_OPTIONROM, NULL);</span><br><span>diff --git a/src/drivers/amd/agesa/state_machine.c b/src/drivers/amd/agesa/state_machine.c</span><br><span>index fdd2e6e..970e1ab 100644</span><br><span>--- a/src/drivers/amd/agesa/state_machine.c</span><br><span>+++ b/src/drivers/amd/agesa/state_machine.c</span><br><span>@@ -27,6 +27,8 @@</span><br><span> #include <northbridge/amd/agesa/BiosCallOuts.h></span><br><span> #include "amdlib.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include "AMD.h"</span><br><span> </span><br><span> #if IS_ENABLED(CONFIG_CPU_AMD_AGESA_OPENSOURCE)</span><br><span>@@ -45,8 +47,7 @@</span><br><span>  const void *agesa, *image;</span><br><span>   size_t file_size;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   agesa = cbfs_boot_map_with_leak((const char *)CONFIG_AGESA_CBFS_NAME,</span><br><span style="color: hsl(0, 100%, 40%);">-                   CBFS_TYPE_RAW, &file_size);</span><br><span style="color: hsl(120, 100%, 40%);">+       agesa = blob_provide_map(BLOB_CODE_AMD_AGESA, NULL, &file_size);</span><br><span>         if (agesa == NULL)</span><br><span>           return;</span><br><span> </span><br><span>diff --git a/src/drivers/intel/fsp1_0/fastboot_cache.c b/src/drivers/intel/fsp1_0/fastboot_cache.c</span><br><span>index 906b356..2d08b17 100644</span><br><span>--- a/src/drivers/intel/fsp1_0/fastboot_cache.c</span><br><span>+++ b/src/drivers/intel/fsp1_0/fastboot_cache.c</span><br><span>@@ -27,6 +27,7 @@</span><br><span> #include <spi_flash.h></span><br><span> #include <lib.h> // hexdump</span><br><span> #include "fsp_util.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> /* convert a pointer to flash area into the offset inside the flash */</span><br><span> static inline u32 to_flash_offset(void *p) {</span><br><span>@@ -58,18 +59,12 @@</span><br><span>       size_t region_size;</span><br><span> </span><br><span>      if (IS_ENABLED(CONFIG_MRC_CACHE_FMAP)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                struct region_device rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-              if (fmap_locate_area_as_rdev("RW_MRC_CACHE", &rdev) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       *mrc_region_ptr = rdev_mmap_full(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-                    return region_device_sz(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-               *mrc_region_ptr = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-         return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             *mrc_region_ptr = blob_provide_map(BLOB_DATA_MRC_CACHE_REGION,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   NULL, &region_size);</span><br><span style="color: hsl(120, 100%, 40%);">+           return region_size;</span><br><span>  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                *mrc_region_ptr = cbfs_boot_map_with_leak("mrc.cache",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        CBFS_TYPE_MRC_CACHE,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    &region_size);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+            *mrc_region_ptr =</span><br><span style="color: hsl(120, 100%, 40%);">+                 blob_provide_map(BLOB_DATA_MRC_CACHE, NULL, &region_size);</span><br><span>           return region_size;</span><br><span>  }</span><br><span> }</span><br><span>diff --git a/src/drivers/intel/fsp1_1/vbt.c b/src/drivers/intel/fsp1_1/vbt.c</span><br><span>index 92a4c91..6412541 100644</span><br><span>--- a/src/drivers/intel/fsp1_1/vbt.c</span><br><span>+++ b/src/drivers/intel/fsp1_1/vbt.c</span><br><span>@@ -20,6 +20,7 @@</span><br><span> #include <fsp/gop.h></span><br><span> #include <fsp/ramstage.h></span><br><span> #include <fsp/util.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> /* Reading VBT table from flash */</span><br><span> const optionrom_vbt_t *fsp_get_vbt(uint32_t *vbt_len)</span><br><span>@@ -31,7 +32,7 @@</span><br><span>     } vbt;</span><br><span> </span><br><span>   /* Locate the vbt file in cbfs */</span><br><span style="color: hsl(0, 100%, 40%);">-       vbt.data = cbfs_boot_map_with_leak("vbt.bin", CBFS_TYPE_RAW, &vbt_size);</span><br><span style="color: hsl(120, 100%, 40%);">+        vbt.data = blob_provide_map(BLOB_DATA_VGA_VBT, NULL, &vbt_size);</span><br><span>         if (!vbt.data) {</span><br><span>             printk(BIOS_INFO,</span><br><span>                    "FSP_INFO: VBT data file (vbt.bin) not found in CBFS");</span><br><span>diff --git a/src/drivers/intel/fsp2_0/memory_init.c b/src/drivers/intel/fsp2_0/memory_init.c</span><br><span>index 3dafa00..3a6c1ad 100644</span><br><span>--- a/src/drivers/intel/fsp2_0/memory_init.c</span><br><span>+++ b/src/drivers/intel/fsp2_0/memory_init.c</span><br><span>@@ -34,6 +34,7 @@</span><br><span> #include <security/vboot/vboot_common.h></span><br><span> #include <vb2_api.h></span><br><span> #include <fsp/memory_init.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> __attribute__((weak)) void mrc_cache_update_hash(const uint8_t *data,</span><br><span>                                               size_t size)</span><br><span>@@ -359,21 +360,15 @@</span><br><span> {</span><br><span>   struct fsp_header hdr;</span><br><span>       enum cb_err status;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct cbfsf file_desc;</span><br><span style="color: hsl(0, 100%, 40%);">- struct region_device file_data;</span><br><span style="color: hsl(0, 100%, 40%);">- const char *name = CONFIG_FSP_M_CBFS;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct region_device fspm;</span><br><span>   struct memranges memmap;</span><br><span>     struct range_entry freeranges[2];</span><br><span> </span><br><span>        if (IS_ENABLED(CONFIG_ELOG_BOOT_COUNT) && !s3wake)</span><br><span>           boot_count_increment();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (cbfs_boot_locate(&file_desc, name, NULL)) {</span><br><span style="color: hsl(0, 100%, 40%);">-             printk(BIOS_CRIT, "Could not locate %s in CBFS\n", name);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (blob_provide_rd(BLOB_CODE_INTEL_FSP_M, &fspm))</span><br><span>               die("FSPM not available!\n");</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%);">-       cbfs_file_data(&file_data, &file_desc);</span><br><span> </span><br><span>  /* Build up memory map of romstage address space including CAR. */</span><br><span>   memranges_init_empty(&memmap, &freeranges[0], ARRAY_SIZE(freeranges));</span><br><span>@@ -382,9 +377,9 @@</span><br><span>         memranges_insert(&memmap, (uintptr_t)_program, _program_size, 0);</span><br><span> </span><br><span>    if (!IS_ENABLED(CONFIG_FSP_M_XIP))</span><br><span style="color: hsl(0, 100%, 40%);">-              status = load_fspm_mem(&hdr, &file_data, &memmap);</span><br><span style="color: hsl(120, 100%, 40%);">+                status = load_fspm_mem(&hdr, &fspm, &memmap);</span><br><span>    else</span><br><span style="color: hsl(0, 100%, 40%);">-            status = load_fspm_xip(&hdr, &file_data);</span><br><span style="color: hsl(120, 100%, 40%);">+             status = load_fspm_xip(&hdr, &fspm);</span><br><span> </span><br><span>     if (status != CB_SUCCESS)</span><br><span>            die("Loading FSPM failed!\n");</span><br><span>diff --git a/src/drivers/intel/fsp2_0/silicon_init.c b/src/drivers/intel/fsp2_0/silicon_init.c</span><br><span>index bda88d1..b268616 100644</span><br><span>--- a/src/drivers/intel/fsp2_0/silicon_init.c</span><br><span>+++ b/src/drivers/intel/fsp2_0/silicon_init.c</span><br><span>@@ -84,6 +84,7 @@</span><br><span>                return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ // TODO FIX ME BLOB</span><br><span>  if (cbfs_boot_locate(&file_desc, name, NULL)) {</span><br><span>          printk(BIOS_ERR, "Could not locate %s in CBFS\n", name);</span><br><span>           die("FSPS not available!\n");</span><br><span>diff --git a/src/drivers/intel/fsp2_0/temp_ram_exit.c b/src/drivers/intel/fsp2_0/temp_ram_exit.c</span><br><span>index 6b3a999..c796ba5 100644</span><br><span>--- a/src/drivers/intel/fsp2_0/temp_ram_exit.c</span><br><span>+++ b/src/drivers/intel/fsp2_0/temp_ram_exit.c</span><br><span>@@ -18,24 +18,19 @@</span><br><span> #include <string.h></span><br><span> #include <timestamp.h></span><br><span> #include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> void fsp_temp_ram_exit(void)</span><br><span> {</span><br><span>        struct fsp_header hdr;</span><br><span>       uint32_t status;</span><br><span>     temp_ram_exit_fn  temp_ram_exit;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct cbfsf file_desc;</span><br><span style="color: hsl(0, 100%, 40%);">- struct region_device file_data;</span><br><span style="color: hsl(0, 100%, 40%);">- const char *name = CONFIG_FSP_M_CBFS;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct region_device fsps;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  if (cbfs_boot_locate(&file_desc, name, NULL)) {</span><br><span style="color: hsl(0, 100%, 40%);">-             printk(BIOS_CRIT, "Could not locate %s in CBFS\n", name);</span><br><span style="color: hsl(0, 100%, 40%);">-             die("FSPM not available for CAR Exit!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (blob_provide_rd(BLOB_CODE_INTEL_FSP_S, &fsps))</span><br><span style="color: hsl(120, 100%, 40%);">+                die("FSPS not available!\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     cbfs_file_data(&file_data, &file_desc);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (fsp_validate_component(&hdr, &file_data) != CB_SUCCESS)</span><br><span style="color: hsl(120, 100%, 40%);">+   if (fsp_validate_component(&hdr, &fsps) != CB_SUCCESS)</span><br><span>               die("Invalid FSPM header!\n");</span><br><span> </span><br><span>         temp_ram_exit = (void *)(hdr.image_base + hdr.temp_ram_exit_entry);</span><br><span>diff --git a/src/drivers/pc80/rtc/mc146818rtc.c b/src/drivers/pc80/rtc/mc146818rtc.c</span><br><span>index 928b403..83ad33e 100644</span><br><span>--- a/src/drivers/pc80/rtc/mc146818rtc.c</span><br><span>+++ b/src/drivers/pc80/rtc/mc146818rtc.c</span><br><span>@@ -28,6 +28,7 @@</span><br><span> #include <cbfs.h></span><br><span> #include <security/vboot/vbnv.h></span><br><span> #include <security/vboot/vbnv_layout.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> /* There's no way around this include guard. option_table.h is autogenerated */</span><br><span> #if IS_ENABLED(CONFIG_USE_OPTION_TABLE)</span><br><span>@@ -256,8 +257,7 @@</span><br><span>     namelen = strnlen(name, CMOS_MAX_NAME_LENGTH);</span><br><span> </span><br><span>   /* find the requested entry record */</span><br><span style="color: hsl(0, 100%, 40%);">-   ct = cbfs_boot_map_with_leak("cmos_layout.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                       CBFS_COMPONENT_CMOS_LAYOUT, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    ct = blob_provide_map(BLOB_DATA_NVRAM_CMOS_LAYOUT, NULL, NULL);</span><br><span>      if (!ct) {</span><br><span>           printk(BIOS_ERR, "RTC: cmos_layout.bin could not be found. "</span><br><span>                                               "Options are disabled\n");</span><br><span>@@ -359,8 +359,7 @@</span><br><span>   namelen = strnlen(name, CMOS_MAX_NAME_LENGTH);</span><br><span> </span><br><span>   /* find the requested entry record */</span><br><span style="color: hsl(0, 100%, 40%);">-   ct = cbfs_boot_map_with_leak("cmos_layout.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                       CBFS_COMPONENT_CMOS_LAYOUT, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    ct = blob_provide_map(BLOB_DATA_NVRAM_CMOS_LAYOUT, NULL, NULL);</span><br><span>      if (!ct) {</span><br><span>           printk(BIOS_ERR, "cmos_layout.bin could not be found. "</span><br><span>                             "Options are disabled\n");</span><br><span>diff --git a/src/drivers/pc80/rtc/mc146818rtc_boot.c b/src/drivers/pc80/rtc/mc146818rtc_boot.c</span><br><span>index c5cd86c..5a86fd7 100644</span><br><span>--- a/src/drivers/pc80/rtc/mc146818rtc_boot.c</span><br><span>+++ b/src/drivers/pc80/rtc/mc146818rtc_boot.c</span><br><span>@@ -16,6 +16,7 @@</span><br><span> #include <arch/cbfs.h></span><br><span> #else</span><br><span> #include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> #endif</span><br><span> #include <pc80/mc146818rtc.h></span><br><span> #if IS_ENABLED(CONFIG_USE_OPTION_TABLE)</span><br><span>@@ -63,8 +64,8 @@</span><br><span> #ifdef __ROMCC__</span><br><span>                         walkcbfs("cmos.default");</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">-                    cbfs_boot_map_with_leak("cmos.default",</span><br><span style="color: hsl(0, 100%, 40%);">-                                       CBFS_COMPONENT_CMOS_DEFAULT, &length);</span><br><span style="color: hsl(120, 100%, 40%);">+            blob_provide_map(BLOB_DATA_NVRAM_CMOS_DEFAULT, NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+                               &length);</span><br><span> #endif</span><br><span>                 if (cmos_default) {</span><br><span>                  int i;</span><br><span>diff --git a/src/drivers/siemens/nc_fpga/nc_fpga.c b/src/drivers/siemens/nc_fpga/nc_fpga.c</span><br><span>index 41b79a6..7f20a7f 100644</span><br><span>--- a/src/drivers/siemens/nc_fpga/nc_fpga.c</span><br><span>+++ b/src/drivers/siemens/nc_fpga/nc_fpga.c</span><br><span>@@ -118,7 +118,7 @@</span><br><span>           set the FW_DONE bit before jumping to payload. */</span><br><span>         nc_fpga_bar0 = bar0_ptr;</span><br><span>     /* Open hwinfo block. */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hwilib_find_blocks() != CB_SUCCESS)</span><br><span>              return;</span><br><span>      /* Set up FAN controller and temperature monitor according to */</span><br><span>     /* capability bits. */</span><br><span>diff --git a/src/include/blob_provider.h b/src/include/blob_provider.h</span><br><span>new file mode 100644</span><br><span>index 0000000..a8a7fe4</span><br><span>--- /dev/null</span><br><span>+++ b/src/include/blob_provider.h</span><br><span>@@ -0,0 +1,251 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 Facebook Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</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%);">+#ifndef _BLOB_PROVIDER_H_</span><br><span style="color: hsl(120, 100%, 40%);">+#define _BLOB_PROVIDER_H_</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <types.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stddef.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <region.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+typedef struct {</span><br><span style="color: hsl(120, 100%, 40%);">+   uint32_t id;</span><br><span style="color: hsl(120, 100%, 40%);">+  const char *fmap_name;</span><br><span style="color: hsl(120, 100%, 40%);">+        const char *cbfs_name;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t cbfs_type;</span><br><span style="color: hsl(120, 100%, 40%);">+} blob_locator;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_BOOTSPLASH = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+       ID_DATA_ACPI_SLIC = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_ACPI_DSDT = 2,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_ACPI_SSDT = 3,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_MICROCODE = 4,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_MICROCODE_RMU = 5,</span><br><span style="color: hsl(120, 100%, 40%);">+    ID_DATA_MRC_CACHE = 6,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_VGA_VBT = 7,</span><br><span style="color: hsl(120, 100%, 40%);">+  ID_DATA_NVRAM_CMOS_LAYOUT = 8,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_NVRAM_CMOS_DEFAULT = 9,</span><br><span style="color: hsl(120, 100%, 40%);">+       ID_DATA_NVRAM_VPD = 10,</span><br><span style="color: hsl(120, 100%, 40%);">+       ID_DATA_SIEMENS_HWLIB = 11,</span><br><span style="color: hsl(120, 100%, 40%);">+   ID_DATA_SPD = 12,</span><br><span style="color: hsl(120, 100%, 40%);">+     ID_DATA_MAC = 13,</span><br><span style="color: hsl(120, 100%, 40%);">+     ID_DATA_AMD_S3NV = 14,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_MRC_CACHE_REGION = 15,</span><br><span style="color: hsl(120, 100%, 40%);">+        ID_DATA_NVRAM_VPD_RO_REGION = 16,</span><br><span style="color: hsl(120, 100%, 40%);">+     ID_CODE_AMD_AGESA = 51,</span><br><span style="color: hsl(120, 100%, 40%);">+       ID_CODE_AMD_AGESA_PRE_MEM = 52,</span><br><span style="color: hsl(120, 100%, 40%);">+       ID_CODE_AMD_AGESA_POST_MEM = 53,</span><br><span style="color: hsl(120, 100%, 40%);">+      ID_CODE_AMD_PSP = 54,</span><br><span style="color: hsl(120, 100%, 40%);">+ ID_CODE_INTEL_MRC = 55,</span><br><span style="color: hsl(120, 100%, 40%);">+       ID_CODE_INTEL_FSP_S = 56,</span><br><span style="color: hsl(120, 100%, 40%);">+     ID_CODE_INTEL_FSP_M = 57,</span><br><span style="color: hsl(120, 100%, 40%);">+     ID_CODE_INTEL_MMA = 58,</span><br><span style="color: hsl(120, 100%, 40%);">+       ID_CODE_NVIDIA_MTC = 59,</span><br><span style="color: hsl(120, 100%, 40%);">+      ID_CODE_QUALCOMM_CDT = 60,</span><br><span style="color: hsl(120, 100%, 40%);">+    ID_CODE_QUALCOMM_DDR = 61,</span><br><span style="color: hsl(120, 100%, 40%);">+    ID_CODE_QUALCOMM_TZ = 61,</span><br><span style="color: hsl(120, 100%, 40%);">+     ID_CODE_QUALCOMM_RPM = 63,</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%);">+#define DATA_CODE_SPLIT 50</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/********************************AUTO_MODE********************************/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Excluded blobs</span><br><span style="color: hsl(120, 100%, 40%);">+VGA option roms</span><br><span style="color: hsl(120, 100%, 40%);">+Intel NHLT blobs</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%);">+// Data Section</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_BOOTSPLASH                                                   \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_BOOTSPLASH,                              \</span><br><span style="color: hsl(120, 100%, 40%);">+                       .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "bootsplash.jpg",                         \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_BOOTSPLASH})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_ACPI_SLIC                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_ACPI_SLIC,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                      .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = CONFIG_CBFS_PREFIX "/slic",               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_ACPI_DSDT                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_ACPI_DSDT,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = CONFIG_CBFS_PREFIX "/dsdt.aml",           \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_ACPI_SSDT                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_ACPI_SSDT,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = CONFIG_CBFS_PREFIX "/ssdt.aml",           \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_MICROCODE                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_MICROCODE,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "cpu_microcode_blob.bin",                 \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_MICROCODE})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_MICROCODE_RMU                                                \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_MICROCODE_RMU,                           \</span><br><span style="color: hsl(120, 100%, 40%);">+                       .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "rmu.bin",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_MRC_CACHE                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_MRC_CACHE,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "mrc.cache",                              \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_MRC_CACHE})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_MRC_CACHE_REGION                                             \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_MRC_CACHE,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                       .fmap_name = "RW_MRC_CACHE",                           \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "",                                       \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = NULL})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_VGA_VBT                                                      \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_VGA_VBT,                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+                      .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "vbt.bin",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_NVRAM_CMOS_LAYOUT                                            \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_NVRAM_CMOS_LAYOUT,                       \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "cmos_layout.bin",                        \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_COMPONENT_CMOS_LAYOUT})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_NVRAM_CMOS_DEFAULT                                           \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_NVRAM_CMOS_DEFAULT,                      \</span><br><span style="color: hsl(120, 100%, 40%);">+                        .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "cmos.default",                           \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_COMPONENT_CMOS_DEFAULT})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_NVRAM_VPD                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_NVRAM_VPD,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                       .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "vpd.bin",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_NVRAM_VPD_RO_REGION                                          \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_NVRAM_VPD_RO_REGION,                     \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "RO_VPD",                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "",                                       \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = NULL})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_SIEMENS_HWLIB                                                \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_SIEMENS_HWLIB,                           \</span><br><span style="color: hsl(120, 100%, 40%);">+                      .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "hwinfo.hex",                             \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_SPD                                                          \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_SPD,                                     \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "spd.bin",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_SPD})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_MAC                                                          \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_MAC,                                     \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "macaddress",                             \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_DATA_AMD_S3NV                                                     \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_DATA_AMD_S3NV,                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "s3nv",                                   \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// Code Section</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_AMD_AGESA                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_AMD_AGESA,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                  .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "AGESA",                                  \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_STAGE})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_AMD_AGESA_PRE_MEM                                            \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_AMD_AGESA_PRE_MEM,                       \</span><br><span style="color: hsl(120, 100%, 40%);">+                   .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "AGESA_PRE_MEM",                          \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_AMD_AGESA_POST_MEM                                           \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_AMD_AGESA_POST_MEM,                      \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "AGESA_POST_MEM",                         \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_AMD_PSP                                                      \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_AMD_PSP,                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "smu_fw",                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_INTEL_MRC                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_INTEL_MRC,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "mrc.bin",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_MRC})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_INTEL_FSP_S                                                  \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_INTEL_FSP_S,                             \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "fsps.bin",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_FSP})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_INTEL_FSP_M                                                  \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_INTEL_FSP_M,                             \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "fspm.bin",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_FSP})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_INTEL_MMA                                                    \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_INTEL_MMA,                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "mma_test_metadata.bin",                  \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_MMA})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_NVIDIA_MTC                                                   \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_NVIDIA_MTC,                              \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "tegra_mtc.bin",                          \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_QUALCOMM_CDT                                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_QUALCOMM_CDT,                            \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "cdt.mbn",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_QUALCOMM_DDR                                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_QUALCOMM_DDR,                            \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "ddr.mbn",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_QUALCOMM_TZ                                                  \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_QUALCOMM_TZ,                             \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "tz.mbn",                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_QUALCOMM_RPM                                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+((blob_locator) {.id = ID_CODE_QUALCOMM_RPM,                            \</span><br><span style="color: hsl(120, 100%, 40%);">+                     .fmap_name = "COREBOOT",                               \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_name = "rpm.mbn",                                \</span><br><span style="color: hsl(120, 100%, 40%);">+                    .cbfs_type = CBFS_TYPE_RAW})</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* unused</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_INTEL_FSP</span><br><span style="color: hsl(120, 100%, 40%);">+{ .cbfs_name = "fsp.bin", .cbfs_type = CBFS_TYPE_FSP }</span><br><span style="color: hsl(120, 100%, 40%);">+#define BLOB_CODE_INTEL_EFI</span><br><span style="color: hsl(120, 100%, 40%);">+{ .cbfs_name = "", .cbfs_type = CBFS_TYPE_EFI }</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%);">+typedef uint32_t (*check_blob_header)(const struct region_device *data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void *blob_provide_map(blob_locator locator, check_blob_header check_header,</span><br><span style="color: hsl(120, 100%, 40%);">+                     size_t *size);</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t blob_provide_rd(blob_locator locator, struct region_device *data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/********************************AUTO_MODE********************************/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void *blob_provide_map_cli(const char *fmap_name, const char *cbfs_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                    uint32_t cbfs_type, size_t *size);</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t blob_provide_rd_cli(const char *fmap_name, const char *cbfs_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                          uint32_t cbfs_type, struct region_device *data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t hook_region_device(uint32_t id, const char *fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                          const char *cbfs_name, uint32_t cbfs_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                            const struct region_device *data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* _BLOB_PROVIDER_H_ */</span><br><span>diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc</span><br><span>index d77884c..58b9bea 100644</span><br><span>--- a/src/lib/Makefile.inc</span><br><span>+++ b/src/lib/Makefile.inc</span><br><span>@@ -223,6 +223,12 @@</span><br><span> ramstage-y += reset.c</span><br><span> smm-y += reset.c</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+bootblock-y += blob_provider.c</span><br><span style="color: hsl(120, 100%, 40%);">+verstage-y += blob_provider.c</span><br><span style="color: hsl(120, 100%, 40%);">+romstage-y += blob_provider.c</span><br><span style="color: hsl(120, 100%, 40%);">+postcar-y += blob_provider.c</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-y += blob_provider.c</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> postcar-y += bootmode.c</span><br><span> postcar-y += boot_device.c</span><br><span> postcar-y += cbfs.c</span><br><span>diff --git a/src/lib/blob_provider.c b/src/lib/blob_provider.c</span><br><span>new file mode 100644</span><br><span>index 0000000..88831fb</span><br><span>--- /dev/null</span><br><span>+++ b/src/lib/blob_provider.c</span><br><span>@@ -0,0 +1,129 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 Facebook Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</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%);">+#include <blob_provider.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <console/console.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <fmap.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t __attribute__((weak))</span><br><span style="color: hsl(120, 100%, 40%);">+hook_region_device(uint32_t id, const char *fmap_name, const char *cbfs_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                   uint32_t cbfs_type, const struct region_device *data)</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%);">+void *blob_provide_map(blob_locator locator, check_blob_header check_header,</span><br><span style="color: hsl(120, 100%, 40%);">+                 size_t *size)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       blob_locator CBFS_SEARCH = locator;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct region_device data;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct cbfsf file;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  // default initialize</span><br><span style="color: hsl(120, 100%, 40%);">+ if (size)</span><br><span style="color: hsl(120, 100%, 40%);">+             *size = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (CBFS_SEARCH.id > DATA_CODE_SPLIT) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printk(BIOS_ERR, "Can't use auto mmap function on code blob.");</span><br><span style="color: hsl(120, 100%, 40%);">+         return NULL;</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%);">+   switch (CBFS_SEARCH.id) {</span><br><span style="color: hsl(120, 100%, 40%);">+     case ID_DATA_MRC_CACHE_REGION:</span><br><span style="color: hsl(120, 100%, 40%);">+        case ID_DATA_NVRAM_VPD_RO_REGION:</span><br><span style="color: hsl(120, 100%, 40%);">+             // Locate cbfs file in fmap region</span><br><span style="color: hsl(120, 100%, 40%);">+            if (fmap_locate_area_as_rdev(CBFS_SEARCH.fmap_name, &data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     printk(BIOS_ERR, "Could not locate FMAP partition %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                           CBFS_SEARCH.fmap_name);</span><br><span style="color: hsl(120, 100%, 40%);">+                        return NULL;</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%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              // Locate cbfs file in fmap region</span><br><span style="color: hsl(120, 100%, 40%);">+            if (cbfs_locate_file_in_region(&file, CBFS_SEARCH.fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             CBFS_SEARCH.cbfs_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        &CBFS_SEARCH.cbfs_type) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  printk(BIOS_ERR,</span><br><span style="color: hsl(120, 100%, 40%);">+                             "Could not locate %s key in CBFS on FMAP "</span><br><span style="color: hsl(120, 100%, 40%);">+                          "partition %s "</span><br><span style="color: hsl(120, 100%, 40%);">+                             "with type %u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                           CBFS_SEARCH.cbfs_name, CBFS_SEARCH.fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                         CBFS_SEARCH.cbfs_type);</span><br><span style="color: hsl(120, 100%, 40%);">+                        return NULL;</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%);">+           cbfs_file_data(&data, &file);</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%);">+   // check data header</span><br><span style="color: hsl(120, 100%, 40%);">+  if (check_header) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (!check_header(&data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       printk(BIOS_ERR, "Blob header check failed.");</span><br><span style="color: hsl(120, 100%, 40%);">+                      return NULL;</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 style="color: hsl(120, 100%, 40%);">+   // Hook into mapping</span><br><span style="color: hsl(120, 100%, 40%);">+  if (hook_region_device(CBFS_SEARCH.id, CBFS_SEARCH.fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                        CBFS_SEARCH.cbfs_name, CBFS_SEARCH.cbfs_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                         &data)) {</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 (size)</span><br><span style="color: hsl(120, 100%, 40%);">+             *size = region_device_sz(&data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        // Unmap rd because entire SPI flash is MMAP, except SMM</span><br><span style="color: hsl(120, 100%, 40%);">+      void *region = rdev_mmap_full(&data);</span><br><span style="color: hsl(120, 100%, 40%);">+     rdev_munmap(&data, region);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return region;</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%);">+uint32_t blob_provide_rd(blob_locator locator, struct region_device *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    blob_locator CBFS_SEARCH = locator;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct cbfsf file;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (CBFS_SEARCH.id <= DATA_CODE_SPLIT) {</span><br><span style="color: hsl(120, 100%, 40%);">+           printk(BIOS_ERR, "Can't use auto rd function on data blob.");</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%);">+   switch (CBFS_SEARCH.id) {</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%);">+   // Locate cbfs file in fmap region</span><br><span style="color: hsl(120, 100%, 40%);">+    if (cbfs_locate_file_in_region(&file, CBFS_SEARCH.fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     CBFS_SEARCH.cbfs_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                                &CBFS_SEARCH.cbfs_type) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+          printk(BIOS_ERR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Could not locate %s key in CBFS on FMAP partition %s "</span><br><span style="color: hsl(120, 100%, 40%);">+                     "with type %u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   CBFS_SEARCH.cbfs_name, CBFS_SEARCH.fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                 CBFS_SEARCH.cbfs_type);</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%);">+   cbfs_file_data(data, &file);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    // Hook into mapping</span><br><span style="color: hsl(120, 100%, 40%);">+  if (hook_region_device(CBFS_SEARCH.id, CBFS_SEARCH.fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                        CBFS_SEARCH.cbfs_name, CBFS_SEARCH.cbfs_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                         data)) {</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>diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c</span><br><span>index aeaff28..918c513 100644</span><br><span>--- a/src/lib/coreboot_table.c</span><br><span>+++ b/src/lib/coreboot_table.c</span><br><span>@@ -47,6 +47,7 @@</span><br><span> #include <cpu/x86/mtrr.h></span><br><span> #endif</span><br><span> #include <commonlib/helpers.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static struct lb_header *lb_table_init(unsigned long addr)</span><br><span> {</span><br><span>@@ -507,8 +508,7 @@</span><br><span> #if IS_ENABLED(CONFIG_USE_OPTION_TABLE)</span><br><span>         {</span><br><span>            struct cmos_option_table *option_table =</span><br><span style="color: hsl(0, 100%, 40%);">-                        cbfs_boot_map_with_leak("cmos_layout.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                            CBFS_COMPONENT_CMOS_LAYOUT, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+                blob_provide_map(BLOB_DATA_NVRAM_CMOS_LAYOUT, NULL, NULL);</span><br><span>               if (option_table) {</span><br><span>                  struct lb_record *rec_dest = lb_new_record(head);</span><br><span>                    /* Copy the option config table, it's already a</span><br><span>diff --git a/src/lib/spd_bin.c b/src/lib/spd_bin.c</span><br><span>index 79bda1e..7c85e7d 100644</span><br><span>--- a/src/lib/spd_bin.c</span><br><span>+++ b/src/lib/spd_bin.c</span><br><span>@@ -20,6 +20,7 @@</span><br><span> #include <string.h></span><br><span> #include <device/early_smbus.h></span><br><span> #include <device/dram/ddr3.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static u8 spd_data[CONFIG_DIMM_MAX * CONFIG_DIMM_SPD_SIZE] CAR_GLOBAL;</span><br><span> </span><br><span>@@ -188,8 +189,7 @@</span><br><span>      size_t spd_file_len = 0;</span><br><span>     size_t min_len = (idx + 1) * CONFIG_DIMM_SPD_SIZE;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               printk(BIOS_EMERG, "file [spd.bin] not found in CBFS");</span><br><span>    if (spd_file_len < min_len)</span><br><span>diff --git a/src/mainboard/amd/serengeti_cheetah/acpi_tables.c b/src/mainboard/amd/serengeti_cheetah/acpi_tables.c</span><br><span>index 41e12eb..a04efb3 100644</span><br><span>--- a/src/mainboard/amd/serengeti_cheetah/acpi_tables.c</span><br><span>+++ b/src/mainboard/amd/serengeti_cheetah/acpi_tables.c</span><br><span>@@ -173,6 +173,7 @@</span><br><span>                default:</span><br><span>                     continue;</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+             // TODO FIX ME BLOB</span><br><span>          p = cbfs_boot_map_with_leak(</span><br><span>                                           file_name,</span><br><span>                                           CBFS_TYPE_RAW, &p_size);</span><br><span>diff --git a/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c b/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c</span><br><span>index 6911c36..5ca0718 100644</span><br><span>--- a/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c</span><br><span>+++ b/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c</span><br><span>@@ -162,6 +162,7 @@</span><br><span>                        /* HTX no io apic */</span><br><span>                         file_name = CONFIG_CBFS_PREFIX "/ssdt5.aml";</span><br><span>               }</span><br><span style="color: hsl(120, 100%, 40%);">+             // TODO FIX ME BLOB</span><br><span>          p = cbfs_boot_map_with_leak(</span><br><span>                                           file_name,</span><br><span>                                           CBFS_TYPE_RAW, &p_size);</span><br><span>diff --git a/src/mainboard/apple/macbookair4_2/early_southbridge.c b/src/mainboard/apple/macbookair4_2/early_southbridge.c</span><br><span>index 3388322..3b31310 100644</span><br><span>--- a/src/mainboard/apple/macbookair4_2/early_southbridge.c</span><br><span>+++ b/src/mainboard/apple/macbookair4_2/early_southbridge.c</span><br><span>@@ -29,6 +29,7 @@</span><br><span> #include <arch/cpu.h></span><br><span> #include <cpu/x86/msr.h></span><br><span> #include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> void pch_enable_lpc(void)</span><br><span> {</span><br><span>@@ -76,8 +77,7 @@</span><br><span> {</span><br><span>     void *spd_file;</span><br><span>      size_t spd_file_len = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (spd_file && spd_file_len >= 1024) {</span><br><span>           int i;</span><br><span>               for (i = 0; i < 4; i++)</span><br><span>diff --git a/src/mainboard/google/auron/variants/auron_paine/spd/spd.c b/src/mainboard/google/auron/variants/auron_paine/spd/spd.c</span><br><span>index 12c876e..003bddf 100644</span><br><span>--- a/src/mainboard/google/auron/variants/auron_paine/spd/spd.c</span><br><span>+++ b/src/mainboard/google/auron/variants/auron_paine/spd/spd.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <mainboard/google/auron/ec.h></span><br><span> #include <variant/gpio.h></span><br><span> #include <variant/spd.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static void mainboard_print_spd_info(uint8_t spd[])</span><br><span> {</span><br><span>@@ -102,7 +103,7 @@</span><br><span>                spd_bits[1], spd_gpio[1],</span><br><span>            spd_bits[0], spd_gpio[0]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", 0xab, &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+     spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/auron/variants/auron_yuna/spd/spd.c b/src/mainboard/google/auron/variants/auron_yuna/spd/spd.c</span><br><span>index 12c876e..003bddf 100644</span><br><span>--- a/src/mainboard/google/auron/variants/auron_yuna/spd/spd.c</span><br><span>+++ b/src/mainboard/google/auron/variants/auron_yuna/spd/spd.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <mainboard/google/auron/ec.h></span><br><span> #include <variant/gpio.h></span><br><span> #include <variant/spd.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static void mainboard_print_spd_info(uint8_t spd[])</span><br><span> {</span><br><span>@@ -102,7 +103,7 @@</span><br><span>             spd_bits[1], spd_gpio[1],</span><br><span>            spd_bits[0], spd_gpio[0]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", 0xab, &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+     spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/auron/variants/gandof/spd/spd.c b/src/mainboard/google/auron/variants/gandof/spd/spd.c</span><br><span>index 12c876e..003bddf 100644</span><br><span>--- a/src/mainboard/google/auron/variants/gandof/spd/spd.c</span><br><span>+++ b/src/mainboard/google/auron/variants/gandof/spd/spd.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <mainboard/google/auron/ec.h></span><br><span> #include <variant/gpio.h></span><br><span> #include <variant/spd.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static void mainboard_print_spd_info(uint8_t spd[])</span><br><span> {</span><br><span>@@ -102,7 +103,7 @@</span><br><span>             spd_bits[1], spd_gpio[1],</span><br><span>            spd_bits[0], spd_gpio[0]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", 0xab, &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+     spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/auron/variants/lulu/spd/spd.c b/src/mainboard/google/auron/variants/lulu/spd/spd.c</span><br><span>index ac99f5c..3869ab5 100644</span><br><span>--- a/src/mainboard/google/auron/variants/lulu/spd/spd.c</span><br><span>+++ b/src/mainboard/google/auron/variants/lulu/spd/spd.c</span><br><span>@@ -25,6 +25,7 @@</span><br><span> #include <mainboard/google/auron/ec.h></span><br><span> #include <variant/gpio.h></span><br><span> #include <variant/spd.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static void mainboard_print_spd_info(uint8_t spd[])</span><br><span> {</span><br><span>@@ -107,7 +108,7 @@</span><br><span>              spd_bits[1], spd_gpio[1],</span><br><span>            spd_bits[0], spd_gpio[0]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  spd_file = cbfs_boot_map_with_leak("spd.bin", 0xab, &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+     spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/auron/variants/samus/spd/spd.c b/src/mainboard/google/auron/variants/samus/spd/spd.c</span><br><span>index dd632f3..2ea3988 100644</span><br><span>--- a/src/mainboard/google/auron/variants/samus/spd/spd.c</span><br><span>+++ b/src/mainboard/google/auron/variants/samus/spd/spd.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <mainboard/google/auron/ec.h></span><br><span> #include <variant/gpio.h></span><br><span> #include <variant/spd.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static void mainboard_print_spd_info(uint8_t spd[])</span><br><span> {</span><br><span>@@ -102,7 +103,7 @@</span><br><span>         spd_bits[3], spd_gpio[3], spd_bits[2], spd_gpio[2],</span><br><span>          spd_bits[1], spd_gpio[1], spd_bits[0], spd_gpio[0]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- spd_file = cbfs_boot_map_with_leak("spd.bin", 0xab, &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+     spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/beltino/lan.c b/src/mainboard/google/beltino/lan.c</span><br><span>index 140c814..4fbd519 100644</span><br><span>--- a/src/mainboard/google/beltino/lan.c</span><br><span>+++ b/src/mainboard/google/beltino/lan.c</span><br><span>@@ -23,6 +23,7 @@</span><br><span> #include <fmap.h></span><br><span> #include <southbridge/intel/bd82x6x/pch.h></span><br><span> #include "onboard.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static unsigned int search(char *p, u8 *a, unsigned int lengthp,</span><br><span>                           unsigned int lengtha)</span><br><span>@@ -115,18 +116,11 @@</span><br><span>     u32 low_dword = 0x0000AD0B;     /* low word of mac address as a dword */</span><br><span> </span><br><span>         if (IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              struct region_device rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              if (fmap_locate_area_as_rdev("RO_VPD", &rdev) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     search_address = rdev_mmap_full(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                     if (search_address != NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-                             search_length = region_device_sz(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(120, 100%, 40%);">+             search_address = blob_provide_map(BLOB_DATA_NVRAM_VPD_RO_REGION,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                NULL, &search_length);</span><br><span>         } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                search_address = cbfs_boot_map_with_leak("vpd.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   CBFS_TYPE_RAW,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  &search_length);</span><br><span style="color: hsl(120, 100%, 40%);">+          search_address =</span><br><span style="color: hsl(120, 100%, 40%);">+                  blob_provide_map(BLOB_DATA_NVRAM_VPD, NULL, &search_length);</span><br><span>         }</span><br><span> </span><br><span>        if (search_address == NULL)</span><br><span>diff --git a/src/mainboard/google/butterfly/mainboard.c b/src/mainboard/google/butterfly/mainboard.c</span><br><span>index a100981..b5e7fca 100644</span><br><span>--- a/src/mainboard/google/butterfly/mainboard.c</span><br><span>+++ b/src/mainboard/google/butterfly/mainboard.c</span><br><span>@@ -35,6 +35,7 @@</span><br><span> #include <device/pci.h></span><br><span> #include <ec/quanta/ene_kb3940q/ec.h></span><br><span> #include <vendorcode/google/chromeos/chromeos.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static unsigned int search(char *p, char *a, unsigned int lengthp,</span><br><span>                      unsigned int lengtha)</span><br><span>@@ -187,28 +188,13 @@</span><br><span>     size_t search_length = -1;</span><br><span>   u16 io_base = 0;</span><br><span>     struct device *ethernet_dev = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     void *vpd_file;</span><br><span> </span><br><span>  if (IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              struct region_device rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              if (fmap_locate_area_as_rdev("RO_VPD", &rdev) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     vpd_file = rdev_mmap_full(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                   if (vpd_file != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-                         search_length = region_device_sz(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-                            search_address = (uintptr_t)vpd_file;</span><br><span style="color: hsl(0, 100%, 40%);">-                   }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(120, 100%, 40%);">+             search_address = blob_provide_map(BLOB_DATA_NVRAM_VPD_RO_REGION,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                NULL, &search_length);</span><br><span>         } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                vpd_file = cbfs_boot_map_with_leak("vpd.bin", CBFS_TYPE_RAW,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  &search_length);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (vpd_file) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 search_address = (unsigned long)vpd_file;</span><br><span style="color: hsl(0, 100%, 40%);">-               } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        search_length = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-                     search_address = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(120, 100%, 40%);">+             search_address =</span><br><span style="color: hsl(120, 100%, 40%);">+                  blob_provide_map(BLOB_DATA_NVRAM_VPD, NULL, &search_length);</span><br><span>         }</span><br><span> </span><br><span>        /* Initialize the Embedded Controller */</span><br><span>diff --git a/src/mainboard/google/chell/spd/spd.c b/src/mainboard/google/chell/spd/spd.c</span><br><span>index 251b6de..664de16 100644</span><br><span>--- a/src/mainboard/google/chell/spd/spd.c</span><br><span>+++ b/src/mainboard/google/chell/spd/spd.c</span><br><span>@@ -22,6 +22,7 @@</span><br><span> #include <soc/pei_data.h></span><br><span> #include <soc/romstage.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "../gpio.h"</span><br><span> #include "spd.h"</span><br><span>@@ -95,8 +96,7 @@</span><br><span>       printk(BIOS_INFO, "SPD index %d\n", spd_index);</span><br><span> </span><br><span>        /* Load SPD data from CBFS */</span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/cyan/spd/spd.c b/src/mainboard/google/cyan/spd/spd.c</span><br><span>index a3db2ed..5f8d708 100644</span><br><span>--- a/src/mainboard/google/cyan/spd/spd.c</span><br><span>+++ b/src/mainboard/google/cyan/spd/spd.c</span><br><span>@@ -27,6 +27,7 @@</span><br><span> #include <string.h></span><br><span> #include <spd_bin.h></span><br><span> #include "spd_util.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> __attribute__ ((weak)) uint8_t get_ramid(void)</span><br><span> {</span><br><span>@@ -66,8 +67,7 @@</span><br><span>        int dual_channel = 0;</span><br><span> </span><br><span>    /* Find the SPD data in CBFS. */</span><br><span style="color: hsl(0, 100%, 40%);">-        spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/eve/spd/spd.c b/src/mainboard/google/eve/spd/spd.c</span><br><span>index 2f365a7..58cea5e 100644</span><br><span>--- a/src/mainboard/google/eve/spd/spd.c</span><br><span>+++ b/src/mainboard/google/eve/spd/spd.c</span><br><span>@@ -22,6 +22,7 @@</span><br><span> #include <soc/pei_data.h></span><br><span> #include <soc/romstage.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "../gpio.h"</span><br><span> #include "spd.h"</span><br><span>@@ -98,8 +99,7 @@</span><br><span>      printk(BIOS_INFO, "SPD index %d\n", spd_index);</span><br><span> </span><br><span>        /* Load SPD data from CBFS */</span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/glados/spd/spd.c b/src/mainboard/google/glados/spd/spd.c</span><br><span>index 251b6de..664de16 100644</span><br><span>--- a/src/mainboard/google/glados/spd/spd.c</span><br><span>+++ b/src/mainboard/google/glados/spd/spd.c</span><br><span>@@ -22,6 +22,7 @@</span><br><span> #include <soc/pei_data.h></span><br><span> #include <soc/romstage.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "../gpio.h"</span><br><span> #include "spd.h"</span><br><span>@@ -95,8 +96,7 @@</span><br><span>  printk(BIOS_INFO, "SPD index %d\n", spd_index);</span><br><span> </span><br><span>        /* Load SPD data from CBFS */</span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/jecht/lan.c b/src/mainboard/google/jecht/lan.c</span><br><span>index 59ed111..1d0ba5e 100644</span><br><span>--- a/src/mainboard/google/jecht/lan.c</span><br><span>+++ b/src/mainboard/google/jecht/lan.c</span><br><span>@@ -23,6 +23,7 @@</span><br><span> #include <device/pci.h></span><br><span> #include <soc/pch.h></span><br><span> #include "onboard.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static unsigned int search(char *p, u8 *a, unsigned int lengthp,</span><br><span>                           unsigned int lengtha)</span><br><span>@@ -115,18 +116,11 @@</span><br><span>     u32 low_dword = 0x0000AD0B;     /* low word of mac address as a dword */</span><br><span> </span><br><span>         if (IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              struct region_device rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              if (fmap_locate_area_as_rdev("RO_VPD", &rdev) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     search_address = rdev_mmap_full(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                     if (search_address != NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-                             search_length = region_device_sz(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(120, 100%, 40%);">+             search_address = blob_provide_map(BLOB_DATA_NVRAM_VPD_RO_REGION,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                NULL, &search_length);</span><br><span>         } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                search_address = cbfs_boot_map_with_leak("vpd.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   CBFS_TYPE_RAW,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  &search_length);</span><br><span style="color: hsl(120, 100%, 40%);">+          search_address =</span><br><span style="color: hsl(120, 100%, 40%);">+                  blob_provide_map(BLOB_DATA_NVRAM_VPD, NULL, &search_length);</span><br><span>         }</span><br><span> </span><br><span>        if (search_address == NULL)</span><br><span>diff --git a/src/mainboard/google/lars/spd/spd.c b/src/mainboard/google/lars/spd/spd.c</span><br><span>index 106eb83..0e3bba3 100644</span><br><span>--- a/src/mainboard/google/lars/spd/spd.c</span><br><span>+++ b/src/mainboard/google/lars/spd/spd.c</span><br><span>@@ -20,6 +20,7 @@</span><br><span> #include <soc/pei_data.h></span><br><span> #include <soc/romstage.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "spd.h"</span><br><span> </span><br><span>@@ -86,8 +87,7 @@</span><br><span>      printk(BIOS_INFO, "SPD index %d\n", spd_index);</span><br><span> </span><br><span>        /* Load SPD data from CBFS */</span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/link/romstage.c b/src/mainboard/google/link/romstage.c</span><br><span>index bf05be9..2fd11a0 100644</span><br><span>--- a/src/mainboard/google/link/romstage.c</span><br><span>+++ b/src/mainboard/google/link/romstage.c</span><br><span>@@ -36,6 +36,7 @@</span><br><span> #include <cpu/x86/msr.h></span><br><span> #include <halt.h></span><br><span> #include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include <southbridge/intel/bd82x6x/chip.h></span><br><span> </span><br><span>@@ -122,8 +123,7 @@</span><br><span>      int spd_index = get_gpios(gpio_vector);</span><br><span> </span><br><span>  printk(BIOS_DEBUG, "spd index %d\n", spd_index);</span><br><span style="color: hsl(0, 100%, 40%);">-      spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/poppy/romstage.c b/src/mainboard/google/poppy/romstage.c</span><br><span>index 6bb4076..3bfad3f 100644</span><br><span>--- a/src/mainboard/google/poppy/romstage.c</span><br><span>+++ b/src/mainboard/google/poppy/romstage.c</span><br><span>@@ -19,6 +19,7 @@</span><br><span> #include <console/console.h></span><br><span> #include <soc/romstage.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include <fsp/soc_binding.h></span><br><span> </span><br><span>@@ -122,8 +123,7 @@</span><br><span>   printk(BIOS_INFO, "SPD index %d\n", spd_index);</span><br><span> </span><br><span>        /* Load SPD data from CBFS */</span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/rambi/romstage.c b/src/mainboard/google/rambi/romstage.c</span><br><span>index 25fe859..567ba03 100644</span><br><span>--- a/src/mainboard/google/rambi/romstage.c</span><br><span>+++ b/src/mainboard/google/rambi/romstage.c</span><br><span>@@ -21,6 +21,7 @@</span><br><span> #include <soc/mrc_wrapper.h></span><br><span> #include <soc/romstage.h></span><br><span> #include <variant/variant.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static void *get_spd_pointer(char *spd_file_content, int total_spds, int *dual)</span><br><span> {</span><br><span>@@ -71,8 +72,7 @@</span><br><span>              },</span><br><span>   };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_fsize);</span><br><span style="color: hsl(120, 100%, 40%);">+      spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/rambi/variants/ninja/lan.c b/src/mainboard/google/rambi/variants/ninja/lan.c</span><br><span>index 3d08ad7..33594de 100644</span><br><span>--- a/src/mainboard/google/rambi/variants/ninja/lan.c</span><br><span>+++ b/src/mainboard/google/rambi/variants/ninja/lan.c</span><br><span>@@ -22,6 +22,7 @@</span><br><span> #include <device/pci.h></span><br><span> #include <fmap.h></span><br><span> #include <variant/onboard.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static unsigned int search(char *p, u8 *a, unsigned int lengthp,</span><br><span>                      unsigned int lengtha)</span><br><span>@@ -114,18 +115,11 @@</span><br><span>     u32 low_dword = 0x0000AD0B;     /* low word of mac address as a dword */</span><br><span> </span><br><span>         if (IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              struct region_device rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              if (fmap_locate_area_as_rdev("RO_VPD", &rdev) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     search_address = rdev_mmap_full(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                     if (search_address != NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-                             search_length = region_device_sz(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(120, 100%, 40%);">+             search_address = blob_provide_map(BLOB_DATA_NVRAM_VPD_RO_REGION,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                NULL, &search_length);</span><br><span>         } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                search_address = cbfs_boot_map_with_leak("vpd.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   CBFS_TYPE_RAW,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  &search_length);</span><br><span style="color: hsl(120, 100%, 40%);">+          search_address =</span><br><span style="color: hsl(120, 100%, 40%);">+                  blob_provide_map(BLOB_DATA_NVRAM_VPD, NULL, &search_length);</span><br><span>         }</span><br><span> </span><br><span>        if (search_address == NULL)</span><br><span>diff --git a/src/mainboard/google/rambi/variants/sumo/lan.c b/src/mainboard/google/rambi/variants/sumo/lan.c</span><br><span>index 07fe3d9..2ad76f3 100644</span><br><span>--- a/src/mainboard/google/rambi/variants/sumo/lan.c</span><br><span>+++ b/src/mainboard/google/rambi/variants/sumo/lan.c</span><br><span>@@ -22,6 +22,7 @@</span><br><span> #include <device/pci.h></span><br><span> #include <fmap.h></span><br><span> #include <variant/onboard.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static unsigned int search(char *p, u8 *a, unsigned int lengthp,</span><br><span>                        unsigned int lengtha)</span><br><span>@@ -114,18 +115,11 @@</span><br><span>     u32 low_dword = 0x0000AD0B;     /* low word of mac address as a dword */</span><br><span> </span><br><span>         if (IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              struct region_device rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              if (fmap_locate_area_as_rdev("RO_VPD", &rdev) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     search_address = rdev_mmap_full(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                     if (search_address != NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-                             search_length = region_device_sz(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(120, 100%, 40%);">+             search_address = blob_provide_map(BLOB_DATA_NVRAM_VPD_RO_REGION,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                NULL, &search_length);</span><br><span>         } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                search_address = cbfs_boot_map_with_leak("vpd.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   CBFS_TYPE_RAW,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  &search_length);</span><br><span style="color: hsl(120, 100%, 40%);">+          search_address =</span><br><span style="color: hsl(120, 100%, 40%);">+                  blob_provide_map(BLOB_DATA_NVRAM_VPD, NULL, &search_length);</span><br><span>         }</span><br><span> </span><br><span>        if (search_address == NULL)</span><br><span>diff --git a/src/mainboard/google/slippy/variants/falco/romstage.c b/src/mainboard/google/slippy/variants/falco/romstage.c</span><br><span>index 81174db..b8744f1 100644</span><br><span>--- a/src/mainboard/google/slippy/variants/falco/romstage.c</span><br><span>+++ b/src/mainboard/google/slippy/variants/falco/romstage.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span> #include <southbridge/intel/lynxpoint/lp_gpio.h></span><br><span> #include <variant/gpio.h></span><br><span> #include "../../variant.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> const struct rcba_config_instruction rcba_config[] = {</span><br><span> </span><br><span>@@ -77,8 +78,7 @@</span><br><span>        size_t spd_len = sizeof(peid->spd_data[0]);</span><br><span> </span><br><span>   printk(BIOS_DEBUG, "SPD index %d\n", spd_index);</span><br><span style="color: hsl(0, 100%, 40%);">-      spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/slippy/variants/leon/romstage.c b/src/mainboard/google/slippy/variants/leon/romstage.c</span><br><span>index 132f586..3bc2ee3 100644</span><br><span>--- a/src/mainboard/google/slippy/variants/leon/romstage.c</span><br><span>+++ b/src/mainboard/google/slippy/variants/leon/romstage.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span> #include <southbridge/intel/lynxpoint/lp_gpio.h></span><br><span> #include <variant/gpio.h></span><br><span> #include "../../variant.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> const struct rcba_config_instruction rcba_config[] = {</span><br><span> </span><br><span>@@ -77,8 +78,7 @@</span><br><span>      size_t spd_len = sizeof(peid->spd_data[0]);</span><br><span> </span><br><span>   printk(BIOS_DEBUG, "SPD index %d\n", spd_index);</span><br><span style="color: hsl(0, 100%, 40%);">-      spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/slippy/variants/peppy/romstage.c b/src/mainboard/google/slippy/variants/peppy/romstage.c</span><br><span>index bf21cbc..d2c6048 100644</span><br><span>--- a/src/mainboard/google/slippy/variants/peppy/romstage.c</span><br><span>+++ b/src/mainboard/google/slippy/variants/peppy/romstage.c</span><br><span>@@ -29,6 +29,7 @@</span><br><span> #include <variant/gpio.h></span><br><span> #include "../../onboard.h"</span><br><span> #include "../../variant.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> const struct rcba_config_instruction rcba_config[] = {</span><br><span> </span><br><span>@@ -80,8 +81,7 @@</span><br><span>    size_t spd_len = sizeof(peid->spd_data[0]);</span><br><span> </span><br><span>   printk(BIOS_DEBUG, "SPD index %d\n", spd_index);</span><br><span style="color: hsl(0, 100%, 40%);">-      spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/slippy/variants/wolf/romstage.c b/src/mainboard/google/slippy/variants/wolf/romstage.c</span><br><span>index 5b6b254..b1ee977 100644</span><br><span>--- a/src/mainboard/google/slippy/variants/wolf/romstage.c</span><br><span>+++ b/src/mainboard/google/slippy/variants/wolf/romstage.c</span><br><span>@@ -28,6 +28,7 @@</span><br><span> #include <southbridge/intel/lynxpoint/lp_gpio.h></span><br><span> #include <variant/gpio.h></span><br><span> #include "../../variant.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> const struct rcba_config_instruction rcba_config[] = {</span><br><span> </span><br><span>@@ -79,8 +80,7 @@</span><br><span>      size_t spd_len = sizeof(peid->spd_data[0]);</span><br><span> </span><br><span>   printk(BIOS_DEBUG, "SPD index %d\n", spd_index);</span><br><span style="color: hsl(0, 100%, 40%);">-      spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/google/urara/boardid.c b/src/mainboard/google/urara/boardid.c</span><br><span>index 9a6b64e..bc5398a 100644</span><br><span>--- a/src/mainboard/google/urara/boardid.c</span><br><span>+++ b/src/mainboard/google/urara/boardid.c</span><br><span>@@ -48,6 +48,7 @@</span><br><span>   int i;</span><br><span>       size_t length;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    // TODO BLOB</span><br><span>         file_contents = cbfs_boot_map_with_leak(board_id_file_name,</span><br><span>                                          CBFS_TYPE_RAW, &length);</span><br><span> </span><br><span>diff --git a/src/mainboard/hp/revolve_810_g1/romstage.c b/src/mainboard/hp/revolve_810_g1/romstage.c</span><br><span>index dbf786e..699d763 100644</span><br><span>--- a/src/mainboard/hp/revolve_810_g1/romstage.c</span><br><span>+++ b/src/mainboard/hp/revolve_810_g1/romstage.c</span><br><span>@@ -23,6 +23,7 @@</span><br><span> #include <northbridge/intel/sandybridge/raminit_native.h></span><br><span> #include <southbridge/intel/bd82x6x/pch.h></span><br><span> #include <ec/hp/kbc1126/ec.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> void pch_enable_lpc(void)</span><br><span> {</span><br><span>@@ -79,8 +80,7 @@</span><br><span> {</span><br><span>     /* C1S0 is a soldered RAM with no real SPD. Use stored SPD.  */</span><br><span>      size_t spd_file_len = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        void *spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-            &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   void *spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span> </span><br><span>       if (!spd_file || spd_file_len < sizeof(spd_raw_data))</span><br><span>             die("SPD data for C1S0 not found.");</span><br><span>diff --git a/src/mainboard/intel/harcuvar/spd/spd.c b/src/mainboard/intel/harcuvar/spd/spd.c</span><br><span>index 37f4424..19fc74f 100644</span><br><span>--- a/src/mainboard/intel/harcuvar/spd/spd.c</span><br><span>+++ b/src/mainboard/intel/harcuvar/spd/spd.c</span><br><span>@@ -19,6 +19,7 @@</span><br><span> #include <cbfs.h></span><br><span> #include <console/console.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "spd.h"</span><br><span> </span><br><span>@@ -32,8 +33,7 @@</span><br><span> </span><br><span>        spd_index = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+        spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/intel/kunimitsu/spd/spd_util.c b/src/mainboard/intel/kunimitsu/spd/spd_util.c</span><br><span>index a17b519..85c0b23 100644</span><br><span>--- a/src/mainboard/intel/kunimitsu/spd/spd_util.c</span><br><span>+++ b/src/mainboard/intel/kunimitsu/spd/spd_util.c</span><br><span>@@ -21,6 +21,7 @@</span><br><span> #include <soc/pei_wrapper.h></span><br><span> #include "boardid.h"</span><br><span> #include "spd.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> void mainboard_fill_dq_map_data(void *dq_map_ptr)</span><br><span> {</span><br><span>@@ -83,8 +84,7 @@</span><br><span>         printk(BIOS_INFO, "SPD index %d\n", spd_index);</span><br><span> </span><br><span>        /* Load SPD data from CBFS */</span><br><span style="color: hsl(0, 100%, 40%);">-   spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/iwill/dk8_htx/acpi_tables.c b/src/mainboard/iwill/dk8_htx/acpi_tables.c</span><br><span>index e9818b3..07fc1ca 100644</span><br><span>--- a/src/mainboard/iwill/dk8_htx/acpi_tables.c</span><br><span>+++ b/src/mainboard/iwill/dk8_htx/acpi_tables.c</span><br><span>@@ -170,6 +170,7 @@</span><br><span>                     file_name = CONFIG_CBFS_PREFIX "/ssdt5.aml";</span><br><span>                       break;</span><br><span>               }</span><br><span style="color: hsl(120, 100%, 40%);">+             // TODO blob</span><br><span>                 p = cbfs_boot_map_with_leak(</span><br><span>                                           file_name,</span><br><span>                                           CBFS_TYPE_RAW, &p_size);</span><br><span>diff --git a/src/mainboard/lenovo/s230u/romstage.c b/src/mainboard/lenovo/s230u/romstage.c</span><br><span>index 43a3d52..50bc613 100644</span><br><span>--- a/src/mainboard/lenovo/s230u/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/s230u/romstage.c</span><br><span>@@ -32,6 +32,7 @@</span><br><span> #include <arch/cpu.h></span><br><span> #include <cpu/x86/msr.h></span><br><span> #include "ec.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #define SPD_LEN 256</span><br><span> </span><br><span>@@ -115,8 +116,7 @@</span><br><span>             spd_index, mainboard_spd_names[spd_index]);</span><br><span> </span><br><span>      /* C0S0 is a soldered RAM with no real SPD. Use stored SPD.  */</span><br><span style="color: hsl(0, 100%, 40%);">- spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span> </span><br><span>     if (!spd_file || spd_file_len < SPD_LEN * spd_index + SPD_LEN)</span><br><span>            die("SPD data not found.");</span><br><span>diff --git a/src/mainboard/lenovo/x1_carbon_gen1/romstage.c b/src/mainboard/lenovo/x1_carbon_gen1/romstage.c</span><br><span>index 5f7b82e..ddb2739 100644</span><br><span>--- a/src/mainboard/lenovo/x1_carbon_gen1/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/x1_carbon_gen1/romstage.c</span><br><span>@@ -36,6 +36,7 @@</span><br><span> #include <arch/cpu.h></span><br><span> #include <cpu/x86/msr.h></span><br><span> #include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> void pch_enable_lpc(void)</span><br><span> {</span><br><span>@@ -75,8 +76,7 @@</span><br><span>       size_t spd_file_len;</span><br><span> </span><br><span>     printk(BIOS_DEBUG, "spd index %d\n", spd_index);</span><br><span style="color: hsl(0, 100%, 40%);">-      spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_file = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_file)</span><br><span>               die("SPD data not found.");</span><br><span> </span><br><span>diff --git a/src/mainboard/samsung/lumpy/romstage.c b/src/mainboard/samsung/lumpy/romstage.c</span><br><span>index d2231aa..84bfc1b 100644</span><br><span>--- a/src/mainboard/samsung/lumpy/romstage.c</span><br><span>+++ b/src/mainboard/samsung/lumpy/romstage.c</span><br><span>@@ -37,6 +37,7 @@</span><br><span> #include <cpu/x86/msr.h></span><br><span> #include <halt.h></span><br><span> #include "option_table.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> #if IS_ENABLED(CONFIG_DRIVERS_UART_8250IO)</span><br><span> #include <superio/smsc/lpc47n207/lpc47n207.h></span><br><span> #endif</span><br><span>@@ -157,8 +158,7 @@</span><br><span>                break;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   spd_data = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          &spd_file_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   spd_data = blob_provide_map(BLOB_DATA_SPD, NULL, &spd_file_len);</span><br><span>         if (!spd_data)</span><br><span>               die("SPD data not found.");</span><br><span>        if (spd_file_len < (spd_index + 1) * 256)</span><br><span>diff --git a/src/mainboard/siemens/mc_apl1/mainboard.c b/src/mainboard/siemens/mc_apl1/mainboard.c</span><br><span>index fd19cd1..0866c96 100644</span><br><span>--- a/src/mainboard/siemens/mc_apl1/mainboard.c</span><br><span>+++ b/src/mainboard/siemens/mc_apl1/mainboard.c</span><br><span>@@ -90,7 +90,7 @@</span><br><span>            mapping[i + 4] = buf[chain_len - i - 1];</span><br><span> </span><br><span>         /* Open main hwinfo block */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hwilib_find_blocks() != CB_SUCCESS)</span><br><span>              return CB_ERR;</span><br><span>       /* Now try to find a valid MAC address in hwinfo for this mapping.*/</span><br><span>         for (i = 0; i < MAX_NUM_MAPPINGS; i++) {</span><br><span>@@ -159,7 +159,7 @@</span><br><span>    struct stopwatch sw;</span><br><span> </span><br><span>     /* Open main hwinfo block. */</span><br><span style="color: hsl(0, 100%, 40%);">-   if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hwilib_find_blocks() != CB_SUCCESS)</span><br><span>              return;</span><br><span> </span><br><span>  /* Get legacy delay parameter from hwinfo. */</span><br><span>diff --git a/src/mainboard/siemens/mc_apl1/ptn3460.c b/src/mainboard/siemens/mc_apl1/ptn3460.c</span><br><span>index 1877e8b..fb0c95a 100644</span><br><span>--- a/src/mainboard/siemens/mc_apl1/ptn3460.c</span><br><span>+++ b/src/mainboard/siemens/mc_apl1/ptn3460.c</span><br><span>@@ -34,7 +34,7 @@</span><br><span>   uint8_t edid_data[PTN_EDID_LEN];</span><br><span>     int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (!hwi_block || hwilib_find_blocks(hwi_block) != CB_SUCCESS) {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!hwi_block || hwilib_find_blocks() != CB_SUCCESS) {</span><br><span>              printk(BIOS_ERR, "LCD: Info block \"%s\" not found!\n",</span><br><span>                          hwi_block);</span><br><span>          return 1;</span><br><span>diff --git a/src/mainboard/siemens/mc_bdx1/mainboard.c b/src/mainboard/siemens/mc_bdx1/mainboard.c</span><br><span>index ea525d4..c6f0ab3 100644</span><br><span>--- a/src/mainboard/siemens/mc_bdx1/mainboard.c</span><br><span>+++ b/src/mainboard/siemens/mc_bdx1/mainboard.c</span><br><span>@@ -197,7 +197,7 @@</span><br><span>             mapping[i + 4] = buf[chain_len - i - 1];</span><br><span> </span><br><span>         /* Open main hwinfo block */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hwilib_find_blocks() != CB_SUCCESS)</span><br><span>              return CB_ERR;</span><br><span>       /* Now try to find a valid MAC address in hwinfo for this mapping.*/</span><br><span>         for (i = 0; i < MAX_NUM_MAPPINGS; i++) {</span><br><span>diff --git a/src/mainboard/siemens/mc_tcu3/mainboard.c b/src/mainboard/siemens/mc_tcu3/mainboard.c</span><br><span>index df08471..14d9778 100644</span><br><span>--- a/src/mainboard/siemens/mc_tcu3/mainboard.c</span><br><span>+++ b/src/mainboard/siemens/mc_tcu3/mainboard.c</span><br><span>@@ -46,7 +46,7 @@</span><br><span>     uint32_t i;</span><br><span> </span><br><span>      /* Open main hwinfo block */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hwilib_find_blocks() != CB_SUCCESS)</span><br><span>              return CB_ERR;</span><br><span>       /* Get first MAC address from hwinfo. */</span><br><span>     if (hwilib_get_field(Mac1, mac_adr, sizeof(mac_adr)) != sizeof(mac_adr))</span><br><span>diff --git a/src/mainboard/siemens/mc_tcu3/ptn3460.c b/src/mainboard/siemens/mc_tcu3/ptn3460.c</span><br><span>index 347bc9c..c2f3f9f 100644</span><br><span>--- a/src/mainboard/siemens/mc_tcu3/ptn3460.c</span><br><span>+++ b/src/mainboard/siemens/mc_tcu3/ptn3460.c</span><br><span>@@ -32,7 +32,7 @@</span><br><span>        uint8_t edid_data[0x80];</span><br><span>     uint8_t hwid[4], tcu31_hwid[4] = {7, 9, 2, 0};</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (!hwi_block || hwilib_find_blocks(hwi_block) != CB_SUCCESS) {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!hwi_block || hwilib_find_blocks() != CB_SUCCESS) {</span><br><span>              printk(BIOS_ERR, "LCD: Info block \"%s\" not found!\n",</span><br><span>                  hwi_block);</span><br><span>          return 1;</span><br><span>diff --git a/src/mainboard/siemens/mc_tcu3/romstage.c b/src/mainboard/siemens/mc_tcu3/romstage.c</span><br><span>index 15d949e..f466207 100644</span><br><span>--- a/src/mainboard/siemens/mc_tcu3/romstage.c</span><br><span>+++ b/src/mainboard/siemens/mc_tcu3/romstage.c</span><br><span>@@ -174,7 +174,7 @@</span><br><span> </span><br><span>     /* Get SPD data from hwinfo block and set up memory down */</span><br><span>  /* parameters for FSP accordingly. */</span><br><span style="color: hsl(0, 100%, 40%);">-   if (hwilib_find_blocks("hwinfo.hex")) {</span><br><span style="color: hsl(120, 100%, 40%);">+     if (hwilib_find_blocks()) {</span><br><span>          printk(BIOS_ERR,</span><br><span>                     "HWInfo not found, use default timings for DDR3.\n");</span><br><span>              return;</span><br><span>diff --git a/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c b/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c</span><br><span>index 4100b26..dc49795 100644</span><br><span>--- a/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c</span><br><span>+++ b/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c</span><br><span>@@ -31,6 +31,7 @@</span><br><span> #include <string.h></span><br><span> #include "mct_d.h"</span><br><span> #include "mct_d_gcc.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "s3utils.h"</span><br><span> </span><br><span>@@ -213,7 +214,7 @@</span><br><span>      s3nv_file_offset = s3nv_offset - s3nv_file_offset;</span><br><span> </span><br><span>       /* Map data structure in CBFS and restore settings */</span><br><span style="color: hsl(0, 100%, 40%);">-   s3nv_cbfs_file_ptr = cbfs_boot_map_with_leak(S3NV_FILE_NAME, CBFS_TYPE_RAW, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    s3nv_cbfs_file_ptr = blob_provide_map(BLOB_DATA_AMD_S3NV, NULL, NULL);</span><br><span>       if (!s3nv_cbfs_file_ptr) {</span><br><span>           printk(BIOS_DEBUG, "S3 state file could not be mapped: %s\n", S3NV_FILE_NAME);</span><br><span>             return NULL;</span><br><span>diff --git a/src/northbridge/amd/pi/agesawrapper.c b/src/northbridge/amd/pi/agesawrapper.c</span><br><span>index d912317..d5897a4 100644</span><br><span>--- a/src/northbridge/amd/pi/agesawrapper.c</span><br><span>+++ b/src/northbridge/amd/pi/agesawrapper.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <northbridge/amd/agesa/state_machine.h></span><br><span> #include <northbridge/amd/pi/agesawrapper.h></span><br><span> #include <northbridge/amd/agesa/BiosCallOuts.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> void __attribute__((weak)) OemPostParams(AMD_POST_PARAMS *PostParams) {}</span><br><span> </span><br><span>@@ -293,14 +294,7 @@</span><br><span>      const AMD_MODULE_HEADER* module;</span><br><span>     size_t file_size;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (IS_ENABLED(CONFIG_VBOOT)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         /* Use phys. location in flash and prevent vboot from searching cbmem */</span><br><span style="color: hsl(0, 100%, 40%);">-                agesa = (void *)CONFIG_AGESA_BINARY_PI_LOCATION;</span><br><span style="color: hsl(0, 100%, 40%);">-                file_size = 0x100000;</span><br><span style="color: hsl(0, 100%, 40%);">-   } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                agesa = cbfs_boot_map_with_leak((const char *)CONFIG_AGESA_CBFS_NAME,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   CBFS_TYPE_RAW, &file_size);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+     agesa = blob_provide_map(BLOB_CODE_AMD_AGESA, NULL, &file_size);</span><br><span> </span><br><span>     if (!agesa)</span><br><span>          return NULL;</span><br><span>diff --git a/src/northbridge/intel/common/mrc_cache.c b/src/northbridge/intel/common/mrc_cache.c</span><br><span>index f692282..c265df4 100644</span><br><span>--- a/src/northbridge/intel/common/mrc_cache.c</span><br><span>+++ b/src/northbridge/intel/common/mrc_cache.c</span><br><span>@@ -64,16 +64,11 @@</span><br><span>      *mrc_region_ptr = NULL;</span><br><span> </span><br><span>  if (IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              struct region_device rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              if (fmap_locate_area_as_rdev("RW_MRC_CACHE", &rdev) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       region_size = region_device_sz(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-                      *mrc_region_ptr = rdev_mmap_full(&rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(120, 100%, 40%);">+             *mrc_region_ptr = blob_provide_map(BLOB_DATA_MRC_CACHE_REGION,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   NULL, &region_size);</span><br><span>  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                *mrc_region_ptr = cbfs_boot_map_with_leak("mrc.cache",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        CBFS_TYPE_MRC_CACHE,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    &region_size);</span><br><span style="color: hsl(120, 100%, 40%);">+            *mrc_region_ptr =</span><br><span style="color: hsl(120, 100%, 40%);">+                 blob_provide_map(BLOB_DATA_MRC_CACHE, NULL, &region_size);</span><br><span>   }</span><br><span>    return region_size;</span><br><span> }</span><br><span>diff --git a/src/northbridge/intel/haswell/raminit.c b/src/northbridge/intel/haswell/raminit.c</span><br><span>index f17a374..ed51aa1 100644</span><br><span>--- a/src/northbridge/intel/haswell/raminit.c</span><br><span>+++ b/src/northbridge/intel/haswell/raminit.c</span><br><span>@@ -32,6 +32,7 @@</span><br><span> #include "raminit.h"</span><br><span> #include "pei_data.h"</span><br><span> #include "haswell.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> void save_mrc_data(struct pei_data *pei_data)</span><br><span> {</span><br><span>@@ -141,8 +142,7 @@</span><br><span>       pei_data->tx_byte = do_putchar;</span><br><span> </span><br><span>       /* Locate and call UEFI System Agent binary. */</span><br><span style="color: hsl(0, 100%, 40%);">- entry = (unsigned long)cbfs_boot_map_with_leak("mrc.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     CBFS_TYPE_MRC, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ entry = blob_provide_map(BLOB_CODE_INTEL_MRC, NULL, NULL);</span><br><span>   if (entry) {</span><br><span>                 int rv;</span><br><span>              asm volatile (</span><br><span>diff --git a/src/northbridge/intel/sandybridge/raminit_mrc.c b/src/northbridge/intel/sandybridge/raminit_mrc.c</span><br><span>index 901a083..da4f46a 100644</span><br><span>--- a/src/northbridge/intel/sandybridge/raminit_mrc.c</span><br><span>+++ b/src/northbridge/intel/sandybridge/raminit_mrc.c</span><br><span>@@ -32,6 +32,7 @@</span><br><span> #include "pei_data.h"</span><br><span> #include "sandybridge.h"</span><br><span> #include <security/vboot/vboot_common.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> /* Management Engine is in the southbridge */</span><br><span> #include "southbridge/intel/bd82x6x/me.h"</span><br><span>@@ -216,7 +217,7 @@</span><br><span>   pei_data->tx_byte = do_putchar;</span><br><span> </span><br><span>       /* Locate and call UEFI System Agent binary. */</span><br><span style="color: hsl(0, 100%, 40%);">- entry = cbfs_boot_map_with_leak("mrc.bin", CBFS_TYPE_MRC, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    entry = blob_provide_map(BLOB_CODE_INTEL_MRC, NULL, NULL);</span><br><span>   if (entry) {</span><br><span>                 int rv;</span><br><span>              rv = entry (pei_data);</span><br><span>diff --git a/src/security/vboot/secdata_measurements.c b/src/security/vboot/secdata_measurements.c</span><br><span>index 9111ffa..84829bf 100644</span><br><span>--- a/src/security/vboot/secdata_measurements.c</span><br><span>+++ b/src/security/vboot/secdata_measurements.c</span><br><span>@@ -14,9 +14,10 @@</span><br><span>  */</span><br><span> </span><br><span> #include "antirollback.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> #include <cbfs.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <fmap.h></span><br><span> #include <console/console.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <fmap.h></span><br><span> #include <security/tpm/tspi.h></span><br><span> </span><br><span> uint32_t vboot_measure_crtm(void)</span><br><span>@@ -29,19 +30,17 @@</span><br><span> </span><br><span>         /* measure bootblock from RO */</span><br><span>      struct cbfsf bootblock_data;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (!cbfs_boot_locate(&bootblock_data, prog_name(&bootblock), NULL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (cbfs_boot_locate(&bootblock_data, prog_name(&bootblock), NULL) ==</span><br><span style="color: hsl(120, 100%, 40%);">+     0) {</span><br><span>             cbfs_file_data(prog_rdev(&bootblock), &bootblock_data);</span><br><span> </span><br><span>          if (tpm_measure_region(TPM_BOOTBLOCK_PCR, prog_rdev(&bootblock),</span><br><span>                                        "bootblock")) {</span><br><span>                     return VB2_ERROR_UNKNOWN;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               printk(BIOS_INFO, "VBOOT: Couldn't measure %s into CRTM!",</span><br><span style="color: hsl(0, 100%, 40%);">-                       "bootblock");</span><br><span>       } else {</span><br><span>             struct region_device fmap;</span><br><span style="color: hsl(0, 100%, 40%);">-              if (!fmap_locate_area_as_rdev("BOOTBLOCK", &fmap)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (fmap_locate_area_as_rdev("BOOTBLOCK", &fmap) == 0) {</span><br><span>                       if (tpm_measure_region(TPM_BOOTBLOCK_PCR, &fmap,</span><br><span>                                                "bootblock")) {</span><br><span>                             return VB2_ERROR_UNKNOWN;</span><br><span>@@ -56,8 +55,8 @@</span><br><span>        if (IS_ENABLED(CONFIG_VBOOT_STARTS_IN_ROMSTAGE)) {</span><br><span>           struct cbfsf romstage_data;</span><br><span>          /* measure verstage from RO */</span><br><span style="color: hsl(0, 100%, 40%);">-          if (!cbfs_boot_locate(&romstage_data, prog_name(&romstage),</span><br><span style="color: hsl(0, 100%, 40%);">-                                   NULL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (cbfs_boot_locate(&romstage_data, prog_name(&romstage),</span><br><span style="color: hsl(120, 100%, 40%);">+                                 NULL) == 0) {</span><br><span>                   cbfs_file_data(prog_rdev(&romstage), &romstage_data);</span><br><span> </span><br><span>                    if (tpm_measure_region(TPM_STAGE_ROMSTAGE_PCR,</span><br><span>@@ -76,8 +75,8 @@</span><br><span>   if (IS_ENABLED(CONFIG_VBOOT_SEPARATE_VERSTAGE)) {</span><br><span>            struct cbfsf verstage_data;</span><br><span>          /* measure verstage from RO */</span><br><span style="color: hsl(0, 100%, 40%);">-          if (!cbfs_boot_locate(&verstage_data, prog_name(&verstage),</span><br><span style="color: hsl(0, 100%, 40%);">-                                   NULL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (cbfs_boot_locate(&verstage_data, prog_name(&verstage),</span><br><span style="color: hsl(120, 100%, 40%);">+                                 NULL) == 0) {</span><br><span>                   cbfs_file_data(prog_rdev(&verstage), &verstage_data);</span><br><span> </span><br><span>                    if (tpm_measure_region(TPM_STAGE_VERSTAGE_PCR,</span><br><span>@@ -146,3 +145,44 @@</span><br><span>                break;</span><br><span>       }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t hook_region_device(uint32_t id, const char *fmap_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                         const char *cbfs_name, uint32_t cbfs_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                            const struct region_device *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      tpm_measure_region(TPM_STAGE_ROMSTAGE_PCR, data, cbfs_name);</span><br><span style="color: hsl(120, 100%, 40%);">+  /*</span><br><span style="color: hsl(120, 100%, 40%);">+            switch(id) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  case ID_DATA_BOOTSPLASH:</span><br><span style="color: hsl(120, 100%, 40%);">+                      case ID_DATA_ACPI_SLIC:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_DATA_ACPI_DSDT:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_DATA_ACPI_SSDT:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_DATA_MICROCODE:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_DATA_MICROCODE_RMU:</span><br><span style="color: hsl(120, 100%, 40%);">+                   case ID_DATA_MRC_CACHE:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_DATA_VGA_VBT:</span><br><span style="color: hsl(120, 100%, 40%);">+                 case ID_DATA_NVRAM_CMOS_LAYOUT:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_DATA_NVRAM_CMOS_DEFAULT:</span><br><span style="color: hsl(120, 100%, 40%);">+                      case ID_DATA_NVRAM_VPD:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_DATA_SIEMENS_HWLIB:</span><br><span style="color: hsl(120, 100%, 40%);">+                   case ID_DATA_SPD:</span><br><span style="color: hsl(120, 100%, 40%);">+                     case ID_DATA_MAC:</span><br><span style="color: hsl(120, 100%, 40%);">+                     case ID_DATA_AMD_S3NV:</span><br><span style="color: hsl(120, 100%, 40%);">+                        case ID_CODE_AMD_AGESA:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_CODE_AMD_AGESA_PRE_MEM:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_CODE_AMD_AGESA_POST_MEM:</span><br><span style="color: hsl(120, 100%, 40%);">+                      case ID_CODE_AMD_PSP:</span><br><span style="color: hsl(120, 100%, 40%);">+                 case ID_CODE_INTEL_MRC:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_CODE_INTEL_FSP_S:</span><br><span style="color: hsl(120, 100%, 40%);">+                     case ID_CODE_INTEL_FSP_M:</span><br><span style="color: hsl(120, 100%, 40%);">+                     case ID_CODE_INTEL_MMA:</span><br><span style="color: hsl(120, 100%, 40%);">+                       case ID_CODE_NVIDIA_MTC:</span><br><span style="color: hsl(120, 100%, 40%);">+                      case ID_CODE_QUALCOMM_CDT:</span><br><span style="color: hsl(120, 100%, 40%);">+                    case ID_CODE_QUALCOMM_DDR:</span><br><span style="color: hsl(120, 100%, 40%);">+                    case ID_CODE_QUALCOMM_TZ:</span><br><span style="color: hsl(120, 100%, 40%);">+                     case ID_CODE_QUALCOMM_RPM:</span><br><span style="color: hsl(120, 100%, 40%);">+                    break;</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>diff --git a/src/soc/amd/common/block/pi/def_callouts.c b/src/soc/amd/common/block/pi/def_callouts.c</span><br><span>index c05d4de..8eff384 100644</span><br><span>--- a/src/soc/amd/common/block/pi/def_callouts.c</span><br><span>+++ b/src/soc/amd/common/block/pi/def_callouts.c</span><br><span>@@ -143,6 +143,7 @@</span><br><span>      GFX_VBIOS_IMAGE_INFO *pVbiosImageInfo;</span><br><span> </span><br><span>   pVbiosImageInfo = (GFX_VBIOS_IMAGE_INFO *)ConfigPrt;</span><br><span style="color: hsl(120, 100%, 40%);">+  // TODO FIX ME BLOB</span><br><span>  pVbiosImageInfo->ImagePtr = cbfs_boot_map_with_leak(</span><br><span>                      "pci"CONFIG_VGA_BIOS_ID".rom",</span><br><span>                   CBFS_TYPE_OPTIONROM, NULL);</span><br><span>diff --git a/src/soc/amd/common/block/psp/psp.c b/src/soc/amd/common/block/psp/psp.c</span><br><span>index a1a0e5b..db1d8ae 100644</span><br><span>--- a/src/soc/amd/common/block/psp/psp.c</span><br><span>+++ b/src/soc/amd/common/block/psp/psp.c</span><br><span>@@ -247,16 +247,14 @@</span><br><span> int psp_load_named_blob(int type, const char *name)</span><br><span> {</span><br><span>         void *blob;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct cbfsf cbfs_file;</span><br><span>      struct region_device rdev;</span><br><span>   int r;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (cbfs_boot_locate(&cbfs_file, name, NULL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (blob_provide_rd(BLOB_CODE_AMD_PSP, &rdev)) {</span><br><span>                 printk(BIOS_ERR, "BUG: Cannot locate blob for PSP loading\n");</span><br><span>             return PSPSTS_INVALID_NAME;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cbfs_file_data(&rdev, &cbfs_file);</span><br><span>   blob = rdev_mmap_full(&rdev);</span><br><span>    if (blob) {</span><br><span>          r = psp_load_blob(type, blob);</span><br><span>diff --git a/src/soc/intel/broadwell/romstage/raminit.c b/src/soc/intel/broadwell/romstage/raminit.c</span><br><span>index 665dad2..2d6980e 100644</span><br><span>--- a/src/soc/intel/broadwell/romstage/raminit.c</span><br><span>+++ b/src/soc/intel/broadwell/romstage/raminit.c</span><br><span>@@ -36,6 +36,7 @@</span><br><span> #include <soc/romstage.h></span><br><span> #include <soc/smm.h></span><br><span> #include <soc/systemagent.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> /*</span><br><span>  * Find PEI executable in coreboot filesystem and execute it.</span><br><span>@@ -78,7 +79,7 @@</span><br><span>      }</span><br><span> </span><br><span>        /* Determine if mrc.bin is in the cbfs. */</span><br><span style="color: hsl(0, 100%, 40%);">-      entry = cbfs_boot_map_with_leak("mrc.bin", CBFS_TYPE_MRC, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    entry = blob_provide_map(BLOB_CODE_INTEL_MRC, NULL, NULL);</span><br><span>   if (entry == NULL) {</span><br><span>                 printk(BIOS_DEBUG, "Couldn't find mrc.bin\n");</span><br><span>                 return;</span><br><span>diff --git a/src/soc/intel/common/mma.c b/src/soc/intel/common/mma.c</span><br><span>index 541a7b4..defd421 100644</span><br><span>--- a/src/soc/intel/common/mma.c</span><br><span>+++ b/src/soc/intel/common/mma.c</span><br><span>@@ -19,6 +19,7 @@</span><br><span> #include <cbmem.h></span><br><span> #include <console/console.h></span><br><span> #include <soc/intel/common/mma.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #define MMA_TEST_METADATA_FILENAME       "mma_test_metadata.bin"</span><br><span> #define MMA_TEST_NAME_TAG          "MMA_TEST_NAME"</span><br><span>@@ -118,22 +119,15 @@</span><br><span>    size_t mma_test_metadata_file_len;</span><br><span>   char test_filename[TEST_NAME_MAX_SIZE],</span><br><span>              test_param_filename[TEST_PARAM_MAX_SIZE];</span><br><span style="color: hsl(0, 100%, 40%);">-       struct cbfsf metadata_fh, test_content_fh, test_param_fh;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct cbfsf test_content_fh, test_param_fh;</span><br><span>         uint32_t mma_type = CBFS_TYPE_MMA;</span><br><span>   uint32_t efi_type = CBFS_TYPE_EFI;</span><br><span>   bool metadata_parse_flag = true;</span><br><span> </span><br><span>         printk(BIOS_DEBUG, "MMA: Entry %s\n", __func__);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  if (cbfs_locate_file_in_region(&metadata_fh, MMA_CBFS_REGION,</span><br><span style="color: hsl(0, 100%, 40%);">-                               MMA_TEST_METADATA_FILENAME, &mma_type)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           printk(BIOS_DEBUG, "MMA: Failed to locate %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                              MMA_TEST_METADATA_FILENAME);</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%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       mma_test_metadata = rdev_mmap_full(&metadata_fh.data);</span><br><span style="color: hsl(0, 100%, 40%);">-      mma_test_metadata_file_len = region_device_sz(&metadata_fh.data);</span><br><span style="color: hsl(120, 100%, 40%);">+ mma_test_metadata = blob_provide_map(BLOB_CODE_INTEL_MMA, NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            &mma_test_metadata_file_len);</span><br><span> </span><br><span>   if (!mma_test_metadata || !mma_test_metadata_file_len) {</span><br><span>             printk(BIOS_DEBUG, "MMA: Failed to read %s\n",</span><br><span>diff --git a/src/soc/intel/denverton_ns/chip.c b/src/soc/intel/denverton_ns/chip.c</span><br><span>index a43504c..3495802 100644</span><br><span>--- a/src/soc/intel/denverton_ns/chip.c</span><br><span>+++ b/src/soc/intel/denverton_ns/chip.c</span><br><span>@@ -32,6 +32,7 @@</span><br><span> #include <soc/ramstage.h></span><br><span> #include <soc/fiamux.h></span><br><span> #include <spi-generic.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static void pci_domain_set_resources(device_t dev)</span><br><span> {</span><br><span>@@ -104,8 +105,8 @@</span><br><span>   const struct microcode *microcode_file;</span><br><span>      size_t microcode_len;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       microcode_file = cbfs_boot_map_with_leak("cpu_microcode_blob.bin",</span><br><span style="color: hsl(0, 100%, 40%);">-            CBFS_TYPE_MICROCODE, &microcode_len);</span><br><span style="color: hsl(120, 100%, 40%);">+     microcode_file =</span><br><span style="color: hsl(120, 100%, 40%);">+          blob_provider_map(BLOB_DATA_MICROCODE, NULL, &microcode_len);</span><br><span> </span><br><span>    if ((microcode_file != NULL) && (microcode_len != 0)) {</span><br><span>              /* Update CPU Microcode patch base address/size */</span><br><span>diff --git a/src/soc/intel/fsp_broadwell_de/fsp/chipset_fsp_util.c b/src/soc/intel/fsp_broadwell_de/fsp/chipset_fsp_util.c</span><br><span>index 7a9e8f5..2339cb2 100644</span><br><span>--- a/src/soc/intel/fsp_broadwell_de/fsp/chipset_fsp_util.c</span><br><span>+++ b/src/soc/intel/fsp_broadwell_de/fsp/chipset_fsp_util.c</span><br><span>@@ -60,6 +60,7 @@</span><br><span>      if (IS_ENABLED(CONFIG_FSP_MEMORY_DOWN)) {</span><br><span>            UpdData->MemDownEnable = 1;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+            // TODO FIX ME BLOB</span><br><span>          if (IS_ENABLED(CONFIG_FSP_MEMORY_DOWN_CH0DIMM0_SPD_PRESENT))</span><br><span>                         UpdData->MemDownCh0Dimm0SpdPtr</span><br><span>                    = (UINT32)cbfs_boot_map_with_leak("spd_ch0_dimm0.bin", CBFS_TYPE_SPD, NULL);</span><br><span>diff --git a/src/soc/intel/quark/romstage/romstage.c b/src/soc/intel/quark/romstage/romstage.c</span><br><span>index c5f59c6..8a79184 100644</span><br><span>--- a/src/soc/intel/quark/romstage/romstage.c</span><br><span>+++ b/src/soc/intel/quark/romstage/romstage.c</span><br><span>@@ -23,6 +23,7 @@</span><br><span> #include <soc/pm.h></span><br><span> #include <soc/romstage.h></span><br><span> #include <soc/reg_access.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static const struct reg_script clear_smi_and_wake_events_script[] = {</span><br><span>      /* Clear any SMI or wake events */</span><br><span>@@ -65,29 +66,5 @@</span><br><span> </span><br><span> void *locate_rmu_file(size_t *rmu_file_len)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- struct cbfsf fh;</span><br><span style="color: hsl(0, 100%, 40%);">-        size_t fsize;</span><br><span style="color: hsl(0, 100%, 40%);">-   void *rmu_data;</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t type;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Locate the rmu.bin file in the read-only region of the flash */</span><br><span style="color: hsl(0, 100%, 40%);">-      type = CBFS_TYPE_RAW;</span><br><span style="color: hsl(0, 100%, 40%);">-   if (cbfs_locate_file_in_region(&fh, "COREBOOT", "rmu.bin", &type))</span><br><span style="color: hsl(0, 100%, 40%);">-          return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* Get the file size */</span><br><span style="color: hsl(0, 100%, 40%);">- fsize = region_device_sz(&fh.data);</span><br><span style="color: hsl(0, 100%, 40%);">- if (rmu_file_len != NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-               *rmu_file_len = fsize;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Get the data address */</span><br><span style="color: hsl(0, 100%, 40%);">-      rmu_data = rdev_mmap(&fh.data, 0, fsize);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* Since the SPI flash is directly mapped into memory, we do not need</span><br><span style="color: hsl(0, 100%, 40%);">-    * the mapping provided by the rdev service.  Unmap the file to prevent</span><br><span style="color: hsl(0, 100%, 40%);">-  * a memory leak.  Return/leak the SPI flash address for the rmu.bin</span><br><span style="color: hsl(0, 100%, 40%);">-     * file data which will be directly accessed by FSP MemoryInit.</span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">-     rdev_munmap(&fh.data, rmu_data);</span><br><span style="color: hsl(0, 100%, 40%);">-    return rmu_data;</span><br><span style="color: hsl(120, 100%, 40%);">+      return blob_provide_map(BLOB_DATA_MICROCODE_RMU, NULL, rmu_file_len);</span><br><span> }</span><br><span>diff --git a/src/soc/nvidia/tegra210/mtc.c b/src/soc/nvidia/tegra210/mtc.c</span><br><span>index f71e5e8..f0ff969 100644</span><br><span>--- a/src/soc/nvidia/tegra210/mtc.c</span><br><span>+++ b/src/soc/nvidia/tegra210/mtc.c</span><br><span>@@ -18,6 +18,7 @@</span><br><span> #include <console/console.h></span><br><span> #include <soc/mtc.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> static size_t mtc_table_size;</span><br><span> </span><br><span>@@ -28,26 +29,23 @@</span><br><span> int tegra210_run_mtc(void)</span><br><span> {</span><br><span>         ssize_t nread;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct region_device fh;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct cbfsf mtc_file;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct region_device mtc_file;</span><br><span> </span><br><span>   void * const mtc = (void *)(uintptr_t)CONFIG_MTC_ADDRESS;</span><br><span>    void *dvfs_table;</span><br><span>    size_t (*mtc_fw)(void **dvfs_table) = (void *)mtc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  if (cbfs_boot_locate(&mtc_file, "tegra_mtc.bin", NULL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (blob_provide_rd(BLOB_CODE_NVIDIA_MTC, &mtc_file)) {</span><br><span>          printk(BIOS_ERR, "MTC file not found: tegra_mtc.bin\n");</span><br><span>           return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cbfs_file_data(&fh, &mtc_file);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>      /* Read MTC file into predefined region. */</span><br><span style="color: hsl(0, 100%, 40%);">-     nread = rdev_readat(&fh, mtc, 0, region_device_sz(&fh));</span><br><span style="color: hsl(120, 100%, 40%);">+      nread = rdev_readat(&mtc_file, mtc, 0, region_device_sz(&mtc_file));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (nread != region_device_sz(&fh)) {</span><br><span style="color: hsl(120, 100%, 40%);">+     if (nread != region_device_sz(&mtc_file)) {</span><br><span>              printk(BIOS_ERR, "MTC bytes read (%zu) != file length(%zu)!\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      nread, region_device_sz(&fh));</span><br><span style="color: hsl(120, 100%, 40%);">+                    nread, region_device_sz(&mtc_file));</span><br><span>              return -1;</span><br><span>   }</span><br><span> </span><br><span>diff --git a/src/soc/qualcomm/ipq40xx/blobs_init.c b/src/soc/qualcomm/ipq40xx/blobs_init.c</span><br><span>index 77c0289..dae9563 100644</span><br><span>--- a/src/soc/qualcomm/ipq40xx/blobs_init.c</span><br><span>+++ b/src/soc/qualcomm/ipq40xx/blobs_init.c</span><br><span>@@ -25,6 +25,7 @@</span><br><span> </span><br><span> #include <soc/iomap.h></span><br><span> #include <soc/soc_services.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "mbn_header.h"</span><br><span> </span><br><span>@@ -33,14 +34,13 @@</span><br><span>   uint8_t         *cdt_ptr;       /* pointer to CDT */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void *load_ipq_blob(const char *file_name)</span><br><span style="color: hsl(120, 100%, 40%);">+static void *load_ipq_blob(blob_locator identifier)</span><br><span> {</span><br><span>    struct mbn_header *blob_mbn;</span><br><span>         void *blob_dest;</span><br><span>     size_t blob_size;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   blob_mbn = cbfs_boot_map_with_leak(file_name, CBFS_TYPE_RAW,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            &blob_size);</span><br><span style="color: hsl(120, 100%, 40%);">+      blob_mbn = blob_provide_map(identifier, NULL, &blob_size);</span><br><span>       if (!blob_mbn)</span><br><span>               return NULL;</span><br><span> </span><br><span>@@ -91,8 +91,8 @@</span><br><span> </span><br><span>     sbl_rw_ret_info_t (*(*ddr_init_function)(struct cdt_info *cdt_header));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     cdt = load_ipq_blob(CONFIG_CDT_MBN);</span><br><span style="color: hsl(0, 100%, 40%);">-    ddr_init_function = load_ipq_blob(CONFIG_DDR_MBN);</span><br><span style="color: hsl(120, 100%, 40%);">+    cdt = load_ipq_blob(BLOB_CODE_QUALCOMM_CDT);</span><br><span style="color: hsl(120, 100%, 40%);">+  ddr_init_function = load_ipq_blob(BLOB_CODE_QUALCOMM_DDR);</span><br><span> </span><br><span>       if (!cdt || !ddr_init_function) {</span><br><span>            printk(BIOS_ERR, "cdt: %p, ddr_init_function: %p\n",</span><br><span>@@ -126,7 +126,7 @@</span><br><span> #else  /* __PRE_RAM__ */</span><br><span> void start_tzbsp(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- void *tzbsp = load_ipq_blob(CONFIG_TZ_MBN);</span><br><span style="color: hsl(120, 100%, 40%);">+   void *tzbsp = load_ipq_blob(BLOB_CODE_QUALCOMM_TZ);</span><br><span> </span><br><span>      if (!tzbsp)</span><br><span>          die("could not find or map TZBSP\n");</span><br><span>diff --git a/src/soc/qualcomm/ipq806x/blobs_init.c b/src/soc/qualcomm/ipq806x/blobs_init.c</span><br><span>index 5b19fc1..f3186e7 100644</span><br><span>--- a/src/soc/qualcomm/ipq806x/blobs_init.c</span><br><span>+++ b/src/soc/qualcomm/ipq806x/blobs_init.c</span><br><span>@@ -23,17 +23,17 @@</span><br><span> </span><br><span> #include <soc/iomap.h></span><br><span> #include <soc/soc_services.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #include "mbn_header.h"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void *load_ipq_blob(const char *file_name)</span><br><span style="color: hsl(120, 100%, 40%);">+static void *load_ipq_blob(blob_locator identifier)</span><br><span> {</span><br><span>  struct mbn_header *blob_mbn;</span><br><span>         void *blob_dest;</span><br><span>     size_t blob_size;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   blob_mbn = cbfs_boot_map_with_leak(file_name, CBFS_TYPE_RAW,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            &blob_size);</span><br><span style="color: hsl(120, 100%, 40%);">+      blob_mbn = blob_provide_map(identifier, NULL, &blob_size);</span><br><span>       if (!blob_mbn)</span><br><span>               return NULL;</span><br><span> </span><br><span>@@ -67,8 +67,8 @@</span><br><span>         void *cdt;</span><br><span>   int (*ddr_init_function)(void *cdt_header);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cdt = load_ipq_blob("cdt.mbn");</span><br><span style="color: hsl(0, 100%, 40%);">-       ddr_init_function = load_ipq_blob("ddr.mbn");</span><br><span style="color: hsl(120, 100%, 40%);">+       cdt = load_ipq_blob(BLOB_CODE_QUALCOMM_CDT);</span><br><span style="color: hsl(120, 100%, 40%);">+  ddr_init_function = load_ipq_blob(BLOB_CODE_QUALCOMM_DDR);</span><br><span> </span><br><span>       if (!cdt || !ddr_init_function) {</span><br><span>            printk(BIOS_ERR, "cdt: %p, ddr_init_function: %p\n",</span><br><span>@@ -93,7 +93,7 @@</span><br><span> </span><br><span> void start_tzbsp(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   void *tzbsp = load_ipq_blob("tz.mbn");</span><br><span style="color: hsl(120, 100%, 40%);">+      void *tzbsp = load_ipq_blob(BLOB_CODE_QUALCOMM_TZ);</span><br><span> </span><br><span>      if (!tzbsp)</span><br><span>          die("could not find or map TZBSP\n");</span><br><span>@@ -118,7 +118,7 @@</span><br><span>                return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   load_addr = (u32) load_ipq_blob("rpm.mbn");</span><br><span style="color: hsl(120, 100%, 40%);">+ load_addr = (u32) load_ipq_blob(BLOB_CODE_QUALCOMM_RPM);</span><br><span>     if (!load_addr)</span><br><span>              die("could not find or map RPM code\n");</span><br><span> </span><br><span>diff --git a/src/vendorcode/siemens/hwilib/hwilib.c b/src/vendorcode/siemens/hwilib/hwilib.c</span><br><span>index f15937b..c139771 100644</span><br><span>--- a/src/vendorcode/siemens/hwilib/hwilib.c</span><br><span>+++ b/src/vendorcode/siemens/hwilib/hwilib.c</span><br><span>@@ -19,7 +19,7 @@</span><br><span> #include <arch/io.h></span><br><span> #include <arch/early_variables.h></span><br><span> #include "hwilib.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+#include <blob_provider.h></span><br><span> </span><br><span> #define MAX_BLOCK_NUM                4</span><br><span> #define LEN_HIB                    0x1fd</span><br><span>@@ -463,7 +463,7 @@</span><br><span>  * @param  *hwi_filename Name of the cbfs-file to use.</span><br><span>  * @return                     CB_SUCCESS when no error, otherwise error code</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-enum cb_err hwilib_find_blocks (const char *hwi_filename)</span><br><span style="color: hsl(120, 100%, 40%);">+enum cb_err hwilib_find_blocks ()</span><br><span> {</span><br><span>       uint8_t *ptr = NULL, *base = NULL;</span><br><span>   uint32_t next_offset = 1;</span><br><span>@@ -471,13 +471,9 @@</span><br><span>     uint16_t *all_blk_size_ptr = car_get_var_ptr(&all_blk_size[0]);</span><br><span>  size_t filesize = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* Check for a valid parameter */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!hwi_filename)</span><br><span style="color: hsl(0, 100%, 40%);">-              return CB_ERR_ARG;</span><br><span style="color: hsl(0, 100%, 40%);">-      ptr = cbfs_boot_map_with_leak(hwi_filename, CBFS_TYPE_RAW, &filesize);</span><br><span style="color: hsl(120, 100%, 40%);">+    ptr = blob_provide_map(BLOB_DATA_SIEMENS_HWLIB, NULL, &filesize);</span><br><span>        if (!ptr) {</span><br><span style="color: hsl(0, 100%, 40%);">-             printk(BIOS_ERR,"HWILIB: Missing file \"%s\" in cbfs.\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                   hwi_filename);</span><br><span style="color: hsl(120, 100%, 40%);">+                printk(BIOS_ERR,"HWILIB: Missing file HWLIB in cbfs.\n");</span><br><span>          return CB_ERR;</span><br><span>       }</span><br><span>    /* Ensure the block has the right magic */</span><br><span>diff --git a/src/vendorcode/siemens/hwilib/hwilib.h b/src/vendorcode/siemens/hwilib/hwilib.h</span><br><span>index 6850f07..1297c6f 100644</span><br><span>--- a/src/vendorcode/siemens/hwilib/hwilib.h</span><br><span>+++ b/src/vendorcode/siemens/hwilib/hwilib.h</span><br><span>@@ -131,7 +131,7 @@</span><br><span> /* Use this function to find all supported blocks in cbfs. It must be called</span><br><span>  * once with a valid cbfs file name before hwilib_get_field() can be used.</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-enum cb_err hwilib_find_blocks (const char *hwi_filename);</span><br><span style="color: hsl(120, 100%, 40%);">+enum cb_err hwilib_find_blocks ();</span><br><span> </span><br><span> /* Use this function to get fields out of supported info blocks</span><br><span>  * This function returns the number of copied bytes or 0 on error.</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/24942">change 24942</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/24942"/><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: I8f161f680cb36fa6481a8bce6cf233263a828bf7 </div>
<div style="display:none"> Gerrit-Change-Number: 24942 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Philipp Deppenwiese <zaolin.daisuki@gmail.com> </div>