summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2008-07-18 11:03:35 +0200
committerWolfgang Denk <wd@denx.de>2008-07-20 23:00:22 +0200
commit86446d3a5d9d3ca81e85d1ccd3accaaae6f8e3c9 (patch)
tree8bfd93d7e9c37dee1d24637ea93c72182f164aae
parent97a3bf268d096e0e97e54048448c35114edcf557 (diff)
downloadu-boot-imx-86446d3a5d9d3ca81e85d1ccd3accaaae6f8e3c9.zip
u-boot-imx-86446d3a5d9d3ca81e85d1ccd3accaaae6f8e3c9.tar.gz
u-boot-imx-86446d3a5d9d3ca81e85d1ccd3accaaae6f8e3c9.tar.bz2
POST: Add disable interrupts in some of the missing CPU POST tests
Some CPU POST tests did not disable the interrupts while running. This seems to be necessary to protect this self modifying code. Signed-off-by: Stefan Roese <sr@denx.de>
-rw-r--r--post/lib_ppc/b.c4
-rw-r--r--post/lib_ppc/cmp.c4
-rw-r--r--post/lib_ppc/cmpi.c4
-rw-r--r--post/lib_ppc/complex.c4
-rw-r--r--post/lib_ppc/cr.c4
-rw-r--r--post/lib_ppc/load.c4
-rw-r--r--post/lib_ppc/multi.c4
-rw-r--r--post/lib_ppc/store.c4
-rw-r--r--post/lib_ppc/string.c4
9 files changed, 36 insertions, 0 deletions
diff --git a/post/lib_ppc/b.c b/post/lib_ppc/b.c
index 45b9ff2..7a2583d 100644
--- a/post/lib_ppc/b.c
+++ b/post/lib_ppc/b.c
@@ -95,6 +95,7 @@ int cpu_post_test_b (void)
{
int ret = 0;
unsigned int i;
+ int flag = disable_interrupts();
if (ret == 0)
{
@@ -188,6 +189,9 @@ int cpu_post_test_b (void)
}
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/cmp.c b/post/lib_ppc/cmp.c
index 8d80f86..13809d4 100644
--- a/post/lib_ppc/cmp.c
+++ b/post/lib_ppc/cmp.c
@@ -102,6 +102,7 @@ int cpu_post_test_cmp (void)
{
int ret = 0;
unsigned int i;
+ int flag = disable_interrupts();
for (i = 0; i < cpu_post_cmp_size && ret == 0; i++)
{
@@ -124,6 +125,9 @@ int cpu_post_test_cmp (void)
}
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/cmpi.c b/post/lib_ppc/cmpi.c
index 92b4d57..5ecfe87 100644
--- a/post/lib_ppc/cmpi.c
+++ b/post/lib_ppc/cmpi.c
@@ -102,6 +102,7 @@ int cpu_post_test_cmpi (void)
{
int ret = 0;
unsigned int i;
+ int flag = disable_interrupts();
for (i = 0; i < cpu_post_cmpi_size && ret == 0; i++)
{
@@ -124,6 +125,9 @@ int cpu_post_test_cmpi (void)
}
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/complex.c b/post/lib_ppc/complex.c
index 271392a..4983c51 100644
--- a/post/lib_ppc/complex.c
+++ b/post/lib_ppc/complex.c
@@ -101,6 +101,7 @@ static int cpu_post_test_complex_2 (void)
int cpu_post_test_complex (void)
{
int ret = 0;
+ int flag = disable_interrupts();
if (ret == 0)
{
@@ -117,6 +118,9 @@ int cpu_post_test_complex (void)
post_log ("Error at complex test !\n");
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/cr.c b/post/lib_ppc/cr.c
index 0bd9e74..2c7976a 100644
--- a/post/lib_ppc/cr.c
+++ b/post/lib_ppc/cr.c
@@ -248,6 +248,7 @@ int cpu_post_test_cr (void)
int ret = 0;
unsigned int i;
unsigned long cr_sav;
+ int flag = disable_interrupts();
asm ( "mfcr %0" : "=r" (cr_sav) : );
@@ -347,6 +348,9 @@ int cpu_post_test_cr (void)
asm ( "mtcr %0" : : "r" (cr_sav));
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/load.c b/post/lib_ppc/load.c
index 86bc223..eccebb7 100644
--- a/post/lib_ppc/load.c
+++ b/post/lib_ppc/load.c
@@ -178,6 +178,7 @@ int cpu_post_test_load (void)
{
int ret = 0;
unsigned int i;
+ int flag = disable_interrupts();
for (i = 0; i < cpu_post_load_size && ret == 0; i++)
{
@@ -246,6 +247,9 @@ int cpu_post_test_load (void)
}
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/multi.c b/post/lib_ppc/multi.c
index 5d3f584..47135ab 100644
--- a/post/lib_ppc/multi.c
+++ b/post/lib_ppc/multi.c
@@ -44,6 +44,7 @@ int cpu_post_test_multi (void)
{
int ret = 0;
unsigned int i;
+ int flag = disable_interrupts();
if (ret == 0)
{
@@ -72,6 +73,9 @@ int cpu_post_test_multi (void)
post_log ("Error at multi test !\n");
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/store.c b/post/lib_ppc/store.c
index 09ec485..c96f263 100644
--- a/post/lib_ppc/store.c
+++ b/post/lib_ppc/store.c
@@ -163,6 +163,7 @@ int cpu_post_test_store (void)
{
int ret = 0;
unsigned int i;
+ int flag = disable_interrupts();
for (i = 0; i < cpu_post_store_size && ret == 0; i++)
{
@@ -226,6 +227,9 @@ int cpu_post_test_store (void)
}
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}
diff --git a/post/lib_ppc/string.c b/post/lib_ppc/string.c
index b2daa88..3683ac9 100644
--- a/post/lib_ppc/string.c
+++ b/post/lib_ppc/string.c
@@ -47,6 +47,7 @@ int cpu_post_test_string (void)
{
int ret = 0;
unsigned int i;
+ int flag = disable_interrupts();
if (ret == 0)
{
@@ -97,6 +98,9 @@ int cpu_post_test_string (void)
post_log ("Error at string test !\n");
}
+ if (flag)
+ enable_interrupts();
+
return ret;
}