4 Freescale's e500v1 and e500v2 cores (used in mpc85xx chips) have some
5 restrictions on external debugging (JTAG). In particular, for the debugger to
6 be able to receive control after a single step or breakpoint:
8 - A valid opcode must be fetchable, through the MMU, from the debug
9 exception vector (IVPR + IVOR15).
11 To maximize the time during which this requirement is met, U-Boot sets MSR[DE]
12 immediately on entry and keeps it set. It also uses a temporary TLB to keep a
13 mapping to a valid opcode at the debug exception vector, even if we normally
14 don't support exception vectors being used that early, and that's not the area
15 where U-Boot currently executes from.
17 Note that there may still be some small windows where debugging will not work,
18 such as in between updating IVPR and IVOR15.
23 Please refer README section "MPC85xx External Debug Support"
25 Major Config Switches during various boot Modes
26 ----------------------------------------------
29 !defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_SPL)
31 !defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SECURE_BOOT)
32 RAMBOOT(SD, SPI & NAND boot)
33 defined(CONFIG_SYS_RAMBOOT)
34 RAMBOOT Secure (SD, SPI & NAND)
35 defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SECURE_BOOT)
37 defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_NAND_SPL)
40 TLB Entries during u-boot execution
41 -----------------------------------
43 Note: Sequence number is in order of execution
45 A) defined(CONFIG_SYS_RAMBOOT) i.e. SD, SPI, NAND RAMBOOT & NAND_SPL boot
47 1) TLB entry to overcome e500 v1/v2 debug restriction
48 Location : Label "_start_e500"
49 TLB Entry : CONFIG_SYS_PPC_E500_DEBUG_TLB
50 EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_MONITOR_BASE
51 Properties : 256K, AS0, I, IPROT
53 2) TLB entry for working in AS1
54 Location : Label "create_init_ram_area"
56 EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_MONITOR_BASE
57 Properties : 1M, AS1, I, G, IPROT
59 3) TLB entry for the stack during AS1
60 Location : Lable "create_init_ram_area"
62 EPN -->RPN : CONFIG_SYS_INIT_RAM_ADDR --> CONFIG_SYS_INIT_RAM_ADDR
63 Properties : 16K, AS1, IPROT
65 4) TLB entry for CCSRBAR during AS1 execution
66 Location : cpu_init_early_f
68 EPN -->RPN : CONFIG_SYS_CCSRBAR --> CONFIG_SYS_CCSRBAR
69 Properties : 1M, AS1, I, G
71 5) Invalidate unproctected TLB Entries
72 Location : cpu_init_early_f
75 6) Create TLB entries as per boards/freescale/<board>/tlb.c
76 Location : cpu_init_early_f --> init_tlbs()
77 Properties : ..., AS0, ...
78 Please note It can overwrites previous TLB Entries.
80 7) Disable TLB Entries of AS1
81 Location : cpu_init_f --> disable_tlb()
84 8) Update Flash's TLB entry
85 Location : Board_init_r
86 TLB entry : Search from TLB entries
87 EPN -->RPN : CONFIG_SYS_FLASH_BASE --> CONFIG_SYS_FLASH_BASE_PHYS
88 Properties : Board specific size, AS0, I, G, IPROT
91 B) !defined(CONFIG_SYS_RAMBOOT) i.e. NOR boot
93 1) TLB entry to overcome e500 v1/v2 debug restriction
94 Location : Label "_start_e500"
95 TLB Entry : CONFIG_SYS_PPC_E500_DEBUG_TLB
96 #if defined(CONFIG_SECURE_BOOT)
97 EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_PBI_FLASH_WINDOW
98 Properties : 1M, AS1, I, G, IPROT
100 EPN -->RPN : CONFIG_SYS_MONITOR_BASE & 0xffc00000 --> 0xffc00000
101 Properties : 4M, AS0, I, G, IPROT
104 2) TLB entry for working in AS1
105 Location : Label "create_init_ram_area"
107 #if defined(CONFIG_SECURE_BOOT)
108 EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_PBI_FLASH_WINDOW
109 Properties : 1M, AS1, I, G, IPROT
111 EPN -->RPN : CONFIG_SYS_MONITOR_BASE & 0xffc00000 --> 0xffc00000
112 Properties : 4M, AS1, I, G, IPROT
115 3) TLB entry for the stack during AS1
116 Location : Lable "create_init_ram_area"
118 EPN -->RPN : CONFIG_SYS_INIT_RAM_ADDR --> CONFIG_SYS_INIT_RAM_ADDR
119 Properties : 16K, AS1, IPROT
121 4) TLB entry for CCSRBAR during AS1 execution
122 Location : cpu_init_early_f
124 EPN -->RPN : CONFIG_SYS_CCSRBAR --> CONFIG_SYS_CCSRBAR
125 Properties : 1M, AS1, I, G
127 5) TLB entry for Errata workaround CONFIG_SYS_FSL_ERRATUM_IFC_A003399
128 Location : cpu_init_early_f
130 EPN -->RPN : SRAM_BASE_ADDR --> SRAM_BASE_ADDR
131 Properties : 1M, AS1, I
133 6) CONFIG_SYS_FSL_ERRATUM_IFC_A003399 Adjust flash's phys addr
134 Location : cpu_init_early_f --> setup_ifc
135 TLB Entry : Get Flash TLB
136 EPN -->RPN : Adjusted flash_phys --> Adjusted flash_phys
137 Properties : 4M, AS1, I, G, IPROT
139 7) CONFIG_SYS_FSL_ERRATUM_IFC_A003399: E500 v1,v2 debug restriction
140 Location : cpu_init_early_f --> setup_ifc
141 TLB Entry : CONFIG_SYS_PPC_E500_DEBUG_TLB
142 EPN -->RPN : Adjusted flash_phys --> Adjusted flash_phys
143 Properties : 4M, AS0, I, G, IPROT
145 8) Invalidate unproctected TLB Entries
146 Location : cpu_init_early_f
149 9) Create TLB entries as per boards/freescale/<board>/tlb.c
150 Location : cpu_init_early_f --> init_tlbs()
151 Properties : ..., AS0, ...
152 Note: It can overwrites previous TLB Entries
154 10) Disable TLB Entries of AS1
155 Location : cpu_init_f --> disable_tlb()
158 11) Create DDR's TLB entriy
159 Location : Board_init_f -> init_func_ram -> initdram
160 TLB entry : Search free TLB entry
162 12) Update Flash's TLB entry
163 Location : Board_init_r
164 TLB entry : Search from TLB entries
165 EPN -->RPN : CONFIG_SYS_FLASH_BASE --> CONFIG_SYS_FLASH_BASE_PHYS
166 Properties : Board specific size, AS0, I, G, IPROT