summaryrefslogtreecommitdiff
path: root/board/keymile/common
diff options
context:
space:
mode:
authorHeiko Schocher <hs@denx.de>2010-04-26 13:07:28 +0200
committerWolfgang Denk <wd@denx.de>2011-04-30 00:45:22 +0200
commitf1fef1d8a141e0b4e4520d66e162c06ff047bd16 (patch)
tree41b7f4a2fd983b3472816ad6e613c72c97a482dd /board/keymile/common
parent0d01520200f3bb0686567134bc2e7bb940009559 (diff)
keymile, common: add setting of some environment variables
This patch adds last_stage_init to all keymile boards. And in the last stage init some environment variables for u-boot were set. Currently these are pnvramaddr, pram and var address. Signed-off-by: Holger Brunck <holger.brunck@keymile.com> Signed-off-by: Heiko Schocher <hs@denx.de> Acked-by: Kim Phillips <kim.phillips@freescale.com> cc: Valentin Longchamp <valentin.longchamp@keymile.com> cc: Wolfgang Denk <wd@denx.de> cc: Kim Phillips <kim.phillips@freescale.com>
Diffstat (limited to 'board/keymile/common')
-rw-r--r--board/keymile/common/common.c36
-rw-r--r--board/keymile/common/common.h1
2 files changed, 37 insertions, 0 deletions
diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index 8392a6413e..4883fe588b 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -42,6 +42,7 @@
static void i2c_write_start_seq(void);
static int i2c_make_abort(void);
+DECLARE_GLOBAL_DATA_PTR;
int ivm_calc_crc(unsigned char *buf, int len)
{
@@ -73,6 +74,41 @@ int ivm_calc_crc(unsigned char *buf, int len)
return crc;
}
+/*
+ * Set Keymile specific environment variables
+ * Currently only some memory layout variables are calculated here
+ * ... ------------------------------------------------
+ * ... |@rootfsaddr |@pnvramaddr |@varaddr |@reserved |@END_OF_RAM
+ * ... |<------------------- pram ------------------->|
+ * ... ------------------------------------------------
+ * @END_OF_RAM: denotes the RAM size
+ * @pnvramaddr: Startadress of pseudo non volatile RAM in hex
+ * @pram : preserved ram size in k
+ * @varaddr : startadress for /var mounted into RAM
+ */
+int set_km_env(void)
+{
+ uchar buf[32];
+ unsigned int pnvramaddr;
+ unsigned int pram;
+ unsigned int varaddr;
+
+ pnvramaddr = gd->ram_size - CONFIG_KM_RESERVED_PRAM - CONFIG_KM_PHRAM
+ - CONFIG_KM_PNVRAM;
+ sprintf((char *)buf, "0x%x", pnvramaddr);
+ setenv("pnvramaddr", (char *)buf);
+
+ pram = (CONFIG_KM_RESERVED_PRAM + CONFIG_KM_PHRAM + CONFIG_KM_PNVRAM) /
+ 0x400;
+ sprintf((char *)buf, "0x%x", pram);
+ setenv("pram", (char *)buf);
+
+ varaddr = gd->ram_size - CONFIG_KM_RESERVED_PRAM - CONFIG_KM_PHRAM;
+ sprintf((char *)buf, "0x%x", varaddr);
+ setenv("varaddr", (char *)buf);
+ return 0;
+}
+
static int ivm_set_value(char *name, char *value)
{
char tempbuf[256];
diff --git a/board/keymile/common/common.h b/board/keymile/common/common.h
index e32de8d9fa..099de98c6d 100644
--- a/board/keymile/common/common.h
+++ b/board/keymile/common/common.h
@@ -50,6 +50,7 @@ int ivm_read_eeprom(void);
int keymile_hdlc_enet_initialize(bd_t *bis);
#endif
+int set_km_env(void);
int fdt_set_node_and_value(void *blob,
char *nodename,
char *regname,