提交 dfcb7608 编写于 作者: P Paul Mundt

sh: se7206: Make the I/O port routines less stupid.

The port routines were logically inverted, and the MRSHPC range had
no upper bound, causing 8 and 16-bit port I/O to get mangled.
Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
上级 ded5431f
...@@ -26,22 +26,22 @@ static inline void delay(void) ...@@ -26,22 +26,22 @@ static inline void delay(void)
static inline volatile __u16 * static inline volatile __u16 *
port2adr(unsigned int port) port2adr(unsigned int port)
{ {
if (port >= 0x2000) if (port >= 0x2000 && port < 0x2020)
return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000));
else if (port >= 0x300 || port < 0x310) else if (port >= 0x300 && port < 0x310)
return (volatile __u16 *) (PA_SMSC + (port - 0x300)); return (volatile __u16 *) (PA_SMSC + (port - 0x300));
} }
unsigned char se7206_inb(unsigned long port) unsigned char se7206_inb(unsigned long port)
{ {
return (*port2adr(port))&0xff; return (*port2adr(port)) & 0xff;
} }
unsigned char se7206_inb_p(unsigned long port) unsigned char se7206_inb_p(unsigned long port)
{ {
unsigned long v; unsigned long v;
v = (*port2adr(port))&0xff; v = (*port2adr(port)) & 0xff;
delay(); delay();
return v; return v;
} }
...@@ -51,12 +51,6 @@ unsigned short se7206_inw(unsigned long port) ...@@ -51,12 +51,6 @@ unsigned short se7206_inw(unsigned long port)
return *port2adr(port);; return *port2adr(port);;
} }
unsigned int se7206_inl(unsigned long port)
{
maybebadio(port);
return 0;
}
void se7206_outb(unsigned char value, unsigned long port) void se7206_outb(unsigned char value, unsigned long port)
{ {
*(port2adr(port)) = value; *(port2adr(port)) = value;
...@@ -73,11 +67,6 @@ void se7206_outw(unsigned short value, unsigned long port) ...@@ -73,11 +67,6 @@ void se7206_outw(unsigned short value, unsigned long port)
*port2adr(port) = value; *port2adr(port) = value;
} }
void se7206_outl(unsigned int value, unsigned long port)
{
maybebadio(port);
}
void se7206_insb(unsigned long port, void *addr, unsigned long count) void se7206_insb(unsigned long port, void *addr, unsigned long count)
{ {
volatile __u16 *p = port2adr(port); volatile __u16 *p = port2adr(port);
...@@ -95,11 +84,6 @@ void se7206_insw(unsigned long port, void *addr, unsigned long count) ...@@ -95,11 +84,6 @@ void se7206_insw(unsigned long port, void *addr, unsigned long count)
*ap++ = *p; *ap++ = *p;
} }
void se7206_insl(unsigned long port, void *addr, unsigned long count)
{
maybebadio(port);
}
void se7206_outsb(unsigned long port, const void *addr, unsigned long count) void se7206_outsb(unsigned long port, const void *addr, unsigned long count)
{ {
volatile __u16 *p = port2adr(port); volatile __u16 *p = port2adr(port);
...@@ -116,8 +100,3 @@ void se7206_outsw(unsigned long port, const void *addr, unsigned long count) ...@@ -116,8 +100,3 @@ void se7206_outsw(unsigned long port, const void *addr, unsigned long count)
while (count--) while (count--)
*p = *ap++; *p = *ap++;
} }
void se7206_outsl(unsigned long port, const void *addr, unsigned long count)
{
maybebadio(port);
}
...@@ -6,9 +6,7 @@ ...@@ -6,9 +6,7 @@
* Copyright (C) 2007 Paul Mundt * Copyright (C) 2007 Paul Mundt
* *
* Hitachi 7206 SolutionEngine Support. * Hitachi 7206 SolutionEngine Support.
*
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <asm/se7206.h> #include <asm/se7206.h>
...@@ -81,24 +79,18 @@ static struct sh_machine_vector mv_se __initmv = { ...@@ -81,24 +79,18 @@ static struct sh_machine_vector mv_se __initmv = {
.mv_nr_irqs = 256, .mv_nr_irqs = 256,
.mv_inb = se7206_inb, .mv_inb = se7206_inb,
.mv_inw = se7206_inw, .mv_inw = se7206_inw,
.mv_inl = se7206_inl,
.mv_outb = se7206_outb, .mv_outb = se7206_outb,
.mv_outw = se7206_outw, .mv_outw = se7206_outw,
.mv_outl = se7206_outl,
.mv_inb_p = se7206_inb_p, .mv_inb_p = se7206_inb_p,
.mv_inw_p = se7206_inw, .mv_inw_p = se7206_inw,
.mv_inl_p = se7206_inl,
.mv_outb_p = se7206_outb_p, .mv_outb_p = se7206_outb_p,
.mv_outw_p = se7206_outw, .mv_outw_p = se7206_outw,
.mv_outl_p = se7206_outl,
.mv_insb = se7206_insb, .mv_insb = se7206_insb,
.mv_insw = se7206_insw, .mv_insw = se7206_insw,
.mv_insl = se7206_insl,
.mv_outsb = se7206_outsb, .mv_outsb = se7206_outsb,
.mv_outsw = se7206_outsw, .mv_outsw = se7206_outsw,
.mv_outsl = se7206_outsl,
.mv_init_irq = init_se7206_IRQ, .mv_init_irq = init_se7206_IRQ,
}; };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册