x86: Add a new global_data member for the cache record
authorSimon Glass <sjg@chromium.org>
Sat, 7 Dec 2019 04:42:05 +0000 (21:42 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Sun, 15 Dec 2019 03:44:13 +0000 (11:44 +0800)
At present we reuse the mrc_output char * to also point to the cache
record after it has been set up. This is confusing and doesn't save much
data space.

Add a new mrc_cache member instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/include/asm/global_data.h
arch/x86/lib/mrccache.c

index 0e7b946205b5a44bf1e45f112675458de227ce9a..3212b006eb4d66fe2e32c771e512341b3c69036c 100644 (file)
@@ -10,6 +10,7 @@
 #ifndef __ASSEMBLY__
 
 #include <asm/processor.h>
+#include <asm/mrccache.h>
 
 enum pei_boot_mode_t {
        PEI_BOOT_NONE = 0,
@@ -93,6 +94,7 @@ struct arch_global_data {
        /* MRC training data to save for the next boot */
        char *mrc_output;
        unsigned int mrc_output_len;
+       struct mrc_data_container *mrc_cache;
        ulong table;                    /* Table pointer from previous loader */
        int turbo_state;                /* Current turbo state */
        struct irq_routing_table *pirq_routing_table;
index 7136166be60966c839135c11ab0fa774ade3f7e0..6e561fe5286dc196f2b21221c6ebc54261276cee 100644 (file)
@@ -188,8 +188,7 @@ static void mrccache_setup(void *data)
        cache->reserved = 0;
        memcpy(cache->data, gd->arch.mrc_output, cache->data_size);
 
-       /* gd->arch.mrc_output now points to the container */
-       gd->arch.mrc_output = (char *)cache;
+       gd->arch.mrc_cache = cache;
 }
 
 int mrccache_reserve(void)
@@ -255,7 +254,7 @@ int mrccache_get_region(struct udevice **devp, struct mrc_region *entry)
 
 int mrccache_save(void)
 {
-       struct mrc_data_container *data;
+       struct mrc_data_container *cache;
        struct mrc_region entry;
        struct udevice *sf;
        int ret;
@@ -271,10 +270,10 @@ int mrccache_save(void)
        ret = device_probe(sf);
        if (ret)
                goto err_entry;
-       data  = (struct mrc_data_container *)gd->arch.mrc_output;
-       ret = mrccache_update(sf, &entry, data);
+       cache = gd->arch.mrc_cache;
+       ret = mrccache_update(sf, &entry, cache);
        if (!ret) {
-               debug("Saved MRC data with checksum %04x\n", data->checksum);
+               debug("Saved MRC data with checksum %04x\n", cache->checksum);
        } else if (ret == -EEXIST) {
                debug("MRC data is the same as last time, skipping save\n");
                ret = 0;