502502 STREG \pte,0 (\ptp)
503503 .endm
504504
505+ /* We have (depending on the page size):
506+ * - 38 to 52-bit Physical Page Number
507+ * - 12 to 26-bit page offset
508+ */
505509 /* bitshift difference between a PFN (based on kernel's PAGE_SIZE)
506510 * to a CPU TLB 4k PFN (4k => 12 bits to shift) */
507- #define PAGE_ADD_SHIFT (PAGE_SHIFT-12 )
511+ #define PAGE_ADD_SHIFT (PAGE_SHIFT-12 )
512+ #define PAGE_ADD_HUGE_SHIFT (REAL_HPAGE_SHIFT-12 )
508513
509514 /* Drop prot bits and convert to page addr for iitlbt and idtlbt */
510- .macro convert_for_tlb_insert20 pte
515+ .macro convert_for_tlb_insert20 pte,tmp
516+ #ifdef CONFIG_HUGETLB_PAGE
517+ copy \pte,\tmp
518+ extrd,u \tmp,(63 -ASM_PFN_PTE_SHIFT)+(63 -58 )+PAGE_ADD_SHIFT,\
519+ 64 -PAGE_SHIFT-PAGE_ADD_SHIFT,\pte
520+
521+ depdi _PAGE_SIZE_ENCODING_DEFAULT,63 ,\
522+ (63 -58 )+PAGE_ADD_SHIFT,\pte
523+ extrd,u,*= \tmp,_PAGE_HPAGE_BIT+32 ,1 ,%r0
524+ depdi _HUGE_PAGE_SIZE_ENCODING_DEFAULT,63 ,\
525+ (63 -58 )+PAGE_ADD_HUGE_SHIFT,\pte
526+ #else /* Huge pages disabled */
511527 extrd,u \pte,(63 -ASM_PFN_PTE_SHIFT)+(63 -58 )+PAGE_ADD_SHIFT,\
512528 64 -PAGE_SHIFT-PAGE_ADD_SHIFT,\pte
513529 depdi _PAGE_SIZE_ENCODING_DEFAULT,63 ,\
514530 (63 -58 )+PAGE_ADD_SHIFT,\pte
531+ #endif
515532 .endm
516533
517534 /* Convert the pte and prot to tlb insertion values. How
518535 * this happens is quite subtle, read below */
519- .macro make_insert_tlb spc,pte,prot
536+ .macro make_insert_tlb spc,pte,prot,tmp
520537 space_to_prot \spc \prot /* create prot id from space */
521538 /* The following is the real subtlety. This is depositing
522539 * T <-> _PAGE_REFTRAP
553570 depdi 1 ,12 ,1 ,\prot
554571
555572 /* Drop prot bits and convert to page addr for iitlbt and idtlbt */
556- convert_for_tlb_insert20 \pte
573+ convert_for_tlb_insert20 \pte \tmp
557574 .endm
558575
559576 /* Identical macro to make_insert_tlb above, except it
@@ -1142,7 +1159,7 @@ dtlb_miss_20w:
11421159 tlb_lock spc,ptp,pte,t0,t1,dtlb_check_alias_20w
11431160 update_accessed ptp,pte,t0,t1
11441161
1145- make_insert_tlb spc,pte,prot
1162+ make_insert_tlb spc,pte,prot,t1
11461163
11471164 idtlbt pte,prot
11481165
@@ -1168,7 +1185,7 @@ nadtlb_miss_20w:
11681185 tlb_lock spc,ptp,pte,t0,t1,nadtlb_check_alias_20w
11691186 update_accessed ptp,pte,t0,t1
11701187
1171- make_insert_tlb spc,pte,prot
1188+ make_insert_tlb spc,pte,prot,t1
11721189
11731190 idtlbt pte,prot
11741191
@@ -1262,7 +1279,7 @@ dtlb_miss_20:
12621279 tlb_lock spc,ptp,pte,t0,t1,dtlb_check_alias_20
12631280 update_accessed ptp,pte,t0,t1
12641281
1265- make_insert_tlb spc,pte,prot
1282+ make_insert_tlb spc,pte,prot,t1
12661283
12671284 f_extend pte,t1
12681285
@@ -1290,7 +1307,7 @@ nadtlb_miss_20:
12901307 tlb_lock spc,ptp,pte,t0,t1,nadtlb_check_alias_20
12911308 update_accessed ptp,pte,t0,t1
12921309
1293- make_insert_tlb spc,pte,prot
1310+ make_insert_tlb spc,pte,prot,t1
12941311
12951312 f_extend pte,t1
12961313
@@ -1399,7 +1416,7 @@ itlb_miss_20w:
13991416 tlb_lock spc,ptp,pte,t0,t1,itlb_fault
14001417 update_accessed ptp,pte,t0,t1
14011418
1402- make_insert_tlb spc,pte,prot
1419+ make_insert_tlb spc,pte,prot,t1
14031420
14041421 iitlbt pte,prot
14051422
@@ -1423,7 +1440,7 @@ naitlb_miss_20w:
14231440 tlb_lock spc,ptp,pte,t0,t1,naitlb_check_alias_20w
14241441 update_accessed ptp,pte,t0,t1
14251442
1426- make_insert_tlb spc,pte,prot
1443+ make_insert_tlb spc,pte,prot,t1
14271444
14281445 iitlbt pte,prot
14291446
@@ -1509,7 +1526,7 @@ itlb_miss_20:
15091526 tlb_lock spc,ptp,pte,t0,t1,itlb_fault
15101527 update_accessed ptp,pte,t0,t1
15111528
1512- make_insert_tlb spc,pte,prot
1529+ make_insert_tlb spc,pte,prot,t1
15131530
15141531 f_extend pte,t1
15151532
@@ -1529,7 +1546,7 @@ naitlb_miss_20:
15291546 tlb_lock spc,ptp,pte,t0,t1,naitlb_check_alias_20
15301547 update_accessed ptp,pte,t0,t1
15311548
1532- make_insert_tlb spc,pte,prot
1549+ make_insert_tlb spc,pte,prot,t1
15331550
15341551 f_extend pte,t1
15351552
@@ -1561,7 +1578,7 @@ dbit_trap_20w:
15611578 tlb_lock spc,ptp,pte,t0,t1,dbit_fault
15621579 update_dirty ptp,pte,t1
15631580
1564- make_insert_tlb spc,pte,prot
1581+ make_insert_tlb spc,pte,prot,t1
15651582
15661583 idtlbt pte,prot
15671584
@@ -1605,7 +1622,7 @@ dbit_trap_20:
16051622 tlb_lock spc,ptp,pte,t0,t1,dbit_fault
16061623 update_dirty ptp,pte,t1
16071624
1608- make_insert_tlb spc,pte,prot
1625+ make_insert_tlb spc,pte,prot,t1
16091626
16101627 f_extend pte,t1
16111628
0 commit comments