diff options
| -rw-r--r-- | arch/arm/boot/compressed/head.S | 82 | ||||
| -rw-r--r-- | arch/arm/kernel/head.S | 15 | ||||
| -rw-r--r-- | arch/arm/kernel/setup.c | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/sys_arm.c | 5 | ||||
| -rw-r--r-- | arch/arm/mach-sa1100/assabet.c | 1 | ||||
| -rw-r--r-- | arch/arm/mm/Kconfig | 8 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm1020.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm1020e.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm1022.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm1026.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm6_7.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm720.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm920.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm922.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm925.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-arm926.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-sa110.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-sa1100.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-v6.S | 1 | ||||
| -rw-r--r-- | arch/arm/mm/proc-xscale.S | 1 | ||||
| -rw-r--r-- | include/asm-arm/pgalloc.h | 5 | ||||
| -rw-r--r-- | include/asm-arm/pgtable-hwdef.h | 88 | ||||
| -rw-r--r-- | include/asm-arm/pgtable.h | 80 | ||||
| -rw-r--r-- | include/asm-arm/tlb.h | 9 | ||||
| -rw-r--r-- | include/asm-arm/tlbflush.h | 9 | 
25 files changed, 189 insertions, 131 deletions
| diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index db3389d8e027..491c7e4c9ac6 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
| @@ -358,7 +358,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size | |||
| 358 | str r1, [r0] | 358 | str r1, [r0] | 
| 359 | mov pc, lr | 359 | mov pc, lr | 
| 360 | 360 | ||
| 361 | __armv4_cache_on: | 361 | __armv4_mmu_cache_on: | 
| 362 | mov r12, lr | 362 | mov r12, lr | 
| 363 | bl __setup_mmu | 363 | bl __setup_mmu | 
| 364 | mov r0, #0 | 364 | mov r0, #0 | 
| @@ -367,24 +367,24 @@ __armv4_cache_on: | |||
| 367 | mrc p15, 0, r0, c1, c0, 0 @ read control reg | 367 | mrc p15, 0, r0, c1, c0, 0 @ read control reg | 
| 368 | orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement | 368 | orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement | 
| 369 | orr r0, r0, #0x0030 | 369 | orr r0, r0, #0x0030 | 
| 370 | bl __common_cache_on | 370 | bl __common_mmu_cache_on | 
| 371 | mov r0, #0 | 371 | mov r0, #0 | 
| 372 | mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs | 372 | mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs | 
| 373 | mov pc, r12 | 373 | mov pc, r12 | 
| 374 | 374 | ||
| 375 | __arm6_cache_on: | 375 | __arm6_mmu_cache_on: | 
| 376 | mov r12, lr | 376 | mov r12, lr | 
| 377 | bl __setup_mmu | 377 | bl __setup_mmu | 
| 378 | mov r0, #0 | 378 | mov r0, #0 | 
| 379 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 379 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 
| 380 | mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3 | 380 | mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3 | 
| 381 | mov r0, #0x30 | 381 | mov r0, #0x30 | 
| 382 | bl __common_cache_on | 382 | bl __common_mmu_cache_on | 
| 383 | mov r0, #0 | 383 | mov r0, #0 | 
| 384 | mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3 | 384 | mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3 | 
| 385 | mov pc, r12 | 385 | mov pc, r12 | 
| 386 | 386 | ||
| 387 | __common_cache_on: | 387 | __common_mmu_cache_on: | 
| 388 | #ifndef DEBUG | 388 | #ifndef DEBUG | 
| 389 | orr r0, r0, #0x000d @ Write buffer, mmu | 389 | orr r0, r0, #0x000d @ Write buffer, mmu | 
| 390 | #endif | 390 | #endif | 
| @@ -471,12 +471,12 @@ call_cache_fn: adr r12, proc_types | |||
| 471 | proc_types: | 471 | proc_types: | 
| 472 | .word 0x41560600 @ ARM6/610 | 472 | .word 0x41560600 @ ARM6/610 | 
| 473 | .word 0xffffffe0 | 473 | .word 0xffffffe0 | 
| 474 | b __arm6_cache_off @ works, but slow | 474 | b __arm6_mmu_cache_off @ works, but slow | 
| 475 | b __arm6_cache_off | 475 | b __arm6_mmu_cache_off | 
| 476 | mov pc, lr | 476 | mov pc, lr | 
| 477 | @ b __arm6_cache_on @ untested | 477 | @ b __arm6_mmu_cache_on @ untested | 
| 478 | @ b __arm6_cache_off | 478 | @ b __arm6_mmu_cache_off | 
| 479 | @ b __armv3_cache_flush | 479 | @ b __armv3_mmu_cache_flush | 
| 480 | 480 | ||
| 481 | .word 0x00000000 @ old ARM ID | 481 | .word 0x00000000 @ old ARM ID | 
| 482 | .word 0x0000f000 | 482 | .word 0x0000f000 | 
| @@ -486,14 +486,14 @@ proc_types: | |||
| 486 | 486 | ||
| 487 | .word 0x41007000 @ ARM7/710 | 487 | .word 0x41007000 @ ARM7/710 | 
| 488 | .word 0xfff8fe00 | 488 | .word 0xfff8fe00 | 
| 489 | b __arm7_cache_off | 489 | b __arm7_mmu_cache_off | 
| 490 | b __arm7_cache_off | 490 | b __arm7_mmu_cache_off | 
| 491 | mov pc, lr | 491 | mov pc, lr | 
| 492 | 492 | ||
| 493 | .word 0x41807200 @ ARM720T (writethrough) | 493 | .word 0x41807200 @ ARM720T (writethrough) | 
| 494 | .word 0xffffff00 | 494 | .word 0xffffff00 | 
| 495 | b __armv4_cache_on | 495 | b __armv4_mmu_cache_on | 
| 496 | b __armv4_cache_off | 496 | b __armv4_mmu_cache_off | 
| 497 | mov pc, lr | 497 | mov pc, lr | 
| 498 | 498 | ||
| 499 | .word 0x00007000 @ ARM7 IDs | 499 | .word 0x00007000 @ ARM7 IDs | 
| @@ -506,41 +506,41 @@ proc_types: | |||
| 506 | 506 | ||
| 507 | .word 0x4401a100 @ sa110 / sa1100 | 507 | .word 0x4401a100 @ sa110 / sa1100 | 
| 508 | .word 0xffffffe0 | 508 | .word 0xffffffe0 | 
| 509 | b __armv4_cache_on | 509 | b __armv4_mmu_cache_on | 
| 510 | b __armv4_cache_off | 510 | b __armv4_mmu_cache_off | 
| 511 | b __armv4_cache_flush | 511 | b __armv4_mmu_cache_flush | 
| 512 | 512 | ||
| 513 | .word 0x6901b110 @ sa1110 | 513 | .word 0x6901b110 @ sa1110 | 
| 514 | .word 0xfffffff0 | 514 | .word 0xfffffff0 | 
| 515 | b __armv4_cache_on | 515 | b __armv4_mmu_cache_on | 
| 516 | b __armv4_cache_off | 516 | b __armv4_mmu_cache_off | 
| 517 | b __armv4_cache_flush | 517 | b __armv4_mmu_cache_flush | 
| 518 | 518 | ||
| 519 | @ These match on the architecture ID | 519 | @ These match on the architecture ID | 
| 520 | 520 | ||
| 521 | .word 0x00020000 @ ARMv4T | 521 | .word 0x00020000 @ ARMv4T | 
| 522 | .word 0x000f0000 | 522 | .word 0x000f0000 | 
| 523 | b __armv4_cache_on | 523 | b __armv4_mmu_cache_on | 
| 524 | b __armv4_cache_off | 524 | b __armv4_mmu_cache_off | 
| 525 | b __armv4_cache_flush | 525 | b __armv4_mmu_cache_flush | 
| 526 | 526 | ||
| 527 | .word 0x00050000 @ ARMv5TE | 527 | .word 0x00050000 @ ARMv5TE | 
| 528 | .word 0x000f0000 | 528 | .word 0x000f0000 | 
| 529 | b __armv4_cache_on | 529 | b __armv4_mmu_cache_on | 
| 530 | b __armv4_cache_off | 530 | b __armv4_mmu_cache_off | 
| 531 | b __armv4_cache_flush | 531 | b __armv4_mmu_cache_flush | 
| 532 | 532 | ||
| 533 | .word 0x00060000 @ ARMv5TEJ | 533 | .word 0x00060000 @ ARMv5TEJ | 
| 534 | .word 0x000f0000 | 534 | .word 0x000f0000 | 
| 535 | b __armv4_cache_on | 535 | b __armv4_mmu_cache_on | 
| 536 | b __armv4_cache_off | 536 | b __armv4_mmu_cache_off | 
| 537 | b __armv4_cache_flush | 537 | b __armv4_mmu_cache_flush | 
| 538 | 538 | ||
| 539 | .word 0x00070000 @ ARMv6 | 539 | .word 0x00070000 @ ARMv6 | 
| 540 | .word 0x000f0000 | 540 | .word 0x000f0000 | 
| 541 | b __armv4_cache_on | 541 | b __armv4_mmu_cache_on | 
| 542 | b __armv4_cache_off | 542 | b __armv4_mmu_cache_off | 
| 543 | b __armv6_cache_flush | 543 | b __armv6_mmu_cache_flush | 
| 544 | 544 | ||
| 545 | .word 0 @ unrecognised type | 545 | .word 0 @ unrecognised type | 
| 546 | .word 0 | 546 | .word 0 | 
| @@ -562,7 +562,7 @@ proc_types: | |||
| 562 | cache_off: mov r3, #12 @ cache_off function | 562 | cache_off: mov r3, #12 @ cache_off function | 
| 563 | b call_cache_fn | 563 | b call_cache_fn | 
| 564 | 564 | ||
| 565 | __armv4_cache_off: | 565 | __armv4_mmu_cache_off: | 
| 566 | mrc p15, 0, r0, c1, c0 | 566 | mrc p15, 0, r0, c1, c0 | 
| 567 | bic r0, r0, #0x000d | 567 | bic r0, r0, #0x000d | 
| 568 | mcr p15, 0, r0, c1, c0 @ turn MMU and cache off | 568 | mcr p15, 0, r0, c1, c0 @ turn MMU and cache off | 
| @@ -571,15 +571,15 @@ __armv4_cache_off: | |||
| 571 | mcr p15, 0, r0, c8, c7 @ invalidate whole TLB v4 | 571 | mcr p15, 0, r0, c8, c7 @ invalidate whole TLB v4 | 
| 572 | mov pc, lr | 572 | mov pc, lr | 
| 573 | 573 | ||
| 574 | __arm6_cache_off: | 574 | __arm6_mmu_cache_off: | 
| 575 | mov r0, #0x00000030 @ ARM6 control reg. | 575 | mov r0, #0x00000030 @ ARM6 control reg. | 
| 576 | b __armv3_cache_off | 576 | b __armv3_mmu_cache_off | 
| 577 | 577 | ||
| 578 | __arm7_cache_off: | 578 | __arm7_mmu_cache_off: | 
| 579 | mov r0, #0x00000070 @ ARM7 control reg. | 579 | mov r0, #0x00000070 @ ARM7 control reg. | 
| 580 | b __armv3_cache_off | 580 | b __armv3_mmu_cache_off | 
| 581 | 581 | ||
| 582 | __armv3_cache_off: | 582 | __armv3_mmu_cache_off: | 
| 583 | mcr p15, 0, r0, c1, c0, 0 @ turn MMU and cache off | 583 | mcr p15, 0, r0, c1, c0, 0 @ turn MMU and cache off | 
| 584 | mov r0, #0 | 584 | mov r0, #0 | 
| 585 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 585 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 
| @@ -601,7 +601,7 @@ cache_clean_flush: | |||
| 601 | mov r3, #16 | 601 | mov r3, #16 | 
| 602 | b call_cache_fn | 602 | b call_cache_fn | 
| 603 | 603 | ||
| 604 | __armv6_cache_flush: | 604 | __armv6_mmu_cache_flush: | 
| 605 | mov r1, #0 | 605 | mov r1, #0 | 
| 606 | mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D | 606 | mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D | 
| 607 | mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB | 607 | mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB | 
| @@ -609,7 +609,7 @@ __armv6_cache_flush: | |||
| 609 | mcr p15, 0, r1, c7, c10, 4 @ drain WB | 609 | mcr p15, 0, r1, c7, c10, 4 @ drain WB | 
| 610 | mov pc, lr | 610 | mov pc, lr | 
| 611 | 611 | ||
| 612 | __armv4_cache_flush: | 612 | __armv4_mmu_cache_flush: | 
| 613 | mov r2, #64*1024 @ default: 32K dcache size (*2) | 613 | mov r2, #64*1024 @ default: 32K dcache size (*2) | 
| 614 | mov r11, #32 @ default: 32 byte line size | 614 | mov r11, #32 @ default: 32 byte line size | 
| 615 | mrc p15, 0, r3, c0, c0, 1 @ read cache type | 615 | mrc p15, 0, r3, c0, c0, 1 @ read cache type | 
| @@ -637,7 +637,7 @@ no_cache_id: | |||
| 637 | mcr p15, 0, r1, c7, c10, 4 @ drain WB | 637 | mcr p15, 0, r1, c7, c10, 4 @ drain WB | 
| 638 | mov pc, lr | 638 | mov pc, lr | 
| 639 | 639 | ||
| 640 | __armv3_cache_flush: | 640 | __armv3_mmu_cache_flush: | 
| 641 | mov r1, #0 | 641 | mov r1, #0 | 
| 642 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 642 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 
| 643 | mov pc, lr | 643 | mov pc, lr | 
| diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 84277fe818a1..53b6901f70a6 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -81,6 +81,7 @@ | |||
| 81 | ENTRY(stext) | 81 | ENTRY(stext) | 
| 82 | msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode | 82 | msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode | 
| 83 | @ and irqs disabled | 83 | @ and irqs disabled | 
| 84 | mrc p15, 0, r9, c0, c0 @ get processor id | ||
| 84 | bl __lookup_processor_type @ r5=procinfo r9=cpuid | 85 | bl __lookup_processor_type @ r5=procinfo r9=cpuid | 
| 85 | movs r10, r5 @ invalid processor (r5=0)? | 86 | movs r10, r5 @ invalid processor (r5=0)? | 
| 86 | beq __error_p @ yes, error 'p' | 87 | beq __error_p @ yes, error 'p' | 
| @@ -155,6 +156,7 @@ ENTRY(secondary_startup) | |||
| 155 | * as it has already been validated by the primary processor. | 156 | * as it has already been validated by the primary processor. | 
| 156 | */ | 157 | */ | 
| 157 | msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC | 158 | msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC | 
| 159 | mrc p15, 0, r9, c0, c0 @ get processor id | ||
| 158 | bl __lookup_processor_type | 160 | bl __lookup_processor_type | 
| 159 | movs r10, r5 @ invalid processor? | 161 | movs r10, r5 @ invalid processor? | 
| 160 | moveq r0, #'p' @ yes, error 'p' | 162 | moveq r0, #'p' @ yes, error 'p' | 
| @@ -449,19 +451,19 @@ __error: | |||
| 449 | * (and therefore, we are not in the correct address space). We have to | 451 | * (and therefore, we are not in the correct address space). We have to | 
| 450 | * calculate the offset. | 452 | * calculate the offset. | 
| 451 | * | 453 | * | 
| 454 | * r9 = cpuid | ||
| 452 | * Returns: | 455 | * Returns: | 
| 453 | * r3, r4, r6 corrupted | 456 | * r3, r4, r6 corrupted | 
| 454 | * r5 = proc_info pointer in physical address space | 457 | * r5 = proc_info pointer in physical address space | 
| 455 | * r9 = cpuid | 458 | * r9 = cpuid (preserved) | 
| 456 | */ | 459 | */ | 
| 457 | .type __lookup_processor_type, %function | 460 | .type __lookup_processor_type, %function | 
| 458 | __lookup_processor_type: | 461 | __lookup_processor_type: | 
| 459 | adr r3, 3f | 462 | adr r3, 3f | 
| 460 | ldmda r3, {r5, r6, r9} | 463 | ldmda r3, {r5 - r7} | 
| 461 | sub r3, r3, r9 @ get offset between virt&phys | 464 | sub r3, r3, r7 @ get offset between virt&phys | 
| 462 | add r5, r5, r3 @ convert virt addresses to | 465 | add r5, r5, r3 @ convert virt addresses to | 
| 463 | add r6, r6, r3 @ physical address space | 466 | add r6, r6, r3 @ physical address space | 
| 464 | mrc p15, 0, r9, c0, c0 @ get processor id | ||
| 465 | 1: ldmia r5, {r3, r4} @ value, mask | 467 | 1: ldmia r5, {r3, r4} @ value, mask | 
| 466 | and r4, r4, r9 @ mask wanted bits | 468 | and r4, r4, r9 @ mask wanted bits | 
| 467 | teq r3, r4 | 469 | teq r3, r4 | 
| @@ -476,10 +478,11 @@ __lookup_processor_type: | |||
| 476 | * This provides a C-API version of the above function. | 478 | * This provides a C-API version of the above function. | 
| 477 | */ | 479 | */ | 
| 478 | ENTRY(lookup_processor_type) | 480 | ENTRY(lookup_processor_type) | 
| 479 | stmfd sp!, {r4 - r6, r9, lr} | 481 | stmfd sp!, {r4 - r7, r9, lr} | 
| 482 | mov r9, r0 | ||
| 480 | bl __lookup_processor_type | 483 | bl __lookup_processor_type | 
| 481 | mov r0, r5 | 484 | mov r0, r5 | 
| 482 | ldmfd sp!, {r4 - r6, r9, pc} | 485 | ldmfd sp!, {r4 - r7, r9, pc} | 
| 483 | 486 | ||
| 484 | /* | 487 | /* | 
| 485 | * Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for | 488 | * Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for | 
| diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 08974cbe9824..b7cd280bfd63 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -278,7 +278,7 @@ int cpu_architecture(void) | |||
| 278 | * These functions re-use the assembly code in head.S, which | 278 | * These functions re-use the assembly code in head.S, which | 
| 279 | * already provide the required functionality. | 279 | * already provide the required functionality. | 
| 280 | */ | 280 | */ | 
| 281 | extern struct proc_info_list *lookup_processor_type(void); | 281 | extern struct proc_info_list *lookup_processor_type(unsigned int); | 
| 282 | extern struct machine_desc *lookup_machine_type(unsigned int); | 282 | extern struct machine_desc *lookup_machine_type(unsigned int); | 
| 283 | 283 | ||
| 284 | static void __init setup_processor(void) | 284 | static void __init setup_processor(void) | 
| @@ -290,7 +290,7 @@ static void __init setup_processor(void) | |||
| 290 | * types. The linker builds this table for us from the | 290 | * types. The linker builds this table for us from the | 
| 291 | * entries in arch/arm/mm/proc-*.S | 291 | * entries in arch/arm/mm/proc-*.S | 
| 292 | */ | 292 | */ | 
| 293 | list = lookup_processor_type(); | 293 | list = lookup_processor_type(processor_id); | 
| 294 | if (!list) { | 294 | if (!list) { | 
| 295 | printk("CPU configuration botched (ID %08x), unable " | 295 | printk("CPU configuration botched (ID %08x), unable " | 
| 296 | "to continue.\n", processor_id); | 296 | "to continue.\n", processor_id); | 
| diff --git a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c index a491de2d9024..8170af471439 100644 --- a/arch/arm/kernel/sys_arm.c +++ b/arch/arm/kernel/sys_arm.c | |||
| @@ -234,7 +234,12 @@ asmlinkage int sys_ipc(uint call, int first, int second, int third, | |||
| 234 | */ | 234 | */ | 
| 235 | asmlinkage int sys_fork(struct pt_regs *regs) | 235 | asmlinkage int sys_fork(struct pt_regs *regs) | 
| 236 | { | 236 | { | 
| 237 | #ifdef CONFIG_MMU | ||
| 237 | return do_fork(SIGCHLD, regs->ARM_sp, regs, 0, NULL, NULL); | 238 | return do_fork(SIGCHLD, regs->ARM_sp, regs, 0, NULL, NULL); | 
| 239 | #else | ||
| 240 | /* can not support in nommu mode */ | ||
| 241 | return(-EINVAL); | ||
| 242 | #endif | ||
| 238 | } | 243 | } | 
| 239 | 244 | ||
| 240 | /* Clone a task - this clones the calling program thread. | 245 | /* Clone a task - this clones the calling program thread. | 
| diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c index a599bb0d4ab8..c58f12ba7a93 100644 --- a/arch/arm/mach-sa1100/assabet.c +++ b/arch/arm/mach-sa1100/assabet.c | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <asm/irq.h> | 26 | #include <asm/irq.h> | 
| 27 | #include <asm/setup.h> | 27 | #include <asm/setup.h> | 
| 28 | #include <asm/page.h> | 28 | #include <asm/page.h> | 
| 29 | #include <asm/pgtable-hwdef.h> | ||
| 29 | #include <asm/pgtable.h> | 30 | #include <asm/pgtable.h> | 
| 30 | #include <asm/tlbflush.h> | 31 | #include <asm/tlbflush.h> | 
| 31 | 32 | ||
| diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index eaaec90db972..e680c5fd93b5 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
| @@ -266,12 +266,18 @@ config CPU_32v6K | |||
| 266 | # This defines the compiler instruction set which depends on the machine type. | 266 | # This defines the compiler instruction set which depends on the machine type. | 
| 267 | config CPU_32v3 | 267 | config CPU_32v3 | 
| 268 | bool | 268 | bool | 
| 269 | select TLS_REG_EMUL if SMP | ||
| 270 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | ||
| 269 | 271 | ||
| 270 | config CPU_32v4 | 272 | config CPU_32v4 | 
| 271 | bool | 273 | bool | 
| 274 | select TLS_REG_EMUL if SMP | ||
| 275 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | ||
| 272 | 276 | ||
| 273 | config CPU_32v5 | 277 | config CPU_32v5 | 
| 274 | bool | 278 | bool | 
| 279 | select TLS_REG_EMUL if SMP | ||
| 280 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | ||
| 275 | 281 | ||
| 276 | config CPU_32v6 | 282 | config CPU_32v6 | 
| 277 | bool | 283 | bool | 
| @@ -417,7 +423,6 @@ config CPU_BPREDICT_DISABLE | |||
| 417 | 423 | ||
| 418 | config TLS_REG_EMUL | 424 | config TLS_REG_EMUL | 
| 419 | bool | 425 | bool | 
| 420 | default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3) | ||
| 421 | help | 426 | help | 
| 422 | An SMP system using a pre-ARMv6 processor (there are apparently | 427 | An SMP system using a pre-ARMv6 processor (there are apparently | 
| 423 | a few prototypes like that in existence) and therefore access to | 428 | a few prototypes like that in existence) and therefore access to | 
| @@ -436,7 +441,6 @@ config HAS_TLS_REG | |||
| 436 | 441 | ||
| 437 | config NEEDS_SYSCALL_FOR_CMPXCHG | 442 | config NEEDS_SYSCALL_FOR_CMPXCHG | 
| 438 | bool | 443 | bool | 
| 439 | default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3) | ||
| 440 | help | 444 | help | 
| 441 | SMP on a pre-ARMv6 processor? Well OK then. | 445 | SMP on a pre-ARMv6 processor? Well OK then. | 
| 442 | Forget about fast user space cmpxchg support. | 446 | Forget about fast user space cmpxchg support. | 
| diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S index 3aa80094012c..959588884fa5 100644 --- a/arch/arm/mm/proc-arm1020.S +++ b/arch/arm/mm/proc-arm1020.S | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/init.h> | 29 | #include <linux/init.h> | 
| 30 | #include <asm/assembler.h> | 30 | #include <asm/assembler.h> | 
| 31 | #include <asm/asm-offsets.h> | 31 | #include <asm/asm-offsets.h> | 
| 32 | #include <asm/pgtable-hwdef.h> | ||
| 32 | #include <asm/pgtable.h> | 33 | #include <asm/pgtable.h> | 
| 33 | #include <asm/procinfo.h> | 34 | #include <asm/procinfo.h> | 
| 34 | #include <asm/ptrace.h> | 35 | #include <asm/ptrace.h> | 
| diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S index 767d158f211a..be6d081ff2b7 100644 --- a/arch/arm/mm/proc-arm1020e.S +++ b/arch/arm/mm/proc-arm1020e.S | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/init.h> | 29 | #include <linux/init.h> | 
| 30 | #include <asm/assembler.h> | 30 | #include <asm/assembler.h> | 
| 31 | #include <asm/asm-offsets.h> | 31 | #include <asm/asm-offsets.h> | 
| 32 | #include <asm/pgtable-hwdef.h> | ||
| 32 | #include <asm/pgtable.h> | 33 | #include <asm/pgtable.h> | 
| 33 | #include <asm/procinfo.h> | 34 | #include <asm/procinfo.h> | 
| 34 | #include <asm/ptrace.h> | 35 | #include <asm/ptrace.h> | 
| diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S index 6ca639094d6f..f778545d57a2 100644 --- a/arch/arm/mm/proc-arm1022.S +++ b/arch/arm/mm/proc-arm1022.S | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> | 
| 19 | #include <asm/assembler.h> | 19 | #include <asm/assembler.h> | 
| 20 | #include <asm/asm-offsets.h> | 20 | #include <asm/asm-offsets.h> | 
| 21 | #include <asm/pgtable-hwdef.h> | ||
| 21 | #include <asm/pgtable.h> | 22 | #include <asm/pgtable.h> | 
| 22 | #include <asm/procinfo.h> | 23 | #include <asm/procinfo.h> | 
| 23 | #include <asm/ptrace.h> | 24 | #include <asm/ptrace.h> | 
| diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S index 10317e4f55d2..148c111fde73 100644 --- a/arch/arm/mm/proc-arm1026.S +++ b/arch/arm/mm/proc-arm1026.S | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> | 
| 19 | #include <asm/assembler.h> | 19 | #include <asm/assembler.h> | 
| 20 | #include <asm/asm-offsets.h> | 20 | #include <asm/asm-offsets.h> | 
| 21 | #include <asm/pgtable-hwdef.h> | ||
| 21 | #include <asm/pgtable.h> | 22 | #include <asm/pgtable.h> | 
| 22 | #include <asm/procinfo.h> | 23 | #include <asm/procinfo.h> | 
| 23 | #include <asm/ptrace.h> | 24 | #include <asm/ptrace.h> | 
| diff --git a/arch/arm/mm/proc-arm6_7.S b/arch/arm/mm/proc-arm6_7.S index 8e7e1e70ab05..540359b475d0 100644 --- a/arch/arm/mm/proc-arm6_7.S +++ b/arch/arm/mm/proc-arm6_7.S | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/init.h> | 14 | #include <linux/init.h> | 
| 15 | #include <asm/assembler.h> | 15 | #include <asm/assembler.h> | 
| 16 | #include <asm/asm-offsets.h> | 16 | #include <asm/asm-offsets.h> | 
| 17 | #include <asm/pgtable-hwdef.h> | ||
| 17 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> | 
| 18 | #include <asm/procinfo.h> | 19 | #include <asm/procinfo.h> | 
| 19 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> | 
| diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S index 471286fdf78f..26f00ee2ad9a 100644 --- a/arch/arm/mm/proc-arm720.S +++ b/arch/arm/mm/proc-arm720.S | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/init.h> | 34 | #include <linux/init.h> | 
| 35 | #include <asm/assembler.h> | 35 | #include <asm/assembler.h> | 
| 36 | #include <asm/asm-offsets.h> | 36 | #include <asm/asm-offsets.h> | 
| 37 | #include <asm/pgtable-hwdef.h> | ||
| 37 | #include <asm/pgtable.h> | 38 | #include <asm/pgtable.h> | 
| 38 | #include <asm/procinfo.h> | 39 | #include <asm/procinfo.h> | 
| 39 | #include <asm/ptrace.h> | 40 | #include <asm/ptrace.h> | 
| diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S index 950d3b664c1e..a17f79e0199c 100644 --- a/arch/arm/mm/proc-arm920.S +++ b/arch/arm/mm/proc-arm920.S | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/config.h> | 28 | #include <linux/config.h> | 
| 29 | #include <linux/init.h> | 29 | #include <linux/init.h> | 
| 30 | #include <asm/assembler.h> | 30 | #include <asm/assembler.h> | 
| 31 | #include <asm/pgtable-hwdef.h> | ||
| 31 | #include <asm/pgtable.h> | 32 | #include <asm/pgtable.h> | 
| 32 | #include <asm/procinfo.h> | 33 | #include <asm/procinfo.h> | 
| 33 | #include <asm/page.h> | 34 | #include <asm/page.h> | 
| diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S index 410b032faa3b..bbde4a024a48 100644 --- a/arch/arm/mm/proc-arm922.S +++ b/arch/arm/mm/proc-arm922.S | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/config.h> | 29 | #include <linux/config.h> | 
| 30 | #include <linux/init.h> | 30 | #include <linux/init.h> | 
| 31 | #include <asm/assembler.h> | 31 | #include <asm/assembler.h> | 
| 32 | #include <asm/pgtable-hwdef.h> | ||
| 32 | #include <asm/pgtable.h> | 33 | #include <asm/pgtable.h> | 
| 33 | #include <asm/procinfo.h> | 34 | #include <asm/procinfo.h> | 
| 34 | #include <asm/page.h> | 35 | #include <asm/page.h> | 
| diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S index 6dd2be7cd050..224ce226a01b 100644 --- a/arch/arm/mm/proc-arm925.S +++ b/arch/arm/mm/proc-arm925.S | |||
| @@ -51,6 +51,7 @@ | |||
| 51 | #include <linux/config.h> | 51 | #include <linux/config.h> | 
| 52 | #include <linux/init.h> | 52 | #include <linux/init.h> | 
| 53 | #include <asm/assembler.h> | 53 | #include <asm/assembler.h> | 
| 54 | #include <asm/pgtable-hwdef.h> | ||
| 54 | #include <asm/pgtable.h> | 55 | #include <asm/pgtable.h> | 
| 55 | #include <asm/procinfo.h> | 56 | #include <asm/procinfo.h> | 
| 56 | #include <asm/page.h> | 57 | #include <asm/page.h> | 
| diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S index 022e86842041..4e2a087cf388 100644 --- a/arch/arm/mm/proc-arm926.S +++ b/arch/arm/mm/proc-arm926.S | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/config.h> | 28 | #include <linux/config.h> | 
| 29 | #include <linux/init.h> | 29 | #include <linux/init.h> | 
| 30 | #include <asm/assembler.h> | 30 | #include <asm/assembler.h> | 
| 31 | #include <asm/pgtable-hwdef.h> | ||
| 31 | #include <asm/pgtable.h> | 32 | #include <asm/pgtable.h> | 
| 32 | #include <asm/procinfo.h> | 33 | #include <asm/procinfo.h> | 
| 33 | #include <asm/page.h> | 34 | #include <asm/page.h> | 
| diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S index bd330c4075a1..c916a6cae404 100644 --- a/arch/arm/mm/proc-sa110.S +++ b/arch/arm/mm/proc-sa110.S | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <asm/asm-offsets.h> | 18 | #include <asm/asm-offsets.h> | 
| 19 | #include <asm/procinfo.h> | 19 | #include <asm/procinfo.h> | 
| 20 | #include <asm/hardware.h> | 20 | #include <asm/hardware.h> | 
| 21 | #include <asm/pgtable-hwdef.h> | ||
| 21 | #include <asm/pgtable.h> | 22 | #include <asm/pgtable.h> | 
| 22 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> | 
| 23 | 24 | ||
| diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S index 91b89124c0d7..41f21f2dd8ff 100644 --- a/arch/arm/mm/proc-sa1100.S +++ b/arch/arm/mm/proc-sa1100.S | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <asm/asm-offsets.h> | 23 | #include <asm/asm-offsets.h> | 
| 24 | #include <asm/procinfo.h> | 24 | #include <asm/procinfo.h> | 
| 25 | #include <asm/hardware.h> | 25 | #include <asm/hardware.h> | 
| 26 | #include <asm/pgtable-hwdef.h> | ||
| 26 | #include <asm/pgtable.h> | 27 | #include <asm/pgtable.h> | 
| 27 | 28 | ||
| 28 | /* | 29 | /* | 
| diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 92f3ca31b7b9..9a7e7c096aa9 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <asm/asm-offsets.h> | 14 | #include <asm/asm-offsets.h> | 
| 15 | #include <asm/hardware/arm_scu.h> | 15 | #include <asm/hardware/arm_scu.h> | 
| 16 | #include <asm/procinfo.h> | 16 | #include <asm/procinfo.h> | 
| 17 | #include <asm/pgtable-hwdef.h> | ||
| 17 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> | 
| 18 | 19 | ||
| 19 | #include "proc-macros.S" | 20 | #include "proc-macros.S" | 
| diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S index b50f87a0ee76..29bcc4dd6517 100644 --- a/arch/arm/mm/proc-xscale.S +++ b/arch/arm/mm/proc-xscale.S | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <asm/assembler.h> | 25 | #include <asm/assembler.h> | 
| 26 | #include <asm/procinfo.h> | 26 | #include <asm/procinfo.h> | 
| 27 | #include <asm/pgtable.h> | 27 | #include <asm/pgtable.h> | 
| 28 | #include <asm/pgtable-hwdef.h> | ||
| 28 | #include <asm/page.h> | 29 | #include <asm/page.h> | 
| 29 | #include <asm/ptrace.h> | 30 | #include <asm/ptrace.h> | 
| 30 | #include "proc-macros.S" | 31 | #include "proc-macros.S" | 
| diff --git a/include/asm-arm/pgalloc.h b/include/asm-arm/pgalloc.h index bc18ff405181..c4ac2e67768d 100644 --- a/include/asm-arm/pgalloc.h +++ b/include/asm-arm/pgalloc.h | |||
| @@ -10,10 +10,15 @@ | |||
| 10 | #ifndef _ASMARM_PGALLOC_H | 10 | #ifndef _ASMARM_PGALLOC_H | 
| 11 | #define _ASMARM_PGALLOC_H | 11 | #define _ASMARM_PGALLOC_H | 
| 12 | 12 | ||
| 13 | #include <asm/domain.h> | ||
| 14 | #include <asm/pgtable-hwdef.h> | ||
| 13 | #include <asm/processor.h> | 15 | #include <asm/processor.h> | 
| 14 | #include <asm/cacheflush.h> | 16 | #include <asm/cacheflush.h> | 
| 15 | #include <asm/tlbflush.h> | 17 | #include <asm/tlbflush.h> | 
| 16 | 18 | ||
| 19 | #define _PAGE_USER_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_USER)) | ||
| 20 | #define _PAGE_KERNEL_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_KERNEL)) | ||
| 21 | |||
| 17 | /* | 22 | /* | 
| 18 | * Since we have only two-level page tables, these are trivial | 23 | * Since we have only two-level page tables, these are trivial | 
| 19 | */ | 24 | */ | 
| diff --git a/include/asm-arm/pgtable-hwdef.h b/include/asm-arm/pgtable-hwdef.h new file mode 100644 index 000000000000..1d033495cc75 --- /dev/null +++ b/include/asm-arm/pgtable-hwdef.h | |||
| @@ -0,0 +1,88 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/asm-arm/pgtable-hwdef.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 1995-2002 Russell King | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | #ifndef _ASMARM_PGTABLE_HWDEF_H | ||
| 11 | #define _ASMARM_PGTABLE_HWDEF_H | ||
| 12 | |||
| 13 | /* | ||
| 14 | * Hardware page table definitions. | ||
| 15 | * | ||
| 16 | * + Level 1 descriptor (PMD) | ||
| 17 | * - common | ||
| 18 | */ | ||
| 19 | #define PMD_TYPE_MASK (3 << 0) | ||
| 20 | #define PMD_TYPE_FAULT (0 << 0) | ||
| 21 | #define PMD_TYPE_TABLE (1 << 0) | ||
| 22 | #define PMD_TYPE_SECT (2 << 0) | ||
| 23 | #define PMD_BIT4 (1 << 4) | ||
| 24 | #define PMD_DOMAIN(x) ((x) << 5) | ||
| 25 | #define PMD_PROTECTION (1 << 9) /* v5 */ | ||
| 26 | /* | ||
| 27 | * - section | ||
| 28 | */ | ||
| 29 | #define PMD_SECT_BUFFERABLE (1 << 2) | ||
| 30 | #define PMD_SECT_CACHEABLE (1 << 3) | ||
| 31 | #define PMD_SECT_AP_WRITE (1 << 10) | ||
| 32 | #define PMD_SECT_AP_READ (1 << 11) | ||
| 33 | #define PMD_SECT_TEX(x) ((x) << 12) /* v5 */ | ||
| 34 | #define PMD_SECT_APX (1 << 15) /* v6 */ | ||
| 35 | #define PMD_SECT_S (1 << 16) /* v6 */ | ||
| 36 | #define PMD_SECT_nG (1 << 17) /* v6 */ | ||
| 37 | #define PMD_SECT_SUPER (1 << 18) /* v6 */ | ||
| 38 | |||
| 39 | #define PMD_SECT_UNCACHED (0) | ||
| 40 | #define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE) | ||
| 41 | #define PMD_SECT_WT (PMD_SECT_CACHEABLE) | ||
| 42 | #define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) | ||
| 43 | #define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE) | ||
| 44 | #define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) | ||
| 45 | #define PMD_SECT_NONSHARED_DEV (PMD_SECT_TEX(2)) | ||
| 46 | |||
| 47 | /* | ||
| 48 | * - coarse table (not used) | ||
| 49 | */ | ||
| 50 | |||
| 51 | /* | ||
| 52 | * + Level 2 descriptor (PTE) | ||
| 53 | * - common | ||
| 54 | */ | ||
| 55 | #define PTE_TYPE_MASK (3 << 0) | ||
| 56 | #define PTE_TYPE_FAULT (0 << 0) | ||
| 57 | #define PTE_TYPE_LARGE (1 << 0) | ||
| 58 | #define PTE_TYPE_SMALL (2 << 0) | ||
| 59 | #define PTE_TYPE_EXT (3 << 0) /* v5 */ | ||
| 60 | #define PTE_BUFFERABLE (1 << 2) | ||
| 61 | #define PTE_CACHEABLE (1 << 3) | ||
| 62 | |||
| 63 | /* | ||
| 64 | * - extended small page/tiny page | ||
| 65 | */ | ||
| 66 | #define PTE_EXT_XN (1 << 0) /* v6 */ | ||
| 67 | #define PTE_EXT_AP_MASK (3 << 4) | ||
| 68 | #define PTE_EXT_AP0 (1 << 4) | ||
| 69 | #define PTE_EXT_AP1 (2 << 4) | ||
| 70 | #define PTE_EXT_AP_UNO_SRO (0 << 4) | ||
| 71 | #define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0) | ||
| 72 | #define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1) | ||
| 73 | #define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0) | ||
| 74 | #define PTE_EXT_TEX(x) ((x) << 6) /* v5 */ | ||
| 75 | #define PTE_EXT_APX (1 << 9) /* v6 */ | ||
| 76 | #define PTE_EXT_SHARED (1 << 10) /* v6 */ | ||
| 77 | #define PTE_EXT_NG (1 << 11) /* v6 */ | ||
| 78 | |||
| 79 | /* | ||
| 80 | * - small page | ||
| 81 | */ | ||
| 82 | #define PTE_SMALL_AP_MASK (0xff << 4) | ||
| 83 | #define PTE_SMALL_AP_UNO_SRO (0x00 << 4) | ||
| 84 | #define PTE_SMALL_AP_UNO_SRW (0x55 << 4) | ||
| 85 | #define PTE_SMALL_AP_URO_SRW (0xaa << 4) | ||
| 86 | #define PTE_SMALL_AP_URW_SRW (0xff << 4) | ||
| 87 | |||
| 88 | #endif | ||
| diff --git a/include/asm-arm/pgtable.h b/include/asm-arm/pgtable.h index 70e00d08345e..e595ae24efe2 100644 --- a/include/asm-arm/pgtable.h +++ b/include/asm-arm/pgtable.h | |||
| @@ -137,81 +137,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val); | |||
| 137 | #define SUPERSECTION_MASK (~(SUPERSECTION_SIZE-1)) | 137 | #define SUPERSECTION_MASK (~(SUPERSECTION_SIZE-1)) | 
| 138 | 138 | ||
| 139 | /* | 139 | /* | 
| 140 | * Hardware page table definitions. | ||
| 141 | * | ||
| 142 | * + Level 1 descriptor (PMD) | ||
| 143 | * - common | ||
| 144 | */ | ||
| 145 | #define PMD_TYPE_MASK (3 << 0) | ||
| 146 | #define PMD_TYPE_FAULT (0 << 0) | ||
| 147 | #define PMD_TYPE_TABLE (1 << 0) | ||
| 148 | #define PMD_TYPE_SECT (2 << 0) | ||
| 149 | #define PMD_BIT4 (1 << 4) | ||
| 150 | #define PMD_DOMAIN(x) ((x) << 5) | ||
| 151 | #define PMD_PROTECTION (1 << 9) /* v5 */ | ||
| 152 | /* | ||
| 153 | * - section | ||
| 154 | */ | ||
| 155 | #define PMD_SECT_BUFFERABLE (1 << 2) | ||
| 156 | #define PMD_SECT_CACHEABLE (1 << 3) | ||
| 157 | #define PMD_SECT_AP_WRITE (1 << 10) | ||
| 158 | #define PMD_SECT_AP_READ (1 << 11) | ||
| 159 | #define PMD_SECT_TEX(x) ((x) << 12) /* v5 */ | ||
| 160 | #define PMD_SECT_APX (1 << 15) /* v6 */ | ||
| 161 | #define PMD_SECT_S (1 << 16) /* v6 */ | ||
| 162 | #define PMD_SECT_nG (1 << 17) /* v6 */ | ||
| 163 | #define PMD_SECT_SUPER (1 << 18) /* v6 */ | ||
| 164 | |||
| 165 | #define PMD_SECT_UNCACHED (0) | ||
| 166 | #define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE) | ||
| 167 | #define PMD_SECT_WT (PMD_SECT_CACHEABLE) | ||
| 168 | #define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) | ||
| 169 | #define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE) | ||
| 170 | #define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) | ||
| 171 | #define PMD_SECT_NONSHARED_DEV (PMD_SECT_TEX(2)) | ||
| 172 | |||
| 173 | /* | ||
| 174 | * - coarse table (not used) | ||
| 175 | */ | ||
| 176 | |||
| 177 | /* | ||
| 178 | * + Level 2 descriptor (PTE) | ||
| 179 | * - common | ||
| 180 | */ | ||
| 181 | #define PTE_TYPE_MASK (3 << 0) | ||
| 182 | #define PTE_TYPE_FAULT (0 << 0) | ||
| 183 | #define PTE_TYPE_LARGE (1 << 0) | ||
| 184 | #define PTE_TYPE_SMALL (2 << 0) | ||
| 185 | #define PTE_TYPE_EXT (3 << 0) /* v5 */ | ||
| 186 | #define PTE_BUFFERABLE (1 << 2) | ||
| 187 | #define PTE_CACHEABLE (1 << 3) | ||
| 188 | |||
| 189 | /* | ||
| 190 | * - extended small page/tiny page | ||
| 191 | */ | ||
| 192 | #define PTE_EXT_XN (1 << 0) /* v6 */ | ||
| 193 | #define PTE_EXT_AP_MASK (3 << 4) | ||
| 194 | #define PTE_EXT_AP0 (1 << 4) | ||
| 195 | #define PTE_EXT_AP1 (2 << 4) | ||
| 196 | #define PTE_EXT_AP_UNO_SRO (0 << 4) | ||
| 197 | #define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0) | ||
| 198 | #define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1) | ||
| 199 | #define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0) | ||
| 200 | #define PTE_EXT_TEX(x) ((x) << 6) /* v5 */ | ||
| 201 | #define PTE_EXT_APX (1 << 9) /* v6 */ | ||
| 202 | #define PTE_EXT_SHARED (1 << 10) /* v6 */ | ||
| 203 | #define PTE_EXT_NG (1 << 11) /* v6 */ | ||
| 204 | |||
| 205 | /* | ||
| 206 | * - small page | ||
| 207 | */ | ||
| 208 | #define PTE_SMALL_AP_MASK (0xff << 4) | ||
| 209 | #define PTE_SMALL_AP_UNO_SRO (0x00 << 4) | ||
| 210 | #define PTE_SMALL_AP_UNO_SRW (0x55 << 4) | ||
| 211 | #define PTE_SMALL_AP_URO_SRW (0xaa << 4) | ||
| 212 | #define PTE_SMALL_AP_URW_SRW (0xff << 4) | ||
| 213 | |||
| 214 | /* | ||
| 215 | * "Linux" PTE definitions. | 140 | * "Linux" PTE definitions. | 
| 216 | * | 141 | * | 
| 217 | * We keep two sets of PTEs - the hardware and the linux version. | 142 | * We keep two sets of PTEs - the hardware and the linux version. | 
| @@ -236,11 +161,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val); | |||
| 236 | 161 | ||
| 237 | #ifndef __ASSEMBLY__ | 162 | #ifndef __ASSEMBLY__ | 
| 238 | 163 | ||
| 239 | #include <asm/domain.h> | ||
| 240 | |||
| 241 | #define _PAGE_USER_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_USER)) | ||
| 242 | #define _PAGE_KERNEL_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_KERNEL)) | ||
| 243 | |||
| 244 | /* | 164 | /* | 
| 245 | * The following macros handle the cache and bufferable bits... | 165 | * The following macros handle the cache and bufferable bits... | 
| 246 | */ | 166 | */ | 
| diff --git a/include/asm-arm/tlb.h b/include/asm-arm/tlb.h index f49bfb78c221..cb740025d413 100644 --- a/include/asm-arm/tlb.h +++ b/include/asm-arm/tlb.h | |||
| @@ -19,6 +19,14 @@ | |||
| 19 | 19 | ||
| 20 | #include <asm/cacheflush.h> | 20 | #include <asm/cacheflush.h> | 
| 21 | #include <asm/tlbflush.h> | 21 | #include <asm/tlbflush.h> | 
| 22 | |||
| 23 | #ifndef CONFIG_MMU | ||
| 24 | |||
| 25 | #include <linux/pagemap.h> | ||
| 26 | #include <asm-generic/tlb.h> | ||
| 27 | |||
| 28 | #else /* !CONFIG_MMU */ | ||
| 29 | |||
| 22 | #include <asm/pgalloc.h> | 30 | #include <asm/pgalloc.h> | 
| 23 | 31 | ||
| 24 | /* | 32 | /* | 
| @@ -82,4 +90,5 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma) | |||
| 82 | 90 | ||
| 83 | #define tlb_migrate_finish(mm) do { } while (0) | 91 | #define tlb_migrate_finish(mm) do { } while (0) | 
| 84 | 92 | ||
| 93 | #endif /* CONFIG_MMU */ | ||
| 85 | #endif | 94 | #endif | 
| diff --git a/include/asm-arm/tlbflush.h b/include/asm-arm/tlbflush.h index 0c2acc944a0a..728992451dd1 100644 --- a/include/asm-arm/tlbflush.h +++ b/include/asm-arm/tlbflush.h | |||
| @@ -11,6 +11,13 @@ | |||
| 11 | #define _ASMARM_TLBFLUSH_H | 11 | #define _ASMARM_TLBFLUSH_H | 
| 12 | 12 | ||
| 13 | #include <linux/config.h> | 13 | #include <linux/config.h> | 
| 14 | |||
| 15 | #ifndef CONFIG_MMU | ||
| 16 | |||
| 17 | #define tlb_flush(tlb) ((void) tlb) | ||
| 18 | |||
| 19 | #else /* CONFIG_MMU */ | ||
| 20 | |||
| 14 | #include <asm/glue.h> | 21 | #include <asm/glue.h> | 
| 15 | 22 | ||
| 16 | #define TLB_V3_PAGE (1 << 0) | 23 | #define TLB_V3_PAGE (1 << 0) | 
| @@ -423,4 +430,6 @@ extern void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte | |||
| 423 | 430 | ||
| 424 | #endif | 431 | #endif | 
| 425 | 432 | ||
| 433 | #endif /* CONFIG_MMU */ | ||
| 434 | |||
| 426 | #endif | 435 | #endif | 
