int mrccache_save(void) { struct mrc_data_container *data; struct mrc_region entry; struct udevice *sf; int ret; if (!gd->arch.mrc_output_len) return 0; debug("Saving %d bytes of MRC output data to SPI flash\n", gd->arch.mrc_output_len); ret = mrccache_get_region(&sf, &entry); if (ret) goto err_entry; data = (struct mrc_data_container *)gd->arch.mrc_output; ret = mrccache_update(sf, &entry, data); if (!ret) debug("Saved MRC data with checksum %04x\n", data->checksum); err_entry: if (ret) debug("%s: Failed: %d\n", __func__, ret); return ret; }
static __maybe_unused void *fsp_prepare_mrc_cache(void) { struct mrc_data_container *cache; struct mrc_region entry; int ret; ret = mrccache_get_region(NULL, &entry); if (ret) return NULL; cache = mrccache_find_current(&entry); if (!cache) return NULL; debug("%s: mrc cache at %p, size %x checksum %04x\n", __func__, cache->data, cache->data_size, cache->checksum); return cache->data; }
static int prepare_mrc_cache(struct pei_data *pei_data) { struct mrc_data_container *mrc_cache; struct mrc_region entry; int ret; ret = mrccache_get_region(NULL, &entry); if (ret) return ret; mrc_cache = mrccache_find_current(&entry); if (!mrc_cache) return -ENOENT; pei_data->saved_data = mrc_cache->data; pei_data->saved_data_size = mrc_cache->data_size; debug("%s: at %p, size %x checksum %04x\n", __func__, pei_data->saved_data, pei_data->saved_data_size, mrc_cache->checksum); return 0; }