diff options
author | Helge Deller <deller@gmx.de> | 2009-02-04 18:06:00 -0500 |
---|---|---|
committer | Kyle McMartin <kyle@mcmartin.ca> | 2009-03-30 22:51:33 -0400 |
commit | afca2523876301cc6130fc3cc402173eeeb89830 (patch) | |
tree | 1c4e64a6d3b133f13cadbe999fce3d275acb2e37 /arch/parisc/kernel | |
parent | 445c088f88d63db49598390be3525252d211688f (diff) |
parisc: allow to build with 16k default kernel page size
Introduce new convert_for_tlb_insert20 macro and use it to replace assembler
statements with hardcoded constants.
This change allows the parisc64 kernel to boot with 16kb default kernel page size,
aka CONFIG_PARISC_PAGE_SIZE_16KB=y.
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
Diffstat (limited to 'arch/parisc/kernel')
-rw-r--r-- | arch/parisc/kernel/entry.S | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 0f7ff938b06a..4e9dd15e076c 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S | |||
@@ -505,6 +505,18 @@ | |||
505 | STREG \pte,0(\ptep) | 505 | STREG \pte,0(\ptep) |
506 | .endm | 506 | .endm |
507 | 507 | ||
508 | /* bitshift difference between a PFN (based on kernel's PAGE_SIZE) | ||
509 | * to a CPU TLB 4k PFN (4k => 12 bits to shift) */ | ||
510 | #define PAGE_ADD_SHIFT (PAGE_SHIFT-12) | ||
511 | |||
512 | /* Drop prot bits and convert to page addr for iitlbt and idtlbt */ | ||
513 | .macro convert_for_tlb_insert20 pte | ||
514 | extrd,u \pte,(63-ASM_PFN_PTE_SHIFT)+(63-58)+PAGE_ADD_SHIFT,\ | ||
515 | 64-PAGE_SHIFT-PAGE_ADD_SHIFT,\pte | ||
516 | depdi _PAGE_SIZE_ENCODING_DEFAULT,63,\ | ||
517 | (63-58)+PAGE_ADD_SHIFT,\pte | ||
518 | .endm | ||
519 | |||
508 | /* Convert the pte and prot to tlb insertion values. How | 520 | /* Convert the pte and prot to tlb insertion values. How |
509 | * this happens is quite subtle, read below */ | 521 | * this happens is quite subtle, read below */ |
510 | .macro make_insert_tlb spc,pte,prot | 522 | .macro make_insert_tlb spc,pte,prot |
@@ -544,8 +556,7 @@ | |||
544 | depi 1,12,1,\prot | 556 | depi 1,12,1,\prot |
545 | 557 | ||
546 | /* Drop prot bits and convert to page addr for iitlbt and idtlbt */ | 558 | /* Drop prot bits and convert to page addr for iitlbt and idtlbt */ |
547 | extrd,u \pte,(63-ASM_PFN_PTE_SHIFT)+(63-58),64-PAGE_SHIFT,\pte | 559 | convert_for_tlb_insert20 \pte |
548 | depdi _PAGE_SIZE_ENCODING_DEFAULT,63,63-58,\pte | ||
549 | .endm | 560 | .endm |
550 | 561 | ||
551 | /* Identical macro to make_insert_tlb above, except it | 562 | /* Identical macro to make_insert_tlb above, except it |
@@ -1244,10 +1255,9 @@ nadtlb_check_flush_20w: | |||
1244 | depdi,z 7,7,3,prot | 1255 | depdi,z 7,7,3,prot |
1245 | depdi 1,10,1,prot | 1256 | depdi 1,10,1,prot |
1246 | 1257 | ||
1247 | /* Get rid of prot bits and convert to page addr for idtlbt */ | 1258 | /* Drop prot bits from pte and convert to page addr for idtlbt */ |
1259 | convert_for_tlb_insert20 pte | ||
1248 | 1260 | ||
1249 | depdi 0,63,12,pte | ||
1250 | extrd,u pte,56,52,pte | ||
1251 | idtlbt pte,prot | 1261 | idtlbt pte,prot |
1252 | 1262 | ||
1253 | rfir | 1263 | rfir |
@@ -1403,10 +1413,9 @@ nadtlb_check_flush_20: | |||
1403 | depdi,z 7,7,3,prot | 1413 | depdi,z 7,7,3,prot |
1404 | depdi 1,10,1,prot | 1414 | depdi 1,10,1,prot |
1405 | 1415 | ||
1406 | /* Get rid of prot bits and convert to page addr for idtlbt */ | 1416 | /* Drop prot bits from pte and convert to page addr for idtlbt */ |
1417 | convert_for_tlb_insert20 pte | ||
1407 | 1418 | ||
1408 | depdi 0,63,12,pte | ||
1409 | extrd,u pte,56,32,pte | ||
1410 | idtlbt pte,prot | 1419 | idtlbt pte,prot |
1411 | 1420 | ||
1412 | rfir | 1421 | rfir |