On Sun, Jan 31, 2016 at 06:19:59PM +1100, Jonathan Gray wrote: > The AP bits are the same place as in the small descriptor second level > format. > > Expanded version of a diff from Patrick.
Looks good to me, works for me. > > Index: arm/pmap.c > =================================================================== > RCS file: /cvs/src/sys/arch/arm/arm/pmap.c,v > retrieving revision 1.57 > diff -u -p -r1.57 pmap.c > --- arm/pmap.c 31 Jan 2016 00:14:50 -0000 1.57 > +++ arm/pmap.c 31 Jan 2016 07:08:56 -0000 > @@ -4361,6 +4361,12 @@ pt_entry_t pte_l1_s_prot_kr; > pt_entry_t pte_l1_s_prot_kw; > pt_entry_t pte_l1_s_prot_mask; > > +pt_entry_t pte_l2_l_prot_ur; > +pt_entry_t pte_l2_l_prot_uw; > +pt_entry_t pte_l2_l_prot_kr; > +pt_entry_t pte_l2_l_prot_kw; > +pt_entry_t pte_l2_l_prot_mask; > + > pt_entry_t pte_l2_s_prot_ur; > pt_entry_t pte_l2_s_prot_uw; > pt_entry_t pte_l2_s_prot_kr; > @@ -4413,6 +4419,12 @@ pmap_pte_init_generic(void) > pte_l1_s_prot_kw = L1_S_PROT_KW_generic; > pte_l1_s_prot_mask = L1_S_PROT_MASK_generic; > > + pte_l2_l_prot_ur = L2_L_PROT_UR_generic; > + pte_l2_l_prot_uw = L2_L_PROT_UW_generic; > + pte_l2_l_prot_kr = L2_L_PROT_KR_generic; > + pte_l2_l_prot_kw = L2_L_PROT_KW_generic; > + pte_l2_l_prot_mask = L2_L_PROT_MASK_generic; > + > pte_l2_s_prot_ur = L2_S_PROT_UR_generic; > pte_l2_s_prot_uw = L2_S_PROT_UW_generic; > pte_l2_s_prot_kr = L2_S_PROT_KR_generic; > @@ -4542,6 +4554,12 @@ pmap_pte_init_armv7(void) > pte_l1_s_prot_kw = L1_S_PROT_KW_v7; > pte_l1_s_prot_mask = L1_S_PROT_MASK_v7; > > + pte_l2_l_prot_ur = L2_L_PROT_UR_v7; > + pte_l2_l_prot_uw = L2_L_PROT_UW_v7; > + pte_l2_l_prot_kr = L2_L_PROT_KR_v7; > + pte_l2_l_prot_kw = L2_L_PROT_KW_v7; > + pte_l2_l_prot_mask = L2_L_PROT_MASK_v7; > + > pte_l2_s_prot_ur = L2_S_PROT_UR_v7; > pte_l2_s_prot_uw = L2_S_PROT_UW_v7; > pte_l2_s_prot_kr = L2_S_PROT_KR_v7; > @@ -4679,6 +4697,12 @@ pmap_pte_init_xscale(void) > pte_l1_s_prot_kr = L1_S_PROT_KR_xscale; > pte_l1_s_prot_kw = L1_S_PROT_KW_xscale; > pte_l1_s_prot_mask = L1_S_PROT_MASK_xscale; > + > + pte_l2_l_prot_ur = L2_L_PROT_UR_xscale; > + pte_l2_l_prot_uw = L2_L_PROT_UW_xscale; > + pte_l2_l_prot_kr = L2_L_PROT_KR_xscale; > + pte_l2_l_prot_kw = L2_L_PROT_KW_xscale; > + pte_l2_l_prot_mask = L2_L_PROT_MASK_xscale; > > pte_l2_s_prot_ur = L2_S_PROT_UR_xscale; > pte_l2_s_prot_uw = L2_S_PROT_UW_xscale; > Index: arm/pmap7.c > =================================================================== > RCS file: /cvs/src/sys/arch/arm/arm/pmap7.c,v > retrieving revision 1.22 > diff -u -p -r1.22 pmap7.c > --- arm/pmap7.c 31 Jan 2016 00:14:50 -0000 1.22 > +++ arm/pmap7.c 31 Jan 2016 07:08:57 -0000 > @@ -3337,6 +3337,12 @@ pt_entry_t pte_l1_s_prot_kr; > pt_entry_t pte_l1_s_prot_kw; > pt_entry_t pte_l1_s_prot_mask; > > +pt_entry_t pte_l2_l_prot_ur; > +pt_entry_t pte_l2_l_prot_uw; > +pt_entry_t pte_l2_l_prot_kr; > +pt_entry_t pte_l2_l_prot_kw; > +pt_entry_t pte_l2_l_prot_mask; > + > pt_entry_t pte_l2_s_prot_ur; > pt_entry_t pte_l2_s_prot_uw; > pt_entry_t pte_l2_s_prot_kr; > @@ -3388,6 +3394,12 @@ pmap_pte_init_generic(void) > pte_l1_s_prot_kw = L1_S_PROT_KW_generic; > pte_l1_s_prot_mask = L1_S_PROT_MASK_generic; > > + pte_l2_l_prot_ur = L2_L_PROT_UR_generic; > + pte_l2_l_prot_uw = L2_L_PROT_UW_generic; > + pte_l2_l_prot_kr = L2_L_PROT_KR_generic; > + pte_l2_l_prot_kw = L2_L_PROT_KW_generic; > + pte_l2_l_prot_mask = L2_L_PROT_MASK_generic; > + > pte_l2_s_prot_ur = L2_S_PROT_UR_generic; > pte_l2_s_prot_uw = L2_S_PROT_UW_generic; > pte_l2_s_prot_kr = L2_S_PROT_KR_generic; > @@ -3436,6 +3448,12 @@ pmap_pte_init_armv7(void) > pte_l1_s_prot_kr = L1_S_PROT_KR_v7; > pte_l1_s_prot_kw = L1_S_PROT_KW_v7; > pte_l1_s_prot_mask = L1_S_PROT_MASK_v7; > + > + pte_l2_l_prot_ur = L2_L_PROT_UR_v7; > + pte_l2_l_prot_uw = L2_L_PROT_UW_v7; > + pte_l2_l_prot_kr = L2_L_PROT_KR_v7; > + pte_l2_l_prot_kw = L2_L_PROT_KW_v7; > + pte_l2_l_prot_mask = L2_L_PROT_MASK_v7; > > pte_l2_s_prot_ur = L2_S_PROT_UR_v7; > pte_l2_s_prot_uw = L2_S_PROT_UW_v7; > Index: include/pmap.h > =================================================================== > RCS file: /cvs/src/sys/arch/arm/include/pmap.h,v > retrieving revision 1.34 > diff -u -p -r1.34 pmap.h > --- include/pmap.h 15 Aug 2015 22:20:20 -0000 1.34 > +++ include/pmap.h 31 Jan 2016 07:08:57 -0000 > @@ -431,6 +431,12 @@ extern pt_entry_t pte_l1_s_prot_kr; > extern pt_entry_t pte_l1_s_prot_kw; > extern pt_entry_t pte_l1_s_prot_mask; > > +extern pt_entry_t pte_l2_l_prot_ur; > +extern pt_entry_t pte_l2_l_prot_uw; > +extern pt_entry_t pte_l2_l_prot_kr; > +extern pt_entry_t pte_l2_l_prot_kw; > +extern pt_entry_t pte_l2_l_prot_mask; > + > extern pt_entry_t pte_l2_s_prot_ur; > extern pt_entry_t pte_l2_s_prot_uw; > extern pt_entry_t pte_l2_s_prot_kr; > @@ -487,11 +493,23 @@ extern void (*pmap_zero_page_func)(struc > #define L1_S_COHERENT_xscale > (L1_S_B|L1_S_C|L1_S_XSCALE_TEX(TEX_XSCALE_X)) > #define L1_S_COHERENT_v7 (L1_S_C|L1_S_V7_TEX_MASK) > > -#define L2_L_PROT_KR (L2_AP(0)) > -#define L2_L_PROT_UR (L2_AP(AP_U)) > -#define L2_L_PROT_KW (L2_AP(AP_W)) > -#define L2_L_PROT_UW (L2_AP(AP_U|AP_W)) > -#define L2_L_PROT_MASK (L2_AP(AP_U|AP_W)) > +#define L2_L_PROT_KR_generic (L2_AP(0)) > +#define L2_L_PROT_UR_generic (L2_AP(AP_U)) > +#define L2_L_PROT_KW_generic (L2_AP(AP_W)) > +#define L2_L_PROT_UW_generic (L2_AP(AP_U|AP_W)) > +#define L2_L_PROT_MASK_generic (L2_AP(AP_U|AP_W)) > + > +#define L2_L_PROT_KR_xscale (L2_AP(0)) > +#define L2_L_PROT_UR_xscale (L2_AP(AP_U)) > +#define L2_L_PROT_KW_xscale (L2_AP(AP_W)) > +#define L2_L_PROT_UW_xscale (L2_AP(AP_U|AP_W)) > +#define L2_L_PROT_MASK_xscale (L2_AP(AP_U|AP_W)) > + > +#define L2_L_PROT_UR_v7 (L2_V7_AP(AP_KRWUR)) > +#define L2_L_PROT_UW_v7 (L2_V7_AP(AP_KRWURW)) > +#define L2_L_PROT_KR_v7 (L2_V7_AP(AP_V7_KR)) > +#define L2_L_PROT_KW_v7 (L2_V7_AP(AP_KRW)) > +#define L2_L_PROT_MASK_v7 (L2_V7_AP(0x07) | L2_V7_S_XN) > > #define L2_L_CACHE_MASK_generic (L2_B|L2_C) > #define L2_L_CACHE_MASK_xscale > (L2_B|L2_C|L2_XSCALE_L_TEX(TEX_XSCALE_X)) > @@ -553,6 +571,12 @@ extern void (*pmap_zero_page_func)(struc > #define L1_S_PROT_KW pte_l1_s_prot_kw > #define L1_S_PROT_MASK pte_l1_s_prot_mask > > +#define L2_L_PROT_UR pte_l2_l_prot_ur > +#define L2_L_PROT_UW pte_l2_l_prot_uw > +#define L2_L_PROT_KR pte_l2_l_prot_kr > +#define L2_L_PROT_KW pte_l2_l_prot_kw > +#define L2_L_PROT_MASK pte_l2_l_prot_mask > + > #define L2_S_PROT_UR pte_l2_s_prot_ur > #define L2_S_PROT_UW pte_l2_s_prot_uw > #define L2_S_PROT_KR pte_l2_s_prot_kr > @@ -580,6 +604,12 @@ extern void (*pmap_zero_page_func)(struc > #define L1_S_PROT_KW L1_S_PROT_KW_generic > #define L1_S_PROT_MASK L1_S_PROT_MASK_generic > > +#define L2_L_PROT_UR L2_L_PROT_UR_generic > +#define L2_L_PROT_UW L2_L_PROT_UW_generic > +#define L2_L_PROT_KR L2_L_PROT_KR_generic > +#define L2_L_PROT_KW L2_L_PROT_KW_generic > +#define L2_L_PROT_MASK L2_L_PROT_MASK_generic > + > #define L2_S_PROT_UR L2_S_PROT_UR_generic > #define L2_S_PROT_UW L2_S_PROT_UW_generic > #define L2_S_PROT_KR L2_S_PROT_KR_generic > @@ -607,6 +637,12 @@ extern void (*pmap_zero_page_func)(struc > #define L1_S_PROT_KW L1_S_PROT_KW_xscale > #define L1_S_PROT_MASK L1_S_PROT_MASK_xscale > > +#define L2_L_PROT_UR L2_L_PROT_UR_xscale > +#define L2_L_PROT_UW L2_L_PROT_UW_xscale > +#define L2_L_PROT_KR L2_L_PROT_KR_xscale > +#define L2_L_PROT_KW L2_L_PROT_KW_xscale > +#define L2_L_PROT_MASK L2_L_PROT_MASK_xscale > + > #define L2_S_PROT_UR L2_S_PROT_UR_xscale > #define L2_S_PROT_UW L2_S_PROT_UW_xscale > #define L2_S_PROT_KR L2_S_PROT_KR_xscale > @@ -633,6 +669,12 @@ extern void (*pmap_zero_page_func)(struc > #define L1_S_PROT_KR L1_S_PROT_KR_v7 > #define L1_S_PROT_KW L1_S_PROT_KW_v7 > #define L1_S_PROT_MASK L1_S_PROT_MASK_v7 > + > +#define L2_L_PROT_UR L2_L_PROT_UR_v7 > +#define L2_L_PROT_UW L2_L_PROT_UW_v7 > +#define L2_L_PROT_KR L2_L_PROT_KR_v7 > +#define L2_L_PROT_KW L2_L_PROT_KW_v7 > +#define L2_L_PROT_MASK L2_L_PROT_MASK_v7 > > #define L2_S_PROT_UR L2_S_PROT_UR_v7 > #define L2_S_PROT_UW L2_S_PROT_UW_v7 >
