Message ID | 1391611829-7824-1-git-send-email-robherring2@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Rob, On Wed, Feb 05, 2014 at 02:50:29PM +0000, Rob Herring wrote: > From: Rob Herring <robh@kernel.org> > > earlyprintk is broken with 64KB pages. The problem is pgprot_default > is not yet initialized when early_io_map is called, so the pte does not > get marked as valid. Set the necessary page and access permission bits. > > Cc: Mark Salter <msalter@redhat.com> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will.deacon@arm.com> > Signed-off-by: Rob Herring <robh@kernel.org> > --- I thought we fixed this in 4ce00dfcf19c by reverting the use of pgprot_default? Will
On Wed, Feb 05, 2014 at 02:52:51PM +0000, Will Deacon wrote: > On Wed, Feb 05, 2014 at 02:50:29PM +0000, Rob Herring wrote: > > From: Rob Herring <robh@kernel.org> > > > > earlyprintk is broken with 64KB pages. The problem is pgprot_default > > is not yet initialized when early_io_map is called, so the pte does not > > get marked as valid. Set the necessary page and access permission bits. > > > > Cc: Mark Salter <msalter@redhat.com> > > Cc: Catalin Marinas <catalin.marinas@arm.com> > > Cc: Will Deacon <will.deacon@arm.com> > > Signed-off-by: Rob Herring <robh@kernel.org> > > --- > > I thought we fixed this in 4ce00dfcf19c by reverting the use of > pgprot_default? Indeed. We still need to fix the ioremap_cache() case where the shareability isn't set but I haven't yet decided what we do for SMP-on-UP in arm64 (if we always assume SMP, I would just get rid of pgprot_default entirely).
On Wed, 2014-02-05 at 08:50 -0600, Rob Herring wrote: > From: Rob Herring <robh@kernel.org> > > earlyprintk is broken with 64KB pages. The problem is pgprot_default > is not yet initialized when early_io_map is called, so the pte does not > get marked as valid. Set the necessary page and access permission bits. > > Cc: Mark Salter <msalter@redhat.com> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will.deacon@arm.com> > Signed-off-by: Rob Herring <robh@kernel.org> > --- > FWIW, I had a patch in my early_ioremap series which initialized pgprot_default earlier in boot: http://www.spinics.net/lists/arm-kernel/msg299656.html (which reminds me to get v4 of that series out this week)
On Wed, Feb 5, 2014 at 8:52 AM, Will Deacon <will.deacon@arm.com> wrote: > Hi Rob, > > On Wed, Feb 05, 2014 at 02:50:29PM +0000, Rob Herring wrote: >> From: Rob Herring <robh@kernel.org> >> >> earlyprintk is broken with 64KB pages. The problem is pgprot_default >> is not yet initialized when early_io_map is called, so the pte does not >> get marked as valid. Set the necessary page and access permission bits. >> >> Cc: Mark Salter <msalter@redhat.com> >> Cc: Catalin Marinas <catalin.marinas@arm.com> >> Cc: Will Deacon <will.deacon@arm.com> >> Signed-off-by: Rob Herring <robh@kernel.org> >> --- > > I thought we fixed this in 4ce00dfcf19c by reverting the use of > pgprot_default? Ah crap. I only checked the history on mmu.c and missed that fix. And I was so happy I found a kernel issue with qemu. Rob
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index f557ebb..c41daa6 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -284,7 +284,7 @@ void __iomem * __init early_io_map(phys_addr_t phys, unsigned long virt) if (pmd_none(*pmd)) return NULL; pte = pte_offset_kernel(pmd, virt); - set_pte(pte, __pte((phys & mask) | PROT_DEVICE_nGnRE)); + set_pte(pte, __pte((phys & mask) | PTE_TYPE_PAGE | PTE_AF | PROT_DEVICE_nGnRE)); } else { set_pmd(pmd, __pmd((phys & mask) | PROT_SECT_DEVICE_nGnRE)); }