PAGE_GUARDED

Christian Zigotzky chzigotzky at xenosoft.de
Wed May 25 21:44:54 AEST 2016


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
>>
>>
>



More information about the Linuxppc-dev mailing list