|
@@ -290,7 +290,15 @@ __ioremap_29bit(phys_addr_t offset, unsigned long size, pgprot_t prot)
|
|
|
* mapping must be done by the PMB or by using page tables.
|
|
|
*/
|
|
|
if (likely(PXSEG(offset) < P3SEG && PXSEG(last_addr) < P3SEG)) {
|
|
|
- if (unlikely(pgprot_val(prot) & _PAGE_CACHABLE))
|
|
|
+ u64 flags = pgprot_val(prot);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Anything using the legacy PTEA space attributes needs
|
|
|
+ * to be kicked down to page table mappings.
|
|
|
+ */
|
|
|
+ if (unlikely(flags & _PAGE_PCC_MASK))
|
|
|
+ return NULL;
|
|
|
+ if (unlikely(flags & _PAGE_CACHABLE))
|
|
|
return (void __iomem *)P1SEGADDR(offset);
|
|
|
|
|
|
return (void __iomem *)P2SEGADDR(offset);
|