Skip to content

Commit b79351b

Browse files
committed
Fix some issue with L2 as SRAM
1 parent 810f49c commit b79351b

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

hal/nxp_ppc.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -691,22 +691,28 @@ extern void dcache_disable(void);
691691
#else
692692
/* Assembly version */
693693
#ifdef CORE_E6500
694-
/* e6500 has 64-bit MAS registers - must clear upper 32 bits */
694+
/* e6500 has 64-bit MAS registers - must clear upper 32 bits.
695+
* Using lis would sign-extend values with bit 15 set (e.g., 0xC000xxxx).
696+
* Use li 0; oris; ori pattern for all MAS registers. */
695697
#define set_tlb(tlb, esel, epn, rpn, urpn, perms, winge, ts, tsize, iprot, reg) \
696-
lis reg, BOOKE_MAS0(tlb, esel, 0)@h; \
698+
li reg, 0; \
699+
oris reg, reg, BOOKE_MAS0(tlb, esel, 0)@h; \
697700
ori reg, reg, BOOKE_MAS0(tlb, esel, 0)@l; \
698701
mtspr MAS0, reg;\
699-
lis reg, BOOKE_MAS1(1, iprot, 0, ts, tsize)@h; \
702+
li reg, 0; \
703+
oris reg, reg, BOOKE_MAS1(1, iprot, 0, ts, tsize)@h; \
700704
ori reg, reg, BOOKE_MAS1(1, iprot, 0, ts, tsize)@l; \
701705
mtspr MAS1, reg; \
702706
li reg, 0; \
703707
oris reg, reg, BOOKE_MAS2(epn, winge)@h; \
704708
ori reg, reg, BOOKE_MAS2(epn, winge)@l; \
705709
mtspr MAS2, reg; \
706-
lis reg, BOOKE_MAS3(rpn, 0, perms)@h; \
710+
li reg, 0; \
711+
oris reg, reg, BOOKE_MAS3(rpn, 0, perms)@h; \
707712
ori reg, reg, BOOKE_MAS3(rpn, 0, perms)@l; \
708713
mtspr MAS3, reg; \
709-
lis reg, urpn@h; \
714+
li reg, 0; \
715+
oris reg, reg, urpn@h; \
710716
ori reg, reg, urpn@l; \
711717
mtspr MAS7, reg; \
712718
isync; \

src/boot_ppc_start.S

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -569,10 +569,9 @@ init_sram_law:
569569
INITIAL_SRAM_LAW_SZ)
570570
LOAD_ADDR32(r9, CCSRBAR + LAWBAR_BASE(2))
571571
li r0, 0 /* UPPER=0 */
572-
lis r1, INITIAL_SRAM_ADDR@h
573-
ori r1, r1, INITIAL_SRAM_ADDR@l
574-
lis r2, INITIAL_SRAM_LAW@h
575-
ori r2, r2, INITIAL_SRAM_LAW@l
572+
/* Use LOAD_ADDR32 on e6500 to avoid sign-extension for addresses >= 0x80000000 */
573+
LOAD_ADDR32(r1, INITIAL_SRAM_ADDR)
574+
LOAD_ADDR32(r2, INITIAL_SRAM_LAW)
576575
stw r0, 0(r9) /* LAWBARH */
577576
stw r1, 4(r9) /* LAWBARL */
578577
sync
@@ -585,7 +584,7 @@ init_sram_law:
585584
init_sram_tlb:
586585
/* Initial SRAM: TLB 1, Entry 9, Supervisor X/R/W, M, TS=0, IPROT
587586
* CPC SRAM uses cacheable memory-coherent (M) access.
588-
* SRAM is zeroed via dcbz to avoid reading uninitialized ECC data. */
587+
* TLB is created BEFORE l2_setup_sram per old working code. */
589588
set_tlb(1, 9,
590589
INITIAL_SRAM_ADDR, INITIAL_SRAM_ADDR, 0,
591590
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_M, 0,
@@ -598,7 +597,6 @@ init_sram_tlb:
598597
#ifdef L2SRAM_ADDR
599598
l2_setup_sram:
600599
/* T2080RM: 8.4.2.2 - CPC initialization
601-
* Restored working configuration from pre-T1024 codebase:
602600
* Configure SRAM control registers, then enable CPC with parity.
603601
* The LAW (DDR_1) provides CoreNet routing; CPC intercepts before DDR.
604602
* SRAM is zeroed later via dcbz through cacheable TLB (MAS2_M). */

0 commit comments

Comments
 (0)