提交 1a41f7ce 编写于 作者: B Becky Bruce 提交者: Jon Loeliger

86xx: Rearrange the sequence in start.S

* split the BAT initialization so that only 2 BATs (for the boot page
and stack) are programmed very early on.  The rest are initialized later.
* Move other BAT setup,  ccsrbar setup, and law setup later in the code
after translation has been enabled.

These changes will facilitate the moving of law and BAT initialization
to C code, and will aid with 36-bit physical addressing support.
Signed-off-by: NBecky Bruce <becky.bruce@freescale.com>
上级 33dac03b
...@@ -235,17 +235,8 @@ in_flash: ...@@ -235,17 +235,8 @@ in_flash:
bl enable_ext_addr bl enable_ext_addr
/* setup the bats */ /* setup the bats */
bl setup_bats bl early_bats
sync
#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
/* setup ccsrbar */
bl setup_ccsrbar
#endif
/* setup the law entries */
bl law_entry
sync
/* /*
* Cache must be enabled here for stack-in-cache trick. * Cache must be enabled here for stack-in-cache trick.
* This means we need to enable the BATS. * This means we need to enable the BATS.
...@@ -282,6 +273,19 @@ in_flash: ...@@ -282,6 +273,19 @@ in_flash:
GET_GOT /* initialize GOT access */ GET_GOT /* initialize GOT access */
/* setup the rest of the bats */
bl setup_bats
bl clear_tlbs
sync
#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
/* setup ccsrbar */
bl setup_ccsrbar
#endif
bl law_entry
sync
/* run low-level CPU init code (from Flash) */ /* run low-level CPU init code (from Flash) */
bl cpu_init_f bl cpu_init_f
sync sync
...@@ -359,6 +363,7 @@ invalidate_bats: ...@@ -359,6 +363,7 @@ invalidate_bats:
/* setup_bats - set them up to some initial state */ /* setup_bats - set them up to some initial state */
/* Skip any BATS setup in early_bats */
.globl setup_bats .globl setup_bats
setup_bats: setup_bats:
...@@ -454,42 +459,6 @@ setup_bats: ...@@ -454,42 +459,6 @@ setup_bats:
mtspr DBAT4U, r3 mtspr DBAT4U, r3
isync isync
/* IBAT 5 */
addis r4, r0, CFG_IBAT5L@h
ori r4, r4, CFG_IBAT5L@l
addis r3, r0, CFG_IBAT5U@h
ori r3, r3, CFG_IBAT5U@l
mtspr IBAT5L, r4
mtspr IBAT5U, r3
isync
/* DBAT 5 */
addis r4, r0, CFG_DBAT5L@h
ori r4, r4, CFG_DBAT5L@l
addis r3, r0, CFG_DBAT5U@h
ori r3, r3, CFG_DBAT5U@l
mtspr DBAT5L, r4
mtspr DBAT5U, r3
isync
/* IBAT 6 */
addis r4, r0, CFG_IBAT6L@h
ori r4, r4, CFG_IBAT6L@l
addis r3, r0, CFG_IBAT6U@h
ori r3, r3, CFG_IBAT6U@l
mtspr IBAT6L, r4
mtspr IBAT6U, r3
isync
/* DBAT 6 */
addis r4, r0, CFG_DBAT6L@h
ori r4, r4, CFG_DBAT6L@l
addis r3, r0, CFG_DBAT6U@h
ori r3, r3, CFG_DBAT6U@l
mtspr DBAT6L, r4
mtspr DBAT6U, r3
isync
/* IBAT 7 */ /* IBAT 7 */
addis r4, r0, CFG_IBAT7L@h addis r4, r0, CFG_IBAT7L@h
ori r4, r4, CFG_IBAT7L@l ori r4, r4, CFG_IBAT7L@l
...@@ -508,18 +477,65 @@ setup_bats: ...@@ -508,18 +477,65 @@ setup_bats:
mtspr DBAT7U, r3 mtspr DBAT7U, r3
isync isync
1: sync
addis r3, 0, 0x0000 blr
addis r5, 0, 0x4 /* upper bound of 0x00040000 for 7400/750 */
/*
* early_bats:
*
* Set up bats needed early on - this is usually the BAT for the
* stack-in-cache and the Flash
*/
.globl early_bats
early_bats:
/* IBAT 5 */
lis r4, CFG_IBAT5L@h
ori r4, r4, CFG_IBAT5L@l
lis r3, CFG_IBAT5U@h
ori r3, r3, CFG_IBAT5U@l
mtspr IBAT5L, r4
mtspr IBAT5U, r3
isync isync
/* DBAT 5 */
lis r4, CFG_DBAT5L@h
ori r4, r4, CFG_DBAT5L@l
lis r3, CFG_DBAT5U@h
ori r3, r3, CFG_DBAT5U@l
mtspr DBAT5L, r4
mtspr DBAT5U, r3
isync
/* IBAT 6 */
lis r4, CFG_IBAT6L@h
ori r4, r4, CFG_IBAT6L@l
lis r3, CFG_IBAT6U@h
ori r3, r3, CFG_IBAT6U@l
mtspr IBAT6L, r4
mtspr IBAT6U, r3
isync
/* DBAT 6 */
lis r4, CFG_DBAT6L@h
ori r4, r4, CFG_DBAT6L@l
lis r3, CFG_DBAT6U@h
ori r3, r3, CFG_DBAT6U@l
mtspr DBAT6L, r4
mtspr DBAT6U, r3
isync
blr
.globl clear_tlbs
clear_tlbs:
addis r3, 0, 0x0000
addis r5, 0, 0x4
isync
tlblp: tlblp:
tlbie r3 tlbie r3
sync sync
addi r3, r3, 0x1000 addi r3, r3, 0x1000
cmp 0, 0, r3, r5 cmp 0, 0, r3, r5
blt tlblp blt tlblp
blr blr
.globl enable_addr_trans .globl enable_addr_trans
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册