Aneesh,

I understand what you mean. I tried

range.size, pgprot_val(pgprot_noncached(__pgprot(0))));

a few days ago. It compiled but the kernel doesn't boot.

Cheers,

Christian


On 25 May 2016 at 08:58 AM, Christian Zigotzky wrote:
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

Reply via email to