diff options
| -rw-r--r-- | arch/sh/boards/mach-microdev/io.c | 246 | ||||
| -rw-r--r-- | arch/sh/boards/mach-microdev/setup.c | 23 | ||||
| -rw-r--r-- | arch/sh/include/mach-common/mach/microdev.h | 9 |
3 files changed, 3 insertions, 275 deletions
diff --git a/arch/sh/boards/mach-microdev/io.c b/arch/sh/boards/mach-microdev/io.c index 2960c659020e..acdafb0c6404 100644 --- a/arch/sh/boards/mach-microdev/io.c +++ b/arch/sh/boards/mach-microdev/io.c | |||
| @@ -54,7 +54,7 @@ | |||
| 54 | /* | 54 | /* |
| 55 | * map I/O ports to memory-mapped addresses | 55 | * map I/O ports to memory-mapped addresses |
| 56 | */ | 56 | */ |
| 57 | static unsigned long microdev_isa_port2addr(unsigned long offset) | 57 | void __iomem *microdev_ioport_map(unsigned long offset, unsigned int len) |
| 58 | { | 58 | { |
| 59 | unsigned long result; | 59 | unsigned long result; |
| 60 | 60 | ||
| @@ -72,16 +72,6 @@ static unsigned long microdev_isa_port2addr(unsigned long offset) | |||
| 72 | * Configuration Registers | 72 | * Configuration Registers |
| 73 | */ | 73 | */ |
| 74 | result = IO_SUPERIO_PHYS + (offset << 1); | 74 | result = IO_SUPERIO_PHYS + (offset << 1); |
| 75 | #if 0 | ||
| 76 | } else if (offset == KBD_DATA_REG || offset == KBD_CNTL_REG || | ||
| 77 | offset == KBD_STATUS_REG) { | ||
| 78 | /* | ||
| 79 | * SMSC FDC37C93xAPM SuperIO chip | ||
| 80 | * | ||
| 81 | * PS/2 Keyboard + Mouse (ports 0x60 and 0x64). | ||
| 82 | */ | ||
| 83 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
| 84 | #endif | ||
| 85 | } else if (((offset >= IO_IDE1_BASE) && | 75 | } else if (((offset >= IO_IDE1_BASE) && |
| 86 | (offset < IO_IDE1_BASE + IO_IDE_EXTENT)) || | 76 | (offset < IO_IDE1_BASE + IO_IDE_EXTENT)) || |
| 87 | (offset == IO_IDE1_MISC)) { | 77 | (offset == IO_IDE1_MISC)) { |
| @@ -131,237 +121,5 @@ static unsigned long microdev_isa_port2addr(unsigned long offset) | |||
| 131 | result = PVR; | 121 | result = PVR; |
| 132 | } | 122 | } |
| 133 | 123 | ||
| 134 | return result; | 124 | return (void __iomem *)result; |
| 135 | } | ||
| 136 | |||
| 137 | #define PORT2ADDR(x) (microdev_isa_port2addr(x)) | ||
| 138 | |||
| 139 | static inline void delay(void) | ||
| 140 | { | ||
| 141 | #if defined(CONFIG_PCI) | ||
| 142 | /* System board present, just make a dummy SRAM access. (CS0 will be | ||
| 143 | mapped to PCI memory, probably good to avoid it.) */ | ||
| 144 | __raw_readw(0xa6800000); | ||
| 145 | #else | ||
| 146 | /* CS0 will be mapped to flash, ROM etc so safe to access it. */ | ||
| 147 | __raw_readw(0xa0000000); | ||
| 148 | #endif | ||
| 149 | } | ||
| 150 | |||
| 151 | unsigned char microdev_inb(unsigned long port) | ||
| 152 | { | ||
| 153 | #ifdef CONFIG_PCI | ||
| 154 | if (port >= PCIBIOS_MIN_IO) | ||
| 155 | return microdev_pci_inb(port); | ||
| 156 | #endif | ||
| 157 | return *(volatile unsigned char*)PORT2ADDR(port); | ||
| 158 | } | ||
| 159 | |||
| 160 | unsigned short microdev_inw(unsigned long port) | ||
| 161 | { | ||
| 162 | #ifdef CONFIG_PCI | ||
| 163 | if (port >= PCIBIOS_MIN_IO) | ||
| 164 | return microdev_pci_inw(port); | ||
| 165 | #endif | ||
| 166 | return *(volatile unsigned short*)PORT2ADDR(port); | ||
| 167 | } | ||
| 168 | |||
| 169 | unsigned int microdev_inl(unsigned long port) | ||
| 170 | { | ||
| 171 | #ifdef CONFIG_PCI | ||
| 172 | if (port >= PCIBIOS_MIN_IO) | ||
| 173 | return microdev_pci_inl(port); | ||
| 174 | #endif | ||
| 175 | return *(volatile unsigned int*)PORT2ADDR(port); | ||
| 176 | } | ||
| 177 | |||
| 178 | void microdev_outw(unsigned short b, unsigned long port) | ||
| 179 | { | ||
| 180 | #ifdef CONFIG_PCI | ||
| 181 | if (port >= PCIBIOS_MIN_IO) { | ||
| 182 | microdev_pci_outw(b, port); | ||
| 183 | return; | ||
| 184 | } | ||
| 185 | #endif | ||
| 186 | *(volatile unsigned short*)PORT2ADDR(port) = b; | ||
| 187 | } | ||
| 188 | |||
| 189 | void microdev_outb(unsigned char b, unsigned long port) | ||
| 190 | { | ||
| 191 | #ifdef CONFIG_PCI | ||
| 192 | if (port >= PCIBIOS_MIN_IO) { | ||
| 193 | microdev_pci_outb(b, port); | ||
| 194 | return; | ||
| 195 | } | ||
| 196 | #endif | ||
| 197 | |||
| 198 | /* | ||
| 199 | * There is a board feature with the current SH4-202 MicroDev in | ||
| 200 | * that the 2 byte enables (nBE0 and nBE1) are tied together (and | ||
| 201 | * to the Chip Select Line (Ethernet_CS)). Due to this connectivity, | ||
| 202 | * it is not possible to safely perform 8-bit writes to the | ||
| 203 | * Ethernet registers, as 16-bits will be consumed from the Data | ||
| 204 | * lines (corrupting the other byte). Hence, this function is | ||
| 205 | * written to implement 16-bit read/modify/write for all byte-wide | ||
| 206 | * accesses. | ||
| 207 | * | ||
| 208 | * Note: there is no problem with byte READS (even or odd). | ||
| 209 | * | ||
| 210 | * Sean McGoogan - 16th June 2003. | ||
| 211 | */ | ||
| 212 | if ((port >= IO_LAN91C111_BASE) && | ||
| 213 | (port < IO_LAN91C111_BASE + IO_LAN91C111_EXTENT)) { | ||
| 214 | /* | ||
| 215 | * Then are trying to perform a byte-write to the | ||
| 216 | * LAN91C111. This needs special care. | ||
| 217 | */ | ||
| 218 | if (port % 2 == 1) { /* is the port odd ? */ | ||
| 219 | /* unset bit-0, i.e. make even */ | ||
| 220 | const unsigned long evenPort = port-1; | ||
| 221 | unsigned short word; | ||
| 222 | |||
| 223 | /* | ||
| 224 | * do a 16-bit read/write to write to 'port', | ||
| 225 | * preserving even byte. | ||
| 226 | * | ||
| 227 | * Even addresses are bits 0-7 | ||
| 228 | * Odd addresses are bits 8-15 | ||
| 229 | */ | ||
| 230 | word = microdev_inw(evenPort); | ||
| 231 | word = (word & 0xffu) | (b << 8); | ||
| 232 | microdev_outw(word, evenPort); | ||
| 233 | } else { | ||
| 234 | /* else, we are trying to do an even byte write */ | ||
| 235 | unsigned short word; | ||
| 236 | |||
| 237 | /* | ||
| 238 | * do a 16-bit read/write to write to 'port', | ||
| 239 | * preserving odd byte. | ||
| 240 | * | ||
| 241 | * Even addresses are bits 0-7 | ||
| 242 | * Odd addresses are bits 8-15 | ||
| 243 | */ | ||
| 244 | word = microdev_inw(port); | ||
| 245 | word = (word & 0xff00u) | (b); | ||
| 246 | microdev_outw(word, port); | ||
| 247 | } | ||
| 248 | } else { | ||
| 249 | *(volatile unsigned char*)PORT2ADDR(port) = b; | ||
| 250 | } | ||
| 251 | } | ||
| 252 | |||
| 253 | void microdev_outl(unsigned int b, unsigned long port) | ||
| 254 | { | ||
| 255 | #ifdef CONFIG_PCI | ||
| 256 | if (port >= PCIBIOS_MIN_IO) { | ||
| 257 | microdev_pci_outl(b, port); | ||
| 258 | return; | ||
| 259 | } | ||
| 260 | #endif | ||
| 261 | *(volatile unsigned int*)PORT2ADDR(port) = b; | ||
| 262 | } | ||
| 263 | |||
| 264 | unsigned char microdev_inb_p(unsigned long port) | ||
| 265 | { | ||
| 266 | unsigned char v = microdev_inb(port); | ||
| 267 | delay(); | ||
| 268 | return v; | ||
| 269 | } | ||
| 270 | |||
| 271 | unsigned short microdev_inw_p(unsigned long port) | ||
| 272 | { | ||
| 273 | unsigned short v = microdev_inw(port); | ||
| 274 | delay(); | ||
| 275 | return v; | ||
| 276 | } | ||
| 277 | |||
| 278 | unsigned int microdev_inl_p(unsigned long port) | ||
| 279 | { | ||
| 280 | unsigned int v = microdev_inl(port); | ||
| 281 | delay(); | ||
| 282 | return v; | ||
| 283 | } | ||
| 284 | |||
| 285 | void microdev_outb_p(unsigned char b, unsigned long port) | ||
| 286 | { | ||
| 287 | microdev_outb(b, port); | ||
| 288 | delay(); | ||
| 289 | } | ||
| 290 | |||
| 291 | void microdev_outw_p(unsigned short b, unsigned long port) | ||
| 292 | { | ||
| 293 | microdev_outw(b, port); | ||
| 294 | delay(); | ||
| 295 | } | ||
| 296 | |||
| 297 | void microdev_outl_p(unsigned int b, unsigned long port) | ||
| 298 | { | ||
| 299 | microdev_outl(b, port); | ||
| 300 | delay(); | ||
| 301 | } | ||
| 302 | |||
| 303 | void microdev_insb(unsigned long port, void *buffer, unsigned long count) | ||
| 304 | { | ||
| 305 | volatile unsigned char *port_addr; | ||
| 306 | unsigned char *buf = buffer; | ||
| 307 | |||
| 308 | port_addr = (volatile unsigned char *)PORT2ADDR(port); | ||
| 309 | |||
| 310 | while (count--) | ||
| 311 | *buf++ = *port_addr; | ||
| 312 | } | ||
| 313 | |||
| 314 | void microdev_insw(unsigned long port, void *buffer, unsigned long count) | ||
| 315 | { | ||
| 316 | volatile unsigned short *port_addr; | ||
| 317 | unsigned short *buf = buffer; | ||
| 318 | |||
| 319 | port_addr = (volatile unsigned short *)PORT2ADDR(port); | ||
| 320 | |||
| 321 | while (count--) | ||
| 322 | *buf++ = *port_addr; | ||
| 323 | } | ||
| 324 | |||
| 325 | void microdev_insl(unsigned long port, void *buffer, unsigned long count) | ||
| 326 | { | ||
| 327 | volatile unsigned long *port_addr; | ||
| 328 | unsigned int *buf = buffer; | ||
| 329 | |||
| 330 | port_addr = (volatile unsigned long *)PORT2ADDR(port); | ||
| 331 | |||
| 332 | while (count--) | ||
| 333 | *buf++ = *port_addr; | ||
| 334 | } | ||
| 335 | |||
| 336 | void microdev_outsb(unsigned long port, const void *buffer, unsigned long count) | ||
| 337 | { | ||
| 338 | volatile unsigned char *port_addr; | ||
| 339 | const unsigned char *buf = buffer; | ||
| 340 | |||
| 341 | port_addr = (volatile unsigned char *)PORT2ADDR(port); | ||
| 342 | |||
| 343 | while (count--) | ||
| 344 | *port_addr = *buf++; | ||
| 345 | } | ||
| 346 | |||
| 347 | void microdev_outsw(unsigned long port, const void *buffer, unsigned long count) | ||
| 348 | { | ||
| 349 | volatile unsigned short *port_addr; | ||
| 350 | const unsigned short *buf = buffer; | ||
| 351 | |||
| 352 | port_addr = (volatile unsigned short *)PORT2ADDR(port); | ||
| 353 | |||
| 354 | while (count--) | ||
| 355 | *port_addr = *buf++; | ||
| 356 | } | ||
| 357 | |||
| 358 | void microdev_outsl(unsigned long port, const void *buffer, unsigned long count) | ||
| 359 | { | ||
| 360 | volatile unsigned long *port_addr; | ||
| 361 | const unsigned int *buf = buffer; | ||
| 362 | |||
| 363 | port_addr = (volatile unsigned long *)PORT2ADDR(port); | ||
| 364 | |||
| 365 | while (count--) | ||
| 366 | *port_addr = *buf++; | ||
| 367 | } | 125 | } |
diff --git a/arch/sh/boards/mach-microdev/setup.c b/arch/sh/boards/mach-microdev/setup.c index d1df2a4fb9b8..d8a747291e03 100644 --- a/arch/sh/boards/mach-microdev/setup.c +++ b/arch/sh/boards/mach-microdev/setup.c | |||
| @@ -195,27 +195,6 @@ device_initcall(microdev_devices_setup); | |||
| 195 | static struct sh_machine_vector mv_sh4202_microdev __initmv = { | 195 | static struct sh_machine_vector mv_sh4202_microdev __initmv = { |
| 196 | .mv_name = "SH4-202 MicroDev", | 196 | .mv_name = "SH4-202 MicroDev", |
| 197 | .mv_nr_irqs = 72, | 197 | .mv_nr_irqs = 72, |
| 198 | 198 | .mv_ioport_map = microdev_ioport_map, | |
| 199 | .mv_inb = microdev_inb, | ||
| 200 | .mv_inw = microdev_inw, | ||
| 201 | .mv_inl = microdev_inl, | ||
| 202 | .mv_outb = microdev_outb, | ||
| 203 | .mv_outw = microdev_outw, | ||
| 204 | .mv_outl = microdev_outl, | ||
| 205 | |||
| 206 | .mv_inb_p = microdev_inb_p, | ||
| 207 | .mv_inw_p = microdev_inw_p, | ||
| 208 | .mv_inl_p = microdev_inl_p, | ||
| 209 | .mv_outb_p = microdev_outb_p, | ||
| 210 | .mv_outw_p = microdev_outw_p, | ||
| 211 | .mv_outl_p = microdev_outl_p, | ||
| 212 | |||
| 213 | .mv_insb = microdev_insb, | ||
| 214 | .mv_insw = microdev_insw, | ||
| 215 | .mv_insl = microdev_insl, | ||
| 216 | .mv_outsb = microdev_outsb, | ||
| 217 | .mv_outsw = microdev_outsw, | ||
| 218 | .mv_outsl = microdev_outsl, | ||
| 219 | |||
| 220 | .mv_init_irq = init_microdev_irq, | 199 | .mv_init_irq = init_microdev_irq, |
| 221 | }; | 200 | }; |
diff --git a/arch/sh/include/mach-common/mach/microdev.h b/arch/sh/include/mach-common/mach/microdev.h index 1aed15856e11..dcb05fa8c164 100644 --- a/arch/sh/include/mach-common/mach/microdev.h +++ b/arch/sh/include/mach-common/mach/microdev.h | |||
| @@ -68,13 +68,4 @@ extern void microdev_print_fpga_intc_status(void); | |||
| 68 | #define __IO_PREFIX microdev | 68 | #define __IO_PREFIX microdev |
| 69 | #include <asm/io_generic.h> | 69 | #include <asm/io_generic.h> |
| 70 | 70 | ||
| 71 | #if defined(CONFIG_PCI) | ||
| 72 | unsigned char microdev_pci_inb(unsigned long port); | ||
| 73 | unsigned short microdev_pci_inw(unsigned long port); | ||
| 74 | unsigned long microdev_pci_inl(unsigned long port); | ||
| 75 | void microdev_pci_outb(unsigned char data, unsigned long port); | ||
| 76 | void microdev_pci_outw(unsigned short data, unsigned long port); | ||
| 77 | void microdev_pci_outl(unsigned long data, unsigned long port); | ||
| 78 | #endif | ||
| 79 | |||
| 80 | #endif /* __ASM_SH_MICRODEV_H */ | 71 | #endif /* __ASM_SH_MICRODEV_H */ |
