On Thursday, August 13, 2015 at 06:51:22 PM, Sergey Temerkhanov wrote:
> This patch adds code which sets up 2-level page tables on ARM64 thus
> extending available VA space. CPUs implementing 64k translation
> granule are able to use direct PA-VA mapping of the whole 48 bit
> address space.
> It also adds the ability to reset the SCTRL register at the very beginning
> of execution to avoid interference from stale mappings set up by early
> firmware/loaders/etc.
> 
> Signed-off-by: Sergey Temerkhanov <s.temerkha...@gmail.com>
> Signed-off-by: Radha Mohan Chintakuntla <rchintakun...@cavium.com>

Hi!

[...]

> +static void setup_pgtables(void)
> +{
> +     int l1_e, l2_e;
> +     unsigned long pmd = 0;
> +     unsigned long address;
> +
> +     /* Setup the PMD pointers */
> +     for (l1_e = 0; l1_e < CONFIG_SYS_MEM_MAP_SIZE; l1_e++) {
> +             gd->arch.pmd_addr[l1_e] = gd->arch.tlb_addr +
> +                                             PTL1_ENTRIES * sizeof(u64);
> +             gd->arch.pmd_addr[l1_e] += PTL2_ENTRIES * sizeof(u64) * l1_e;
> +             gd->arch.pmd_addr[l1_e] += 0xffffUL;
> +             gd->arch.pmd_addr[l1_e] &= ~0xffffUL;

Is this an attempt for roundup() ? See include/linux/kernel.h for that macro.
Maybe you can even use round_up(), bit that has some limitations, so be careful.

> +     }
> +
> +     /* Setup the page tables */
> +     for (l1_e = 0; l1_e < PTL1_ENTRIES; l1_e++) {
> +             if (mem_map[pmd].base ==
> +                     (uintptr_t)l1_e << PTL2_BITS) {
> +                     set_ptl1_entry(l1_e, gd->arch.pmd_addr[pmd]);
> +
> +                     for (l2_e = 0; l2_e < PTL2_ENTRIES; l2_e++) {
> +                             address = mem_map[pmd].base
> +                                     + (uintptr_t)l2_e * BLOCK_SIZE;
> +                             set_ptl2_block(gd->arch.pmd_addr[pmd], l2_e,
> +                                            address, mem_map[pmd].attrs);
> +                     }
> +
> +                     pmd++;
> +             } else {
> +                     set_ptl1_entry(l1_e, 0);
> +             }
> +     }
> +}
> +
> +#else
> +
>  void set_pgtable_section(u64 *page_table, u64 index, u64 section,
>                        u64 memory_type)
>  {
[...]
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to