Commit acf2c968 authored by Paul Mundt's avatar Paul Mundt

sh: Kill off duplicate address alignment in ioremap_fixed().

This is already taken care of in the top-level ioremap, and now that
no one should be calling ioremap_fixed() directly we can simply throw the
mapping displacement in as an additional argument.
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent d57d6408
......@@ -239,12 +239,14 @@ void __iomem *__ioremap_caller(unsigned long offset, unsigned long size,
void __iounmap(void __iomem *addr);
#ifdef CONFIG_IOREMAP_FIXED
extern void __iomem *ioremap_fixed(resource_size_t, unsigned long, pgprot_t);
extern void __iomem *ioremap_fixed(resource_size_t, unsigned long,
unsigned long, pgprot_t);
extern int iounmap_fixed(void __iomem *);
extern void ioremap_fixed_init(void);
#else
static inline void __iomem *
ioremap_fixed(resource_size t phys_addr, unsigned long size, pgprot_t prot)
ioremap_fixed(resource_size t phys_addr, unsigned long offset,
unsigned long size, pgprot_t prot)
{
BUG();
}
......
......@@ -68,7 +68,7 @@ __ioremap_caller(unsigned long phys_addr, unsigned long size,
* If we can't yet use the regular approach, go the fixmap route.
*/
if (!mem_init_done)
return ioremap_fixed(phys_addr, size, pgprot);
return ioremap_fixed(phys_addr, offset, size, pgprot);
/*
* Ok, go for it..
......
......@@ -45,12 +45,11 @@ void __init ioremap_fixed_init(void)
}
void __init __iomem *
ioremap_fixed(resource_size_t phys_addr, unsigned long size, pgprot_t prot)
ioremap_fixed(resource_size_t phys_addr, unsigned long offset,
unsigned long size, pgprot_t prot)
{
enum fixed_addresses idx0, idx;
resource_size_t last_addr;
struct ioremap_map *map;
unsigned long offset;
unsigned int nrpages;
int i, slot;
......@@ -67,18 +66,6 @@ ioremap_fixed(resource_size_t phys_addr, unsigned long size, pgprot_t prot)
if (slot < 0)
return NULL;
/* Don't allow wraparound or zero size */
last_addr = phys_addr + size - 1;
if (!size || last_addr < phys_addr)
return NULL;
/*
* Fixmap mappings have to be page-aligned
*/
offset = phys_addr & ~PAGE_MASK;
phys_addr &= PAGE_MASK;
size = PAGE_ALIGN(last_addr + 1) - phys_addr;
/*
* Mappings have to fit in the FIX_IOREMAP area.
*/
......@@ -111,7 +98,6 @@ int iounmap_fixed(void __iomem *addr)
unsigned long offset;
unsigned int nrpages;
int i, slot;
pgprot_t prot;
slot = -1;
for (i = 0; i < FIX_N_IOREMAPS; i++) {
......@@ -133,11 +119,9 @@ int iounmap_fixed(void __iomem *addr)
offset = virt_addr & ~PAGE_MASK;
nrpages = PAGE_ALIGN(offset + map->size - 1) >> PAGE_SHIFT;
pgprot_val(prot) = _PAGE_WIRED;
idx = FIX_IOREMAP_BEGIN + slot + nrpages;
while (nrpages > 0) {
__clear_fixmap(idx, prot);
__clear_fixmap(idx, __pgprot(_PAGE_WIRED));
--idx;
--nrpages;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment