diff options
Diffstat (limited to 'arch/mips/netlogic/xlp/setup.c')
-rw-r--r-- | arch/mips/netlogic/xlp/setup.c | 50 |
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 | ||
76 | static 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 | |||
76 | void __init plat_mem_setup(void) | 93 | void __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 | ||
88 | const char *get_system_type(void) | 111 | const 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 | ||
93 | void __init prom_free_prom_memory(void) | 121 | void __init prom_free_prom_memory(void) |
@@ -97,12 +125,20 @@ void __init prom_free_prom_memory(void) | |||
97 | 125 | ||
98 | void xlp_mmu_init(void) | 126 | void 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 | ||
108 | void nlm_percpu_init(int hwcpuid) | 144 | void nlm_percpu_init(int hwcpuid) |