|
@@ -40,13 +40,13 @@ static int is_mrc_cache(struct mrc_data_container *cache)
|
|
|
return cache && (cache->signature == MRC_DATA_SIGNATURE);
|
|
|
}
|
|
|
|
|
|
-struct mrc_data_container *mrccache_find_current(struct fmap_entry *entry)
|
|
|
+struct mrc_data_container *mrccache_find_current(struct mrc_region *entry)
|
|
|
{
|
|
|
struct mrc_data_container *cache, *next;
|
|
|
ulong base_addr, end_addr;
|
|
|
uint id;
|
|
|
|
|
|
- base_addr = (1ULL << 32) - CONFIG_ROM_SIZE + entry->offset;
|
|
|
+ base_addr = entry->base + entry->offset;
|
|
|
end_addr = base_addr + entry->length;
|
|
|
cache = NULL;
|
|
|
|
|
@@ -85,12 +85,12 @@ struct mrc_data_container *mrccache_find_current(struct fmap_entry *entry)
|
|
|
*
|
|
|
* @return next cache entry if found, NULL if we got to the end
|
|
|
*/
|
|
|
-static struct mrc_data_container *find_next_mrc_cache(struct fmap_entry *entry,
|
|
|
+static struct mrc_data_container *find_next_mrc_cache(struct mrc_region *entry,
|
|
|
struct mrc_data_container *cache)
|
|
|
{
|
|
|
ulong base_addr, end_addr;
|
|
|
|
|
|
- base_addr = (1ULL << 32) - CONFIG_ROM_SIZE + entry->offset;
|
|
|
+ base_addr = entry->base + entry->offset;
|
|
|
end_addr = base_addr + entry->length;
|
|
|
|
|
|
cache = next_mrc_block(cache);
|
|
@@ -106,7 +106,7 @@ static struct mrc_data_container *find_next_mrc_cache(struct fmap_entry *entry,
|
|
|
return cache;
|
|
|
}
|
|
|
|
|
|
-int mrccache_update(struct udevice *sf, struct fmap_entry *entry,
|
|
|
+int mrccache_update(struct udevice *sf, struct mrc_region *entry,
|
|
|
struct mrc_data_container *cur)
|
|
|
{
|
|
|
struct mrc_data_container *cache;
|
|
@@ -118,7 +118,7 @@ int mrccache_update(struct udevice *sf, struct fmap_entry *entry,
|
|
|
return -EINVAL;
|
|
|
|
|
|
/* Find the last used block */
|
|
|
- base_addr = (1ULL << 32) - CONFIG_ROM_SIZE + entry->offset;
|
|
|
+ base_addr = entry->base + entry->offset;
|
|
|
debug("Updating MRC cache data\n");
|
|
|
cache = mrccache_find_current(entry);
|
|
|
if (cache && (cache->data_size == cur->data_size) &&
|
|
@@ -189,10 +189,11 @@ int mrccache_reserve(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int mrccache_get_region(struct udevice **devp, struct fmap_entry *entry)
|
|
|
+int mrccache_get_region(struct udevice **devp, struct mrc_region *entry)
|
|
|
{
|
|
|
const void *blob = gd->fdt_blob;
|
|
|
int node, mrc_node;
|
|
|
+ u32 reg[2];
|
|
|
int ret;
|
|
|
|
|
|
/* Find the flash chip within the SPI controller node */
|
|
@@ -200,13 +201,19 @@ int mrccache_get_region(struct udevice **devp, struct fmap_entry *entry)
|
|
|
if (node < 0)
|
|
|
return -ENOENT;
|
|
|
|
|
|
+ if (fdtdec_get_int_array(blob, node, "memory-map", reg, 2))
|
|
|
+ return -FDT_ERR_NOTFOUND;
|
|
|
+ entry->base = reg[0];
|
|
|
+
|
|
|
/* Find the place where we put the MRC cache */
|
|
|
mrc_node = fdt_subnode_offset(blob, node, "rw-mrc-cache");
|
|
|
if (mrc_node < 0)
|
|
|
return -EPERM;
|
|
|
|
|
|
- if (fdtdec_read_fmap_entry(blob, mrc_node, "rm-mrc-cache", entry))
|
|
|
- return -EINVAL;
|
|
|
+ if (fdtdec_get_int_array(blob, mrc_node, "reg", reg, 2))
|
|
|
+ return -FDT_ERR_NOTFOUND;
|
|
|
+ entry->offset = reg[0];
|
|
|
+ entry->length = reg[1];
|
|
|
|
|
|
if (devp) {
|
|
|
ret = uclass_get_device_by_of_offset(UCLASS_SPI_FLASH, node,
|
|
@@ -222,7 +229,7 @@ int mrccache_get_region(struct udevice **devp, struct fmap_entry *entry)
|
|
|
int mrccache_save(void)
|
|
|
{
|
|
|
struct mrc_data_container *data;
|
|
|
- struct fmap_entry entry;
|
|
|
+ struct mrc_region entry;
|
|
|
struct udevice *sf;
|
|
|
int ret;
|
|
|
|