]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
env_mmc: fix buffer allocation for armv7
authorMarkus Niebel <Markus.Niebel@tqs.de>
Fri, 4 Oct 2013 13:48:03 +0000 (15:48 +0200)
committerTom Rini <trini@ti.com>
Mon, 14 Oct 2013 20:06:52 +0000 (16:06 -0400)
commit d196bd880347373237d73e0d115b4d51c68cf2ad adds
redundand environment to mmc. The usage of malloc in
env_relocate_spec triggers cache errors on armv7.

Tested on a not mainlined i.MX53 board:

Board: TQMa53
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
ERROR: v7_dcache_inval_range - start address is not aligned - 0x8f57c2d8
ERROR: v7_dcache_inval_range - stop address is not aligned - 0x8f57e2d8
ERROR: v7_dcache_inval_range - start address is not aligned - 0x8f57e2e0
ERROR: v7_dcache_inval_range - stop address is not aligned - 0x8f5802e0
Using default environment

Signed-off-by: Markus Niebel <Markus.Niebel@tqs.de>
common/env_mmc.c

index 65aafa9cac26472abc4d9707e88d42361eadef5f..204d23b31a89e88ee22582964cd56681c66cabd8 100644 (file)
@@ -192,11 +192,12 @@ void env_relocate_spec(void)
        u32 offset1, offset2;
        int read1_fail = 0, read2_fail = 0;
        int crc1_ok = 0, crc2_ok = 0;
        u32 offset1, offset2;
        int read1_fail = 0, read2_fail = 0;
        int crc1_ok = 0, crc2_ok = 0;
-       env_t *ep, *tmp_env1, *tmp_env2;
+       env_t *ep;
        int ret;
 
        int ret;
 
-       tmp_env1 = (env_t *)malloc(CONFIG_ENV_SIZE);
-       tmp_env2 = (env_t *)malloc(CONFIG_ENV_SIZE);
+       ALLOC_CACHE_ALIGN_BUFFER(env_t, tmp_env1, 1);
+       ALLOC_CACHE_ALIGN_BUFFER(env_t, tmp_env2, 1);
+
        if (tmp_env1 == NULL || tmp_env2 == NULL) {
                puts("Can't allocate buffers for environment\n");
                ret = 1;
        if (tmp_env1 == NULL || tmp_env2 == NULL) {
                puts("Can't allocate buffers for environment\n");
                ret = 1;
@@ -266,8 +267,6 @@ err:
        if (ret)
                set_default_env(NULL);
 
        if (ret)
                set_default_env(NULL);
 
-       free(tmp_env1);
-       free(tmp_env2);
 #endif
 }
 #else /* ! CONFIG_ENV_OFFSET_REDUND */
 #endif
 }
 #else /* ! CONFIG_ENV_OFFSET_REDUND */