linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2]Add mxc common CPLD debugboard support
@ 2010-06-12 14:25 Jason Wang
  2010-06-12 14:25 ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Jason Wang
  0 siblings, 1 reply; 10+ messages in thread
From: Jason Wang @ 2010-06-12 14:25 UTC (permalink / raw)
  To: linux-arm-kernel

part2:
 [PATCH 1/2] mxc: add common debug board for 3-stack platforms
 [PATCH 2/2] mx31_3ds: revert cpld debug board relate code

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] mxc: add common debug board for 3-stack platforms
  2010-06-12 14:25 [PATCH 0/2]Add mxc common CPLD debugboard support Jason Wang
@ 2010-06-12 14:25 ` Jason Wang
  2010-06-12 14:25   ` [PATCH 2/2] mx31_3ds: revert cpld debug board relate code Jason Wang
  2010-06-16  6:55   ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Sascha Hauer
  0 siblings, 2 replies; 10+ messages in thread
From: Jason Wang @ 2010-06-12 14:25 UTC (permalink / raw)
  To: linux-arm-kernel

The debug board is little different for all mxc 3-stack(PDK)
platforms, it is possible here to add a common implementation to
support this board.

Signed-off-by: Jason Wang <jason77.wang@gmail.com>
---
 arch/arm/plat-mxc/Kconfig                        |   11 ++
 arch/arm/plat-mxc/Makefile                       |    1 +
 arch/arm/plat-mxc/cpld_debugboard.c              |  161 ++++++++++++++++++++++
 arch/arm/plat-mxc/include/mach/cpld_debugboard.h |   60 ++++++++
 4 files changed, 233 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/plat-mxc/cpld_debugboard.c
 create mode 100644 arch/arm/plat-mxc/include/mach/cpld_debugboard.h

diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig
index 7f7ad6f..8bf917e 100644
--- a/arch/arm/plat-mxc/Kconfig
+++ b/arch/arm/plat-mxc/Kconfig
@@ -81,6 +81,17 @@ config MXC_PWM
 	help
 	  Enable support for the i.MX PWM controller(s).
 
+config MXC_DEBUG_BOARD
+	bool "Enable MXC debug board(for 3-stack)"
+	help
+	  The debug board is an integral part of the MXC 3-stack(PDK)
+	  platforms, it can be attached or removed from the peripheral
+	  board. On debug board, several debug devices(ethernet, UART,
+	  buttons, LEDs and JTAG) are implemented. Between the MCU and
+	  these devices, a CPLD is added as a bridge which performs
+	  data/address de-multiplexing and decode, signal level shift,
+	  interrupt control and various board functions.
+
 config MXC_ULPI
 	bool
 
diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile
index 895bc3c..b9e8c6f 100644
--- a/arch/arm/plat-mxc/Makefile
+++ b/arch/arm/plat-mxc/Makefile
@@ -17,6 +17,7 @@ obj-$(CONFIG_USB_EHCI_MXC) += ehci.o
 obj-$(CONFIG_MXC_ULPI) += ulpi.o
 obj-$(CONFIG_ARCH_MXC_AUDMUX_V1) += audmux-v1.o
 obj-$(CONFIG_ARCH_MXC_AUDMUX_V2) += audmux-v2.o
+obj-$(CONFIG_MXC_DEBUG_BOARD) += cpld_debugboard.o
 ifdef CONFIG_SND_IMX_SOC
 obj-y += ssi-fiq.o
 obj-y += ssi-fiq-ksym.o
diff --git a/arch/arm/plat-mxc/cpld_debugboard.c b/arch/arm/plat-mxc/cpld_debugboard.c
new file mode 100644
index 0000000..0554fa0
--- /dev/null
+++ b/arch/arm/plat-mxc/cpld_debugboard.c
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright (C) 2010 Jason Wang <jason77.wang@gmail.com>
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <linux/gpio.h>
+#include <linux/smsc911x.h>
+
+#include <mach/hardware.h>
+#include <mach/cpld_debugboard.h>
+
+static void __iomem *brd_io;
+static void expio_ack_irq(u32 irq);
+
+static struct resource smsc911x_resources[] = {
+	{
+		.flags = IORESOURCE_MEM,
+	} , {
+		.start = EXPIO_INT_ENET,
+		.end = EXPIO_INT_ENET,
+		.flags = IORESOURCE_IRQ,
+	},
+};
+
+struct smsc911x_platform_config smsc911x_config = {
+	.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
+	.flags = SMSC911X_USE_32BIT | SMSC911X_FORCE_INTERNAL_PHY,
+};
+
+struct platform_device smsc_lan9217_device = {
+	.name = "smsc911x",
+	.id = 0,
+	.dev = {
+		.platform_data = &smsc911x_config,
+	},
+	.num_resources = ARRAY_SIZE(smsc911x_resources),
+	.resource = smsc911x_resources,
+};
+
+static void mxc_expio_irq_handler(u32 irq, struct irq_desc *desc)
+{
+	u32 imr_val;
+	u32 int_valid;
+	u32 expio_irq;
+
+	desc->chip->mask(irq);	/* irq = gpio irq number */
+
+	imr_val = __raw_readw(brd_io + INTR_MASK_REG);
+	int_valid = __raw_readw(brd_io + INTR_STATUS_REG) & ~imr_val;
+
+	expio_irq = MXC_BOARD_IRQ_START;
+	for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
+		struct irq_desc *d;
+		if ((int_valid & 1) == 0)
+			continue;
+		d = irq_desc + expio_irq;
+		if (unlikely(!(d->handle_irq)))
+			pr_err("\nEXPIO irq: %d unhandled\n", expio_irq);
+		else
+			d->handle_irq(expio_irq, d);
+	}
+
+	desc->chip->ack(irq);
+	desc->chip->unmask(irq);
+}
+
+/*
+ * Disable an expio pin's interrupt by setting the bit in the imr.
+ * Irq is an expio virtual irq number
+ */
+static void expio_mask_irq(u32 irq)
+{
+	u16 reg;
+	u32 expio = MXC_IRQ_TO_EXPIO(irq);
+
+	reg = __raw_readw(brd_io + INTR_MASK_REG);
+	reg |= (1 << expio);
+	__raw_writew(reg, brd_io + INTR_MASK_REG);
+}
+
+static void expio_ack_irq(u32 irq)
+{
+	u32 expio = MXC_IRQ_TO_EXPIO(irq);
+
+	__raw_writew(1 << expio, brd_io + INTR_RESET_REG);
+	__raw_writew(0, brd_io + INTR_RESET_REG);
+	expio_mask_irq(irq);
+}
+
+static void expio_unmask_irq(u32 irq)
+{
+	u16 reg;
+	u32 expio = MXC_IRQ_TO_EXPIO(irq);
+
+	reg = __raw_readw(brd_io + INTR_MASK_REG);
+	reg &= ~(1 << expio);
+	__raw_writew(reg, brd_io + INTR_MASK_REG);
+}
+
+static struct irq_chip expio_irq_chip = {
+	.ack = expio_ack_irq,
+	.mask = expio_mask_irq,
+	.unmask = expio_unmask_irq,
+};
+
+int __init mxc_expio_init(u32 base, u32 p_irq)
+{
+	int i;
+
+	brd_io = ioremap(BOARD_IO_ADDR(base), SZ_4K);
+	if (brd_io == NULL)
+		return -ENOMEM;
+
+	if ((__raw_readw(brd_io + MAGIC_NUMBER1_REG) != 0xAAAA) ||
+	    (__raw_readw(brd_io + MAGIC_NUMBER2_REG) != 0x5555) ||
+	    (__raw_readw(brd_io + MAGIC_NUMBER3_REG) != 0xCAFE)) {
+		pr_info("3-Stack Debug board not detected\n");
+		iounmap(brd_io);
+		brd_io = NULL;
+		return -ENODEV;
+	}
+
+	pr_info("3-Stack Debug board detected, rev = 0x%04X\n",
+		readw(brd_io + CPLD_CODE_VER_REG));
+
+	smsc911x_resources[0].start = LAN9217_BASE_ADDR(base);
+	smsc911x_resources[0].end = LAN9217_BASE_ADDR(base) + 0x100 - 1;
+
+	/*
+	 * Configure INT line as GPIO input
+	 */
+	gpio_request(MXC_IRQ_TO_GPIO(p_irq), "expio_pirq");
+	gpio_direction_input(MXC_IRQ_TO_GPIO(p_irq));
+
+	/* disable the interrupt and clear the status */
+	__raw_writew(0, brd_io + INTR_MASK_REG);
+	__raw_writew(0xFFFF, brd_io + INTR_RESET_REG);
+	__raw_writew(0, brd_io + INTR_RESET_REG);
+	__raw_writew(0x1F, brd_io + INTR_MASK_REG);
+	for (i = MXC_EXP_IO_BASE;
+	     i < (MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES); i++) {
+		set_irq_chip(i, &expio_irq_chip);
+		set_irq_handler(i, handle_level_irq);
+		set_irq_flags(i, IRQF_VALID);
+	}
+	set_irq_type(p_irq, IRQF_TRIGGER_LOW);
+	set_irq_chained_handler(p_irq, mxc_expio_irq_handler);
+
+	return 0;
+}
diff --git a/arch/arm/plat-mxc/include/mach/cpld_debugboard.h b/arch/arm/plat-mxc/include/mach/cpld_debugboard.h
new file mode 100644
index 0000000..a1422d2
--- /dev/null
+++ b/arch/arm/plat-mxc/include/mach/cpld_debugboard.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later@the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+#ifndef __ASM_ARCH_MXC_CPLD_DB_H__
+#define __ASM_ARCH_MXC_CPLD_DB_H__
+
+/* LAN9217 ethernet base address */
+#define LAN9217_BASE_ADDR(n)	(n + 0x0)
+/* External UART */
+#define UARTA_BASE_ADDR(n)	(n + 0x8000)
+#define UARTB_BASE_ADDR(n)	(n + 0x10000)
+
+#define BOARD_IO_ADDR(n)	(n + 0x20000)
+/* LED switchs */
+#define LED_SWITCH_REG		0x00
+/* buttons */
+#define SWITCH_BUTTONS_REG	0x08
+/* status, interrupt */
+#define INTR_STATUS_REG	0x10
+#define INTR_MASK_REG		0x38
+#define INTR_RESET_REG		0x20
+/* magic word for debug CPLD */
+#define MAGIC_NUMBER1_REG	0x40
+#define MAGIC_NUMBER2_REG	0x48
+/* CPLD code version */
+#define CPLD_CODE_VER_REG	0x50
+/* magic word for debug CPLD */
+#define MAGIC_NUMBER3_REG	0x58
+/* module reset register*/
+#define MODULE_RESET_REG	0x60
+/* CPU ID and Personality ID */
+#define MCU_BOARD_ID_REG	0x68
+
+#define MXC_IRQ_TO_EXPIO(irq)   ((irq) - MXC_BOARD_IRQ_START)
+#define MXC_IRQ_TO_GPIO(irq)	((irq) - MXC_INTERNAL_IRQS)
+
+#define MXC_EXP_IO_BASE		(MXC_BOARD_IRQ_START)
+#define MXC_MAX_EXP_IO_LINES	16
+
+/* interrupts like external uart , external ethernet etc*/
+#define EXPIO_INT_ENET		(MXC_BOARD_IRQ_START + 0)
+#define EXPIO_INT_XUART_A	(MXC_BOARD_IRQ_START + 1)
+#define EXPIO_INT_XUART_B	(MXC_BOARD_IRQ_START + 2)
+#define EXPIO_INT_BUTTON_A	(MXC_BOARD_IRQ_START + 3)
+#define EXPIO_INT_BUTTON_B	(MXC_BOARD_IRQ_START + 4)
+
+extern struct platform_device smsc_lan9217_device;
+
+int __init mxc_expio_init(u32 base, u32 p_irq);
+
+#endif /* __ASM_ARCH_MXC_CPLD_DB_H__ */
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] mx31_3ds: revert cpld debug board relate code
  2010-06-12 14:25 ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Jason Wang
@ 2010-06-12 14:25   ` Jason Wang
  2010-06-16  6:57     ` Sascha Hauer
  2010-06-16  6:55   ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Sascha Hauer
  1 sibling, 1 reply; 10+ messages in thread
From: Jason Wang @ 2010-06-12 14:25 UTC (permalink / raw)
  To: linux-arm-kernel

Because we add a cpld debug board support in mxc level, we remove
those redudent codes from board level.

Signed-off-by: Jason Wang <jason77.wang@gmail.com>
---
 arch/arm/mach-mx3/Kconfig                       |    1 +
 arch/arm/mach-mx3/mach-mx31_3ds.c               |  168 +----------------------
 arch/arm/plat-mxc/include/mach/board-mx31_3ds.h |   42 ------
 3 files changed, 4 insertions(+), 207 deletions(-)

diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig
index 344753f..fd422cf 100644
--- a/arch/arm/mach-mx3/Kconfig
+++ b/arch/arm/mach-mx3/Kconfig
@@ -58,6 +58,7 @@ config MACH_MX31LITE
 config MACH_MX31_3DS
 	bool "Support MX31PDK (3DS)"
 	select ARCH_MX31
+	select MXC_DEBUG_BOARD
 	help
 	  Include support for MX31PDK (3DS) platform. This includes specific
 	  configurations for the board and its peripherals.
diff --git a/arch/arm/mach-mx3/mach-mx31_3ds.c b/arch/arm/mach-mx3/mach-mx31_3ds.c
index 58e5729..d8af726 100644
--- a/arch/arm/mach-mx3/mach-mx31_3ds.c
+++ b/arch/arm/mach-mx3/mach-mx31_3ds.c
@@ -22,7 +22,6 @@
 #include <linux/clk.h>
 #include <linux/irq.h>
 #include <linux/gpio.h>
-#include <linux/smsc911x.h>
 #include <linux/platform_device.h>
 #include <linux/mfd/mc13783.h>
 #include <linux/spi/spi.h>
@@ -38,6 +37,7 @@
 #include <asm/mach/map.h>
 #include <mach/common.h>
 #include <mach/board-mx31_3ds.h>
+#include <mach/cpld_debugboard.h>
 #include <mach/imx-uart.h>
 #include <mach/iomux-mx3.h>
 #include <mach/mxc_nand.h>
@@ -213,173 +213,11 @@ static struct imxuart_platform_data uart_pdata = {
 };
 
 /*
- * Support for the SMSC9217 on the Debug board.
- */
-
-static struct smsc911x_platform_config smsc911x_config = {
-	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
-	.irq_type	= SMSC911X_IRQ_TYPE_PUSH_PULL,
-	.flags		= SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY,
-	.phy_interface	= PHY_INTERFACE_MODE_MII,
-};
-
-static struct resource smsc911x_resources[] = {
-	{
-		.start		= LAN9217_BASE_ADDR,
-		.end		= LAN9217_BASE_ADDR + 0xff,
-		.flags		= IORESOURCE_MEM,
-	}, {
-		.start		= EXPIO_INT_ENET,
-		.end		= EXPIO_INT_ENET,
-		.flags		= IORESOURCE_IRQ,
-	},
-};
-
-static struct platform_device smsc911x_device = {
-	.name		= "smsc911x",
-	.id		= -1,
-	.num_resources	= ARRAY_SIZE(smsc911x_resources),
-	.resource	= smsc911x_resources,
-	.dev		= {
-		.platform_data = &smsc911x_config,
-	},
-};
-
-/*
- * Routines for the CPLD on the debug board. It contains a CPLD handling
- * LEDs, switches, interrupts for Ethernet.
- */
-
-static void mx31_3ds_expio_irq_handler(uint32_t irq, struct irq_desc *desc)
-{
-	uint32_t imr_val;
-	uint32_t int_valid;
-	uint32_t expio_irq;
-
-	imr_val = __raw_readw(CPLD_INT_MASK_REG);
-	int_valid = __raw_readw(CPLD_INT_STATUS_REG) & ~imr_val;
-
-	expio_irq = MXC_EXP_IO_BASE;
-	for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
-		if ((int_valid & 1) == 0)
-			continue;
-		generic_handle_irq(expio_irq);
-	}
-}
-
-/*
- * Disable an expio pin's interrupt by setting the bit in the imr.
- * @param irq           an expio virtual irq number
- */
-static void expio_mask_irq(uint32_t irq)
-{
-	uint16_t reg;
-	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
-
-	/* mask the interrupt */
-	reg = __raw_readw(CPLD_INT_MASK_REG);
-	reg |= 1 << expio;
-	__raw_writew(reg, CPLD_INT_MASK_REG);
-}
-
-/*
- * Acknowledge an expanded io pin's interrupt by clearing the bit in the isr.
- * @param irq           an expanded io virtual irq number
- */
-static void expio_ack_irq(uint32_t irq)
-{
-	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
-
-	/* clear the interrupt status */
-	__raw_writew(1 << expio, CPLD_INT_RESET_REG);
-	__raw_writew(0, CPLD_INT_RESET_REG);
-	/* mask the interrupt */
-	expio_mask_irq(irq);
-}
-
-/*
- * Enable a expio pin's interrupt by clearing the bit in the imr.
- * @param irq           a expio virtual irq number
- */
-static void expio_unmask_irq(uint32_t irq)
-{
-	uint16_t reg;
-	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
-
-	/* unmask the interrupt */
-	reg = __raw_readw(CPLD_INT_MASK_REG);
-	reg &= ~(1 << expio);
-	__raw_writew(reg, CPLD_INT_MASK_REG);
-}
-
-static struct irq_chip expio_irq_chip = {
-	.ack = expio_ack_irq,
-	.mask = expio_mask_irq,
-	.unmask = expio_unmask_irq,
-};
-
-static int __init mx31_3ds_init_expio(void)
-{
-	int i;
-	int ret;
-
-	/* Check if there's a debug board connected */
-	if ((__raw_readw(CPLD_MAGIC_NUMBER1_REG) != 0xAAAA) ||
-	    (__raw_readw(CPLD_MAGIC_NUMBER2_REG) != 0x5555) ||
-	    (__raw_readw(CPLD_MAGIC_NUMBER3_REG) != 0xCAFE)) {
-		/* No Debug board found */
-		return -ENODEV;
-	}
-
-	pr_info("i.MX31 3DS Debug board detected, rev = 0x%04X\n",
-		__raw_readw(CPLD_CODE_VER_REG));
-
-	/*
-	 * Configure INT line as GPIO input
-	 */
-	ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1), "sms9217-irq");
-	if (ret)
-		pr_warning("could not get LAN irq gpio\n");
-	else
-		gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1));
-
-	/* Disable the interrupts and clear the status */
-	__raw_writew(0, CPLD_INT_MASK_REG);
-	__raw_writew(0xFFFF, CPLD_INT_RESET_REG);
-	__raw_writew(0, CPLD_INT_RESET_REG);
-	__raw_writew(0x1F, CPLD_INT_MASK_REG);
-	for (i = MXC_EXP_IO_BASE;
-	     i < (MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES);
-	     i++) {
-		set_irq_chip(i, &expio_irq_chip);
-		set_irq_handler(i, handle_level_irq);
-		set_irq_flags(i, IRQF_VALID);
-	}
-	set_irq_type(EXPIO_PARENT_INT, IRQ_TYPE_LEVEL_LOW);
-	set_irq_chained_handler(EXPIO_PARENT_INT, mx31_3ds_expio_irq_handler);
-
-	return 0;
-}
-
-/*
- * This structure defines the MX31 memory map.
- */
-static struct map_desc mx31_3ds_io_desc[] __initdata = {
-	{
-		.virtual = MX31_CS5_BASE_ADDR_VIRT,
-		.pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR),
-		.length = MX31_CS5_SIZE,
-		.type = MT_DEVICE,
-	},
-};
-
-/*
  * Set up static virtual mappings.
  */
 static void __init mx31_3ds_map_io(void)
 {
 	mx31_map_io();
-	iotable_init(mx31_3ds_io_desc, ARRAY_SIZE(mx31_3ds_io_desc));
 }
 
 /*!
@@ -402,8 +240,8 @@ static void __init mxc_board_init(void)
 	mx31_3ds_usbotg_init();
 	mxc_register_device(&mxc_otg_udc_device, &usbotg_pdata);
 
-	if (!mx31_3ds_init_expio())
-		platform_device_register(&smsc911x_device);
+	if (!mxc_expio_init(CS5_BASE_ADDR, EXPIO_PARENT_INT))
+		platform_device_register(&smsc_lan9217_device);
 }
 
 static void __init mx31_3ds_timer_init(void)
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
index da92933..c26d88d 100644
--- a/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
+++ b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
@@ -12,48 +12,6 @@
 #define __ASM_ARCH_MXC_BOARD_MX31_3DS_H__
 
 /* Definitions for components on the Debug board */
-
-/* Base address of CPLD controller on the Debug board */
-#define DEBUG_BASE_ADDRESS		CS5_IO_ADDRESS(CS5_BASE_ADDR)
-
-/* LAN9217 ethernet base address */
-#define LAN9217_BASE_ADDR		CS5_BASE_ADDR
-
-/* CPLD config and interrupt base address */
-#define CPLD_ADDR			(DEBUG_BASE_ADDRESS + 0x20000)
-
-/* LED switchs */
-#define CPLD_LED_REG			(CPLD_ADDR + 0x00)
-/* buttons */
-#define CPLD_SWITCH_BUTTONS_REG	(EXPIO_ADDR + 0x08)
-/* status, interrupt */
-#define CPLD_INT_STATUS_REG		(CPLD_ADDR + 0x10)
-#define CPLD_INT_MASK_REG		(CPLD_ADDR + 0x38)
-#define CPLD_INT_RESET_REG		(CPLD_ADDR + 0x20)
-/* magic word for debug CPLD */
-#define CPLD_MAGIC_NUMBER1_REG		(CPLD_ADDR + 0x40)
-#define CPLD_MAGIC_NUMBER2_REG		(CPLD_ADDR + 0x48)
-/* CPLD code version */
-#define CPLD_CODE_VER_REG		(CPLD_ADDR + 0x50)
-/* magic word for debug CPLD */
-#define CPLD_MAGIC_NUMBER3_REG		(CPLD_ADDR + 0x58)
-/* module reset register */
-#define CPLD_MODULE_RESET_REG		(CPLD_ADDR + 0x60)
-/* CPU ID and Personality ID */
-#define CPLD_MCU_BOARD_ID_REG		(CPLD_ADDR + 0x68)
-
-/* CPLD IRQ line for external uart, external ethernet etc */
 #define EXPIO_PARENT_INT	IOMUX_TO_IRQ(MX31_PIN_GPIO1_1)
 
-#define MXC_EXP_IO_BASE		(MXC_BOARD_IRQ_START)
-#define MXC_IRQ_TO_EXPIO(irq)	((irq) - MXC_EXP_IO_BASE)
-
-#define EXPIO_INT_ENET		(MXC_EXP_IO_BASE + 0)
-#define EXPIO_INT_XUART_A	(MXC_EXP_IO_BASE + 1)
-#define EXPIO_INT_XUART_B	(MXC_EXP_IO_BASE + 2)
-#define EXPIO_INT_BUTTON_A	(MXC_EXP_IO_BASE + 3)
-#define EXPIO_INT_BUTTON_B	(MXC_EXP_IO_BASE + 4)
-
-#define MXC_MAX_EXP_IO_LINES	16
-
 #endif /* __ASM_ARCH_MXC_BOARD_MX31_3DS_H__ */
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 1/2] mxc: add common debug board for 3-stack platforms
  2010-06-12 14:25 ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Jason Wang
  2010-06-12 14:25   ` [PATCH 2/2] mx31_3ds: revert cpld debug board relate code Jason Wang
@ 2010-06-16  6:55   ` Sascha Hauer
  2010-06-17 13:37     ` jason
  2010-06-18 14:06     ` jason
  1 sibling, 2 replies; 10+ messages in thread
From: Sascha Hauer @ 2010-06-16  6:55 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Jun 12, 2010 at 10:25:06PM +0800, Jason Wang wrote:
> The debug board is little different for all mxc 3-stack(PDK)
> platforms, it is possible here to add a common implementation to
> support this board.

Two small things left:

Could you change the name cpld_debugboard.c to something like
3ds_debugboard.c? That we are talking about the 3ds is much more
interesting than that there's a cpld on the board.

Also, I really prefer having no extra header file for the debug board.
All information in this header file is only interesting in this single C
file.

Sascha


> 
> Signed-off-by: Jason Wang <jason77.wang@gmail.com>
> ---
>  arch/arm/plat-mxc/Kconfig                        |   11 ++
>  arch/arm/plat-mxc/Makefile                       |    1 +
>  arch/arm/plat-mxc/cpld_debugboard.c              |  161 ++++++++++++++++++++++
>  arch/arm/plat-mxc/include/mach/cpld_debugboard.h |   60 ++++++++
>  4 files changed, 233 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/plat-mxc/cpld_debugboard.c
>  create mode 100644 arch/arm/plat-mxc/include/mach/cpld_debugboard.h
> 
> diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig
> index 7f7ad6f..8bf917e 100644
> --- a/arch/arm/plat-mxc/Kconfig
> +++ b/arch/arm/plat-mxc/Kconfig
> @@ -81,6 +81,17 @@ config MXC_PWM
>  	help
>  	  Enable support for the i.MX PWM controller(s).
>  
> +config MXC_DEBUG_BOARD
> +	bool "Enable MXC debug board(for 3-stack)"
> +	help
> +	  The debug board is an integral part of the MXC 3-stack(PDK)
> +	  platforms, it can be attached or removed from the peripheral
> +	  board. On debug board, several debug devices(ethernet, UART,
> +	  buttons, LEDs and JTAG) are implemented. Between the MCU and
> +	  these devices, a CPLD is added as a bridge which performs
> +	  data/address de-multiplexing and decode, signal level shift,
> +	  interrupt control and various board functions.
> +
>  config MXC_ULPI
>  	bool
>  
> diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile
> index 895bc3c..b9e8c6f 100644
> --- a/arch/arm/plat-mxc/Makefile
> +++ b/arch/arm/plat-mxc/Makefile
> @@ -17,6 +17,7 @@ obj-$(CONFIG_USB_EHCI_MXC) += ehci.o
>  obj-$(CONFIG_MXC_ULPI) += ulpi.o
>  obj-$(CONFIG_ARCH_MXC_AUDMUX_V1) += audmux-v1.o
>  obj-$(CONFIG_ARCH_MXC_AUDMUX_V2) += audmux-v2.o
> +obj-$(CONFIG_MXC_DEBUG_BOARD) += cpld_debugboard.o
>  ifdef CONFIG_SND_IMX_SOC
>  obj-y += ssi-fiq.o
>  obj-y += ssi-fiq-ksym.o
> diff --git a/arch/arm/plat-mxc/cpld_debugboard.c b/arch/arm/plat-mxc/cpld_debugboard.c
> new file mode 100644
> index 0000000..0554fa0
> --- /dev/null
> +++ b/arch/arm/plat-mxc/cpld_debugboard.c
> @@ -0,0 +1,161 @@
> +/*
> + * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
> + * Copyright (C) 2010 Jason Wang <jason77.wang@gmail.com>
> + *
> + * The code contained herein is licensed under the GNU General Public
> + * License. You may obtain a copy of the GNU General Public License
> + * Version 2 or later at the following locations:
> + *
> + * http://www.opensource.org/licenses/gpl-license.html
> + * http://www.gnu.org/copyleft/gpl.html
> + */
> +
> +#include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/io.h>
> +#include <linux/platform_device.h>
> +#include <linux/gpio.h>
> +#include <linux/smsc911x.h>
> +
> +#include <mach/hardware.h>
> +#include <mach/cpld_debugboard.h>
> +
> +static void __iomem *brd_io;
> +static void expio_ack_irq(u32 irq);
> +
> +static struct resource smsc911x_resources[] = {
> +	{
> +		.flags = IORESOURCE_MEM,
> +	} , {
> +		.start = EXPIO_INT_ENET,
> +		.end = EXPIO_INT_ENET,
> +		.flags = IORESOURCE_IRQ,
> +	},
> +};
> +
> +struct smsc911x_platform_config smsc911x_config = {
> +	.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
> +	.flags = SMSC911X_USE_32BIT | SMSC911X_FORCE_INTERNAL_PHY,
> +};
> +
> +struct platform_device smsc_lan9217_device = {
> +	.name = "smsc911x",
> +	.id = 0,
> +	.dev = {
> +		.platform_data = &smsc911x_config,
> +	},
> +	.num_resources = ARRAY_SIZE(smsc911x_resources),
> +	.resource = smsc911x_resources,
> +};
> +
> +static void mxc_expio_irq_handler(u32 irq, struct irq_desc *desc)
> +{
> +	u32 imr_val;
> +	u32 int_valid;
> +	u32 expio_irq;
> +
> +	desc->chip->mask(irq);	/* irq = gpio irq number */
> +
> +	imr_val = __raw_readw(brd_io + INTR_MASK_REG);
> +	int_valid = __raw_readw(brd_io + INTR_STATUS_REG) & ~imr_val;
> +
> +	expio_irq = MXC_BOARD_IRQ_START;
> +	for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
> +		struct irq_desc *d;
> +		if ((int_valid & 1) == 0)
> +			continue;
> +		d = irq_desc + expio_irq;
> +		if (unlikely(!(d->handle_irq)))
> +			pr_err("\nEXPIO irq: %d unhandled\n", expio_irq);
> +		else
> +			d->handle_irq(expio_irq, d);
> +	}
> +
> +	desc->chip->ack(irq);
> +	desc->chip->unmask(irq);
> +}
> +
> +/*
> + * Disable an expio pin's interrupt by setting the bit in the imr.
> + * Irq is an expio virtual irq number
> + */
> +static void expio_mask_irq(u32 irq)
> +{
> +	u16 reg;
> +	u32 expio = MXC_IRQ_TO_EXPIO(irq);
> +
> +	reg = __raw_readw(brd_io + INTR_MASK_REG);
> +	reg |= (1 << expio);
> +	__raw_writew(reg, brd_io + INTR_MASK_REG);
> +}
> +
> +static void expio_ack_irq(u32 irq)
> +{
> +	u32 expio = MXC_IRQ_TO_EXPIO(irq);
> +
> +	__raw_writew(1 << expio, brd_io + INTR_RESET_REG);
> +	__raw_writew(0, brd_io + INTR_RESET_REG);
> +	expio_mask_irq(irq);
> +}
> +
> +static void expio_unmask_irq(u32 irq)
> +{
> +	u16 reg;
> +	u32 expio = MXC_IRQ_TO_EXPIO(irq);
> +
> +	reg = __raw_readw(brd_io + INTR_MASK_REG);
> +	reg &= ~(1 << expio);
> +	__raw_writew(reg, brd_io + INTR_MASK_REG);
> +}
> +
> +static struct irq_chip expio_irq_chip = {
> +	.ack = expio_ack_irq,
> +	.mask = expio_mask_irq,
> +	.unmask = expio_unmask_irq,
> +};
> +
> +int __init mxc_expio_init(u32 base, u32 p_irq)
> +{
> +	int i;
> +
> +	brd_io = ioremap(BOARD_IO_ADDR(base), SZ_4K);
> +	if (brd_io == NULL)
> +		return -ENOMEM;
> +
> +	if ((__raw_readw(brd_io + MAGIC_NUMBER1_REG) != 0xAAAA) ||
> +	    (__raw_readw(brd_io + MAGIC_NUMBER2_REG) != 0x5555) ||
> +	    (__raw_readw(brd_io + MAGIC_NUMBER3_REG) != 0xCAFE)) {
> +		pr_info("3-Stack Debug board not detected\n");
> +		iounmap(brd_io);
> +		brd_io = NULL;
> +		return -ENODEV;
> +	}
> +
> +	pr_info("3-Stack Debug board detected, rev = 0x%04X\n",
> +		readw(brd_io + CPLD_CODE_VER_REG));
> +
> +	smsc911x_resources[0].start = LAN9217_BASE_ADDR(base);
> +	smsc911x_resources[0].end = LAN9217_BASE_ADDR(base) + 0x100 - 1;
> +
> +	/*
> +	 * Configure INT line as GPIO input
> +	 */
> +	gpio_request(MXC_IRQ_TO_GPIO(p_irq), "expio_pirq");
> +	gpio_direction_input(MXC_IRQ_TO_GPIO(p_irq));
> +
> +	/* disable the interrupt and clear the status */
> +	__raw_writew(0, brd_io + INTR_MASK_REG);
> +	__raw_writew(0xFFFF, brd_io + INTR_RESET_REG);
> +	__raw_writew(0, brd_io + INTR_RESET_REG);
> +	__raw_writew(0x1F, brd_io + INTR_MASK_REG);
> +	for (i = MXC_EXP_IO_BASE;
> +	     i < (MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES); i++) {
> +		set_irq_chip(i, &expio_irq_chip);
> +		set_irq_handler(i, handle_level_irq);
> +		set_irq_flags(i, IRQF_VALID);
> +	}
> +	set_irq_type(p_irq, IRQF_TRIGGER_LOW);
> +	set_irq_chained_handler(p_irq, mxc_expio_irq_handler);
> +
> +	return 0;
> +}
> diff --git a/arch/arm/plat-mxc/include/mach/cpld_debugboard.h b/arch/arm/plat-mxc/include/mach/cpld_debugboard.h
> new file mode 100644
> index 0000000..a1422d2
> --- /dev/null
> +++ b/arch/arm/plat-mxc/include/mach/cpld_debugboard.h
> @@ -0,0 +1,60 @@
> +/*
> + * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
> + *
> + *
> + * The code contained herein is licensed under the GNU General Public
> + * License. You may obtain a copy of the GNU General Public License
> + * Version 2 or later at the following locations:
> + *
> + * http://www.opensource.org/licenses/gpl-license.html
> + * http://www.gnu.org/copyleft/gpl.html
> + */
> +
> +#ifndef __ASM_ARCH_MXC_CPLD_DB_H__
> +#define __ASM_ARCH_MXC_CPLD_DB_H__
> +
> +/* LAN9217 ethernet base address */
> +#define LAN9217_BASE_ADDR(n)	(n + 0x0)
> +/* External UART */
> +#define UARTA_BASE_ADDR(n)	(n + 0x8000)
> +#define UARTB_BASE_ADDR(n)	(n + 0x10000)
> +
> +#define BOARD_IO_ADDR(n)	(n + 0x20000)
> +/* LED switchs */
> +#define LED_SWITCH_REG		0x00
> +/* buttons */
> +#define SWITCH_BUTTONS_REG	0x08
> +/* status, interrupt */
> +#define INTR_STATUS_REG	0x10
> +#define INTR_MASK_REG		0x38
> +#define INTR_RESET_REG		0x20
> +/* magic word for debug CPLD */
> +#define MAGIC_NUMBER1_REG	0x40
> +#define MAGIC_NUMBER2_REG	0x48
> +/* CPLD code version */
> +#define CPLD_CODE_VER_REG	0x50
> +/* magic word for debug CPLD */
> +#define MAGIC_NUMBER3_REG	0x58
> +/* module reset register*/
> +#define MODULE_RESET_REG	0x60
> +/* CPU ID and Personality ID */
> +#define MCU_BOARD_ID_REG	0x68
> +
> +#define MXC_IRQ_TO_EXPIO(irq)   ((irq) - MXC_BOARD_IRQ_START)
> +#define MXC_IRQ_TO_GPIO(irq)	((irq) - MXC_INTERNAL_IRQS)
> +
> +#define MXC_EXP_IO_BASE		(MXC_BOARD_IRQ_START)
> +#define MXC_MAX_EXP_IO_LINES	16
> +
> +/* interrupts like external uart , external ethernet etc*/
> +#define EXPIO_INT_ENET		(MXC_BOARD_IRQ_START + 0)
> +#define EXPIO_INT_XUART_A	(MXC_BOARD_IRQ_START + 1)
> +#define EXPIO_INT_XUART_B	(MXC_BOARD_IRQ_START + 2)
> +#define EXPIO_INT_BUTTON_A	(MXC_BOARD_IRQ_START + 3)
> +#define EXPIO_INT_BUTTON_B	(MXC_BOARD_IRQ_START + 4)
> +
> +extern struct platform_device smsc_lan9217_device;
> +
> +int __init mxc_expio_init(u32 base, u32 p_irq);
> +
> +#endif /* __ASM_ARCH_MXC_CPLD_DB_H__ */
> -- 
> 1.5.6.5
> 
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 2/2] mx31_3ds: revert cpld debug board relate code
  2010-06-12 14:25   ` [PATCH 2/2] mx31_3ds: revert cpld debug board relate code Jason Wang
@ 2010-06-16  6:57     ` Sascha Hauer
  2010-06-16 20:36       ` Magnus Lilja
  0 siblings, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2010-06-16  6:57 UTC (permalink / raw)
  To: linux-arm-kernel


[Added Magnus to Cc]

Magnus,

As you are the original author of the removed code, can I have you
Acked-by or Tested-by here?

Sascha

On Sat, Jun 12, 2010 at 10:25:07PM +0800, Jason Wang wrote:
> Because we add a cpld debug board support in mxc level, we remove
> those redudent codes from board level.
> 
> Signed-off-by: Jason Wang <jason77.wang@gmail.com>
> ---
>  arch/arm/mach-mx3/Kconfig                       |    1 +
>  arch/arm/mach-mx3/mach-mx31_3ds.c               |  168 +----------------------
>  arch/arm/plat-mxc/include/mach/board-mx31_3ds.h |   42 ------
>  3 files changed, 4 insertions(+), 207 deletions(-)
> 
> diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig
> index 344753f..fd422cf 100644
> --- a/arch/arm/mach-mx3/Kconfig
> +++ b/arch/arm/mach-mx3/Kconfig
> @@ -58,6 +58,7 @@ config MACH_MX31LITE
>  config MACH_MX31_3DS
>  	bool "Support MX31PDK (3DS)"
>  	select ARCH_MX31
> +	select MXC_DEBUG_BOARD
>  	help
>  	  Include support for MX31PDK (3DS) platform. This includes specific
>  	  configurations for the board and its peripherals.
> diff --git a/arch/arm/mach-mx3/mach-mx31_3ds.c b/arch/arm/mach-mx3/mach-mx31_3ds.c
> index 58e5729..d8af726 100644
> --- a/arch/arm/mach-mx3/mach-mx31_3ds.c
> +++ b/arch/arm/mach-mx3/mach-mx31_3ds.c
> @@ -22,7 +22,6 @@
>  #include <linux/clk.h>
>  #include <linux/irq.h>
>  #include <linux/gpio.h>
> -#include <linux/smsc911x.h>
>  #include <linux/platform_device.h>
>  #include <linux/mfd/mc13783.h>
>  #include <linux/spi/spi.h>
> @@ -38,6 +37,7 @@
>  #include <asm/mach/map.h>
>  #include <mach/common.h>
>  #include <mach/board-mx31_3ds.h>
> +#include <mach/cpld_debugboard.h>
>  #include <mach/imx-uart.h>
>  #include <mach/iomux-mx3.h>
>  #include <mach/mxc_nand.h>
> @@ -213,173 +213,11 @@ static struct imxuart_platform_data uart_pdata = {
>  };
>  
>  /*
> - * Support for the SMSC9217 on the Debug board.
> - */
> -
> -static struct smsc911x_platform_config smsc911x_config = {
> -	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
> -	.irq_type	= SMSC911X_IRQ_TYPE_PUSH_PULL,
> -	.flags		= SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY,
> -	.phy_interface	= PHY_INTERFACE_MODE_MII,
> -};
> -
> -static struct resource smsc911x_resources[] = {
> -	{
> -		.start		= LAN9217_BASE_ADDR,
> -		.end		= LAN9217_BASE_ADDR + 0xff,
> -		.flags		= IORESOURCE_MEM,
> -	}, {
> -		.start		= EXPIO_INT_ENET,
> -		.end		= EXPIO_INT_ENET,
> -		.flags		= IORESOURCE_IRQ,
> -	},
> -};
> -
> -static struct platform_device smsc911x_device = {
> -	.name		= "smsc911x",
> -	.id		= -1,
> -	.num_resources	= ARRAY_SIZE(smsc911x_resources),
> -	.resource	= smsc911x_resources,
> -	.dev		= {
> -		.platform_data = &smsc911x_config,
> -	},
> -};
> -
> -/*
> - * Routines for the CPLD on the debug board. It contains a CPLD handling
> - * LEDs, switches, interrupts for Ethernet.
> - */
> -
> -static void mx31_3ds_expio_irq_handler(uint32_t irq, struct irq_desc *desc)
> -{
> -	uint32_t imr_val;
> -	uint32_t int_valid;
> -	uint32_t expio_irq;
> -
> -	imr_val = __raw_readw(CPLD_INT_MASK_REG);
> -	int_valid = __raw_readw(CPLD_INT_STATUS_REG) & ~imr_val;
> -
> -	expio_irq = MXC_EXP_IO_BASE;
> -	for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
> -		if ((int_valid & 1) == 0)
> -			continue;
> -		generic_handle_irq(expio_irq);
> -	}
> -}
> -
> -/*
> - * Disable an expio pin's interrupt by setting the bit in the imr.
> - * @param irq           an expio virtual irq number
> - */
> -static void expio_mask_irq(uint32_t irq)
> -{
> -	uint16_t reg;
> -	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
> -
> -	/* mask the interrupt */
> -	reg = __raw_readw(CPLD_INT_MASK_REG);
> -	reg |= 1 << expio;
> -	__raw_writew(reg, CPLD_INT_MASK_REG);
> -}
> -
> -/*
> - * Acknowledge an expanded io pin's interrupt by clearing the bit in the isr.
> - * @param irq           an expanded io virtual irq number
> - */
> -static void expio_ack_irq(uint32_t irq)
> -{
> -	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
> -
> -	/* clear the interrupt status */
> -	__raw_writew(1 << expio, CPLD_INT_RESET_REG);
> -	__raw_writew(0, CPLD_INT_RESET_REG);
> -	/* mask the interrupt */
> -	expio_mask_irq(irq);
> -}
> -
> -/*
> - * Enable a expio pin's interrupt by clearing the bit in the imr.
> - * @param irq           a expio virtual irq number
> - */
> -static void expio_unmask_irq(uint32_t irq)
> -{
> -	uint16_t reg;
> -	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
> -
> -	/* unmask the interrupt */
> -	reg = __raw_readw(CPLD_INT_MASK_REG);
> -	reg &= ~(1 << expio);
> -	__raw_writew(reg, CPLD_INT_MASK_REG);
> -}
> -
> -static struct irq_chip expio_irq_chip = {
> -	.ack = expio_ack_irq,
> -	.mask = expio_mask_irq,
> -	.unmask = expio_unmask_irq,
> -};
> -
> -static int __init mx31_3ds_init_expio(void)
> -{
> -	int i;
> -	int ret;
> -
> -	/* Check if there's a debug board connected */
> -	if ((__raw_readw(CPLD_MAGIC_NUMBER1_REG) != 0xAAAA) ||
> -	    (__raw_readw(CPLD_MAGIC_NUMBER2_REG) != 0x5555) ||
> -	    (__raw_readw(CPLD_MAGIC_NUMBER3_REG) != 0xCAFE)) {
> -		/* No Debug board found */
> -		return -ENODEV;
> -	}
> -
> -	pr_info("i.MX31 3DS Debug board detected, rev = 0x%04X\n",
> -		__raw_readw(CPLD_CODE_VER_REG));
> -
> -	/*
> -	 * Configure INT line as GPIO input
> -	 */
> -	ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1), "sms9217-irq");
> -	if (ret)
> -		pr_warning("could not get LAN irq gpio\n");
> -	else
> -		gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1));
> -
> -	/* Disable the interrupts and clear the status */
> -	__raw_writew(0, CPLD_INT_MASK_REG);
> -	__raw_writew(0xFFFF, CPLD_INT_RESET_REG);
> -	__raw_writew(0, CPLD_INT_RESET_REG);
> -	__raw_writew(0x1F, CPLD_INT_MASK_REG);
> -	for (i = MXC_EXP_IO_BASE;
> -	     i < (MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES);
> -	     i++) {
> -		set_irq_chip(i, &expio_irq_chip);
> -		set_irq_handler(i, handle_level_irq);
> -		set_irq_flags(i, IRQF_VALID);
> -	}
> -	set_irq_type(EXPIO_PARENT_INT, IRQ_TYPE_LEVEL_LOW);
> -	set_irq_chained_handler(EXPIO_PARENT_INT, mx31_3ds_expio_irq_handler);
> -
> -	return 0;
> -}
> -
> -/*
> - * This structure defines the MX31 memory map.
> - */
> -static struct map_desc mx31_3ds_io_desc[] __initdata = {
> -	{
> -		.virtual = MX31_CS5_BASE_ADDR_VIRT,
> -		.pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR),
> -		.length = MX31_CS5_SIZE,
> -		.type = MT_DEVICE,
> -	},
> -};
> -
> -/*
>   * Set up static virtual mappings.
>   */
>  static void __init mx31_3ds_map_io(void)
>  {
>  	mx31_map_io();
> -	iotable_init(mx31_3ds_io_desc, ARRAY_SIZE(mx31_3ds_io_desc));
>  }
>  
>  /*!
> @@ -402,8 +240,8 @@ static void __init mxc_board_init(void)
>  	mx31_3ds_usbotg_init();
>  	mxc_register_device(&mxc_otg_udc_device, &usbotg_pdata);
>  
> -	if (!mx31_3ds_init_expio())
> -		platform_device_register(&smsc911x_device);
> +	if (!mxc_expio_init(CS5_BASE_ADDR, EXPIO_PARENT_INT))
> +		platform_device_register(&smsc_lan9217_device);
>  }
>  
>  static void __init mx31_3ds_timer_init(void)
> diff --git a/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
> index da92933..c26d88d 100644
> --- a/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
> +++ b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
> @@ -12,48 +12,6 @@
>  #define __ASM_ARCH_MXC_BOARD_MX31_3DS_H__
>  
>  /* Definitions for components on the Debug board */
> -
> -/* Base address of CPLD controller on the Debug board */
> -#define DEBUG_BASE_ADDRESS		CS5_IO_ADDRESS(CS5_BASE_ADDR)
> -
> -/* LAN9217 ethernet base address */
> -#define LAN9217_BASE_ADDR		CS5_BASE_ADDR
> -
> -/* CPLD config and interrupt base address */
> -#define CPLD_ADDR			(DEBUG_BASE_ADDRESS + 0x20000)
> -
> -/* LED switchs */
> -#define CPLD_LED_REG			(CPLD_ADDR + 0x00)
> -/* buttons */
> -#define CPLD_SWITCH_BUTTONS_REG	(EXPIO_ADDR + 0x08)
> -/* status, interrupt */
> -#define CPLD_INT_STATUS_REG		(CPLD_ADDR + 0x10)
> -#define CPLD_INT_MASK_REG		(CPLD_ADDR + 0x38)
> -#define CPLD_INT_RESET_REG		(CPLD_ADDR + 0x20)
> -/* magic word for debug CPLD */
> -#define CPLD_MAGIC_NUMBER1_REG		(CPLD_ADDR + 0x40)
> -#define CPLD_MAGIC_NUMBER2_REG		(CPLD_ADDR + 0x48)
> -/* CPLD code version */
> -#define CPLD_CODE_VER_REG		(CPLD_ADDR + 0x50)
> -/* magic word for debug CPLD */
> -#define CPLD_MAGIC_NUMBER3_REG		(CPLD_ADDR + 0x58)
> -/* module reset register */
> -#define CPLD_MODULE_RESET_REG		(CPLD_ADDR + 0x60)
> -/* CPU ID and Personality ID */
> -#define CPLD_MCU_BOARD_ID_REG		(CPLD_ADDR + 0x68)
> -
> -/* CPLD IRQ line for external uart, external ethernet etc */
>  #define EXPIO_PARENT_INT	IOMUX_TO_IRQ(MX31_PIN_GPIO1_1)
>  
> -#define MXC_EXP_IO_BASE		(MXC_BOARD_IRQ_START)
> -#define MXC_IRQ_TO_EXPIO(irq)	((irq) - MXC_EXP_IO_BASE)
> -
> -#define EXPIO_INT_ENET		(MXC_EXP_IO_BASE + 0)
> -#define EXPIO_INT_XUART_A	(MXC_EXP_IO_BASE + 1)
> -#define EXPIO_INT_XUART_B	(MXC_EXP_IO_BASE + 2)
> -#define EXPIO_INT_BUTTON_A	(MXC_EXP_IO_BASE + 3)
> -#define EXPIO_INT_BUTTON_B	(MXC_EXP_IO_BASE + 4)
> -
> -#define MXC_MAX_EXP_IO_LINES	16
> -
>  #endif /* __ASM_ARCH_MXC_BOARD_MX31_3DS_H__ */
> -- 
> 1.5.6.5
> 
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 2/2] mx31_3ds: revert cpld debug board relate code
  2010-06-16  6:57     ` Sascha Hauer
@ 2010-06-16 20:36       ` Magnus Lilja
  0 siblings, 0 replies; 10+ messages in thread
From: Magnus Lilja @ 2010-06-16 20:36 UTC (permalink / raw)
  To: linux-arm-kernel

Sascha,


On 2010-06-16 08:57, Sascha Hauer wrote:
> 
> [Added Magnus to Cc]
> 
> Magnus,
> 
> As you are the original author of the removed code, can I have you
> Acked-by or Tested-by here?


Yes, I added the debugboard support. I've looked at the patches and the restructure looks ok.

The only thing that really differs is the interrupt function but I don't know which variant is more correct. I haven't had a chance to test the patches yet, perhaps in a couple of days.

Acked-by: Magnus Lilja <lilja.magnus@gmail.com>

/Magnus

> 
> Sascha
> 
> On Sat, Jun 12, 2010 at 10:25:07PM +0800, Jason Wang wrote:
>> Because we add a cpld debug board support in mxc level, we remove
>> those redudent codes from board level.
>>
>> Signed-off-by: Jason Wang <jason77.wang@gmail.com>
>> ---
>>  arch/arm/mach-mx3/Kconfig                       |    1 +
>>  arch/arm/mach-mx3/mach-mx31_3ds.c               |  168 +----------------------
>>  arch/arm/plat-mxc/include/mach/board-mx31_3ds.h |   42 ------
>>  3 files changed, 4 insertions(+), 207 deletions(-)
>>
>> diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig
>> index 344753f..fd422cf 100644
>> --- a/arch/arm/mach-mx3/Kconfig
>> +++ b/arch/arm/mach-mx3/Kconfig
>> @@ -58,6 +58,7 @@ config MACH_MX31LITE
>>  config MACH_MX31_3DS
>>  	bool "Support MX31PDK (3DS)"
>>  	select ARCH_MX31
>> +	select MXC_DEBUG_BOARD
>>  	help
>>  	  Include support for MX31PDK (3DS) platform. This includes specific
>>  	  configurations for the board and its peripherals.
>> diff --git a/arch/arm/mach-mx3/mach-mx31_3ds.c b/arch/arm/mach-mx3/mach-mx31_3ds.c
>> index 58e5729..d8af726 100644
>> --- a/arch/arm/mach-mx3/mach-mx31_3ds.c
>> +++ b/arch/arm/mach-mx3/mach-mx31_3ds.c
>> @@ -22,7 +22,6 @@
>>  #include <linux/clk.h>
>>  #include <linux/irq.h>
>>  #include <linux/gpio.h>
>> -#include <linux/smsc911x.h>
>>  #include <linux/platform_device.h>
>>  #include <linux/mfd/mc13783.h>
>>  #include <linux/spi/spi.h>
>> @@ -38,6 +37,7 @@
>>  #include <asm/mach/map.h>
>>  #include <mach/common.h>
>>  #include <mach/board-mx31_3ds.h>
>> +#include <mach/cpld_debugboard.h>
>>  #include <mach/imx-uart.h>
>>  #include <mach/iomux-mx3.h>
>>  #include <mach/mxc_nand.h>
>> @@ -213,173 +213,11 @@ static struct imxuart_platform_data uart_pdata = {
>>  };
>>  
>>  /*
>> - * Support for the SMSC9217 on the Debug board.
>> - */
>> -
>> -static struct smsc911x_platform_config smsc911x_config = {
>> -	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
>> -	.irq_type	= SMSC911X_IRQ_TYPE_PUSH_PULL,
>> -	.flags		= SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY,
>> -	.phy_interface	= PHY_INTERFACE_MODE_MII,
>> -};
>> -
>> -static struct resource smsc911x_resources[] = {
>> -	{
>> -		.start		= LAN9217_BASE_ADDR,
>> -		.end		= LAN9217_BASE_ADDR + 0xff,
>> -		.flags		= IORESOURCE_MEM,
>> -	}, {
>> -		.start		= EXPIO_INT_ENET,
>> -		.end		= EXPIO_INT_ENET,
>> -		.flags		= IORESOURCE_IRQ,
>> -	},
>> -};
>> -
>> -static struct platform_device smsc911x_device = {
>> -	.name		= "smsc911x",
>> -	.id		= -1,
>> -	.num_resources	= ARRAY_SIZE(smsc911x_resources),
>> -	.resource	= smsc911x_resources,
>> -	.dev		= {
>> -		.platform_data = &smsc911x_config,
>> -	},
>> -};
>> -
>> -/*
>> - * Routines for the CPLD on the debug board. It contains a CPLD handling
>> - * LEDs, switches, interrupts for Ethernet.
>> - */
>> -
>> -static void mx31_3ds_expio_irq_handler(uint32_t irq, struct irq_desc *desc)
>> -{
>> -	uint32_t imr_val;
>> -	uint32_t int_valid;
>> -	uint32_t expio_irq;
>> -
>> -	imr_val = __raw_readw(CPLD_INT_MASK_REG);
>> -	int_valid = __raw_readw(CPLD_INT_STATUS_REG) & ~imr_val;
>> -
>> -	expio_irq = MXC_EXP_IO_BASE;
>> -	for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
>> -		if ((int_valid & 1) == 0)
>> -			continue;
>> -		generic_handle_irq(expio_irq);
>> -	}
>> -}
>> -
>> -/*
>> - * Disable an expio pin's interrupt by setting the bit in the imr.
>> - * @param irq           an expio virtual irq number
>> - */
>> -static void expio_mask_irq(uint32_t irq)
>> -{
>> -	uint16_t reg;
>> -	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
>> -
>> -	/* mask the interrupt */
>> -	reg = __raw_readw(CPLD_INT_MASK_REG);
>> -	reg |= 1 << expio;
>> -	__raw_writew(reg, CPLD_INT_MASK_REG);
>> -}
>> -
>> -/*
>> - * Acknowledge an expanded io pin's interrupt by clearing the bit in the isr.
>> - * @param irq           an expanded io virtual irq number
>> - */
>> -static void expio_ack_irq(uint32_t irq)
>> -{
>> -	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
>> -
>> -	/* clear the interrupt status */
>> -	__raw_writew(1 << expio, CPLD_INT_RESET_REG);
>> -	__raw_writew(0, CPLD_INT_RESET_REG);
>> -	/* mask the interrupt */
>> -	expio_mask_irq(irq);
>> -}
>> -
>> -/*
>> - * Enable a expio pin's interrupt by clearing the bit in the imr.
>> - * @param irq           a expio virtual irq number
>> - */
>> -static void expio_unmask_irq(uint32_t irq)
>> -{
>> -	uint16_t reg;
>> -	uint32_t expio = MXC_IRQ_TO_EXPIO(irq);
>> -
>> -	/* unmask the interrupt */
>> -	reg = __raw_readw(CPLD_INT_MASK_REG);
>> -	reg &= ~(1 << expio);
>> -	__raw_writew(reg, CPLD_INT_MASK_REG);
>> -}
>> -
>> -static struct irq_chip expio_irq_chip = {
>> -	.ack = expio_ack_irq,
>> -	.mask = expio_mask_irq,
>> -	.unmask = expio_unmask_irq,
>> -};
>> -
>> -static int __init mx31_3ds_init_expio(void)
>> -{
>> -	int i;
>> -	int ret;
>> -
>> -	/* Check if there's a debug board connected */
>> -	if ((__raw_readw(CPLD_MAGIC_NUMBER1_REG) != 0xAAAA) ||
>> -	    (__raw_readw(CPLD_MAGIC_NUMBER2_REG) != 0x5555) ||
>> -	    (__raw_readw(CPLD_MAGIC_NUMBER3_REG) != 0xCAFE)) {
>> -		/* No Debug board found */
>> -		return -ENODEV;
>> -	}
>> -
>> -	pr_info("i.MX31 3DS Debug board detected, rev = 0x%04X\n",
>> -		__raw_readw(CPLD_CODE_VER_REG));
>> -
>> -	/*
>> -	 * Configure INT line as GPIO input
>> -	 */
>> -	ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1), "sms9217-irq");
>> -	if (ret)
>> -		pr_warning("could not get LAN irq gpio\n");
>> -	else
>> -		gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1));
>> -
>> -	/* Disable the interrupts and clear the status */
>> -	__raw_writew(0, CPLD_INT_MASK_REG);
>> -	__raw_writew(0xFFFF, CPLD_INT_RESET_REG);
>> -	__raw_writew(0, CPLD_INT_RESET_REG);
>> -	__raw_writew(0x1F, CPLD_INT_MASK_REG);
>> -	for (i = MXC_EXP_IO_BASE;
>> -	     i < (MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES);
>> -	     i++) {
>> -		set_irq_chip(i, &expio_irq_chip);
>> -		set_irq_handler(i, handle_level_irq);
>> -		set_irq_flags(i, IRQF_VALID);
>> -	}
>> -	set_irq_type(EXPIO_PARENT_INT, IRQ_TYPE_LEVEL_LOW);
>> -	set_irq_chained_handler(EXPIO_PARENT_INT, mx31_3ds_expio_irq_handler);
>> -
>> -	return 0;
>> -}
>> -
>> -/*
>> - * This structure defines the MX31 memory map.
>> - */
>> -static struct map_desc mx31_3ds_io_desc[] __initdata = {
>> -	{
>> -		.virtual = MX31_CS5_BASE_ADDR_VIRT,
>> -		.pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR),
>> -		.length = MX31_CS5_SIZE,
>> -		.type = MT_DEVICE,
>> -	},
>> -};
>> -
>> -/*
>>   * Set up static virtual mappings.
>>   */
>>  static void __init mx31_3ds_map_io(void)
>>  {
>>  	mx31_map_io();
>> -	iotable_init(mx31_3ds_io_desc, ARRAY_SIZE(mx31_3ds_io_desc));
>>  }
>>  
>>  /*!
>> @@ -402,8 +240,8 @@ static void __init mxc_board_init(void)
>>  	mx31_3ds_usbotg_init();
>>  	mxc_register_device(&mxc_otg_udc_device, &usbotg_pdata);
>>  
>> -	if (!mx31_3ds_init_expio())
>> -		platform_device_register(&smsc911x_device);
>> +	if (!mxc_expio_init(CS5_BASE_ADDR, EXPIO_PARENT_INT))
>> +		platform_device_register(&smsc_lan9217_device);
>>  }
>>  
>>  static void __init mx31_3ds_timer_init(void)
>> diff --git a/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
>> index da92933..c26d88d 100644
>> --- a/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
>> +++ b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
>> @@ -12,48 +12,6 @@
>>  #define __ASM_ARCH_MXC_BOARD_MX31_3DS_H__
>>  
>>  /* Definitions for components on the Debug board */
>> -
>> -/* Base address of CPLD controller on the Debug board */
>> -#define DEBUG_BASE_ADDRESS		CS5_IO_ADDRESS(CS5_BASE_ADDR)
>> -
>> -/* LAN9217 ethernet base address */
>> -#define LAN9217_BASE_ADDR		CS5_BASE_ADDR
>> -
>> -/* CPLD config and interrupt base address */
>> -#define CPLD_ADDR			(DEBUG_BASE_ADDRESS + 0x20000)
>> -
>> -/* LED switchs */
>> -#define CPLD_LED_REG			(CPLD_ADDR + 0x00)
>> -/* buttons */
>> -#define CPLD_SWITCH_BUTTONS_REG	(EXPIO_ADDR + 0x08)
>> -/* status, interrupt */
>> -#define CPLD_INT_STATUS_REG		(CPLD_ADDR + 0x10)
>> -#define CPLD_INT_MASK_REG		(CPLD_ADDR + 0x38)
>> -#define CPLD_INT_RESET_REG		(CPLD_ADDR + 0x20)
>> -/* magic word for debug CPLD */
>> -#define CPLD_MAGIC_NUMBER1_REG		(CPLD_ADDR + 0x40)
>> -#define CPLD_MAGIC_NUMBER2_REG		(CPLD_ADDR + 0x48)
>> -/* CPLD code version */
>> -#define CPLD_CODE_VER_REG		(CPLD_ADDR + 0x50)
>> -/* magic word for debug CPLD */
>> -#define CPLD_MAGIC_NUMBER3_REG		(CPLD_ADDR + 0x58)
>> -/* module reset register */
>> -#define CPLD_MODULE_RESET_REG		(CPLD_ADDR + 0x60)
>> -/* CPU ID and Personality ID */
>> -#define CPLD_MCU_BOARD_ID_REG		(CPLD_ADDR + 0x68)
>> -
>> -/* CPLD IRQ line for external uart, external ethernet etc */
>>  #define EXPIO_PARENT_INT	IOMUX_TO_IRQ(MX31_PIN_GPIO1_1)
>>  
>> -#define MXC_EXP_IO_BASE		(MXC_BOARD_IRQ_START)
>> -#define MXC_IRQ_TO_EXPIO(irq)	((irq) - MXC_EXP_IO_BASE)
>> -
>> -#define EXPIO_INT_ENET		(MXC_EXP_IO_BASE + 0)
>> -#define EXPIO_INT_XUART_A	(MXC_EXP_IO_BASE + 1)
>> -#define EXPIO_INT_XUART_B	(MXC_EXP_IO_BASE + 2)
>> -#define EXPIO_INT_BUTTON_A	(MXC_EXP_IO_BASE + 3)
>> -#define EXPIO_INT_BUTTON_B	(MXC_EXP_IO_BASE + 4)
>> -
>> -#define MXC_MAX_EXP_IO_LINES	16
>> -
>>  #endif /* __ASM_ARCH_MXC_BOARD_MX31_3DS_H__ */
>> -- 
>> 1.5.6.5
>>
>>
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] mxc: add common debug board for 3-stack platforms
  2010-06-16  6:55   ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Sascha Hauer
@ 2010-06-17 13:37     ` jason
  2010-06-18 14:06     ` jason
  1 sibling, 0 replies; 10+ messages in thread
From: jason @ 2010-06-17 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Sascha Hauer wrote:
> On Sat, Jun 12, 2010 at 10:25:06PM +0800, Jason Wang wrote:
>   
>> The debug board is little different for all mxc 3-stack(PDK)
>> platforms, it is possible here to add a common implementation to
>> support this board.
>>     
>
> Two small things left:
>
> Could you change the name cpld_debugboard.c to something like
> 3ds_debugboard.c? That we are talking about the 3ds is much more
> interesting than that there's a cpld on the board.
>
> Also, I really prefer having no extra header file for the debug board.
> All information in this header file is only interesting in this single C
> file.
>
> Sascha
>
>
>   
Accept, will fix in next version.

Thanks,
Jason.
>> Signed-off-by: Jason Wang <jason77.wang@gmail.com>
>> ---
>>  arch/arm/plat-mxc/Kconfig                        |   11 ++
>>  arch/arm/plat-mxc/Makefile                       |    1 +
>>  arch/arm/plat-mxc/cpld_debugboard.c              |  161 ++++++++++++++++++++++
>>  arch/arm/plat-mxc/include/mach/cpld_debugboard.h |   60 ++++++++
>>  4 files changed, 233 insertions(+), 0 deletions(-)
>>  create mode 100644 arch/arm/plat-mxc/cpld_debugboard.c
>>  create mode 100644 arch/arm/plat-mxc/include/mach/cpld_debugboard.h
>>     
<snip>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] mxc: add common debug board for 3-stack platforms
  2010-06-16  6:55   ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Sascha Hauer
  2010-06-17 13:37     ` jason
@ 2010-06-18 14:06     ` jason
  2010-06-21  7:11       ` Sascha Hauer
  1 sibling, 1 reply; 10+ messages in thread
From: jason @ 2010-06-18 14:06 UTC (permalink / raw)
  To: linux-arm-kernel

Sascha Hauer wrote:
> On Sat, Jun 12, 2010 at 10:25:06PM +0800, Jason Wang wrote:
>   
>> The debug board is little different for all mxc 3-stack(PDK)
>> platforms, it is possible here to add a common implementation to
>> support this board.
>>     
>
> Two small things left:
>
> Could you change the name cpld_debugboard.c to something like
> 3ds_debugboard.c? That we are talking about the 3ds is much more
> interesting than that there's a cpld on the board.
>
> Also, I really prefer having no extra header file for the debug board.
> All information in this header file is only interesting in this single C
> file.
>
> Sascha
>
>
>   
Hi Sascha,

About the header file, most contents can be moved to c file,
but there are two declarations:

extern struct platform_device smsc_lan9217_device;
int __init mxc_expio_init(u32 base, u32 p_irq);

which will be used by board_mxNN_3ds.c, should i move them to mach/common.h and
drop 3ds_debugboard.h or keep them in 3ds_debugboard.h?

Thanks,
Jason.

>> Signed-off-by: Jason Wang <jason77.wang@gmail.com>
>> ---
>>  arch/arm/plat-mxc/Kconfig                        |   11 ++
>>  arch/arm/plat-mxc/Makefile                       |    1 +
>>  arch/arm/plat-mxc/cpld_debugboard.c              |  161 ++++++++++++++++++++++
>>     
<snip>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] mxc: add common debug board for 3-stack platforms
  2010-06-18 14:06     ` jason
@ 2010-06-21  7:11       ` Sascha Hauer
  2010-06-22 13:08         ` jason
  0 siblings, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2010-06-21  7:11 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Jun 18, 2010 at 10:06:34PM +0800, jason wrote:
> Sascha Hauer wrote:
>> On Sat, Jun 12, 2010 at 10:25:06PM +0800, Jason Wang wrote:
>>   
>>> The debug board is little different for all mxc 3-stack(PDK)
>>> platforms, it is possible here to add a common implementation to
>>> support this board.
>>>     
>>
>> Two small things left:
>>
>> Could you change the name cpld_debugboard.c to something like
>> 3ds_debugboard.c? That we are talking about the 3ds is much more
>> interesting than that there's a cpld on the board.
>>
>> Also, I really prefer having no extra header file for the debug board.
>> All information in this header file is only interesting in this single C
>> file.
>>
>> Sascha
>>
>>
>>   
> Hi Sascha,
>
> About the header file, most contents can be moved to c file,
> but there are two declarations:
>
> extern struct platform_device smsc_lan9217_device;

What do you need this one for?

> int __init mxc_expio_init(u32 base, u32 p_irq);

You'll definitely need this one of course.

>
> which will be used by board_mxNN_3ds.c, should i move them to mach/common.h and
> drop 3ds_debugboard.h or keep them in 3ds_debugboard.h?

Keep them in 3ds_debugboard.h. This way we can easily grep for all users
of the 3ds debug board code.

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] mxc: add common debug board for 3-stack platforms
  2010-06-21  7:11       ` Sascha Hauer
@ 2010-06-22 13:08         ` jason
  0 siblings, 0 replies; 10+ messages in thread
From: jason @ 2010-06-22 13:08 UTC (permalink / raw)
  To: linux-arm-kernel

Sascha Hauer wrote:
> On Fri, Jun 18, 2010 at 10:06:34PM +0800, jason wrote:
>   
>> Sascha Hauer wrote:
>>     
>>> On Sat, Jun 12, 2010 at 10:25:06PM +0800, Jason Wang wrote:
>>>   
>>>       
>>>> The debug board is little different for all mxc 3-stack(PDK)
>>>> platforms, it is possible here to add a common implementation to
>>>> support this board.
>>>>     
>>>>         
>>> Two small things left:
>>>
>>> Could you change the name cpld_debugboard.c to something like
>>> 3ds_debugboard.c? That we are talking about the 3ds is much more
>>> interesting than that there's a cpld on the board.
>>>
>>> Also, I really prefer having no extra header file for the debug board.
>>> All information in this header file is only interesting in this single C
>>> file.
>>>
>>> Sascha
>>>
>>>
>>>   
>>>       
>> Hi Sascha,
>>
>> About the header file, most contents can be moved to c file,
>> but there are two declarations:
>>
>> extern struct platform_device smsc_lan9217_device;
>>     
>
> What do you need this one for?
>
>   
Originally i want to register lan9217 in the board-mxNN-3ds.c, just like:
if (!mxc_expio_init(MX51_CS5_BASE_ADDR, EXPIO_PARENT_INT))
platform_device_register(&smsc_lan9217_device);

Of course, i can give it a wrapper like mxc_expio_lan_init();

Please see my next version.

Thanks,
Jason.
>> int __init mxc_expio_init(u32 base, u32 p_irq);
>>     
>
> You'll definitely need this one of course.
>
>   
>> which will be used by board_mxNN_3ds.c, should i move them to mach/common.h and
>> drop 3ds_debugboard.h or keep them in 3ds_debugboard.h?
>>     
>
> Keep them in 3ds_debugboard.h. This way we can easily grep for all users
> of the 3ds debug board code.
>
> Sascha
>
>
>   

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2010-06-22 13:08 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-12 14:25 [PATCH 0/2]Add mxc common CPLD debugboard support Jason Wang
2010-06-12 14:25 ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Jason Wang
2010-06-12 14:25   ` [PATCH 2/2] mx31_3ds: revert cpld debug board relate code Jason Wang
2010-06-16  6:57     ` Sascha Hauer
2010-06-16 20:36       ` Magnus Lilja
2010-06-16  6:55   ` [PATCH 1/2] mxc: add common debug board for 3-stack platforms Sascha Hauer
2010-06-17 13:37     ` jason
2010-06-18 14:06     ` jason
2010-06-21  7:11       ` Sascha Hauer
2010-06-22 13:08         ` jason

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).