From: Kumar Gala Date: Thu, 3 Feb 2011 15:02:13 +0000 (-0600) Subject: powerpc/8xxx: Fix LAW init to respect pre-initialized entries X-Git-Tag: v2011.06-rc1~185^2~31 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=7639675131673e8f1582d760203a9af34fba9e79;p=u-boot powerpc/8xxx: Fix LAW init to respect pre-initialized entries If some pre-boot or earlier stage bootloader (NAND SPL) has setup LAW entries consider them good and mark them used. In the NAND SPL case we skip re-initializing based on the law_table since the SPL phase already did that. Signed-off-by: Kumar Gala --- diff --git a/drivers/misc/fsl_law.c b/drivers/misc/fsl_law.c index 031c9748f4..3233ff2e49 100644 --- a/drivers/misc/fsl_law.c +++ b/drivers/misc/fsl_law.c @@ -24,6 +24,7 @@ */ #include +#include #include #include @@ -246,6 +247,25 @@ void init_laws(void) #error FSL_HW_NUM_LAWS can not be greater than 32 w/o code changes #endif + /* + * Any LAWs that were set up before we booted assume they are meant to + * be around and mark them used. + */ + for (i = 0; i < FSL_HW_NUM_LAWS; i++) { + u32 lawar = in_be32(LAWAR_ADDR(i)); + + if (lawar & LAW_EN) + gd->used_laws |= (1 << i); + } + +#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL) + /* + * in NAND boot we've already parsed the law_table and setup those LAWs + * so don't do it again. + */ + return; +#endif + for (i = 0; i < num_law_entries; i++) { if (law_table[i].index == -1) set_next_law(law_table[i].addr, law_table[i].size,