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 |
