From 495d162374c472f46454453553382ad0735dc725 Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Sun, 17 Feb 2008 22:56:16 +0100 Subject: [PATCH 1/5] sbc8548: Fix cfi flash bank declaration Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD --- include/configs/sbc8548.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/configs/sbc8548.h b/include/configs/sbc8548.h index 0a7a904975..516203a5d8 100644 --- a/include/configs/sbc8548.h +++ b/include/configs/sbc8548.h @@ -168,7 +168,7 @@ #define CFG_OR0_PRELIM 0xff806e65 #define CFG_OR6_PRELIM 0xfc006e65 -#define CFG_FLASH_BANKS_LIST {0xff800000, CFG_FLASH_BASE} +#define CFG_FLASH_BANKS_LIST {CFG_FLASH_BASE} #define CFG_MAX_FLASH_BANKS 1 /* number of banks */ #define CFG_MAX_FLASH_SECT 128 /* sectors per device */ #undef CFG_FLASH_CHECKSUM From 347b7938d3e561eb215aa386c37fb5acb5a383c6 Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Sun, 17 Feb 2008 22:56:17 +0100 Subject: [PATCH 2/5] sbc8548: Fix Revision reading and unused variable 'path' Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD --- board/sbc8548/sbc8548.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/board/sbc8548/sbc8548.c b/board/sbc8548/sbc8548.c index 65052e60c8..d57548a7df 100644 --- a/board/sbc8548/sbc8548.c +++ b/board/sbc8548/sbc8548.c @@ -56,9 +56,10 @@ int checkboard (void) { volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR); volatile ccsr_local_ecm_t *ecm = (void *)(CFG_MPC85xx_ECM_ADDR); + volatile u_char *rev= (void *)CFG_BD_REV; printf ("Board: Wind River SBC8548 Rev. 0x%01x\n", - (volatile)(*(u_char *)CFG_BD_REV) >> 4); + (*rev) >> 4); /* * Initialize local bus. @@ -533,12 +534,12 @@ void ft_pci_setup(void *blob, bd_t *bd) { int node, tmp[2]; - const char *path; node = fdt_path_offset(blob, "/aliases"); tmp[0] = 0; if (node >= 0) { #ifdef CONFIG_PCI1 + const char *path; path = fdt_getprop(blob, node, "pci0", NULL); if (path) { tmp[1] = pci1_hose.last_busno - pci1_hose.first_busno; @@ -546,6 +547,7 @@ ft_pci_setup(void *blob, bd_t *bd) } #endif #ifdef CONFIG_PCIE1 + const char *path; path = fdt_getprop(blob, node, "pci1", NULL); if (path) { tmp[1] = pcie1_hose.last_busno - pcie1_hose.first_busno; From 21fae8b2b4e4e6e648796e07e20ab13e9cb18923 Mon Sep 17 00:00:00 2001 From: Andy Fleming Date: Wed, 27 Feb 2008 14:29:58 -0600 Subject: [PATCH 3/5] Invalidate INIT_RAM TLB mappings Commit 0db37dc... (and some others) changed the INIT_RAM TLB mappings to be unguarded. This collided with an existing "bug" where the mappings for the INIT_RAM were being kept around. This meant that speculative loads to those addresses were succeeding in the TLB, and going out to the bus, where they were causing an exception (there's nothing at that address). The Flash code was coincidentally causing such a speculative load. Rather than go back to mapping the INIT RAM as guarded, we fix it so that the entries for the INIT_RAM are invalidated. Thus the speculative loads will fail in the TLB, and have no effect. Signed-off-by: Andy Fleming --- cpu/mpc85xx/start.S | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cpu/mpc85xx/start.S b/cpu/mpc85xx/start.S index eb24dbc430..636ef5da63 100644 --- a/cpu/mpc85xx/start.S +++ b/cpu/mpc85xx/start.S @@ -1007,6 +1007,17 @@ unlock_ram_in_cache: addi r3,r3,CFG_CACHELINE_SIZE bdnz 1b sync /* Wait for all icbi to complete on bus */ + + /* Invalidate the TLB entries for the cache */ + lis r3,CFG_INIT_RAM_ADDR@h + ori r3,r3,CFG_INIT_RAM_ADDR@l + tlbivax 0,r3 + addi r3,r3,0x1000 + tlbivax 0,r3 + addi r3,r3,0x1000 + tlbivax 0,r3 + addi r3,r3,0x1000 + tlbivax 0,r3 isync blr #endif From 534ea6b6f86f8b75ef2ac061ef110a98f103d7d6 Mon Sep 17 00:00:00 2001 From: Andy Fleming Date: Wed, 27 Feb 2008 15:50:50 -0600 Subject: [PATCH 4/5] Fix source for ECM error IVPR The source vector for the ECM was being set to 2, but that's what the source vector for DDR was being set to. Change it to 1. Signed-off-by: Andy Fleming --- cpu/mpc85xx/interrupts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpu/mpc85xx/interrupts.c b/cpu/mpc85xx/interrupts.c index 18e5377b32..4fe1facf45 100644 --- a/cpu/mpc85xx/interrupts.c +++ b/cpu/mpc85xx/interrupts.c @@ -91,7 +91,7 @@ int interrupt_init (void) set_msr (get_msr () | MSR_EE); #ifdef CONFIG_INTERRUPTS - pic->iivpr1 = 0x810002; /* 50220 enable ecm interrupts */ + pic->iivpr1 = 0x810001; /* 50220 enable ecm interrupts */ debug("iivpr1@%x = %x\n",&pic->iivpr1, pic->iivpr1); pic->iivpr2 = 0x810002; /* 50240 enable ddr interrupts */ From 2b22fa4baee51e6b467c44ea1be0d1ecd86e8775 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Wed, 27 Feb 2008 16:30:47 -0600 Subject: [PATCH 5/5] 85xx: Don't icbi when unlocking the cache There is no reason to icbi when invalidating the temporary stack in the d-cache. Its impossible on e500 to have the i-cache contain any addresses in the temp stack and it can be problematic in generating transactions on the bus to non-valid addresses. Signed-off-by: Kumar Gala --- cpu/mpc85xx/start.S | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/cpu/mpc85xx/start.S b/cpu/mpc85xx/start.S index 636ef5da63..15b804d9fc 100644 --- a/cpu/mpc85xx/start.S +++ b/cpu/mpc85xx/start.S @@ -992,7 +992,6 @@ trap_reloc: blr -#ifdef CFG_INIT_RAM_LOCK .globl unlock_ram_in_cache unlock_ram_in_cache: /* invalidate the INIT_RAM section */ @@ -1002,11 +1001,10 @@ unlock_ram_in_cache: andi. r4,r4,0x1ff slwi r4,r4,(10 - 1 - L1_CACHE_SHIFT) mtctr r4 -1: icbi r0,r3 - dcbi r0,r3 +1: dcbi r0,r3 addi r3,r3,CFG_CACHELINE_SIZE bdnz 1b - sync /* Wait for all icbi to complete on bus */ + sync /* Invalidate the TLB entries for the cache */ lis r3,CFG_INIT_RAM_ADDR@h @@ -1020,4 +1018,3 @@ unlock_ram_in_cache: tlbivax 0,r3 isync blr -#endif