aboutsummaryrefslogtreecommitdiff
path: root/common/env_nvram.c
diff options
context:
space:
mode:
authorwdenk <wdenk>2002-12-07 00:20:59 +0000
committerwdenk <wdenk>2002-12-07 00:20:59 +0000
commit7c7a23bd5a0bc149d2edd665ec46381726b24e0c (patch)
treed859f82ea2561180db2ffd7569f0b9007d710769 /common/env_nvram.c
parent1f53a41603b9093c59741f4208fef0ab3790d6ce (diff)
downloadu-boot-linaro-stable-7c7a23bd5a0bc149d2edd665ec46381726b24e0c.tar.gz
* Patch by Hans-Joerg Frieden, 06 Dec 2002LABEL_2002_12_07_0120
Fix misc problems with AmigaOne support * Patch by Chris Hallinan, 3 Dec 2002: minor cleanup to the MPC8245 EPIC driver * Patch by Pierre Aubert , 28 Nov 2002 Add support for external (SIU) interrupts on MPC8xx * Patch by Pierre Aubert , 28 Nov 2002 Fix nested syscalls bug in standalone applications * Patch by David Müller, 27 Nov 2002: fix output of "pciinfo" command for CardBus bridge devices. * Fix bug in TQM8260 board detection - boards got stuck when board ID was not readable
Diffstat (limited to 'common/env_nvram.c')
-rw-r--r--common/env_nvram.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/common/env_nvram.c b/common/env_nvram.c
index fdfa4fcb6..76e84383d 100644
--- a/common/env_nvram.c
+++ b/common/env_nvram.c
@@ -66,7 +66,25 @@ extern int default_environment_size;
extern uchar (*env_get_char)(int);
extern uchar env_get_char_memory (int index);
+#ifdef CONFIG_AMIGAONEG3SE
+uchar env_get_char_spec (int index)
+{
+#ifdef CFG_NVRAM_ACCESS_ROUTINE
+ uchar c;
+
+ nvram_read(&c, CFG_ENV_ADDR+index, 1);
+ return c;
+#else
+ DECLARE_GLOBAL_DATA_PTR;
+ uchar retval;
+ enable_nvram();
+ retval = *((uchar *)(gd->env_addr + index));
+ disable_nvram();
+ return retval;
+#endif
+}
+#else
uchar env_get_char_spec (int index)
{
#ifdef CFG_NVRAM_ACCESS_ROUTINE
@@ -81,6 +99,7 @@ uchar env_get_char_spec (int index)
return *((uchar *)(gd->env_addr + index));
#endif
}
+#endif
void env_relocate_spec (void)
{
@@ -94,13 +113,19 @@ void env_relocate_spec (void)
int saveenv (void)
{
int rcode = 0;
-
+#ifdef CONFIG_AMIGAONEG3SE
+ enable_nvram();
+#endif
#ifdef CFG_NVRAM_ACCESS_ROUTINE
nvram_write(CFG_ENV_ADDR, env_ptr, CFG_ENV_SIZE);
#else
if (memcpy ((char *)CFG_ENV_ADDR, env_ptr, CFG_ENV_SIZE) == NULL)
rcode = 1 ;
#endif
+#ifdef CONFIG_AMIGAONEG3SE
+ udelay(10000);
+ disable_nvram();
+#endif
return rcode;
}
@@ -113,7 +138,9 @@ int saveenv (void)
int env_init (void)
{
DECLARE_GLOBAL_DATA_PTR;
-
+#ifdef CONFIG_AMIGAONEG3SE
+ enable_nvram();
+#endif
#if defined(CFG_NVRAM_ACCESS_ROUTINE)
ulong crc;
uchar data[ENV_SIZE];
@@ -131,7 +158,9 @@ int env_init (void)
gd->env_addr = (ulong)&default_environment[0];
gd->env_valid = 0;
}
-
+#ifdef CONFIG_AMIGAONEG3SE
+ disable_nvram();
+#endif
return (0);
}