summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/rk27xx/crt0.S22
1 files changed, 13 insertions, 9 deletions
diff --git a/firmware/target/arm/rk27xx/crt0.S b/firmware/target/arm/rk27xx/crt0.S
index 032c637458..4ddae01c53 100644
--- a/firmware/target/arm/rk27xx/crt0.S
+++ b/firmware/target/arm/rk27xx/crt0.S
@@ -47,14 +47,20 @@ newstart2:
47 mov r0, #0x18000000 47 mov r0, #0x18000000
48 add r0, r0, #0x1c000 48 add r0, r0, #0x1c000
49 49
50 /* setup ARM core freq = 200MHz */ 50 /* setup ARM core freq = 200MHz
51 /* AHB bus freq (HCLK) = 100MHz */ 51 * AHB bus freq (HCLK) = 100MHz
52 /* APB bus freq (PCLK) = 50MHz */ 52 * APB bus freq (PCLK) = 50MHz
53 * Note: it seems there is no way to run AHB bus at ARM freq
54 * bit2 in DIVCON1 must have different meaning to what datasheet
55 * states. It influences SDRAM read speed but does not change
56 * APB freq
57 */
53 ldr r1, [r0,#0x14] /* SCU_DIVCON1 */ 58 ldr r1, [r0,#0x14] /* SCU_DIVCON1 */
54 orr r1, #9 /* ARM slow mode, HCLK:PCLK = 2:1 */ 59 bic r1, r1, #0x1f
60 orr r1, r1, #9 /* ((1<<3)|(1<<0)) ARM slow mode, HCLK:PCLK = 2:1 */
55 str r1, [r0,#0x14] 61 str r1, [r0,#0x14]
56 62
57 ldr r1,=0x01970c70 /* (1<<24) | (1<<23) | (23<<16) | (199<<4) */ 63 ldr r1,=0x1850310 /* ((1<<24)|(1<<23)|(5<<16)|(49<<4)) */
58 str r1, [r0,#0x08] 64 str r1, [r0,#0x08]
59 65
60 ldr r2,=0x40000 66 ldr r2,=0x40000
@@ -62,11 +68,11 @@ newstart2:
62 ldr r1, [r0,#0x2c] /* SCU_STATUS */ 68 ldr r1, [r0,#0x2c] /* SCU_STATUS */
63 tst r1, #1 /* ARM pll lock */ 69 tst r1, #1 /* ARM pll lock */
64 bne 1f 70 bne 1f
65 subs r2, #1 71 subs r2, r2, #1
66 bne 1b 72 bne 1b
671: 731:
68 ldr r1, [r0,#0x14] /* SCU_DIVCON1 */ 74 ldr r1, [r0,#0x14] /* SCU_DIVCON1 */
69 bic r1, #5 /* leave ARM slow mode, ARMclk:HCLK = 2:1 */ 75 bic r1, #1 /* leave ARM slow mode */
70 str r1, [r0,#0x14] 76 str r1, [r0,#0x14]
71 77
72#if defined(BOOTLOADER) 78#if defined(BOOTLOADER)
@@ -75,7 +81,6 @@ newstart2:
75 str r1, [r0, #4] 81 str r1, [r0, #4]
76#endif 82#endif
77 83
78#if 0
79 /* setup caches */ 84 /* setup caches */
80 ldr r0, =0xefff0000 /* cache controler base address */ 85 ldr r0, =0xefff0000 /* cache controler base address */
81 ldrh r1, [r0] 86 ldrh r1, [r0]
@@ -110,7 +115,6 @@ newstart2:
110 ldr r1, [r0] 115 ldr r1, [r0]
111 orr r1, r1, #0x80000000 116 orr r1, r1, #0x80000000
112 str r1, [r0] /* global cache enable */ 117 str r1, [r0] /* global cache enable */
113#endif
114 118
115 /* Copy interrupt vectors to iram */ 119 /* Copy interrupt vectors to iram */
116 ldr r2, =_intvectstart 120 ldr r2, =_intvectstart