All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler
       [not found] <2011041501>
@ 2011-04-15 10:05 ` Haojian Zhuang
  2011-04-15 10:05   ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Haojian Zhuang
  2011-07-05  7:37   ` [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler Eric Miao
  0 siblings, 2 replies; 5+ messages in thread
From: Haojian Zhuang @ 2011-04-15 10:05 UTC (permalink / raw)
  To: linux-arm-kernel

PXA27x/PXA3xx silicons need to access CP15 co-processor to get interrupt
information. PXA95x needs to access interrupt controller register.

So make PXA95x support multiple handler interrupt.

Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
---
 arch/arm/mach-pxa/Kconfig             |    1 +
 arch/arm/mach-pxa/Makefile            |    2 +-
 arch/arm/mach-pxa/entry-pxa95x-intc.S |   38 +++++++++++++++++++++++++++++++++
 arch/arm/mach-pxa/generic.h           |    1 +
 arch/arm/mach-pxa/saarb.c             |    1 +
 5 files changed, 42 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/mach-pxa/entry-pxa95x-intc.S

diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index 2fc9f94..9811f0e 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -660,6 +660,7 @@ config CPU_PXA935
 config PXA95x
 	bool
 	select CPU_PJ4
+	select MULTI_IRQ_HANDLER
 	help
 	  Select code specific to PXA95x variants
 
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index cc39d17..ed80260 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -19,7 +19,7 @@ endif
 obj-$(CONFIG_PXA25x)		+= mfp-pxa2xx.o clock-pxa2xx.o pxa2xx.o pxa25x.o
 obj-$(CONFIG_PXA27x)		+= mfp-pxa2xx.o clock-pxa2xx.o pxa2xx.o pxa27x.o
 obj-$(CONFIG_PXA3xx)		+= mfp-pxa3xx.o clock-pxa3xx.o pxa3xx.o smemc.o pxa3xx-ulpi.o
-obj-$(CONFIG_PXA95x)		+= mfp-pxa3xx.o clock-pxa3xx.o pxa95x.o smemc.o
+obj-$(CONFIG_PXA95x)		+= mfp-pxa3xx.o clock-pxa3xx.o pxa95x.o smemc.o entry-pxa95x-intc.o
 obj-$(CONFIG_CPU_PXA300)	+= pxa300.o
 obj-$(CONFIG_CPU_PXA320)	+= pxa320.o
 obj-$(CONFIG_CPU_PXA930)	+= pxa930.o
diff --git a/arch/arm/mach-pxa/entry-pxa95x-intc.S b/arch/arm/mach-pxa/entry-pxa95x-intc.S
new file mode 100644
index 0000000..4a62486
--- /dev/null
+++ b/arch/arm/mach-pxa/entry-pxa95x-intc.S
@@ -0,0 +1,38 @@
+/*
+ *  arch/arm/mach-pxa/entry-pxa95x-intc.S
+ *
+ *  Low-level IRQ helper macros for PXA95x-based platforms
+ *
+ *  Copyright (C) 2011 Marvell International Ltd.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  publishhed by the Free Software Foundation.
+ */
+#include <asm/entry-macro-multi.S>
+#include <mach/hardware.h>
+#include <mach/irqs.h>
+
+		.macro	get_pxa95x_irqnr_and_base, irqnr, irqstat, base, tmp
+		mov	\base, #io_p2v(0x40000000)	@ IIR Ctl = 0x40d00000
+		add	\base, \base, #0x00d00000
+		ldr	\irqstat, [\base, #0x18]	@ ICHP offset
+		tst	\irqstat, #0x80000000
+		beq	2001f
+		bic	\irqstat, \irqstat, #0x80000000
+		mov	\irqnr, \irqstat, lsr #16
+		add	\irqnr, \irqnr, #(PXA_IRQ(0))
+2001:
+		.endm
+
+		.align	5
+		.global pxa95x_handle_irq_intc
+pxa95x_handle_irq_intc:
+		mov	r4, lr
+1:		get_pxa95x_irqnr_and_base r0, r6, r5, lr
+		movne	r1, sp
+
+		@ routine called with r0 = irq number, r1 = struct pt_regs *
+		adrne	lr, BSYM(1b)
+		bne	asm_do_IRQ
+		mov	pc, r4
diff --git a/arch/arm/mach-pxa/generic.h b/arch/arm/mach-pxa/generic.h
index a079d8b..e47f863 100644
--- a/arch/arm/mach-pxa/generic.h
+++ b/arch/arm/mach-pxa/generic.h
@@ -30,6 +30,7 @@ extern void __init pxa27x_map_io(void);
 extern void __init pxa3xx_map_io(void);
 
 extern unsigned int get_clk_frequency_khz(int info);
+extern void pxa95x_handle_irq_intc(struct pt_regs *);
 
 #define SET_BANK(__nr,__start,__size) \
 	mi->bank[__nr].start = (__start), \
diff --git a/arch/arm/mach-pxa/saarb.c b/arch/arm/mach-pxa/saarb.c
index 9322fe5..f98ff38 100644
--- a/arch/arm/mach-pxa/saarb.c
+++ b/arch/arm/mach-pxa/saarb.c
@@ -107,6 +107,7 @@ MACHINE_START(SAARB, "PXA955 Handheld Platform (aka SAARB)")
 	.map_io         = pxa_map_io,
 	.nr_irqs	= SAARB_NR_IRQS,
 	.init_irq       = pxa95x_init_irq,
+	.handle_irq	= pxa95x_handle_irq_intc,
 	.timer          = &pxa_timer,
 	.init_machine   = saarb_init,
 MACHINE_END
-- 
1.5.6.5

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

* [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb
  2011-04-15 10:05 ` [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler Haojian Zhuang
@ 2011-04-15 10:05   ` Haojian Zhuang
  2011-04-15 10:05     ` [PATCH 3/3] ARM: pxa: enable 1wire controller Haojian Zhuang
  2011-07-05  7:41     ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Eric Miao
  2011-07-05  7:37   ` [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler Eric Miao
  1 sibling, 2 replies; 5+ messages in thread
From: Haojian Zhuang @ 2011-04-15 10:05 UTC (permalink / raw)
  To: linux-arm-kernel

Enable one wire controller in TTC DKB platform.

Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
---
 arch/arm/mach-mmp/include/mach/mfp-pxa910.h |    3 +++
 arch/arm/mach-mmp/include/mach/pxa910.h     |    2 ++
 arch/arm/mach-mmp/pxa910.c                  |   15 +++++++++++++++
 arch/arm/mach-mmp/ttc_dkb.c                 |   13 ++++++++++++-
 4 files changed, 32 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
index fbd7ee8..4f8b7e8 100644
--- a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
+++ b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
@@ -40,6 +40,9 @@
 #define GPIO124_MN_CLK_OUT	MFP_CFG_DRV(GPIO124, AF1, MEDIUM)
 #define GPIO123_CLK_REQ		MFP_CFG_DRV(GPIO123, AF0, MEDIUM)
 
+/* one wire */
+#define ONEWIRE_CLK_REQ		MFP_CFG(GPIO123, AF2)
+
 /* DFI */
 #define DF_IO0_ND_IO0		MFP_CFG(DF_IO0, AF0)
 #define DF_IO1_ND_IO1		MFP_CFG(DF_IO1, AF0)
diff --git a/arch/arm/mach-mmp/include/mach/pxa910.h b/arch/arm/mach-mmp/include/mach/pxa910.h
index 91be755..38afd28 100644
--- a/arch/arm/mach-mmp/include/mach/pxa910.h
+++ b/arch/arm/mach-mmp/include/mach/pxa910.h
@@ -21,6 +21,8 @@ extern struct pxa_device_desc pxa910_device_pwm3;
 extern struct pxa_device_desc pxa910_device_pwm4;
 extern struct pxa_device_desc pxa910_device_nand;
 
+extern struct platform_device pxa910_device_1wire;
+
 static inline int pxa910_add_uart(int id)
 {
 	struct pxa_device_desc *d = NULL;
diff --git a/arch/arm/mach-mmp/pxa910.c b/arch/arm/mach-mmp/pxa910.c
index 8f92ccd..b1c9fcf 100644
--- a/arch/arm/mach-mmp/pxa910.c
+++ b/arch/arm/mach-mmp/pxa910.c
@@ -13,6 +13,7 @@
 #include <linux/init.h>
 #include <linux/list.h>
 #include <linux/io.h>
+#include <linux/platform_device.h>
 
 #include <asm/mach/time.h>
 #include <mach/addr-map.h>
@@ -109,6 +110,7 @@ static APBC_CLK(pwm1, PXA910_PWM1, 1, 13000000);
 static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000);
 static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000);
 static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000);
+static APBC_CLK(w1, PXA910_ONEWIRE, 0, 26000000);
 
 static APMU_CLK(nand, NAND, 0x01db, 208000000);
 static APMU_CLK(u2o, USB, 0x1b, 480000000);
@@ -125,6 +127,7 @@ static struct clk_lookup pxa910_clkregs[] = {
 	INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL),
 	INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
 	INIT_CLKREG(&clk_u2o, "pxa-u2o", "U2OCLK"),
+	INIT_CLKREG(&clk_w1, "pxa3xx-w1", NULL),
 };
 
 static int __init pxa910_init(void)
@@ -180,3 +183,15 @@ PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10);
 PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10);
 PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10);
 PXA910_DEVICE(nand, "pxa3xx-nand", -1, NAND, 0xd4283000, 0x80, 97, 99);
+
+static struct resource pxa910_resource_1wire[] = {
+	{0xd4011800,         0xd4011813,         "ds1wm-mem", IORESOURCE_MEM,},
+	{IRQ_PXA910_ONEWIRE, IRQ_PXA910_ONEWIRE, "ds1wm-irq", IORESOURCE_IRQ,},
+};
+
+struct platform_device pxa910_device_1wire = {
+	.name		= "pxa3xx-w1",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(pxa910_resource_1wire),
+	.resource	= pxa910_resource_1wire,
+};
diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c
index e411039..1820071 100644
--- a/arch/arm/mach-mmp/ttc_dkb.c
+++ b/arch/arm/mach-mmp/ttc_dkb.c
@@ -11,10 +11,11 @@
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
+#include <linux/interrupt.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/onenand.h>
-#include <linux/interrupt.h>
+#include <linux/mfd/ds1wm.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -55,6 +56,9 @@ static unsigned long ttc_dkb_pin_config[] __initdata = {
 	DF_WEn_DF_WEn,
 	DF_REn_DF_REn,
 	DF_RDY0_DF_RDY0,
+
+	/* ONE WIRE */
+	ONEWIRE_CLK_REQ,
 };
 
 static struct mtd_partition ttc_dkb_onenand_partitions[] = {
@@ -109,7 +113,12 @@ static struct platform_device ttc_dkb_device_onenand = {
 	},
 };
 
