Print this page
loader: allow 1MB device maps
There's no reason we shouldn't allow 1MB PTEs for use on device memory.

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/armv6/loader/fakeloader.c
          +++ new/usr/src/uts/armv6/loader/fakeloader.c
↓ open down ↓ 155 lines elided ↑ open up ↑
 156  156          armpte_t *pte;
 157  157          arm_l1s_t *l1e;
 158  158  
 159  159          entry = ARMPT_VADDR_TO_L1E(va);
 160  160          pte = &pt_addr[entry];
 161  161          if (ARMPT_L1E_ISVALID(*pte))
 162  162                  fakeload_panic("armboot_mmu: asked to map a mapped region!\n");
 163  163          l1e = (arm_l1s_t *)pte;
 164  164          *pte = 0;
 165  165          l1e->al_type = ARMPT_L1_TYPE_SECT;
 166      -        /* Assume it's not device memory */
 167      -        l1e->al_bbit = 1;
 168      -        l1e->al_cbit = 1;
 169      -        l1e->al_tex = 1;
 170      -        l1e->al_sbit = 1;
      166 +
      167 +        if (prot & PF_DEVICE) {
      168 +                l1e->al_bbit = 1;
      169 +                l1e->al_cbit = 0;
      170 +                l1e->al_tex = 0;
      171 +                l1e->al_sbit = 1;
      172 +        } else {
      173 +                l1e->al_bbit = 1;
      174 +                l1e->al_cbit = 1;
      175 +                l1e->al_tex = 1;
      176 +                l1e->al_sbit = 1;
      177 +        }
 171  178  
 172  179          if (!(prot & PF_X))
 173  180                  l1e->al_xn = 1;
 174  181          l1e->al_domain = 0;
 175  182  
 176  183          if (prot & PF_W) {
 177  184                  l1e->al_ap2 = 1;
 178  185                  l1e->al_ap = 1;
 179  186          } else {
 180  187                  l1e->al_ap2 = 0;
↓ open down ↓ 529 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX