Skip to content

Commit

Permalink
sh: Kill off duplicate address alignment in ioremap_fixed().
Browse files Browse the repository at this point in the history
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: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Paul Mundt committed Jan 19, 2010
1 parent d57d640 commit acf2c96
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 22 deletions.
6 changes: 4 additions & 2 deletions arch/sh/include/asm/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
2 changes: 1 addition & 1 deletion arch/sh/mm/ioremap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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..
Expand Down
22 changes: 3 additions & 19 deletions arch/sh/mm/ioremap_fixed.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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.
*/
Expand Down Expand Up @@ -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++) {
Expand All @@ -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;
}
Expand Down

0 comments on commit acf2c96

Please sign in to comment.