diff options
Diffstat (limited to 'arch/blackfin/kernel/cplbinit.c')
-rw-r--r-- | arch/blackfin/kernel/cplbinit.c | 73 |
1 files changed, 38 insertions, 35 deletions
diff --git a/arch/blackfin/kernel/cplbinit.c b/arch/blackfin/kernel/cplbinit.c index f2db6a5e2b5b..6320bc45fbba 100644 --- a/arch/blackfin/kernel/cplbinit.c +++ b/arch/blackfin/kernel/cplbinit.c | |||
@@ -26,29 +26,22 @@ | |||
26 | #include <asm/cplb.h> | 26 | #include <asm/cplb.h> |
27 | #include <asm/cplbinit.h> | 27 | #include <asm/cplbinit.h> |
28 | 28 | ||
29 | u_long icplb_table[MAX_CPLBS+1]; | 29 | u_long icplb_table[MAX_CPLBS + 1]; |
30 | u_long dcplb_table[MAX_CPLBS+1]; | 30 | u_long dcplb_table[MAX_CPLBS + 1]; |
31 | 31 | ||
32 | #ifdef CONFIG_CPLB_SWITCH_TAB_L1 | 32 | #ifdef CONFIG_CPLB_SWITCH_TAB_L1 |
33 | u_long ipdt_table[MAX_SWITCH_I_CPLBS+1]__attribute__((l1_data)); | 33 | # define PDT_ATTR __attribute__((l1_data)) |
34 | u_long dpdt_table[MAX_SWITCH_D_CPLBS+1]__attribute__((l1_data)); | ||
35 | |||
36 | #ifdef CONFIG_CPLB_INFO | ||
37 | u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS]__attribute__((l1_data)); | ||
38 | u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS]__attribute__((l1_data)); | ||
39 | #endif /* CONFIG_CPLB_INFO */ | ||
40 | |||
41 | #else | 34 | #else |
35 | # define PDT_ATTR | ||
36 | #endif | ||
42 | 37 | ||
43 | u_long ipdt_table[MAX_SWITCH_I_CPLBS+1]; | 38 | u_long ipdt_table[MAX_SWITCH_I_CPLBS + 1] PDT_ATTR; |
44 | u_long dpdt_table[MAX_SWITCH_D_CPLBS+1]; | 39 | u_long dpdt_table[MAX_SWITCH_D_CPLBS + 1] PDT_ATTR; |
45 | 40 | ||
46 | #ifdef CONFIG_CPLB_INFO | 41 | #ifdef CONFIG_CPLB_INFO |
47 | u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS]; | 42 | u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS] PDT_ATTR; |
48 | u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS]; | 43 | u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS] PDT_ATTR; |
49 | #endif /* CONFIG_CPLB_INFO */ | 44 | #endif |
50 | |||
51 | #endif /*CONFIG_CPLB_SWITCH_TAB_L1*/ | ||
52 | 45 | ||
53 | struct s_cplb { | 46 | struct s_cplb { |
54 | struct cplb_tab init_i; | 47 | struct cplb_tab init_i; |
@@ -71,7 +64,7 @@ static struct cplb_desc cplb_data[] = { | |||
71 | #else | 64 | #else |
72 | .valid = 0, | 65 | .valid = 0, |
73 | #endif | 66 | #endif |
74 | .name = "ZERO Pointer Saveguard", | 67 | .name = "Zero Pointer Guard Page", |
75 | }, | 68 | }, |
76 | { | 69 | { |
77 | .start = L1_CODE_START, | 70 | .start = L1_CODE_START, |
@@ -102,20 +95,20 @@ static struct cplb_desc cplb_data[] = { | |||
102 | .end = 0, /* dynamic */ | 95 | .end = 0, /* dynamic */ |
103 | .psize = 0, | 96 | .psize = 0, |
104 | .attr = INITIAL_T | SWITCH_T | I_CPLB | D_CPLB, | 97 | .attr = INITIAL_T | SWITCH_T | I_CPLB | D_CPLB, |
105 | .i_conf = SDRAM_IGENERIC, | 98 | .i_conf = SDRAM_IGENERIC, |
106 | .d_conf = SDRAM_DGENERIC, | 99 | .d_conf = SDRAM_DGENERIC, |
107 | .valid = 1, | 100 | .valid = 1, |
108 | .name = "SDRAM Kernel", | 101 | .name = "Kernel Memory", |
109 | }, | 102 | }, |
110 | { | 103 | { |
111 | .start = 0, /* dynamic */ | 104 | .start = 0, /* dynamic */ |
112 | .end = 0, /* dynamic */ | 105 | .end = 0, /* dynamic */ |
113 | .psize = 0, | 106 | .psize = 0, |
114 | .attr = INITIAL_T | SWITCH_T | D_CPLB, | 107 | .attr = INITIAL_T | SWITCH_T | D_CPLB, |
115 | .i_conf = SDRAM_IGENERIC, | 108 | .i_conf = SDRAM_IGENERIC, |
116 | .d_conf = SDRAM_DNON_CHBL, | 109 | .d_conf = SDRAM_DNON_CHBL, |
117 | .valid = 1, | 110 | .valid = 1, |
118 | .name = "SDRAM RAM MTD", | 111 | .name = "uClinux MTD Memory", |
119 | }, | 112 | }, |
120 | { | 113 | { |
121 | .start = 0, /* dynamic */ | 114 | .start = 0, /* dynamic */ |
@@ -124,7 +117,7 @@ static struct cplb_desc cplb_data[] = { | |||
124 | .attr = INITIAL_T | SWITCH_T | D_CPLB, | 117 | .attr = INITIAL_T | SWITCH_T | D_CPLB, |
125 | .d_conf = SDRAM_DNON_CHBL, | 118 | .d_conf = SDRAM_DNON_CHBL, |
126 | .valid = 1, | 119 | .valid = 1, |
127 | .name = "SDRAM Uncached DMA ZONE", | 120 | .name = "Uncached DMA Zone", |
128 | }, | 121 | }, |
129 | { | 122 | { |
130 | .start = 0, /* dynamic */ | 123 | .start = 0, /* dynamic */ |
@@ -134,7 +127,7 @@ static struct cplb_desc cplb_data[] = { | |||
134 | .i_conf = 0, /* dynamic */ | 127 | .i_conf = 0, /* dynamic */ |
135 | .d_conf = 0, /* dynamic */ | 128 | .d_conf = 0, /* dynamic */ |
136 | .valid = 1, | 129 | .valid = 1, |
137 | .name = "SDRAM Reserved Memory", | 130 | .name = "Reserved Memory", |
138 | }, | 131 | }, |
139 | { | 132 | { |
140 | .start = ASYNC_BANK0_BASE, | 133 | .start = ASYNC_BANK0_BASE, |
@@ -143,14 +136,14 @@ static struct cplb_desc cplb_data[] = { | |||
143 | .attr = SWITCH_T | D_CPLB, | 136 | .attr = SWITCH_T | D_CPLB, |
144 | .d_conf = SDRAM_EBIU, | 137 | .d_conf = SDRAM_EBIU, |
145 | .valid = 1, | 138 | .valid = 1, |
146 | .name = "ASYNC Memory", | 139 | .name = "Asynchronous Memory Banks", |
147 | }, | 140 | }, |
148 | { | 141 | { |
149 | #if defined(CONFIG_BF561) | 142 | #ifdef L2_START |
150 | .start = L2_SRAM, | 143 | .start = L2_START, |
151 | .end = L2_SRAM_END, | 144 | .end = L2_START + L2_LENGTH, |
152 | .psize = SIZE_1M, | 145 | .psize = SIZE_1M, |
153 | .attr = SWITCH_T | D_CPLB, | 146 | .attr = SWITCH_T | I_CPLB | D_CPLB, |
154 | .i_conf = L2_MEMORY, | 147 | .i_conf = L2_MEMORY, |
155 | .d_conf = L2_MEMORY, | 148 | .d_conf = L2_MEMORY, |
156 | .valid = 1, | 149 | .valid = 1, |
@@ -158,13 +151,23 @@ static struct cplb_desc cplb_data[] = { | |||
158 | .valid = 0, | 151 | .valid = 0, |
159 | #endif | 152 | #endif |
160 | .name = "L2 Memory", | 153 | .name = "L2 Memory", |
161 | } | 154 | }, |
155 | { | ||
156 | .start = BOOT_ROM_START, | ||
157 | .end = BOOT_ROM_START + BOOT_ROM_LENGTH, | ||
158 | .psize = SIZE_1M, | ||
159 | .attr = SWITCH_T | I_CPLB | D_CPLB, | ||
160 | .i_conf = SDRAM_IGENERIC, | ||
161 | .d_conf = SDRAM_DGENERIC, | ||
162 | .valid = 1, | ||
163 | .name = "On-Chip BootROM", | ||
164 | }, | ||
162 | }; | 165 | }; |
163 | 166 | ||
164 | static u16 __init lock_kernel_check(u32 start, u32 end) | 167 | static u16 __init lock_kernel_check(u32 start, u32 end) |
165 | { | 168 | { |
166 | if ((start <= (u32) _stext && end >= (u32) _end) | 169 | if ((end <= (u32) _end && end >= (u32)_stext) || |
167 | || (start >= (u32) _stext && end <= (u32) _end)) | 170 | (start <= (u32) _end && start >= (u32)_stext)) |
168 | return IN_KERNEL; | 171 | return IN_KERNEL; |
169 | return 0; | 172 | return 0; |
170 | } | 173 | } |
@@ -350,7 +353,7 @@ void __init generate_cpl_tables(void) | |||
350 | else | 353 | else |
351 | cplb_data[RES_MEM].i_conf = SDRAM_INON_CHBL; | 354 | cplb_data[RES_MEM].i_conf = SDRAM_INON_CHBL; |
352 | 355 | ||
353 | for (i = ZERO_P; i <= L2_MEM; i++) { | 356 | for (i = ZERO_P; i < ARRAY_SIZE(cplb_data); ++i) { |
354 | if (!cplb_data[i].valid) | 357 | if (!cplb_data[i].valid) |
355 | continue; | 358 | continue; |
356 | 359 | ||