Aneesh,
Thank you for your help. I tried
/* Workaround for lack of device tree */
if (primary) {
__ioremap_at(range.cpu_addr, (void
*)ISA_IO_BASE,
range.size, HPTE_R_C | HPTE_R_M);
hose->io_base_virt = (void *)_IO_BASE;
printk("Initialised io_base_virt 0x%lx _IO_BASE
0x%llx\n", (unsigned long)hose->io_base_virt, (unsigned long long)_IO_BASE);
}
Unfortunately the kernel doesn't boot.
Cheers,
Christian
On 24 May 2016 at 5:37 PM, Aneesh Kumar K.V wrote:
You can look at commit 72176dd0ad36c ("powerpc/mm: Use a helper for
finding pte bits mapping I/O area") to find similar conversion we did.
For ex:
__ioremap_at(phb_io_base_phys, (void *)ISA_IO_BASE,
size, _PAGE_NO_CACHE|_PAGE_GUARDED);
gets replaced by
__ioremap_at(phb_io_base_phys, (void *)ISA_IO_BASE,
size, pgprot_val(pgprot_noncached(__pgprot(0))));
Now that gets mapped to the below hpte bits
pte bit -> _PAGE_NON_IDEMPOTENT
Which get converted in htab_convert_pte_flags(unsigned long pteflags)
to
if ((pteflags & _PAGE_CACHE_CTL ) == _PAGE_NON_IDEMPOTENT)
rflags |= (HPTE_R_I | HPTE_R_G);
BTW we default add (HPTE_R_C | HPTE_R_M ).
Hence the final pte WIMG bits will be MIG. I guess that is what you
wanted ?
If that doesn't work, can you point me the current code so that I can
look at it and suggest correct alternative.
-aneesh
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev