sh: trapped io support for highlander V2
This patch converts the highlander CF device from good old machvec readb/writeb to the new shiny trapped io. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
Родитель
2d952b4b8c
Коммит
c1a34e4c54
|
@ -476,6 +476,7 @@ config SH_HIGHLANDER
|
||||||
bool "Highlander"
|
bool "Highlander"
|
||||||
depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785
|
depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785
|
||||||
select SYS_SUPPORTS_PCI
|
select SYS_SUPPORTS_PCI
|
||||||
|
select IO_TRAPPED
|
||||||
|
|
||||||
config SH_MIGOR
|
config SH_MIGOR
|
||||||
bool "Migo-R"
|
bool "Migo-R"
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <asm/clock.h>
|
#include <asm/clock.h>
|
||||||
#include <asm/heartbeat.h>
|
#include <asm/heartbeat.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <asm/io_trapped.h>
|
||||||
|
|
||||||
static struct resource r8a66597_usb_host_resources[] = {
|
static struct resource r8a66597_usb_host_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -181,13 +182,27 @@ static struct platform_device *r7780rp_devices[] __initdata = {
|
||||||
&m66592_usb_peripheral_device,
|
&m66592_usb_peripheral_device,
|
||||||
&heartbeat_device,
|
&heartbeat_device,
|
||||||
#ifndef CONFIG_SH_R7780RP
|
#ifndef CONFIG_SH_R7780RP
|
||||||
&cf_ide_device,
|
|
||||||
&ax88796_device,
|
&ax88796_device,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The CF is connected using a 16-bit bus where 8-bit operations are
|
||||||
|
* unsupported. The linux ata driver is however using 8-bit operations, so
|
||||||
|
* insert a trapped io filter to convert 8-bit operations into 16-bit.
|
||||||
|
*/
|
||||||
|
static struct trapped_io cf_trapped_io = {
|
||||||
|
.resource = cf_ide_resources,
|
||||||
|
.num_resources = 2,
|
||||||
|
.minimum_bus_width = 16,
|
||||||
|
};
|
||||||
|
|
||||||
static int __init r7780rp_devices_setup(void)
|
static int __init r7780rp_devices_setup(void)
|
||||||
{
|
{
|
||||||
|
#ifndef CONFIG_SH_R7780RP
|
||||||
|
if (register_trapped_io(&cf_trapped_io) == 0)
|
||||||
|
platform_device_register(&cf_ide_device);
|
||||||
|
#endif
|
||||||
return platform_add_devices(r7780rp_devices,
|
return platform_add_devices(r7780rp_devices,
|
||||||
ARRAY_SIZE(r7780rp_devices));
|
ARRAY_SIZE(r7780rp_devices));
|
||||||
}
|
}
|
||||||
|
@ -226,34 +241,6 @@ static void r7780rp_power_off(void)
|
||||||
ctrl_outw(0x0001, PA_POFF);
|
ctrl_outw(0x0001, PA_POFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned char is_ide_ioaddr(unsigned long addr)
|
|
||||||
{
|
|
||||||
return ((cf_ide_resources[0].start <= addr &&
|
|
||||||
addr <= cf_ide_resources[0].end) ||
|
|
||||||
(cf_ide_resources[1].start <= addr &&
|
|
||||||
addr <= cf_ide_resources[1].end));
|
|
||||||
}
|
|
||||||
|
|
||||||
void highlander_writeb(u8 b, void __iomem *addr)
|
|
||||||
{
|
|
||||||
unsigned long tmp = (unsigned long __force)addr;
|
|
||||||
|
|
||||||
if (is_ide_ioaddr(tmp))
|
|
||||||
ctrl_outw((u16)b, tmp);
|
|
||||||
else
|
|
||||||
ctrl_outb(b, tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
u8 highlander_readb(void __iomem *addr)
|
|
||||||
{
|
|
||||||
unsigned long tmp = (unsigned long __force)addr;
|
|
||||||
|
|
||||||
if (is_ide_ioaddr(tmp))
|
|
||||||
return ctrl_inw(tmp) & 0xff;
|
|
||||||
else
|
|
||||||
return ctrl_inb(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the board
|
* Initialize the board
|
||||||
*/
|
*/
|
||||||
|
@ -338,6 +325,4 @@ static struct sh_machine_vector mv_highlander __initmv = {
|
||||||
.mv_setup = highlander_setup,
|
.mv_setup = highlander_setup,
|
||||||
.mv_init_irq = highlander_init_irq,
|
.mv_init_irq = highlander_init_irq,
|
||||||
.mv_irq_demux = highlander_irq_demux,
|
.mv_irq_demux = highlander_irq_demux,
|
||||||
.mv_readb = highlander_readb,
|
|
||||||
.mv_writeb = highlander_writeb,
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -195,7 +195,4 @@ unsigned char *highlander_init_irq_r7780mp(void);
|
||||||
unsigned char *highlander_init_irq_r7780rp(void);
|
unsigned char *highlander_init_irq_r7780rp(void);
|
||||||
unsigned char *highlander_init_irq_r7785rp(void);
|
unsigned char *highlander_init_irq_r7785rp(void);
|
||||||
|
|
||||||
#define __IO_PREFIX r7780rp
|
|
||||||
#include <asm/io_generic.h>
|
|
||||||
|
|
||||||
#endif /* __ASM_SH_RENESAS_R7780RP */
|
#endif /* __ASM_SH_RENESAS_R7780RP */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче