diff options
| -rw-r--r-- | arch/mips/mm/init.c | 126 |
1 files changed, 63 insertions, 63 deletions
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 66d0f49c5bec..074ac5459026 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
| @@ -252,6 +252,69 @@ void __init fixrange_init(unsigned long start, unsigned long end, | |||
| 252 | #endif | 252 | #endif |
| 253 | } | 253 | } |
| 254 | 254 | ||
| 255 | unsigned __weak platform_maar_init(unsigned num_pairs) | ||
| 256 | { | ||
| 257 | struct maar_config cfg[BOOT_MEM_MAP_MAX]; | ||
| 258 | unsigned i, num_configured, num_cfg = 0; | ||
| 259 | phys_addr_t skip; | ||
| 260 | |||
| 261 | for (i = 0; i < boot_mem_map.nr_map; i++) { | ||
| 262 | switch (boot_mem_map.map[i].type) { | ||
| 263 | case BOOT_MEM_RAM: | ||
| 264 | case BOOT_MEM_INIT_RAM: | ||
| 265 | break; | ||
| 266 | default: | ||
| 267 | continue; | ||
| 268 | } | ||
| 269 | |||
| 270 | skip = 0x10000 - (boot_mem_map.map[i].addr & 0xffff); | ||
| 271 | |||
| 272 | cfg[num_cfg].lower = boot_mem_map.map[i].addr; | ||
| 273 | cfg[num_cfg].lower += skip; | ||
| 274 | |||
| 275 | cfg[num_cfg].upper = cfg[num_cfg].lower; | ||
| 276 | cfg[num_cfg].upper += boot_mem_map.map[i].size - 1; | ||
| 277 | cfg[num_cfg].upper -= skip; | ||
| 278 | |||
| 279 | cfg[num_cfg].attrs = MIPS_MAAR_S; | ||
| 280 | num_cfg++; | ||
| 281 | } | ||
| 282 | |||
| 283 | num_configured = maar_config(cfg, num_cfg, num_pairs); | ||
| 284 | if (num_configured < num_cfg) | ||
| 285 | pr_warn("Not enough MAAR pairs (%u) for all bootmem regions (%u)\n", | ||
| 286 | num_pairs, num_cfg); | ||
| 287 | |||
| 288 | return num_configured; | ||
| 289 | } | ||
| 290 | |||
| 291 | static void maar_init(void) | ||
| 292 | { | ||
| 293 | unsigned num_maars, used, i; | ||
| 294 | |||
| 295 | if (!cpu_has_maar) | ||
| 296 | return; | ||
| 297 | |||
| 298 | /* Detect the number of MAARs */ | ||
| 299 | write_c0_maari(~0); | ||
| 300 | back_to_back_c0_hazard(); | ||
| 301 | num_maars = read_c0_maari() + 1; | ||
| 302 | |||
| 303 | /* MAARs should be in pairs */ | ||
| 304 | WARN_ON(num_maars % 2); | ||
| 305 | |||
| 306 | /* Configure the required MAARs */ | ||
| 307 | used = platform_maar_init(num_maars / 2); | ||
| 308 | |||
| 309 | /* Disable any further MAARs */ | ||
| 310 | for (i = (used * 2); i < num_maars; i++) { | ||
| 311 | write_c0_maari(i); | ||
| 312 | back_to_back_c0_hazard(); | ||
| 313 | write_c0_maar(0); | ||
| 314 | back_to_back_c0_hazard(); | ||
| 315 | } | ||
| 316 | } | ||
| 317 | |||
| 255 | #ifndef CONFIG_NEED_MULTIPLE_NODES | 318 | #ifndef CONFIG_NEED_MULTIPLE_NODES |
| 256 | int page_is_ram(unsigned long pagenr) | 319 | int page_is_ram(unsigned long pagenr) |
| 257 | { | 320 | { |
| @@ -334,69 +397,6 @@ static inline void mem_init_free_highmem(void) | |||
| 334 | #endif | 397 | #endif |
| 335 | } | 398 | } |
| 336 | 399 | ||
| 337 | unsigned __weak platform_maar_init(unsigned num_pairs) | ||
| 338 | { | ||
| 339 | struct maar_config cfg[BOOT_MEM_MAP_MAX]; | ||
| 340 | unsigned i, num_configured, num_cfg = 0; | ||
| 341 | phys_addr_t skip; | ||
| 342 | |||
| 343 | for (i = 0; i < boot_mem_map.nr_map; i++) { | ||
| 344 | switch (boot_mem_map.map[i].type) { | ||
| 345 | case BOOT_MEM_RAM: | ||
| 346 | case BOOT_MEM_INIT_RAM: | ||
| 347 | break; | ||
| 348 | default: | ||
| 349 | continue; | ||
| 350 | } | ||
| 351 | |||
| 352 | skip = 0x10000 - (boot_mem_map.map[i].addr & 0xffff); | ||
| 353 | |||
| 354 | cfg[num_cfg].lower = boot_mem_map.map[i].addr; | ||
| 355 | cfg[num_cfg].lower += skip; | ||
| 356 | |||
| 357 | cfg[num_cfg].upper = cfg[num_cfg].lower; | ||
| 358 | cfg[num_cfg].upper += boot_mem_map.map[i].size - 1; | ||
| 359 | cfg[num_cfg].upper -= skip; | ||
| 360 | |||
| 361 | cfg[num_cfg].attrs = MIPS_MAAR_S; | ||
| 362 | num_cfg++; | ||
| 363 | } | ||
| 364 | |||
| 365 | num_configured = maar_config(cfg, num_cfg, num_pairs); | ||
| 366 | if (num_configured < num_cfg) | ||
| 367 | pr_warn("Not enough MAAR pairs (%u) for all bootmem regions (%u)\n", | ||
| 368 | num_pairs, num_cfg); | ||
| 369 | |||
| 370 | return num_configured; | ||
| 371 | } | ||
| 372 | |||
| 373 | static void maar_init(void) | ||
| 374 | { | ||
| 375 | unsigned num_maars, used, i; | ||
| 376 | |||
| 377 | if (!cpu_has_maar) | ||
| 378 | return; | ||
| 379 | |||
| 380 | /* Detect the number of MAARs */ | ||
| 381 | write_c0_maari(~0); | ||
| 382 | back_to_back_c0_hazard(); | ||
| 383 | num_maars = read_c0_maari() + 1; | ||
| 384 | |||
| 385 | /* MAARs should be in pairs */ | ||
| 386 | WARN_ON(num_maars % 2); | ||
| 387 | |||
| 388 | /* Configure the required MAARs */ | ||
| 389 | used = platform_maar_init(num_maars / 2); | ||
| 390 | |||
| 391 | /* Disable any further MAARs */ | ||
| 392 | for (i = (used * 2); i < num_maars; i++) { | ||
| 393 | write_c0_maari(i); | ||
| 394 | back_to_back_c0_hazard(); | ||
| 395 | write_c0_maar(0); | ||
| 396 | back_to_back_c0_hazard(); | ||
| 397 | } | ||
| 398 | } | ||
| 399 | |||
| 400 | void __init mem_init(void) | 400 | void __init mem_init(void) |
| 401 | { | 401 | { |
| 402 | #ifdef CONFIG_HIGHMEM | 402 | #ifdef CONFIG_HIGHMEM |
