Skip to content

Commit

Permalink
openrisc: map as uncached in ioremap
Browse files Browse the repository at this point in the history
Openrisc is the only architecture not mapping ioremap as uncached,
which has been the default since the Linux 2.6.x days.  Switch it
over to implement uncached semantics by default.

Signed-off-by: Christoph Hellwig <[email protected]>
Signed-off-by: Stafford Horne <[email protected]>
  • Loading branch information
Christoph Hellwig authored and stffrdhrn committed Aug 31, 2019
1 parent eabe7e9 commit f3b1732
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 22 deletions.
20 changes: 3 additions & 17 deletions arch/openrisc/include/asm/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,11 @@
#define PIO_OFFSET 0
#define PIO_MASK 0

#define ioremap_nocache ioremap_nocache
#define ioremap_nocache ioremap
#include <asm-generic/io.h>
#include <asm/pgtable.h>

extern void __iomem *__ioremap(phys_addr_t offset, unsigned long size,
pgprot_t prot);

static inline void __iomem *ioremap(phys_addr_t offset, size_t size)
{
return __ioremap(offset, size, PAGE_KERNEL);
}

/* #define _PAGE_CI 0x002 */
static inline void __iomem *ioremap_nocache(phys_addr_t offset,
unsigned long size)
{
return __ioremap(offset, size,
__pgprot(pgprot_val(PAGE_KERNEL) | _PAGE_CI));
}

void __iomem *ioremap(phys_addr_t offset, unsigned long size);
extern void iounmap(void *addr);

#endif
2 changes: 1 addition & 1 deletion arch/openrisc/include/asm/pgtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ extern void paging_init(void);
/* Define some higher level generic page attributes.
*
* If you change _PAGE_CI definition be sure to change it in
* io.h for ioremap_nocache() too.
* io.h for ioremap() too.
*/

/*
Expand Down
8 changes: 4 additions & 4 deletions arch/openrisc/mm/ioremap.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ static unsigned int fixmaps_used __initdata;
* have to convert them into an offset in a page-aligned mapping, but the
* caller shouldn't need to know that small detail.
*/
void __iomem *__ref
__ioremap(phys_addr_t addr, unsigned long size, pgprot_t prot)
void __iomem *__ref ioremap(phys_addr_t addr, unsigned long size)
{
phys_addr_t p;
unsigned long v;
Expand Down Expand Up @@ -66,7 +65,8 @@ __ioremap(phys_addr_t addr, unsigned long size, pgprot_t prot)
fixmaps_used += (size >> PAGE_SHIFT);
}

if (ioremap_page_range(v, v + size, p, prot)) {
if (ioremap_page_range(v, v + size, p,
__pgprot(pgprot_val(PAGE_KERNEL) | _PAGE_CI))) {
if (likely(mem_init_done))
vfree(area->addr);
else
Expand All @@ -76,7 +76,7 @@ __ioremap(phys_addr_t addr, unsigned long size, pgprot_t prot)

return (void __iomem *)(offset + (char *)v);
}
EXPORT_SYMBOL(__ioremap);
EXPORT_SYMBOL(ioremap);

void iounmap(void *addr)
{
Expand Down

0 comments on commit f3b1732

Please sign in to comment.