aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/netlogic/xlp/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/netlogic/xlp/setup.c')
-rw-r--r--arch/mips/netlogic/xlp/setup.c50
1 files changed, 43 insertions, 7 deletions
diff --git a/arch/mips/netlogic/xlp/setup.c b/arch/mips/netlogic/xlp/setup.c
index 7b638f7be491..76a7131e486e 100644
--- a/arch/mips/netlogic/xlp/setup.c
+++ b/arch/mips/netlogic/xlp/setup.c
@@ -73,6 +73,23 @@ static void nlm_fixup_mem(void)
73 } 73 }
74} 74}
75 75
76static void __init xlp_init_mem_from_bars(void)
77{
78 uint64_t map[16];
79 int i, n;
80
81 n = xlp_get_dram_map(-1, map); /* -1: info for all nodes */
82 for (i = 0; i < n; i += 2) {
83 /* exclude 0x1000_0000-0x2000_0000, u-boot device */
84 if (map[i] <= 0x10000000 && map[i+1] > 0x10000000)
85 map[i+1] = 0x10000000;
86 if (map[i] > 0x10000000 && map[i] < 0x20000000)
87 map[i] = 0x20000000;
88
89 add_memory_region(map[i], map[i+1] - map[i], BOOT_MEM_RAM);
90 }
91}
92
76void __init plat_mem_setup(void) 93void __init plat_mem_setup(void)
77{ 94{
78 panic_timeout = 5; 95 panic_timeout = 5;
@@ -82,12 +99,23 @@ void __init plat_mem_setup(void)
82 99
83 /* memory and bootargs from DT */ 100 /* memory and bootargs from DT */
84 early_init_devtree(initial_boot_params); 101 early_init_devtree(initial_boot_params);
102
103 if (boot_mem_map.nr_map == 0) {
104 pr_info("Using DRAM BARs for memory map.\n");
105 xlp_init_mem_from_bars();
106 }
107 /* Calculate and setup wired entries for mapped kernel */
85 nlm_fixup_mem(); 108 nlm_fixup_mem();
86} 109}
87 110
88const char *get_system_type(void) 111const char *get_system_type(void)
89{ 112{
90 return "Netlogic XLP Series"; 113 switch (read_c0_prid() & 0xff00) {
114 case PRID_IMP_NETLOGIC_XLP2XX:
115 return "Broadcom XLPII Series";
116 default:
117 return "Netlogic XLP Series";
118 }
91} 119}
92 120
93void __init prom_free_prom_memory(void) 121void __init prom_free_prom_memory(void)
@@ -97,12 +125,20 @@ void __init prom_free_prom_memory(void)
97 125
98void xlp_mmu_init(void) 126void xlp_mmu_init(void)
99{ 127{
100 /* enable extended TLB and Large Fixed TLB */ 128 u32 conf4;
101 write_c0_config6(read_c0_config6() | 0x24); 129
102 130 if (cpu_is_xlpii()) {
103 /* set page mask of Fixed TLB in config7 */ 131 /* XLPII series has extended pagesize in config 4 */
104 write_c0_config7(PM_DEFAULT_MASK >> 132 conf4 = read_c0_config4() & ~0x1f00u;
105 (13 + (ffz(PM_DEFAULT_MASK >> 13) / 2))); 133 write_c0_config4(conf4 | ((PAGE_SHIFT - 10) / 2 << 8));
134 } else {
135 /* enable extended TLB and Large Fixed TLB */
136 write_c0_config6(read_c0_config6() | 0x24);
137
138 /* set page mask of extended Fixed TLB in config7 */
139 write_c0_config7(PM_DEFAULT_MASK >>
140 (13 + (ffz(PM_DEFAULT_MASK >> 13) / 2)));
141 }
106} 142}
107 143
108void nlm_percpu_init(int hwcpuid) 144void nlm_percpu_init(int hwcpuid)