Commit 14866543 authored by Paul Mundt's avatar Paul Mundt

sh: More I/O routine overhauling.

This tidies up a lot of the PIO/MMIO split. No in-tree platforms were
making use of the MMIO overloading through the machvec (nor have any of
them been in some time), so we just kill all of that off. The ISA I/O
routine wrapping remains unaffected, which remains the only special
casing outside of the iomap API that boards need to think about.
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent bc0f424f
This diff is collapsed.
...@@ -33,13 +33,6 @@ void IO_CONCAT(__IO_PREFIX,outsb)(unsigned long, const void *src, unsigned long ...@@ -33,13 +33,6 @@ void IO_CONCAT(__IO_PREFIX,outsb)(unsigned long, const void *src, unsigned long
void IO_CONCAT(__IO_PREFIX,outsw)(unsigned long, const void *src, unsigned long count); void IO_CONCAT(__IO_PREFIX,outsw)(unsigned long, const void *src, unsigned long count);
void IO_CONCAT(__IO_PREFIX,outsl)(unsigned long, const void *src, unsigned long count); void IO_CONCAT(__IO_PREFIX,outsl)(unsigned long, const void *src, unsigned long count);
u8 IO_CONCAT(__IO_PREFIX,readb)(void __iomem *);
u16 IO_CONCAT(__IO_PREFIX,readw)(void __iomem *);
u32 IO_CONCAT(__IO_PREFIX,readl)(void __iomem *);
void IO_CONCAT(__IO_PREFIX,writeb)(u8, void __iomem *);
void IO_CONCAT(__IO_PREFIX,writew)(u16, void __iomem *);
void IO_CONCAT(__IO_PREFIX,writel)(u32, void __iomem *);
void *IO_CONCAT(__IO_PREFIX,ioremap)(unsigned long offset, unsigned long size); void *IO_CONCAT(__IO_PREFIX,ioremap)(unsigned long offset, unsigned long size);
void IO_CONCAT(__IO_PREFIX,iounmap)(void *addr); void IO_CONCAT(__IO_PREFIX,iounmap)(void *addr);
......
...@@ -42,13 +42,6 @@ struct sh_machine_vector { ...@@ -42,13 +42,6 @@ struct sh_machine_vector {
void (*mv_outsw)(unsigned long, const void *src, unsigned long count); void (*mv_outsw)(unsigned long, const void *src, unsigned long count);
void (*mv_outsl)(unsigned long, const void *src, unsigned long count); void (*mv_outsl)(unsigned long, const void *src, unsigned long count);
u8 (*mv_readb)(void __iomem *);
u16 (*mv_readw)(void __iomem *);
u32 (*mv_readl)(void __iomem *);
void (*mv_writeb)(u8, void __iomem *);
void (*mv_writew)(u16, void __iomem *);
void (*mv_writel)(u32, void __iomem *);
int (*mv_irq_demux)(int irq); int (*mv_irq_demux)(int irq);
void (*mv_init_irq)(void); void (*mv_init_irq)(void);
......
...@@ -19,12 +19,12 @@ ...@@ -19,12 +19,12 @@
* Copy data from IO memory space to "real" memory space. * Copy data from IO memory space to "real" memory space.
* This needs to be optimized. * This needs to be optimized.
*/ */
void memcpy_fromio(void *to, volatile void __iomem *from, unsigned long count) void memcpy_fromio(void *to, const volatile void __iomem *from, unsigned long count)
{ {
char *p = to; unsigned char *p = to;
while (count) { while (count) {
count--; count--;
*p = readb((void __iomem *)from); *p = readb(from);
p++; p++;
from++; from++;
} }
...@@ -37,10 +37,10 @@ EXPORT_SYMBOL(memcpy_fromio); ...@@ -37,10 +37,10 @@ EXPORT_SYMBOL(memcpy_fromio);
*/ */
void memcpy_toio(volatile void __iomem *to, const void *from, unsigned long count) void memcpy_toio(volatile void __iomem *to, const void *from, unsigned long count)
{ {
const char *p = from; const unsigned char *p = from;
while (count) { while (count) {
count--; count--;
writeb(*p, (void __iomem *)to); writeb(*p, to);
p++; p++;
to++; to++;
} }
...@@ -55,7 +55,7 @@ void memset_io(volatile void __iomem *dst, int c, unsigned long count) ...@@ -55,7 +55,7 @@ void memset_io(volatile void __iomem *dst, int c, unsigned long count)
{ {
while (count) { while (count) {
count--; count--;
writeb(c, (void __iomem *)dst); writeb(c, dst);
dst++; dst++;
} }
} }
......
...@@ -19,38 +19,33 @@ ...@@ -19,38 +19,33 @@
/* SH3 has a PCMCIA bug that needs a dummy read from area 6 for a /* SH3 has a PCMCIA bug that needs a dummy read from area 6 for a
* workaround. */ * workaround. */
/* I'm not sure SH7709 has this kind of bug */ /* I'm not sure SH7709 has this kind of bug */
#define dummy_read() ctrl_inb(0xba000000) #define dummy_read() __raw_readb(0xba000000)
#else #else
#define dummy_read() #define dummy_read()
#endif #endif
unsigned long generic_io_base; unsigned long generic_io_base;
static inline void delay(void)
{
ctrl_inw(0xa0000000);
}
u8 generic_inb(unsigned long port) u8 generic_inb(unsigned long port)
{ {
return ctrl_inb((unsigned long __force)__ioport_map(port, 1)); return __raw_readb(__ioport_map(port, 1));
} }
u16 generic_inw(unsigned long port) u16 generic_inw(unsigned long port)
{ {
return ctrl_inw((unsigned long __force)__ioport_map(port, 2)); return __raw_readw(__ioport_map(port, 2));
} }
u32 generic_inl(unsigned long port) u32 generic_inl(unsigned long port)
{ {
return ctrl_inl((unsigned long __force)__ioport_map(port, 4)); return __raw_readl(__ioport_map(port, 4));
} }
u8 generic_inb_p(unsigned long port) u8 generic_inb_p(unsigned long port)
{ {
unsigned long v = generic_inb(port); unsigned long v = generic_inb(port);
delay(); ctrl_delay();
return v; return v;
} }
...@@ -58,7 +53,7 @@ u16 generic_inw_p(unsigned long port) ...@@ -58,7 +53,7 @@ u16 generic_inw_p(unsigned long port)
{ {
unsigned long v = generic_inw(port); unsigned long v = generic_inw(port);
delay(); ctrl_delay();
return v; return v;
} }
...@@ -66,7 +61,7 @@ u32 generic_inl_p(unsigned long port) ...@@ -66,7 +61,7 @@ u32 generic_inl_p(unsigned long port)
{ {
unsigned long v = generic_inl(port); unsigned long v = generic_inl(port);
delay(); ctrl_delay();
return v; return v;
} }
...@@ -112,35 +107,35 @@ void generic_insl(unsigned long port, void *dst, unsigned long count) ...@@ -112,35 +107,35 @@ void generic_insl(unsigned long port, void *dst, unsigned long count)
void generic_outb(u8 b, unsigned long port) void generic_outb(u8 b, unsigned long port)
{ {
ctrl_outb(b, (unsigned long __force)__ioport_map(port, 1)); __raw_writeb(b, __ioport_map(port, 1));
} }
void generic_outw(u16 b, unsigned long port) void generic_outw(u16 b, unsigned long port)
{ {
ctrl_outw(b, (unsigned long __force)__ioport_map(port, 2)); __raw_writew(b, __ioport_map(port, 2));
} }
void generic_outl(u32 b, unsigned long port) void generic_outl(u32 b, unsigned long port)
{ {
ctrl_outl(b, (unsigned long __force)__ioport_map(port, 4)); __raw_writel(b, __ioport_map(port, 4));
} }
void generic_outb_p(u8 b, unsigned long port) void generic_outb_p(u8 b, unsigned long port)
{ {
generic_outb(b, port); generic_outb(b, port);
delay(); ctrl_delay();
} }
void generic_outw_p(u16 b, unsigned long port) void generic_outw_p(u16 b, unsigned long port)
{ {
generic_outw(b, port); generic_outw(b, port);
delay(); ctrl_delay();
} }
void generic_outl_p(u32 b, unsigned long port) void generic_outl_p(u32 b, unsigned long port)
{ {
generic_outl(b, port); generic_outl(b, port);
delay(); ctrl_delay();
} }
/* /*
...@@ -184,36 +179,6 @@ void generic_outsl(unsigned long port, const void *src, unsigned long count) ...@@ -184,36 +179,6 @@ void generic_outsl(unsigned long port, const void *src, unsigned long count)
dummy_read(); dummy_read();
} }
u8 generic_readb(void __iomem *addr)
{
return ctrl_inb((unsigned long __force)addr);
}
u16 generic_readw(void __iomem *addr)
{
return ctrl_inw((unsigned long __force)addr);
}
u32 generic_readl(void __iomem *addr)
{
return ctrl_inl((unsigned long __force)addr);
}
void generic_writeb(u8 b, void __iomem *addr)
{
ctrl_outb(b, (unsigned long __force)addr);
}
void generic_writew(u16 b, void __iomem *addr)
{
ctrl_outw(b, (unsigned long __force)addr);
}
void generic_writel(u32 b, void __iomem *addr)
{
ctrl_outl(b, (unsigned long __force)addr);
}
void __iomem *generic_ioport_map(unsigned long addr, unsigned int size) void __iomem *generic_ioport_map(unsigned long addr, unsigned int size)
{ {
return (void __iomem *)(addr + generic_io_base); return (void __iomem *)(addr + generic_io_base);
......
...@@ -126,9 +126,6 @@ void __init sh_mv_setup(void) ...@@ -126,9 +126,6 @@ void __init sh_mv_setup(void)
mv_set(insb); mv_set(insw); mv_set(insl); mv_set(insb); mv_set(insw); mv_set(insl);
mv_set(outsb); mv_set(outsw); mv_set(outsl); mv_set(outsb); mv_set(outsw); mv_set(outsl);
mv_set(readb); mv_set(readw); mv_set(readl);
mv_set(writeb); mv_set(writew); mv_set(writel);
mv_set(ioport_map); mv_set(ioport_map);
mv_set(ioport_unmap); mv_set(ioport_unmap);
mv_set(irq_demux); mv_set(irq_demux);
......
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