From: Matthias Fuchs <matthias.fu...@esd.eu>

This patch fixes the PMC440 BSP command painit. The implementation was
broken since the step to the new environment handling.

Signed-off-by: Matthias Fuchs <matthias.fu...@esd.eu>
---
 board/esd/pmc440/cmd_pmc440.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/board/esd/pmc440/cmd_pmc440.c b/board/esd/pmc440/cmd_pmc440.c
index 200d7ee..3bcf2b0 100644
--- a/board/esd/pmc440/cmd_pmc440.c
+++ b/board/esd/pmc440/cmd_pmc440.c
@@ -342,7 +342,8 @@ U_BOOT_CMD(
 
 #if defined(CONFIG_PRAM)
 #include <environment.h>
-extern env_t *env_ptr;
+#include <search.h>
+#include <errno.h>
 
 int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
@@ -351,6 +352,10 @@ int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * 
const argv[])
        u32 param;
        ulong *lptr;
 
+       env_t *envp;
+       char *res;
+       int len;
+
        v = getenv("pram");
        if (v)
                pram = simple_strtoul(v, NULL, 10);
@@ -384,7 +389,15 @@ int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * 
const argv[])
 
        /* env is first (4k aligned) */
        nextbase -= ((CONFIG_ENV_SIZE + 4096 - 1) & ~(4096 - 1));
-       memcpy((void*)nextbase, env_ptr, CONFIG_ENV_SIZE);
+       envp = (env_t *)nextbase;
+       res = (char *)envp->data;
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+        if (len < 0) {
+                error("Cannot export environment: errno = %d\n", errno);
+                return 1;
+        }
+       envp->crc = crc32(0, envp->data, ENV_SIZE);
+
        *(--lptr) = CONFIG_ENV_SIZE;     /* size */
        *(--lptr) = base - nextbase;  /* offset | type=0 */
 
-- 
1.6.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to