+static struct ds1wm_driver_data ttc_dkb_1wire_data = {
+	.active_high	= 1,
+};
+
 static struct platform_device *ttc_dkb_devices[] = {
+	&pxa910_device_1wire,
 	&ttc_dkb_device_onenand,
 };
 
@@ -121,6 +130,8 @@ static void __init ttc_dkb_init(void)
 	pxa910_add_uart(1);
 
 	/* off-chip devices */
+	platform_device_add_data(&pxa910_device_1wire, &ttc_dkb_1wire_data,
+				 sizeof(struct ds1wm_driver_data));
 	platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices));
 }
 
-- 
1.5.6.5

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

* [PATCH 3/3] ARM: pxa: enable 1wire controller
  2011-04-15 10:05   ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Haojian Zhuang
@ 2011-04-15 10:05     ` Haojian Zhuang
  2011-07-05  7:41     ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Eric Miao
  1 sibling, 0 replies; 5+ messages in thread
From: Haojian Zhuang @ 2011-04-15 10:05 UTC (permalink / raw)
  To: linux-arm-kernel

Support 1wire controller in both PXA3xx and PXA95x. Enable it in saarb
platform.

Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
---
 arch/arm/mach-pxa/devices.c                 |   12 ++++++++++++
 arch/arm/mach-pxa/devices.h                 |    1 +
 arch/arm/mach-pxa/include/mach/mfp-pxa930.h |    1 +
 arch/arm/mach-pxa/pxa3xx.c                  |    2 ++
 arch/arm/mach-pxa/pxa95x.c                  |    2 ++
 arch/arm/mach-pxa/saarb.c                   |   20 ++++++++++++++++++++
 6 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
index 2e04254..451caa0 100644
--- a/arch/arm/mach-pxa/devices.c
+++ b/arch/arm/mach-pxa/devices.c
@@ -1067,3 +1067,15 @@ void __init pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info)
 	pd->dev.platform_data = info;
 	platform_device_add(pd);
 }
+
+static struct resource pxa3xx_resource_w1[] = {
+	{0x41b00000,	0x41b00013,	"ds1wm-mem", IORESOURCE_MEM,},
+	{IRQ_1WIRE,	IRQ_1WIRE,	"ds1wm-irq", IORESOURCE_IRQ,},
+};
+
+struct platform_device pxa3xx_device_w1 = {
+	.name		= "pxa3xx-w1",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(pxa3xx_resource_w1),
+	.resource	= pxa3xx_resource_w1,
+};
diff --git a/arch/arm/mach-pxa/devices.h b/arch/arm/mach-pxa/devices.h
index 2fd5a8b..3625e62 100644
--- a/arch/arm/mach-pxa/devices.h
+++ b/arch/arm/mach-pxa/devices.h
@@ -36,6 +36,7 @@ extern struct platform_device pxa27x_device_pwm1;
 
 extern struct platform_device pxa3xx_device_nand;
 extern struct platform_device pxa3xx_device_i2c_power;
+extern struct platform_device pxa3xx_device_w1;
 
 extern struct platform_device pxa3xx_device_gcu;
 
diff --git a/arch/arm/mach-pxa/include/mach/mfp-pxa930.h b/arch/arm/mach-pxa/include/mach/mfp-pxa930.h
index 04f7c97..18bcb5d 100644
--- a/arch/arm/mach-pxa/include/mach/mfp-pxa930.h
+++ b/arch/arm/mach-pxa/include/mach/mfp-pxa930.h
@@ -493,6 +493,7 @@
 #define DF_ADDR2_CLK13MOUTDMD	MFP_CFG(DF_ADDR2, AF3)
 
 /* 1 wire */
+#define GPIO16_OW_DQ_IN		MFP_CFG(GPIO16, AF3)
 #define GPIO95_OW_DQ_IN		MFP_CFG(GPIO95, AF5)
 
 #endif /* __ASM_ARCH_MFP_PXA9xx_H */
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index 8dd1073..6f87659 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -57,6 +57,7 @@ static DEFINE_PXA3_CKEN(pxa3xx_pwm0, PWM0, 13000000, 0);
 static DEFINE_PXA3_CKEN(pxa3xx_pwm1, PWM1, 13000000, 0);
 static DEFINE_PXA3_CKEN(pxa3xx_mmc1, MMC1, 19500000, 0);
 static DEFINE_PXA3_CKEN(pxa3xx_mmc2, MMC2, 19500000, 0);
+static DEFINE_PXA3_CKEN(pxa3xx_w1, 1WIRE, 13000000, 0);
 
 static DEFINE_CK(pxa3xx_lcd, LCD, &clk_pxa3xx_hsio_ops);
 static DEFINE_CK(pxa3xx_smemc, SMC, &clk_pxa3xx_smemc_ops);
@@ -89,6 +90,7 @@ static struct clk_lookup pxa3xx_clkregs[] = {
 	INIT_CLKREG(&clk_pxa3xx_mmc1, "pxa2xx-mci.0", NULL),
 	INIT_CLKREG(&clk_pxa3xx_mmc2, "pxa2xx-mci.1", NULL),
 	INIT_CLKREG(&clk_pxa3xx_smemc, "pxa2xx-pcmcia", NULL),
+	INIT_CLKREG(&clk_pxa3xx_w1, "pxa3xx-w1", NULL),
 };
 
 #ifdef CONFIG_PM
diff --git a/arch/arm/mach-pxa/pxa95x.c b/arch/arm/mach-pxa/pxa95x.c
index 23b229b..1477eef 100644
--- a/arch/arm/mach-pxa/pxa95x.c
+++ b/arch/arm/mach-pxa/pxa95x.c
@@ -214,6 +214,7 @@ static DEFINE_PXA3_CKEN(pxa95x_ssp3, SSP3, 13000000, 0);
 static DEFINE_PXA3_CKEN(pxa95x_ssp4, SSP4, 13000000, 0);
 static DEFINE_PXA3_CKEN(pxa95x_pwm0, PWM0, 13000000, 0);
 static DEFINE_PXA3_CKEN(pxa95x_pwm1, PWM1, 13000000, 0);
+static DEFINE_PXA3_CKEN(pxa95x_w1, 1WIRE, 13000000, 0);
 
 static struct clk_lookup pxa95x_clkregs[] = {
 	INIT_CLKREG(&clk_pxa95x_pout, NULL, "CLK_POUT"),
@@ -232,6 +233,7 @@ static struct clk_lookup pxa95x_clkregs[] = {
 	INIT_CLKREG(&clk_pxa95x_ssp4, "pxa27x-ssp.3", NULL),
 	INIT_CLKREG(&clk_pxa95x_pwm0, "pxa27x-pwm.0", NULL),
 	INIT_CLKREG(&clk_pxa95x_pwm1, "pxa27x-pwm.1", NULL),
+	INIT_CLKREG(&clk_pxa95x_w1, "pxa3xx-w1", NULL),
 };
 
 void __init pxa95x_init_irq(void)
diff --git a/arch/arm/mach-pxa/saarb.c b/arch/arm/mach-pxa/saarb.c
index f98ff38..e9b252d 100644
--- a/arch/arm/mach-pxa/saarb.c
+++ b/arch/arm/mach-pxa/saarb.c
@@ -12,9 +12,11 @@
 
 #include <linux/init.h>
 #include <linux/kernel.h>
+#include <linux/platform_device.h>
 #include <linux/i2c.h>
 #include <linux/i2c/pxa-i2c.h>
 #include <linux/mfd/88pm860x.h>
+#include <linux/mfd/ds1wm.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -26,9 +28,14 @@
 #include <mach/gpio.h>
 
 #include "generic.h"
+#include "devices.h"
 
 #define SAARB_NR_IRQS	(IRQ_BOARD_START + 40)
 
+static mfp_cfg_t saarb_pin_config[] __initdata = {
+	GPIO16_OW_DQ_IN,
+};
+
 static struct pm860x_touch_pdata saarb_touch = {
 	.gpadc_prebias	= 1,
 	.slot_cycle	= 1,
@@ -95,11 +102,24 @@ static struct i2c_board_info saarb_i2c_info[] = {
 	},
 };
 
+static struct ds1wm_driver_data saarb_1wire_data = {
+	.active_high	= 1,
+};
+
+static struct platform_device *saarb_devices[] __initdata = {
+	&pxa3xx_device_w1,
+};
+
 static void __init saarb_init(void)
 {
+	pxa3xx_mfp_config(ARRAY_AND_SIZE(saarb_pin_config));
 	pxa_set_ffuart_info(NULL);
 	pxa_set_i2c_info(NULL);
 	i2c_register_board_info(0, ARRAY_AND_SIZE(saarb_i2c_info));
+
+	platform_device_add_data(&pxa3xx_device_w1, &saarb_1wire_data,
+				 sizeof(struct ds1wm_driver_data));
+	platform_add_devices(ARRAY_AND_SIZE(saarb_devices));
 }
 
 MACHINE_START(SAARB, "PXA955 Handheld Platform (aka SAARB)")
-- 
1.5.6.5

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

* [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler
  2011-04-15 10:05 ` [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler Haojian Zhuang
  2011-04-15 10:05   ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Haojian Zhuang
@ 2011-07-05  7:37   ` Eric Miao
  1 sibling, 0 replies; 5+ messages in thread
From: Eric Miao @ 2011-07-05  7:37 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Apr 15, 2011 at 6:05 PM, Haojian Zhuang
<haojian.zhuang@marvell.com> wrote:
> PXA27x/PXA3xx silicons need to access CP15 co-processor to get interrupt
> information. PXA95x needs to access interrupt controller register.
>
> So make PXA95x support multiple handler interrupt.
>
> Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
> ---
> ?arch/arm/mach-pxa/Kconfig ? ? ? ? ? ? | ? ?1 +
> ?arch/arm/mach-pxa/Makefile ? ? ? ? ? ?| ? ?2 +-
> ?arch/arm/mach-pxa/entry-pxa95x-intc.S | ? 38 +++++++++++++++++++++++++++++++++

Hi Haojian,

The function doesn't need to be assembly code, see my -devel branch
for example. A simple C function should be sufficient to handle this
simple case.

> ?arch/arm/mach-pxa/generic.h ? ? ? ? ? | ? ?1 +
> ?arch/arm/mach-pxa/saarb.c ? ? ? ? ? ? | ? ?1 +
> ?5 files changed, 42 insertions(+), 1 deletions(-)
> ?create mode 100644 arch/arm/mach-pxa/entry-pxa95x-intc.S
>
> diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
> index 2fc9f94..9811f0e 100644
> --- a/arch/arm/mach-pxa/Kconfig
> +++ b/arch/arm/mach-pxa/Kconfig
> @@ -660,6 +660,7 @@ config CPU_PXA935
> ?config PXA95x
> ? ? ? ?bool
> ? ? ? ?select CPU_PJ4
> + ? ? ? select MULTI_IRQ_HANDLER
> ? ? ? ?help
> ? ? ? ? ?Select code specific to PXA95x variants
>
> diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
> index cc39d17..ed80260 100644
> --- a/arch/arm/mach-pxa/Makefile
> +++ b/arch/arm/mach-pxa/Makefile
> @@ -19,7 +19,7 @@ endif
> ?obj-$(CONFIG_PXA25x) ? ? ? ? ? += mfp-pxa2xx.o clock-pxa2xx.o pxa2xx.o pxa25x.o
> ?obj-$(CONFIG_PXA27x) ? ? ? ? ? += mfp-pxa2xx.o clock-pxa2xx.o pxa2xx.o pxa27x.o
> ?obj-$(CONFIG_PXA3xx) ? ? ? ? ? += mfp-pxa3xx.o clock-pxa3xx.o pxa3xx.o smemc.o pxa3xx-ulpi.o
> -obj-$(CONFIG_PXA95x) ? ? ? ? ? += mfp-pxa3xx.o clock-pxa3xx.o pxa95x.o smemc.o
> +obj-$(CONFIG_PXA95x) ? ? ? ? ? += mfp-pxa3xx.o clock-pxa3xx.o pxa95x.o smemc.o entry-pxa95x-intc.o
> ?obj-$(CONFIG_CPU_PXA300) ? ? ? += pxa300.o
> ?obj-$(CONFIG_CPU_PXA320) ? ? ? += pxa320.o
> ?obj-$(CONFIG_CPU_PXA930) ? ? ? += pxa930.o
> diff --git a/arch/arm/mach-pxa/entry-pxa95x-intc.S b/arch/arm/mach-pxa/entry-pxa95x-intc.S
> new file mode 100644
> index 0000000..4a62486
> --- /dev/null
> +++ b/arch/arm/mach-pxa/entry-pxa95x-intc.S
> @@ -0,0 +1,38 @@
> +/*
> + * ?arch/arm/mach-pxa/entry-pxa95x-intc.S
> + *
> + * ?Low-level IRQ helper macros for PXA95x-based platforms
> + *
> + * ?Copyright (C) 2011 Marvell International Ltd.
> + *
> + * ?This program is free software; you can redistribute it and/or modify
> + * ?it under the terms of the GNU General Public License version 2 as
> + * ?publishhed by the Free Software Foundation.
> + */
> +#include <asm/entry-macro-multi.S>
> +#include <mach/hardware.h>
> +#include <mach/irqs.h>
> +
> + ? ? ? ? ? ? ? .macro ?get_pxa95x_irqnr_and_base, irqnr, irqstat, base, tmp
> + ? ? ? ? ? ? ? mov ? ? \base, #io_p2v(0x40000000) ? ? ?@ IIR Ctl = 0x40d00000
> + ? ? ? ? ? ? ? add ? ? \base, \base, #0x00d00000
> + ? ? ? ? ? ? ? ldr ? ? \irqstat, [\base, #0x18] ? ? ? ?@ ICHP offset
> + ? ? ? ? ? ? ? tst ? ? \irqstat, #0x80000000
> + ? ? ? ? ? ? ? beq ? ? 2001f
> + ? ? ? ? ? ? ? bic ? ? \irqstat, \irqstat, #0x80000000
> + ? ? ? ? ? ? ? mov ? ? \irqnr, \irqstat, lsr #16
> + ? ? ? ? ? ? ? add ? ? \irqnr, \irqnr, #(PXA_IRQ(0))
> +2001:
> + ? ? ? ? ? ? ? .endm
> +
> + ? ? ? ? ? ? ? .align ?5
> + ? ? ? ? ? ? ? .global pxa95x_handle_irq_intc
> +pxa95x_handle_irq_intc:
> + ? ? ? ? ? ? ? mov ? ? r4, lr
> +1: ? ? ? ? ? ? get_pxa95x_irqnr_and_base r0, r6, r5, lr
> + ? ? ? ? ? ? ? movne ? r1, sp
> +
> + ? ? ? ? ? ? ? @ routine called with r0 = irq number, r1 = struct pt_regs *
> + ? ? ? ? ? ? ? adrne ? lr, BSYM(1b)
> + ? ? ? ? ? ? ? bne ? ? asm_do_IRQ
> + ? ? ? ? ? ? ? mov ? ? pc, r4
> diff --git a/arch/arm/mach-pxa/generic.h b/arch/arm/mach-pxa/generic.h
> index a079d8b..e47f863 100644
> --- a/arch/arm/mach-pxa/generic.h
> +++ b/arch/arm/mach-pxa/generic.h
> @@ -30,6 +30,7 @@ extern void __init pxa27x_map_io(void);
> ?extern void __init pxa3xx_map_io(void);
>
> ?extern unsigned int get_clk_frequency_khz(int info);
> +extern void pxa95x_handle_irq_intc(struct pt_regs *);
>
> ?#define SET_BANK(__nr,__start,__size) \
> ? ? ? ?mi->bank[__nr].start = (__start), \
> diff --git a/arch/arm/mach-pxa/saarb.c b/arch/arm/mach-pxa/saarb.c
> index 9322fe5..f98ff38 100644
> --- a/arch/arm/mach-pxa/saarb.c
> +++ b/arch/arm/mach-pxa/saarb.c
> @@ -107,6 +107,7 @@ MACHINE_START(SAARB, "PXA955 Handheld Platform (aka SAARB)")
> ? ? ? ?.map_io ? ? ? ? = pxa_map_io,
> ? ? ? ?.nr_irqs ? ? ? ?= SAARB_NR_IRQS,
> ? ? ? ?.init_irq ? ? ? = pxa95x_init_irq,
> + ? ? ? .handle_irq ? ? = pxa95x_handle_irq_intc,
> ? ? ? ?.timer ? ? ? ? ?= &pxa_timer,
> ? ? ? ?.init_machine ? = saarb_init,
> ?MACHINE_END
> --
> 1.5.6.5
>
>

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

* [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb
  2011-04-15 10:05   ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Haojian Zhuang
  2011-04-15 10:05     ` [PATCH 3/3] ARM: pxa: enable 1wire controller Haojian Zhuang
@ 2011-07-05  7:41     ` Eric Miao
  1 sibling, 0 replies; 5+ messages in thread
From: Eric Miao @ 2011-07-05  7:41 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Apr 15, 2011 at 6:05 PM, Haojian Zhuang
<haojian.zhuang@marvell.com> wrote:
> Enable one wire controller in TTC DKB platform.
>
> Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
> ---
> ?arch/arm/mach-mmp/include/mach/mfp-pxa910.h | ? ?3 +++
> ?arch/arm/mach-mmp/include/mach/pxa910.h ? ? | ? ?2 ++
> ?arch/arm/mach-mmp/pxa910.c ? ? ? ? ? ? ? ? ?| ? 15 +++++++++++++++
> ?arch/arm/mach-mmp/ttc_dkb.c ? ? ? ? ? ? ? ? | ? 13 ++++++++++++-
> ?4 files changed, 32 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
> index fbd7ee8..4f8b7e8 100644
> --- a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
> +++ b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
> @@ -40,6 +40,9 @@
> ?#define GPIO124_MN_CLK_OUT ? ? MFP_CFG_DRV(GPIO124, AF1, MEDIUM)
> ?#define GPIO123_CLK_REQ ? ? ? ? ? ? ? ?MFP_CFG_DRV(GPIO123, AF0, MEDIUM)
>
> +/* one wire */
> +#define ONEWIRE_CLK_REQ ? ? ? ? ? ? ? ?MFP_CFG(GPIO123, AF2)
> +
> ?/* DFI */
> ?#define DF_IO0_ND_IO0 ? ? ? ? ?MFP_CFG(DF_IO0, AF0)
> ?#define DF_IO1_ND_IO1 ? ? ? ? ?MFP_CFG(DF_IO1, AF0)
> diff --git a/arch/arm/mach-mmp/include/mach/pxa910.h b/arch/arm/mach-mmp/include/mach/pxa910.h
> index 91be755..38afd28 100644
> --- a/arch/arm/mach-mmp/include/mach/pxa910.h
> +++ b/arch/arm/mach-mmp/include/mach/pxa910.h
> @@ -21,6 +21,8 @@ extern struct pxa_device_desc pxa910_device_pwm3;
> ?extern struct pxa_device_desc pxa910_device_pwm4;
> ?extern struct pxa_device_desc pxa910_device_nand;
>
> +extern struct platform_device pxa910_device_1wire;
> +

And add the function below as well?

static inline int pxa910_add_1wire(struct ds1wm_driver_data *)

> ?static inline int pxa910_add_uart(int id)
> ?{
> ? ? ? ?struct pxa_device_desc *d = NULL;
> diff --git a/arch/arm/mach-mmp/pxa910.c b/arch/arm/mach-mmp/pxa910.c
> index 8f92ccd..b1c9fcf 100644
> --- a/arch/arm/mach-mmp/pxa910.c
> +++ b/arch/arm/mach-mmp/pxa910.c
> @@ -13,6 +13,7 @@
> ?#include <linux/init.h>
> ?#include <linux/list.h>
> ?#include <linux/io.h>
> +#include <linux/platform_device.h>
>
> ?#include <asm/mach/time.h>
> ?#include <mach/addr-map.h>
> @@ -109,6 +110,7 @@ static APBC_CLK(pwm1, PXA910_PWM1, 1, 13000000);
> ?static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000);
> ?static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000);
> ?static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000);
> +static APBC_CLK(w1, PXA910_ONEWIRE, 0, 26000000);
>
> ?static APMU_CLK(nand, NAND, 0x01db, 208000000);
> ?static APMU_CLK(u2o, USB, 0x1b, 480000000);
> @@ -125,6 +127,7 @@ static struct clk_lookup pxa910_clkregs[] = {
> ? ? ? ?INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL),
> ? ? ? ?INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
> ? ? ? ?INIT_CLKREG(&clk_u2o, "pxa-u2o", "U2OCLK"),
> + ? ? ? INIT_CLKREG(&clk_w1, "pxa3xx-w1", NULL),
> ?};
>
> ?static int __init pxa910_init(void)
> @@ -180,3 +183,15 @@ PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10);
> ?PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10);
> ?PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10);
> ?PXA910_DEVICE(nand, "pxa3xx-nand", -1, NAND, 0xd4283000, 0x80, 97, 99);
> +
> +static struct resource pxa910_resource_1wire[] = {
> + ? ? ? {0xd4011800, ? ? ? ? 0xd4011813, ? ? ? ? "ds1wm-mem", IORESOURCE_MEM,},
> + ? ? ? {IRQ_PXA910_ONEWIRE, IRQ_PXA910_ONEWIRE, "ds1wm-irq", IORESOURCE_IRQ,},
> +};
> +
> +struct platform_device pxa910_device_1wire = {
> + ? ? ? .name ? ? ? ? ? = "pxa3xx-w1",
> + ? ? ? .id ? ? ? ? ? ? = -1,
> + ? ? ? .num_resources ?= ARRAY_SIZE(pxa910_resource_1wire),
> + ? ? ? .resource ? ? ? = pxa910_resource_1wire,
> +};

Is

PXA910_DEVICE(w1, "pxa3xx-w1", -1, ONEWIRE, 0xd4011800, 0x20);

sufficient to describe the device?

> diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c
> index e411039..1820071 100644
> --- a/arch/arm/mach-mmp/ttc_dkb.c
> +++ b/arch/arm/mach-mmp/ttc_dkb.c
> @@ -11,10 +11,11 @@
> ?#include <linux/init.h>
> ?#include <linux/kernel.h>
> ?#include <linux/platform_device.h>
> +#include <linux/interrupt.h>
> ?#include <linux/mtd/mtd.h>
> ?#include <linux/mtd/partitions.h>
> ?#include <linux/mtd/onenand.h>
> -#include <linux/interrupt.h>
> +#include <linux/mfd/ds1wm.h>
>
> ?#include <asm/mach-types.h>
> ?#include <asm/mach/arch.h>
> @@ -55,6 +56,9 @@ static unsigned long ttc_dkb_pin_config[] __initdata = {
> ? ? ? ?DF_WEn_DF_WEn,
> ? ? ? ?DF_REn_DF_REn,
> ? ? ? ?DF_RDY0_DF_RDY0,
> +
> + ? ? ? /* ONE WIRE */
> + ? ? ? ONEWIRE_CLK_REQ,
> ?};
>
> ?static struct mtd_partition ttc_dkb_onenand_partitions[] = {
> @@ -109,7 +113,12 @@ static struct platform_device ttc_dkb_device_onenand = {
> ? ? ? ?},
> ?};
>
> +static struct ds1wm_driver_data ttc_dkb_1wire_data = {
> + ? ? ? .active_high ? ?= 1,
> +};
> +
> ?static struct platform_device *ttc_dkb_devices[] = {
> + ? ? ? &pxa910_device_1wire,
> ? ? ? ?&ttc_dkb_device_onenand,
> ?};
>
> @@ -121,6 +130,8 @@ static void __init ttc_dkb_init(void)
> ? ? ? ?pxa910_add_uart(1);
>
> ? ? ? ?/* off-chip devices */
> + ? ? ? platform_device_add_data(&pxa910_device_1wire, &ttc_dkb_1wire_data,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sizeof(struct ds1wm_driver_data));


Then simply:

pxa910_add_1wire(&ttc_dkb_1wire_data);

here

> ? ? ? ?platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices));
> ?}
>
> --
> 1.5.6.5
>
>

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

end of thread, other threads:[~2011-07-05  7:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <2011041501>
2011-04-15 10:05 ` [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler Haojian Zhuang
2011-04-15 10:05   ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Haojian Zhuang
2011-04-15 10:05     ` [PATCH 3/3] ARM: pxa: enable 1wire controller Haojian Zhuang
2011-07-05  7:41     ` [PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb Eric Miao
2011-07-05  7:37   ` [PATCH 1/3] ARM: pxa: enable pxa95x interrupt handler Eric Miao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.