aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2013-04-02 00:20:02 -0400
committerSimon Horman <horms+renesas@verge.net.au>2013-04-04 22:32:53 -0400
commit27d5f27e253431c98f00c34a02bb7a2ece0b3fe9 (patch)
tree914b26ed47e5c4e33f1638350e7a4c9d53ce4cdc
parent5e3780ba6dded2636c939549e3bea16d736859fb (diff)
ARM: shmobile: bockw: add SMSC ethernet support
This patch adds SMSC ethernet support on Bock-W Bock-W SMSC needs FPGA settings which enables interrupt. This patch does it on bockw_init() function. As notes for future, this FPGA settings should be updated, since this FPGA is using cascaded interrupt. Current code is assuming that this FPGA interrupt user is only SMSC. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Acked-by: Magnus Damm <damm@opensource.se> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
-rw-r--r--arch/arm/mach-shmobile/Kconfig1
-rw-r--r--arch/arm/mach-shmobile/board-bockw.c38
2 files changed, 39 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index 549e05985745..1a517e2fe449 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -133,6 +133,7 @@ config MACH_BOCKW
133 bool "BOCK-W platform" 133 bool "BOCK-W platform"
134 depends on ARCH_R8A7778 134 depends on ARCH_R8A7778
135 select ARCH_REQUIRE_GPIOLIB 135 select ARCH_REQUIRE_GPIOLIB
136 select RENESAS_INTC_IRQPIN
136 select USE_OF 137 select USE_OF
137 138
138config MACH_MARZEN 139config MACH_MARZEN
diff --git a/arch/arm/mach-shmobile/board-bockw.c b/arch/arm/mach-shmobile/board-bockw.c
index 56ab56ed5f59..38e5e50fb318 100644
--- a/arch/arm/mach-shmobile/board-bockw.c
+++ b/arch/arm/mach-shmobile/board-bockw.c
@@ -19,14 +19,52 @@
19 */ 19 */
20 20
21#include <linux/platform_device.h> 21#include <linux/platform_device.h>
22#include <linux/smsc911x.h>
22#include <mach/common.h> 23#include <mach/common.h>
24#include <mach/irqs.h>
23#include <mach/r8a7778.h> 25#include <mach/r8a7778.h>
24#include <asm/mach/arch.h> 26#include <asm/mach/arch.h>
25 27
28static struct smsc911x_platform_config smsc911x_data = {
29 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
30 .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
31 .flags = SMSC911X_USE_32BIT,
32 .phy_interface = PHY_INTERFACE_MODE_MII,
33};
34
35static struct resource smsc911x_resources[] = {
36 DEFINE_RES_MEM(0x18300000, 0x1000),
37 DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */
38};
39
40#define IRQ0MR 0x30
26static void __init bockw_init(void) 41static void __init bockw_init(void)
27{ 42{
43 void __iomem *fpga;
44
28 r8a7778_clock_init(); 45 r8a7778_clock_init();
46 r8a7778_init_irq_extpin(1);
29 r8a7778_add_standard_devices(); 47 r8a7778_add_standard_devices();
48
49 fpga = ioremap_nocache(0x18200000, SZ_1M);
50 if (fpga) {
51 /*
52 * CAUTION
53 *
54 * IRQ0/1 is cascaded interrupt from FPGA.
55 * it should be cared in the future
56 * Now, it is assuming IRQ0 was used only from SMSC.
57 */
58 u16 val = ioread16(fpga + IRQ0MR);
59 val &= ~(1 << 4); /* enable SMSC911x */
60 iowrite16(val, fpga + IRQ0MR);
61 iounmap(fpga);
62
63 platform_device_register_resndata(
64 &platform_bus, "smsc911x", -1,
65 smsc911x_resources, ARRAY_SIZE(smsc911x_resources),
66 &smsc911x_data, sizeof(smsc911x_data));
67 }
30} 68}
31 69
32static const char *bockw_boards_compat_dt[] __initdata = { 70static const char *bockw_boards_compat_dt[] __initdata = {