public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 7/11] Adding OMAP3430 support to plat-omap
@ 2007-05-29  6:22 Syed Mohammed, Khasim
  2007-05-29  6:54 ` Trilok Soni
  2007-05-29 10:13 ` andrzej zaborowski
  0 siblings, 2 replies; 4+ messages in thread
From: Syed Mohammed, Khasim @ 2007-05-29  6:22 UTC (permalink / raw)
  To: Linux OMAP


Adding OMAP 3430 Support to arch/arm/plat-omap

Signed-off-by: Syed Mohammed Khasim  <x0khasim@ti.com>

Files Changed:
 Kconfig    |    9 ++--
 common.c   |    2
 devices.c  |    8 +--
 dma.c      |    2
 dmtimer.c  |   43 ++++++++++++++++---
 gpio.c     |  133 ++++++++++++++++++++++++++++++++++++++++++++-----------------
 sram.c     |   12 ++---
 timer32k.c |    8 ++-
 8 files changed, 156 insertions(+), 61 deletions(-)

=======================================================================
diff -purN linux-omap/arch/arm/plat-omap/Kconfig val_3430_GIT/arch/arm/plat-omap/Kconfig
--- linux-omap/arch/arm/plat-omap/Kconfig	2007-05-16 14:32:40.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/Kconfig	2007-05-28 12:47:13.000000000 -0500
@@ -15,6 +15,9 @@ config ARCH_OMAP1
 config ARCH_OMAP2
 	bool "TI OMAP2"
 
+config ARCH_OMAP3
+	bool "TI OMAP3"
+
 endchoice
 
 comment "OMAP Feature Selections"
@@ -148,13 +151,13 @@ config OMAP_MPU_TIMER
 
 config OMAP_32K_TIMER
 	bool "Use 32KHz timer"
-	depends on ARCH_OMAP16XX || ARCH_OMAP24XX
+	depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
 	help
 	  Select this option if you want to enable the OMAP 32KHz timer.
 	  This timer saves power compared to the OMAP_MPU_TIMER, and has
 	  support for no tick during idle. The 32KHz timer provides less
 	  intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is
-	  currently only available for OMAP16XX and 24XX.
+	  currently only available for OMAP16XX, 24XX and 34XX.
 
 endchoice
 
@@ -169,7 +172,7 @@ config OMAP_32K_TIMER_HZ
 
 config OMAP_DM_TIMER
 	bool "Use dual-mode timer"
-	depends on ARCH_OMAP16XX || ARCH_OMAP24XX
+	depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
 	help
 	 Select this option if you want to use OMAP Dual-Mode timers.
 
diff -purN linux-omap/arch/arm/plat-omap/common.c val_3430_GIT/arch/arm/plat-omap/common.c
--- linux-omap/arch/arm/plat-omap/common.c	2007-05-25 15:52:23.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/common.c	2007-05-28 12:47:13.000000000 -0500
@@ -218,7 +218,7 @@ static int __init omap_init_clocksource_
 	static char err[] __initdata = KERN_ERR
 			"%s: can't register clocksource!\n";
 
-	if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
+	if (cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()) {
 		clocksource_32k.mult = clocksource_hz2mult(32768,
 					    clocksource_32k.shift);
 
diff -purN linux-omap/arch/arm/plat-omap/devices.c val_3430_GIT/arch/arm/plat-omap/devices.c
--- linux-omap/arch/arm/plat-omap/devices.c	2007-04-27 11:01:33.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/devices.c	2007-05-28 16:07:44.000000000 -0500
@@ -141,7 +141,7 @@ static void omap_init_i2c(void)
 	 * either don't wire up I2C, or chips that mux it differently...
 	 * it can include clocking and address info, maybe more.
 	 */
-	if (cpu_is_omap24xx()) {
+	if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
 		if (machine_is_omap_h4()) {
 			omap_cfg_reg(M19_24XX_I2C1_SCL);
 			omap_cfg_reg(L15_24XX_I2C1_SDA);
@@ -164,7 +164,7 @@ static inline void omap_init_i2c(void) {
 static void omap_init_kp(void)
 {
 	/* REVISIT: 2430 keypad is on TWL4030 */
-	if (cpu_is_omap2430())
+	if (cpu_is_omap2430() || cpu_is_omap34xx())
 		return;
 
 	if (machine_is_omap_h2() || machine_is_omap_h3()) {
@@ -295,7 +295,7 @@ static void __init omap_init_mmc(void)
 	const struct omap_mmc_conf	*mmc;
 
 	/* REVISIT: 2430 has HS MMC */
-	if (cpu_is_omap2430())
+	if (cpu_is_omap2430() || cpu_is_omap34xx())
 		return;
 
 	/* NOTE:  assumes MMC was never (wrongly) enabled */
@@ -526,7 +526,7 @@ static int __init omap_init_devices(void
 	omap_init_uwire();
 	omap_init_wdt();
 	omap_init_rng();
-	if (!cpu_is_omap2430()) {
+	if (!cpu_is_omap2430() || !cpu_is_omap34xx()) {
 		omap_init_i2c();
 	}
 	return 0;
diff -purN linux-omap/arch/arm/plat-omap/dma.c val_3430_GIT/arch/arm/plat-omap/dma.c
--- linux-omap/arch/arm/plat-omap/dma.c	2007-05-25 13:27:04.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/dma.c	2007-05-28 12:49:40.000000000 -0500
@@ -628,7 +628,7 @@ void omap_clear_dma(int lch)
 
 	if (cpu_is_omap24xx()) {
 		int i;
-		u32 lch_base = OMAP24XX_DMA_BASE + lch * 0x60 + 0x80;
+		u32 lch_base = OMAP_DMA4_BASE + lch * 0x60 + 0x80;
 		for (i = 0; i < 0x44; i += 4)
 			omap_writel(0, lch_base + i);
 	}
diff -purN linux-omap/arch/arm/plat-omap/dmtimer.c val_3430_GIT/arch/arm/plat-omap/dmtimer.c
--- linux-omap/arch/arm/plat-omap/dmtimer.c	2007-04-04 18:13:49.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/dmtimer.c	2007-05-28 12:47:13.000000000 -0500
@@ -70,7 +70,7 @@
 struct omap_dm_timer {
 	unsigned long phys_base;
 	int irq;
-#ifdef CONFIG_ARCH_OMAP2
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 	struct clk *iclk, *fclk;
 #endif
 	void __iomem *io_base;
@@ -122,6 +122,34 @@ static const char *dm_source_names[] = {
 
 static struct clk *dm_source_clocks[3];
 
+#elif defined(CONFIG_ARCH_OMAP3)
+
+#define omap_dm_clk_enable(x) clk_enable(x)
+#define omap_dm_clk_disable(x) clk_disable(x)
+
+static struct omap_dm_timer dm_timers[] = {
+	{ .phys_base	= 0x48318000, .irq	= INT_24XX_GPTIMER1 },
+	{ .phys_base	= 0x49032000, .irq	= INT_24XX_GPTIMER2 },
+	{ .phys_base	= 0x49034000, .irq	= INT_24XX_GPTIMER3 },
+	{ .phys_base	= 0x49036000, .irq	= INT_24XX_GPTIMER4 },
+	{ .phys_base	= 0x49038000, .irq	= INT_24XX_GPTIMER5 },
+	{ .phys_base	= 0x4903A000, .irq	= INT_24XX_GPTIMER6 },
+	{ .phys_base	= 0x4903C000, .irq	= INT_24XX_GPTIMER7 },
+	{ .phys_base	= 0x4903E000, .irq	= INT_24XX_GPTIMER8 },
+	{ .phys_base	= 0x49040000, .irq	= INT_24XX_GPTIMER9 },
+	{ .phys_base	= 0x48086000, .irq	= INT_24XX_GPTIMER10 },
+	{ .phys_base	= 0x48088000, .irq	= INT_24XX_GPTIMER11 },
+	{ .phys_base	= 0x48304000, .irq	= INT_24XX_GPTIMER12 },
+};
+
+static const char *dm_source_names[] = {
+	"sys_ck",
+	"func_32k_ck",
+	"alt_ck"
+};
+
+static struct clk *dm_source_clocks[3];
+
 #else
 
 #error OMAP architecture not supported!
@@ -191,7 +219,6 @@ struct omap_dm_timer *omap_dm_timer_requ
 	struct omap_dm_timer *timer = NULL;
 	unsigned long flags;
 	int i;
-
 	spin_lock_irqsave(&dm_timer_lock, flags);
 	for (i = 0; i < dm_timer_count; i++) {
 		if (dm_timers[i].reserved)
@@ -299,7 +326,7 @@ __u32 omap_dm_timer_modify_idlect_mask(_
 	return inputmask;
 }
 
-#elif defined(CONFIG_ARCH_OMAP2)
+#elif defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 
 struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer)
 {
@@ -491,27 +518,27 @@ int omap_dm_timer_init(void)
 	struct omap_dm_timer *timer;
 	int i;
 
-	if (!(cpu_is_omap16xx() || cpu_is_omap24xx()))
+	if (!(cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()))
 		return -ENODEV;
 
 	spin_lock_init(&dm_timer_lock);
-#ifdef CONFIG_ARCH_OMAP2
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 	for (i = 0; i < ARRAY_SIZE(dm_source_names); i++) {
 		dm_source_clocks[i] = clk_get(NULL, dm_source_names[i]);
 		BUG_ON(dm_source_clocks[i] == NULL);
 	}
 #endif
-	if (cpu_is_omap243x())
+	if (cpu_is_omap243x() || cpu_is_omap343x())
 		dm_timers[0].phys_base = 0x49018000;
 
 	for (i = 0; i < dm_timer_count; i++) {
-#ifdef CONFIG_ARCH_OMAP2
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 		char clk_name[16];
 #endif
 
 		timer = &dm_timers[i];
 		timer->io_base = (void __iomem *) io_p2v(timer->phys_base);
-#ifdef CONFIG_ARCH_OMAP2
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 		sprintf(clk_name, "gpt%d_ick", i + 1);
 		timer->iclk = clk_get(NULL, clk_name);
 		sprintf(clk_name, "gpt%d_fck", i + 1);
diff -purN linux-omap/arch/arm/plat-omap/gpio.c val_3430_GIT/arch/arm/plat-omap/gpio.c
--- linux-omap/arch/arm/plat-omap/gpio.c	2007-05-07 20:57:49.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/gpio.c	2007-05-28 12:48:14.000000000 -0500
@@ -120,17 +120,29 @@
 #define OMAP24XX_GPIO_CLEARDATAOUT	0x0090
 #define OMAP24XX_GPIO_SETDATAOUT	0x0094
 
+/*
+ * omap34xx specific GPIO registers
+ */
+
+#define OMAP34XX_GPIO1_BASE		(void __iomem *)0x48310000
+#define OMAP34XX_GPIO2_BASE		(void __iomem *)0x49050000
+#define OMAP34XX_GPIO3_BASE		(void __iomem *)0x49052000
+#define OMAP34XX_GPIO4_BASE		(void __iomem *)0x49054000
+#define OMAP34XX_GPIO5_BASE		(void __iomem *)0x49056000
+#define OMAP34XX_GPIO6_BASE		(void __iomem *)0x49058000
+
+
 struct gpio_bank {
 	void __iomem *base;
 	u16 irq;
 	u16 virtual_irq_start;
 	int method;
 	u32 reserved_map;
-#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX)
+#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	u32 suspend_wakeup;
 	u32 saved_wakeup;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	u32 non_wakeup_gpios;
 	u32 enabled_non_wakeup_gpios;
 
@@ -195,6 +207,18 @@ static struct gpio_bank gpio_bank_243x[5
 
 #endif
 
+#ifdef CONFIG_ARCH_OMAP34XX
+static struct gpio_bank gpio_bank_34xx[6] = {
+	{ OMAP34XX_GPIO1_BASE, INT_34XX_GPIO_BANK1, IH_GPIO_BASE,	METHOD_GPIO_24XX },
+	{ OMAP34XX_GPIO2_BASE, INT_34XX_GPIO_BANK2, IH_GPIO_BASE + 32,	METHOD_GPIO_24XX },
+	{ OMAP34XX_GPIO3_BASE, INT_34XX_GPIO_BANK3, IH_GPIO_BASE + 64,	METHOD_GPIO_24XX },
+	{ OMAP34XX_GPIO4_BASE, INT_34XX_GPIO_BANK4, IH_GPIO_BASE + 96,	METHOD_GPIO_24XX },
+	{ OMAP34XX_GPIO5_BASE, INT_34XX_GPIO_BANK5, IH_GPIO_BASE + 128, METHOD_GPIO_24XX },
+	{ OMAP34XX_GPIO6_BASE, INT_34XX_GPIO_BANK6, IH_GPIO_BASE + 160, METHOD_GPIO_24XX },
+};
+
+#endif
+
 static struct gpio_bank *gpio_bank;
 static int gpio_bank_count;
 
@@ -225,6 +249,10 @@ static inline struct gpio_bank *get_gpio
 	if (cpu_is_omap24xx())
 		return &gpio_bank[gpio >> 5];
 #endif
+#ifdef CONFIG_ARCH_OMAP34XX
+	if (cpu_is_omap34xx())
+		return &gpio_bank[gpio >> 5];
+#endif
 }
 
 static inline int get_gpio_index(int gpio)
@@ -237,6 +265,10 @@ static inline int get_gpio_index(int gpi
 	if (cpu_is_omap24xx())
 		return gpio & 0x1f;
 #endif
+#ifdef CONFIG_ARCH_OMAP34XX
+	if (cpu_is_omap34xx())
+		return gpio & 0x1f;
+#endif
 	return gpio & 0x0f;
 }
 
@@ -267,6 +299,10 @@ static inline int gpio_valid(int gpio)
 	if (cpu_is_omap24xx() && gpio < 128)
 		return 0;
 #endif
+#ifdef CONFIG_ARCH_OMAP34XX
+	if (cpu_is_omap34xx() && gpio < 160)
+		return 0;
+#endif
 	return -1;
 }
 
@@ -306,7 +342,7 @@ static void _set_gpio_direction(struct g
 		reg += OMAP730_GPIO_DIR_CONTROL;
 		break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		reg += OMAP24XX_GPIO_OE;
 		break;
@@ -380,7 +416,7 @@ static void _set_gpio_dataout(struct gpi
 			l &= ~(1 << gpio);
 		break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		if (enable)
 			reg += OMAP24XX_GPIO_SETDATAOUT;
@@ -438,7 +474,7 @@ int omap_get_gpio_datain(int gpio)
 		reg += OMAP730_GPIO_DATA_INPUT;
 		break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		reg += OMAP24XX_GPIO_DATAIN;
 		break;
@@ -458,7 +494,7 @@ do {	\
 	__raw_writel(l, base + reg); \
 } while(0)
 
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
 {
 	void __iomem *base = bank->base;
@@ -587,7 +623,7 @@ static int _set_gpio_triggering(struct g
 			goto bad;
 		break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		set_24xx_gpio_triggering(bank, gpio, trigger);
 		break;
@@ -607,7 +643,7 @@ static int gpio_irq_type(unsigned irq, u
 	unsigned gpio;
 	int retval;
 
-	if (!cpu_is_omap24xx() && irq > IH_MPUIO_BASE)
+	if (!(cpu_is_omap24xx() || cpu_is_omap34xx()) && irq > IH_MPUIO_BASE)
 		gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
 	else
 		gpio = irq - IH_GPIO_BASE;
@@ -619,7 +655,7 @@ static int gpio_irq_type(unsigned irq, u
 		return -EINVAL;
 
 	/* OMAP1 allows only only edge triggering */
-	if (!cpu_is_omap24xx()
+	if (!(cpu_is_omap24xx() || cpu_is_omap34xx())
 			&& (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH)))
 		return -EINVAL;
 
@@ -660,7 +696,7 @@ static void _clear_gpio_irqbank(struct g
 		reg += OMAP730_GPIO_INT_STATUS;
 		break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		reg += OMAP24XX_GPIO_IRQSTATUS1;
 		break;
@@ -672,8 +708,10 @@ static void _clear_gpio_irqbank(struct g
 	__raw_writel(gpio_mask, reg);
 
 	/* Workaround for clearing DSP GPIO interrupts to allow retention */
-	if (cpu_is_omap2420())
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
+	if (cpu_is_omap2420() || cpu_is_omap34xx())
 		__raw_writel(gpio_mask, bank->base + OMAP24XX_GPIO_IRQSTATUS2);
+#endif
 }
 
 static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
@@ -716,7 +754,7 @@ static u32 _get_gpio_irqbank_mask(struct
 		inv = 1;
 		break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		reg += OMAP24XX_GPIO_IRQENABLE1;
 		mask = 0xffffffff;
@@ -779,7 +817,7 @@ static void _enable_gpio_irqbank(struct 
 			l |= gpio_mask;
 		break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		if (enable)
 			reg += OMAP24XX_GPIO_SETIRQENABLE1;
@@ -825,7 +863,7 @@ static int _set_gpio_wakeup(struct gpio_
 		spin_unlock(&bank->lock);
 		return 0;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	case METHOD_GPIO_24XX:
 		if (bank->non_wakeup_gpios & (1 << gpio)) {
 			printk(KERN_ERR "Unable to modify wakeup on "
@@ -931,7 +969,7 @@ void omap_free_gpio(int gpio)
 		__raw_writel(1 << get_gpio_index(gpio), reg);
 	}
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	if (bank->method == METHOD_GPIO_24XX) {
 		/* Disable wake-up during idle for dynamic tick */
 		void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
@@ -980,7 +1018,7 @@ static void gpio_irq_handler(unsigned in
 	if (bank->method == METHOD_GPIO_730)
 		isr_reg = bank->base + OMAP730_GPIO_INT_STATUS;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 	if (bank->method == METHOD_GPIO_24XX)
 		isr_reg = bank->base + OMAP24XX_GPIO_IRQSTATUS1;
 #endif
@@ -994,7 +1032,7 @@ static void gpio_irq_handler(unsigned in
 		if (cpu_is_omap15xx() && (bank->method == METHOD_MPUIO))
 			isr &= 0x0000ffff;
 
-		if (cpu_is_omap24xx()) {
+		if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
 			level_mask =
 				__raw_readl(bank->base +
 					OMAP24XX_GPIO_LEVELDETECT0) |
@@ -1063,7 +1101,7 @@ static void gpio_irq_handler(unsigned in
 			}
 		}
 
-		if (cpu_is_omap24xx()) {
+		if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
 			/* clear level sensitive interrupts after handler(s) */
 			_enable_gpio_irqbank(bank, isr_saved & level_mask, 0);
 			_clear_gpio_irqbank(bank, isr_saved & level_mask);
@@ -1242,7 +1280,7 @@ static int initialized;
 static struct clk * gpio_ick;
 static struct clk * gpio_fck;
 
-#ifdef CONFIG_ARCH_OMAP2430
+#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX)
 static struct clk * gpio5_ick;
 static struct clk * gpio5_fck;
 #endif
@@ -1261,7 +1299,7 @@ static int __init _omap_gpio_init(void)
 		else
 			clk_enable(gpio_ick);
 	}
-	if (cpu_is_omap24xx()) {
+	if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
 		gpio_ick = clk_get(NULL, "gpios_ick");
 		if (IS_ERR(gpio_ick))
 			printk("Could not get gpios_ick\n");
@@ -1274,10 +1312,10 @@ static int __init _omap_gpio_init(void)
 			clk_enable(gpio_fck);
 
 		/*
-		 * On 2430 GPIO 5 uses CORE L4 ICLK
+		 * On 2430 & 3430 GPIO 5 uses CORE L4 ICLK
 		 */
-#ifdef CONFIG_ARCH_OMAP2430
-		if (cpu_is_omap2430()) {
+#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430)
+		if (cpu_is_omap2430() || cpu_is_omap3430()) {
 			gpio5_ick = clk_get(NULL, "gpio5_ick");
 			if (IS_ERR(gpio5_ick))
 				printk("Could not get gpio5_ick\n");
@@ -1290,7 +1328,7 @@ static int __init _omap_gpio_init(void)
 				clk_enable(gpio5_fck);
 		}
 #endif
-}
+	}
 
 #ifdef CONFIG_ARCH_OMAP15XX
 	if (cpu_is_omap15xx()) {
@@ -1338,6 +1376,17 @@ static int __init _omap_gpio_init(void)
 			(rev >> 4) & 0x0f, rev & 0x0f);
 	}
 #endif
+#ifdef CONFIG_ARCH_OMAP34XX
+	if (cpu_is_omap34xx()) {
+		int rev;
+
+		gpio_bank_count = 6;
+		gpio_bank = gpio_bank_34xx;
+		rev = omap_readl(gpio_bank[0].base + OMAP24XX_GPIO_REVISION);
+		printk(KERN_INFO "OMAP34xx GPIO hardware version %d.%d\n",
+			(rev >> 4) & 0x0f, rev & 0x0f);
+	}
+#endif
 	for (i = 0; i < gpio_bank_count; i++) {
 		int j, gpio_count = 16;
 
@@ -1368,7 +1417,7 @@ static int __init _omap_gpio_init(void)
 			gpio_count = 32; /* 730 has 32-bit GPIOs */
 		}
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 		if (bank->method == METHOD_GPIO_24XX) {
 			static const u32 non_wakeup_gpios[] = {
 				0xe203ffc0, 0x08700040
@@ -1404,21 +1453,26 @@ static int __init _omap_gpio_init(void)
 	if (cpu_is_omap16xx())
 		omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, ULPD_CAM_CLK_CTRL);
 
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX)
 	/* Enable autoidle for the OCP interface */
 	if (cpu_is_omap24xx())
 		omap_writel(1 << 0, 0x48019010);
+#elif defined(CONFIG_ARCH_OMAP34XX)
+	if (cpu_is_omap34xx())
+		omap_writel(1 << 0, 0x48306814);
 #endif
 
+/* TODO: should we do the above for OMAP3 as well? */
+
 	return 0;
 }
 
-#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX)
+#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX) || defined (CONFIG_ARCH_OMAP34XX)
 static int omap_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
 {
 	int i;
 
-	if (!cpu_is_omap24xx() && !cpu_is_omap16xx())
+	if (!cpu_is_omap24xx() && !cpu_is_omap16xx() && !cpu_is_omap34xx())
 		return 0;
 
 	for (i = 0; i < gpio_bank_count; i++) {
@@ -1435,7 +1489,7 @@ static int omap_gpio_suspend(struct sys_
 			wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
 			break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 		case METHOD_GPIO_24XX:
 			wake_status = bank->base + OMAP24XX_GPIO_SETWKUENA;
 			wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
@@ -1475,7 +1529,7 @@ static int omap_gpio_resume(struct sys_d
 			wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
 			break;
 #endif
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 		case METHOD_GPIO_24XX:
 			wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
 			wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
@@ -1507,7 +1561,7 @@ static struct sys_device omap_gpio_devic
 
 #endif
 
-#ifdef CONFIG_ARCH_OMAP24XX
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 
 static int workaround_enabled;
 
@@ -1523,15 +1577,19 @@ void omap2_gpio_prepare_for_retention(vo
 
 		if (!(bank->enabled_non_wakeup_gpios))
 			continue;
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 		bank->saved_datain = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
 		l1 = __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT);
 		l2 = __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT);
+#endif
 		bank->saved_fallingdetect = l1;
 		bank->saved_risingdetect = l2;
 		l1 &= ~bank->enabled_non_wakeup_gpios;
 		l2 &= ~bank->enabled_non_wakeup_gpios;
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 		__raw_writel(l1, bank->base + OMAP24XX_GPIO_FALLINGDETECT);
 		__raw_writel(l2, bank->base + OMAP24XX_GPIO_RISINGDETECT);
+#endif
 		c++;
 	}
 	if (!c) {
@@ -1553,26 +1611,31 @@ void omap2_gpio_resume_after_retention(v
 
 		if (!(bank->enabled_non_wakeup_gpios))
 			continue;
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 		__raw_writel(bank->saved_fallingdetect,
 				 bank->base + OMAP24XX_GPIO_FALLINGDETECT);
 		__raw_writel(bank->saved_risingdetect,
 				 bank->base + OMAP24XX_GPIO_RISINGDETECT);
+#endif
 		/* Check if any of the non-wakeup interrupt GPIOs have changed
 		 * state.  If so, generate an IRQ by software.  This is
 		 * horribly racy, but it's the best we can do to work around
 		 * this silicon bug. */
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 		l = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
+#endif
 		l ^= bank->saved_datain;
 		l &= bank->non_wakeup_gpios;
 		if (l) {
 			u32 old0, old1;
-
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 			old0 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0);
 			old1 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
 			__raw_writel(old0 | l, bank->base + OMAP24XX_GPIO_LEVELDETECT0);
 			__raw_writel(old1 | l, bank->base + OMAP24XX_GPIO_LEVELDETECT1);
 			__raw_writel(old0, bank->base + OMAP24XX_GPIO_LEVELDETECT0);
 			__raw_writel(old1, bank->base + OMAP24XX_GPIO_LEVELDETECT1);
+#endif
 		}
 	}
 
@@ -1601,8 +1664,8 @@ static int __init omap_gpio_sysinit(void
 
 	mpuio_init();
 
-#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX)
-	if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
+#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
+	if (cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()) {
 		if (ret == 0) {
 			ret = sysdev_class_register(&omap_gpio_sysclass);
 			if (ret == 0)
@@ -1664,7 +1727,7 @@ static int dbg_gpio_show(struct seq_file
 
 		if (bank_is_mpuio(bank))
 			gpio = OMAP_MPUIO(0);
-		else if (cpu_is_omap24xx() || cpu_is_omap730())
+		else if (cpu_is_omap24xx() || cpu_is_omap730() || cpu_is_omap34xx())
 			bankwidth = 32;
 
 		for (j = 0; j < bankwidth; j++, gpio++, mask <<= 1) {
diff -purN linux-omap/arch/arm/plat-omap/sram.c val_3430_GIT/arch/arm/plat-omap/sram.c
--- linux-omap/arch/arm/plat-omap/sram.c	2007-05-25 13:27:04.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/sram.c	2007-05-28 12:47:13.000000000 -0500
@@ -31,7 +31,7 @@
 #define OMAP2_SRAM_VA		0xd0000000
 #define OMAP2_SRAM_PUB_VA	0xd0000800
 
-#if defined(CONFIG_ARCH_OMAP24XX)
+#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
 #define SRAM_BOOTLOADER_SZ	0x00
 #else
 #define SRAM_BOOTLOADER_SZ	0x80
@@ -92,7 +92,7 @@ void __init omap_detect_sram(void)
 {
 	unsigned long reserved;
 
-	if (cpu_is_omap24xx()) {
+	if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
 		if (is_sram_locked()) {
 			omap_sram_base = OMAP2_SRAM_PUB_VA;
 			omap_sram_start = OMAP2_SRAM_PUB_PA;
@@ -102,7 +102,7 @@ void __init omap_detect_sram(void)
 			omap_sram_start = OMAP2_SRAM_PA;
 			if (cpu_is_omap242x())
 				omap_sram_size = 0xa0000; /* 640K */
-			else if (cpu_is_omap243x())
+			else if (cpu_is_omap243x() || cpu_is_omap34xx())
 				omap_sram_size = 0x10000; /* 64K */
 		}
 	} else {
@@ -149,7 +149,7 @@ void __init omap_map_sram(void)
 	if (omap_sram_size == 0)
 		return;
 
-	if (cpu_is_omap24xx()) {
+	if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
 		omap_sram_io_desc[0].virtual = OMAP2_SRAM_VA;
 
 		base = OMAP2_SRAM_PA;
@@ -224,7 +224,7 @@ int __init omap1_sram_init(void)
 #define omap1_sram_init()	do {} while (0)
 #endif
 
-#ifdef CONFIG_ARCH_OMAP2
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 
 static void (*_omap2_sram_ddr_init)(u32 *slow_dll_ctrl, u32 fast_dll_ctrl,
 			      u32 base_cs, u32 force_unlock);
@@ -279,7 +279,7 @@ int __init omap_sram_init(void)
 	omap_detect_sram();
 	omap_map_sram();
 
-	if (!cpu_is_omap24xx())
+	if (!(cpu_is_omap24xx() || cpu_is_omap34xx()))
 		omap1_sram_init();
 	else
 		omap2_sram_init();
diff -purN linux-omap/arch/arm/plat-omap/timer32k.c val_3430_GIT/arch/arm/plat-omap/timer32k.c
--- linux-omap/arch/arm/plat-omap/timer32k.c	2007-05-25 15:52:23.000000000 -0500
+++ val_3430_GIT/arch/arm/plat-omap/timer32k.c	2007-05-28 13:17:00.000000000 -0500
@@ -72,6 +72,8 @@ struct sys_timer omap_timer;
 #define TIMER_32K_SYNCHRONIZED		0xfffbc410
 #elif defined(CONFIG_ARCH_OMAP24XX)
 #define TIMER_32K_SYNCHRONIZED		(OMAP2_32KSYNCT_BASE + 0x10)
+#elif defined(CONFIG_ARCH_OMAP34XX)
+#define TIMER_32K_SYNCHRONIZED		0x48320010
 #else
 #error OMAP 32KHz timer does not currently work on 15XX!
 #endif
@@ -120,7 +122,7 @@ static inline void omap_32k_timer_stop(v
 
 #define omap_32k_timer_ack_irq()
 
-#elif defined(CONFIG_ARCH_OMAP2)
+#elif defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 
 static struct omap_dm_timer *gptimer;
 
@@ -223,9 +225,9 @@ static __init void omap_init_32k_timer(v
 	if (cpu_class_is_omap1())
 		setup_irq(INT_OS_TIMER, &omap_32k_timer_irq);
 
-#ifdef CONFIG_ARCH_OMAP2
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 	/* REVISIT: Check 24xx TIOCP_CFG settings after idle works */
-	if (cpu_is_omap24xx()) {
+	if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
 		gptimer = omap_dm_timer_request_specific(1);
 		BUG_ON(gptimer == NULL);
 

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

* Re: [PATCH 7/11] Adding OMAP3430 support to plat-omap
  2007-05-29  6:22 [PATCH 7/11] Adding OMAP3430 support to plat-omap Syed Mohammed, Khasim
@ 2007-05-29  6:54 ` Trilok Soni
  2007-05-29 10:13 ` andrzej zaborowski
  1 sibling, 0 replies; 4+ messages in thread
From: Trilok Soni @ 2007-05-29  6:54 UTC (permalink / raw)
  To: Syed Mohammed, Khasim; +Cc: Linux OMAP

On 5/29/07, Syed Mohammed, Khasim <x0khasim@ti.com> wrote:
>
> Adding OMAP 3430 Support to arch/arm/plat-omap
>
> Signed-off-by: Syed Mohammed Khasim  <x0khasim@ti.com>
>
> Files Changed:
>  Kconfig    |    9 ++--
>  common.c   |    2
>  devices.c  |    8 +--
>  dma.c      |    2
>  dmtimer.c  |   43 ++++++++++++++++---
>  gpio.c     |  133 ++++++++++++++++++++++++++++++++++++++++++++-----------------
>  sram.c     |   12 ++---
>  timer32k.c |    8 ++-
>  8 files changed, 156 insertions(+), 61 deletions(-)
>
> =======================================================================
> diff -purN linux-omap/arch/arm/plat-omap/Kconfig val_3430_GIT/arch/arm/plat-omap/Kconfig
> --- linux-omap/arch/arm/plat-omap/Kconfig       2007-05-16 14:32:40.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/Kconfig     2007-05-28 12:47:13.000000000 -0500
> @@ -15,6 +15,9 @@ config ARCH_OMAP1
>  config ARCH_OMAP2
>         bool "TI OMAP2"
>
> +config ARCH_OMAP3
> +       bool "TI OMAP3"
> +
>  endchoice
>
>  comment "OMAP Feature Selections"
> @@ -148,13 +151,13 @@ config OMAP_MPU_TIMER
>
>  config OMAP_32K_TIMER
>         bool "Use 32KHz timer"
> -       depends on ARCH_OMAP16XX || ARCH_OMAP24XX
> +       depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
>         help
>           Select this option if you want to enable the OMAP 32KHz timer.
>           This timer saves power compared to the OMAP_MPU_TIMER, and has
>           support for no tick during idle. The 32KHz timer provides less
>           intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is
> -         currently only available for OMAP16XX and 24XX.
> +         currently only available for OMAP16XX, 24XX and 34XX.
>
>  endchoice
>
> @@ -169,7 +172,7 @@ config OMAP_32K_TIMER_HZ
>
>  config OMAP_DM_TIMER
>         bool "Use dual-mode timer"
> -       depends on ARCH_OMAP16XX || ARCH_OMAP24XX
> +       depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
>         help
>          Select this option if you want to use OMAP Dual-Mode timers.
>
> diff -purN linux-omap/arch/arm/plat-omap/common.c val_3430_GIT/arch/arm/plat-omap/common.c
> --- linux-omap/arch/arm/plat-omap/common.c      2007-05-25 15:52:23.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/common.c    2007-05-28 12:47:13.000000000 -0500
> @@ -218,7 +218,7 @@ static int __init omap_init_clocksource_
>         static char err[] __initdata = KERN_ERR
>                         "%s: can't register clocksource!\n";
>
> -       if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
> +       if (cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 clocksource_32k.mult = clocksource_hz2mult(32768,
>                                             clocksource_32k.shift);
>
> diff -purN linux-omap/arch/arm/plat-omap/devices.c val_3430_GIT/arch/arm/plat-omap/devices.c
> --- linux-omap/arch/arm/plat-omap/devices.c     2007-04-27 11:01:33.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/devices.c   2007-05-28 16:07:44.000000000 -0500
> @@ -141,7 +141,7 @@ static void omap_init_i2c(void)
>          * either don't wire up I2C, or chips that mux it differently...
>          * it can include clocking and address info, maybe more.
>          */
> -       if (cpu_is_omap24xx()) {
> +       if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 if (machine_is_omap_h4()) {
>                         omap_cfg_reg(M19_24XX_I2C1_SCL);
>                         omap_cfg_reg(L15_24XX_I2C1_SDA);
> @@ -164,7 +164,7 @@ static inline void omap_init_i2c(void) {
>  static void omap_init_kp(void)
>  {
>         /* REVISIT: 2430 keypad is on TWL4030 */
> -       if (cpu_is_omap2430())
> +       if (cpu_is_omap2430() || cpu_is_omap34xx())
>                 return;
>
>         if (machine_is_omap_h2() || machine_is_omap_h3()) {
> @@ -295,7 +295,7 @@ static void __init omap_init_mmc(void)
>         const struct omap_mmc_conf      *mmc;
>
>         /* REVISIT: 2430 has HS MMC */
> -       if (cpu_is_omap2430())
> +       if (cpu_is_omap2430() || cpu_is_omap34xx())
>                 return;
>
>         /* NOTE:  assumes MMC was never (wrongly) enabled */
> @@ -526,7 +526,7 @@ static int __init omap_init_devices(void
>         omap_init_uwire();
>         omap_init_wdt();
>         omap_init_rng();
> -       if (!cpu_is_omap2430()) {
> +       if (!cpu_is_omap2430() || !cpu_is_omap34xx()) {
>                 omap_init_i2c();
>         }
>         return 0;
> diff -purN linux-omap/arch/arm/plat-omap/dma.c val_3430_GIT/arch/arm/plat-omap/dma.c
> --- linux-omap/arch/arm/plat-omap/dma.c 2007-05-25 13:27:04.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/dma.c       2007-05-28 12:49:40.000000000 -0500
> @@ -628,7 +628,7 @@ void omap_clear_dma(int lch)
>
>         if (cpu_is_omap24xx()) {
>                 int i;
> -               u32 lch_base = OMAP24XX_DMA_BASE + lch * 0x60 + 0x80;
> +               u32 lch_base = OMAP_DMA4_BASE + lch * 0x60 + 0x80;
>                 for (i = 0; i < 0x44; i += 4)
>                         omap_writel(0, lch_base + i);
>         }
> diff -purN linux-omap/arch/arm/plat-omap/dmtimer.c val_3430_GIT/arch/arm/plat-omap/dmtimer.c
> --- linux-omap/arch/arm/plat-omap/dmtimer.c     2007-04-04 18:13:49.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/dmtimer.c   2007-05-28 12:47:13.000000000 -0500
> @@ -70,7 +70,7 @@
>  struct omap_dm_timer {
>         unsigned long phys_base;
>         int irq;
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>         struct clk *iclk, *fclk;
>  #endif
>         void __iomem *io_base;
> @@ -122,6 +122,34 @@ static const char *dm_source_names[] = {
>
>  static struct clk *dm_source_clocks[3];
>
> +#elif defined(CONFIG_ARCH_OMAP3)
> +
> +#define omap_dm_clk_enable(x) clk_enable(x)
> +#define omap_dm_clk_disable(x) clk_disable(x)
> +
> +static struct omap_dm_timer dm_timers[] = {
> +       { .phys_base    = 0x48318000, .irq      = INT_24XX_GPTIMER1 },
> +       { .phys_base    = 0x49032000, .irq      = INT_24XX_GPTIMER2 },
> +       { .phys_base    = 0x49034000, .irq      = INT_24XX_GPTIMER3 },
> +       { .phys_base    = 0x49036000, .irq      = INT_24XX_GPTIMER4 },
> +       { .phys_base    = 0x49038000, .irq      = INT_24XX_GPTIMER5 },
> +       { .phys_base    = 0x4903A000, .irq      = INT_24XX_GPTIMER6 },
> +       { .phys_base    = 0x4903C000, .irq      = INT_24XX_GPTIMER7 },
> +       { .phys_base    = 0x4903E000, .irq      = INT_24XX_GPTIMER8 },
> +       { .phys_base    = 0x49040000, .irq      = INT_24XX_GPTIMER9 },
> +       { .phys_base    = 0x48086000, .irq      = INT_24XX_GPTIMER10 },
> +       { .phys_base    = 0x48088000, .irq      = INT_24XX_GPTIMER11 },
> +       { .phys_base    = 0x48304000, .irq      = INT_24XX_GPTIMER12 },
> +};
> +
> +static const char *dm_source_names[] = {
> +       "sys_ck",
> +       "func_32k_ck",
> +       "alt_ck"
> +};
> +
> +static struct clk *dm_source_clocks[3];
> +
>  #else
>
>  #error OMAP architecture not supported!
> @@ -191,7 +219,6 @@ struct omap_dm_timer *omap_dm_timer_requ
>         struct omap_dm_timer *timer = NULL;
>         unsigned long flags;
>         int i;
> -
>         spin_lock_irqsave(&dm_timer_lock, flags);
>         for (i = 0; i < dm_timer_count; i++) {
>                 if (dm_timers[i].reserved)
> @@ -299,7 +326,7 @@ __u32 omap_dm_timer_modify_idlect_mask(_
>         return inputmask;
>  }
>
> -#elif defined(CONFIG_ARCH_OMAP2)
> +#elif defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>
>  struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer)
>  {
> @@ -491,27 +518,27 @@ int omap_dm_timer_init(void)
>         struct omap_dm_timer *timer;
>         int i;
>
> -       if (!(cpu_is_omap16xx() || cpu_is_omap24xx()))
> +       if (!(cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()))
>                 return -ENODEV;
>
>         spin_lock_init(&dm_timer_lock);
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>         for (i = 0; i < ARRAY_SIZE(dm_source_names); i++) {
>                 dm_source_clocks[i] = clk_get(NULL, dm_source_names[i]);
>                 BUG_ON(dm_source_clocks[i] == NULL);
>         }
>  #endif
> -       if (cpu_is_omap243x())
> +       if (cpu_is_omap243x() || cpu_is_omap343x())
>                 dm_timers[0].phys_base = 0x49018000;
>
>         for (i = 0; i < dm_timer_count; i++) {
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>                 char clk_name[16];
>  #endif
>
>                 timer = &dm_timers[i];
>                 timer->io_base = (void __iomem *) io_p2v(timer->phys_base);
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>                 sprintf(clk_name, "gpt%d_ick", i + 1);
>                 timer->iclk = clk_get(NULL, clk_name);
>                 sprintf(clk_name, "gpt%d_fck", i + 1);
> diff -purN linux-omap/arch/arm/plat-omap/gpio.c val_3430_GIT/arch/arm/plat-omap/gpio.c
> --- linux-omap/arch/arm/plat-omap/gpio.c        2007-05-07 20:57:49.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/gpio.c      2007-05-28 12:48:14.000000000 -0500
> @@ -120,17 +120,29 @@
>  #define OMAP24XX_GPIO_CLEARDATAOUT     0x0090
>  #define OMAP24XX_GPIO_SETDATAOUT       0x0094
>
> +/*
> + * omap34xx specific GPIO registers
> + */
> +
> +#define OMAP34XX_GPIO1_BASE            (void __iomem *)0x48310000
> +#define OMAP34XX_GPIO2_BASE            (void __iomem *)0x49050000
> +#define OMAP34XX_GPIO3_BASE            (void __iomem *)0x49052000
> +#define OMAP34XX_GPIO4_BASE            (void __iomem *)0x49054000
> +#define OMAP34XX_GPIO5_BASE            (void __iomem *)0x49056000
> +#define OMAP34XX_GPIO6_BASE            (void __iomem *)0x49058000
> +
> +
>  struct gpio_bank {
>         void __iomem *base;
>         u16 irq;
>         u16 virtual_irq_start;
>         int method;
>         u32 reserved_map;
> -#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX)
> +#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         u32 suspend_wakeup;
>         u32 saved_wakeup;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         u32 non_wakeup_gpios;
>         u32 enabled_non_wakeup_gpios;
>
> @@ -195,6 +207,18 @@ static struct gpio_bank gpio_bank_243x[5
>
>  #endif
>
> +#ifdef CONFIG_ARCH_OMAP34XX
> +static struct gpio_bank gpio_bank_34xx[6] = {
> +       { OMAP34XX_GPIO1_BASE, INT_34XX_GPIO_BANK1, IH_GPIO_BASE,       METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO2_BASE, INT_34XX_GPIO_BANK2, IH_GPIO_BASE + 32,  METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO3_BASE, INT_34XX_GPIO_BANK3, IH_GPIO_BASE + 64,  METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO4_BASE, INT_34XX_GPIO_BANK4, IH_GPIO_BASE + 96,  METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO5_BASE, INT_34XX_GPIO_BANK5, IH_GPIO_BASE + 128, METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO6_BASE, INT_34XX_GPIO_BANK6, IH_GPIO_BASE + 160, METHOD_GPIO_24XX },
> +};
> +
> +#endif
> +
>  static struct gpio_bank *gpio_bank;
>  static int gpio_bank_count;
>
> @@ -225,6 +249,10 @@ static inline struct gpio_bank *get_gpio
>         if (cpu_is_omap24xx())
>                 return &gpio_bank[gpio >> 5];
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx())
> +               return &gpio_bank[gpio >> 5];
> +#endif
>  }
>
>  static inline int get_gpio_index(int gpio)
> @@ -237,6 +265,10 @@ static inline int get_gpio_index(int gpi
>         if (cpu_is_omap24xx())
>                 return gpio & 0x1f;
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx())
> +               return gpio & 0x1f;
> +#endif
>         return gpio & 0x0f;
>  }
>
> @@ -267,6 +299,10 @@ static inline int gpio_valid(int gpio)
>         if (cpu_is_omap24xx() && gpio < 128)
>                 return 0;
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx() && gpio < 160)
> +               return 0;
> +#endif
>         return -1;
>  }
>
> @@ -306,7 +342,7 @@ static void _set_gpio_direction(struct g
>                 reg += OMAP730_GPIO_DIR_CONTROL;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_OE;
>                 break;
> @@ -380,7 +416,7 @@ static void _set_gpio_dataout(struct gpi
>                         l &= ~(1 << gpio);
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 if (enable)
>                         reg += OMAP24XX_GPIO_SETDATAOUT;
> @@ -438,7 +474,7 @@ int omap_get_gpio_datain(int gpio)
>                 reg += OMAP730_GPIO_DATA_INPUT;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_DATAIN;
>                 break;
> @@ -458,7 +494,7 @@ do {        \
>         __raw_writel(l, base + reg); \
>  } while(0)
>
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>  static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
>  {
>         void __iomem *base = bank->base;
> @@ -587,7 +623,7 @@ static int _set_gpio_triggering(struct g
>                         goto bad;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 set_24xx_gpio_triggering(bank, gpio, trigger);
>                 break;
> @@ -607,7 +643,7 @@ static int gpio_irq_type(unsigned irq, u
>         unsigned gpio;
>         int retval;
>
> -       if (!cpu_is_omap24xx() && irq > IH_MPUIO_BASE)
> +       if (!(cpu_is_omap24xx() || cpu_is_omap34xx()) && irq > IH_MPUIO_BASE)
>                 gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
>         else
>                 gpio = irq - IH_GPIO_BASE;
> @@ -619,7 +655,7 @@ static int gpio_irq_type(unsigned irq, u
>                 return -EINVAL;
>
>         /* OMAP1 allows only only edge triggering */
> -       if (!cpu_is_omap24xx()
> +       if (!(cpu_is_omap24xx() || cpu_is_omap34xx())
>                         && (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH)))
>                 return -EINVAL;
>
> @@ -660,7 +696,7 @@ static void _clear_gpio_irqbank(struct g
>                 reg += OMAP730_GPIO_INT_STATUS;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_IRQSTATUS1;
>                 break;
> @@ -672,8 +708,10 @@ static void _clear_gpio_irqbank(struct g
>         __raw_writel(gpio_mask, reg);
>
>         /* Workaround for clearing DSP GPIO interrupts to allow retention */
> -       if (cpu_is_omap2420())
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
> +       if (cpu_is_omap2420() || cpu_is_omap34xx())
>                 __raw_writel(gpio_mask, bank->base + OMAP24XX_GPIO_IRQSTATUS2);
> +#endif
>  }
>
>  static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
> @@ -716,7 +754,7 @@ static u32 _get_gpio_irqbank_mask(struct
>                 inv = 1;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_IRQENABLE1;
>                 mask = 0xffffffff;
> @@ -779,7 +817,7 @@ static void _enable_gpio_irqbank(struct
>                         l |= gpio_mask;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 if (enable)
>                         reg += OMAP24XX_GPIO_SETIRQENABLE1;
> @@ -825,7 +863,7 @@ static int _set_gpio_wakeup(struct gpio_
>                 spin_unlock(&bank->lock);
>                 return 0;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 if (bank->non_wakeup_gpios & (1 << gpio)) {
>                         printk(KERN_ERR "Unable to modify wakeup on "
> @@ -931,7 +969,7 @@ void omap_free_gpio(int gpio)
>                 __raw_writel(1 << get_gpio_index(gpio), reg);
>         }
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         if (bank->method == METHOD_GPIO_24XX) {
>                 /* Disable wake-up during idle for dynamic tick */
>                 void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
> @@ -980,7 +1018,7 @@ static void gpio_irq_handler(unsigned in
>         if (bank->method == METHOD_GPIO_730)
>                 isr_reg = bank->base + OMAP730_GPIO_INT_STATUS;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         if (bank->method == METHOD_GPIO_24XX)
>                 isr_reg = bank->base + OMAP24XX_GPIO_IRQSTATUS1;
>  #endif
> @@ -994,7 +1032,7 @@ static void gpio_irq_handler(unsigned in
>                 if (cpu_is_omap15xx() && (bank->method == METHOD_MPUIO))
>                         isr &= 0x0000ffff;
>
> -               if (cpu_is_omap24xx()) {
> +               if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                         level_mask =
>                                 __raw_readl(bank->base +
>                                         OMAP24XX_GPIO_LEVELDETECT0) |
> @@ -1063,7 +1101,7 @@ static void gpio_irq_handler(unsigned in
>                         }
>                 }
>
> -               if (cpu_is_omap24xx()) {
> +               if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                         /* clear level sensitive interrupts after handler(s) */
>                         _enable_gpio_irqbank(bank, isr_saved & level_mask, 0);
>                         _clear_gpio_irqbank(bank, isr_saved & level_mask);
> @@ -1242,7 +1280,7 @@ static int initialized;
>  static struct clk * gpio_ick;
>  static struct clk * gpio_fck;
>
> -#ifdef CONFIG_ARCH_OMAP2430
> +#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX)
>  static struct clk * gpio5_ick;
>  static struct clk * gpio5_fck;
>  #endif
> @@ -1261,7 +1299,7 @@ static int __init _omap_gpio_init(void)
>                 else
>                         clk_enable(gpio_ick);
>         }
> -       if (cpu_is_omap24xx()) {
> +       if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 gpio_ick = clk_get(NULL, "gpios_ick");
>                 if (IS_ERR(gpio_ick))
>                         printk("Could not get gpios_ick\n");
> @@ -1274,10 +1312,10 @@ static int __init _omap_gpio_init(void)
>                         clk_enable(gpio_fck);
>
>                 /*
> -                * On 2430 GPIO 5 uses CORE L4 ICLK
> +                * On 2430 & 3430 GPIO 5 uses CORE L4 ICLK
>                  */
> -#ifdef CONFIG_ARCH_OMAP2430
> -               if (cpu_is_omap2430()) {
> +#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430)
> +               if (cpu_is_omap2430() || cpu_is_omap3430()) {
>                         gpio5_ick = clk_get(NULL, "gpio5_ick");
>                         if (IS_ERR(gpio5_ick))
>                                 printk("Could not get gpio5_ick\n");
> @@ -1290,7 +1328,7 @@ static int __init _omap_gpio_init(void)
>                                 clk_enable(gpio5_fck);
>                 }
>  #endif
> -}
> +       }
>
>  #ifdef CONFIG_ARCH_OMAP15XX
>         if (cpu_is_omap15xx()) {
> @@ -1338,6 +1376,17 @@ static int __init _omap_gpio_init(void)
>                         (rev >> 4) & 0x0f, rev & 0x0f);
>         }
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx()) {
> +               int rev;
> +
> +               gpio_bank_count = 6;
> +               gpio_bank = gpio_bank_34xx;
> +               rev = omap_readl(gpio_bank[0].base + OMAP24XX_GPIO_REVISION);
> +               printk(KERN_INFO "OMAP34xx GPIO hardware version %d.%d\n",
> +                       (rev >> 4) & 0x0f, rev & 0x0f);
> +       }
> +#endif
>         for (i = 0; i < gpio_bank_count; i++) {
>                 int j, gpio_count = 16;
>
> @@ -1368,7 +1417,7 @@ static int __init _omap_gpio_init(void)
>                         gpio_count = 32; /* 730 has 32-bit GPIOs */
>                 }
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 if (bank->method == METHOD_GPIO_24XX) {
>                         static const u32 non_wakeup_gpios[] = {
>                                 0xe203ffc0, 0x08700040
> @@ -1404,21 +1453,26 @@ static int __init _omap_gpio_init(void)
>         if (cpu_is_omap16xx())
>                 omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, ULPD_CAM_CLK_CTRL);
>
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX)
>         /* Enable autoidle for the OCP interface */
>         if (cpu_is_omap24xx())
>                 omap_writel(1 << 0, 0x48019010);
> +#elif defined(CONFIG_ARCH_OMAP34XX)
> +       if (cpu_is_omap34xx())
> +               omap_writel(1 << 0, 0x48306814);
>  #endif
>
> +/* TODO: should we do the above for OMAP3 as well? */
> +

I think you are already doing something similar to OMAP2 above. Isn't it?


-- 
--Trilok Soni

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

* Re: [PATCH 7/11] Adding OMAP3430 support to plat-omap
  2007-05-29  6:22 [PATCH 7/11] Adding OMAP3430 support to plat-omap Syed Mohammed, Khasim
  2007-05-29  6:54 ` Trilok Soni
@ 2007-05-29 10:13 ` andrzej zaborowski
  2007-05-29 16:51   ` Tony Lindgren
  1 sibling, 1 reply; 4+ messages in thread
From: andrzej zaborowski @ 2007-05-29 10:13 UTC (permalink / raw)
  To: Syed Mohammed, Khasim; +Cc: Linux OMAP

Hi,
my two cents.

On 29/05/07, Syed Mohammed, Khasim <x0khasim@ti.com> wrote:
>
> Adding OMAP 3430 Support to arch/arm/plat-omap
>
> Signed-off-by: Syed Mohammed Khasim  <x0khasim@ti.com>
>
> Files Changed:
>  Kconfig    |    9 ++--
>  common.c   |    2
>  devices.c  |    8 +--
>  dma.c      |    2
>  dmtimer.c  |   43 ++++++++++++++++---
>  gpio.c     |  133 ++++++++++++++++++++++++++++++++++++++++++++-----------------
>  sram.c     |   12 ++---
>  timer32k.c |    8 ++-
>  8 files changed, 156 insertions(+), 61 deletions(-)
>
> =======================================================================
> diff -purN linux-omap/arch/arm/plat-omap/Kconfig val_3430_GIT/arch/arm/plat-omap/Kconfig
> --- linux-omap/arch/arm/plat-omap/Kconfig       2007-05-16 14:32:40.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/Kconfig     2007-05-28 12:47:13.000000000 -0500
> @@ -15,6 +15,9 @@ config ARCH_OMAP1
>  config ARCH_OMAP2
>         bool "TI OMAP2"
>
> +config ARCH_OMAP3
> +       bool "TI OMAP3"
> +
>  endchoice
>
>  comment "OMAP Feature Selections"
> @@ -148,13 +151,13 @@ config OMAP_MPU_TIMER
>
>  config OMAP_32K_TIMER
>         bool "Use 32KHz timer"
> -       depends on ARCH_OMAP16XX || ARCH_OMAP24XX
> +       depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
>         help
>           Select this option if you want to enable the OMAP 32KHz timer.
>           This timer saves power compared to the OMAP_MPU_TIMER, and has
>           support for no tick during idle. The 32KHz timer provides less
>           intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is
> -         currently only available for OMAP16XX and 24XX.
> +         currently only available for OMAP16XX, 24XX and 34XX.
>
>  endchoice
>
> @@ -169,7 +172,7 @@ config OMAP_32K_TIMER_HZ
>
>  config OMAP_DM_TIMER
>         bool "Use dual-mode timer"
> -       depends on ARCH_OMAP16XX || ARCH_OMAP24XX
> +       depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
>         help
>          Select this option if you want to use OMAP Dual-Mode timers.
>
> diff -purN linux-omap/arch/arm/plat-omap/common.c val_3430_GIT/arch/arm/plat-omap/common.c
> --- linux-omap/arch/arm/plat-omap/common.c      2007-05-25 15:52:23.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/common.c    2007-05-28 12:47:13.000000000 -0500
> @@ -218,7 +218,7 @@ static int __init omap_init_clocksource_
>         static char err[] __initdata = KERN_ERR
>                         "%s: can't register clocksource!\n";
>
> -       if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
> +       if (cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 clocksource_32k.mult = clocksource_hz2mult(32768,
>                                             clocksource_32k.shift);
>
> diff -purN linux-omap/arch/arm/plat-omap/devices.c val_3430_GIT/arch/arm/plat-omap/devices.c
> --- linux-omap/arch/arm/plat-omap/devices.c     2007-04-27 11:01:33.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/devices.c   2007-05-28 16:07:44.000000000 -0500
> @@ -141,7 +141,7 @@ static void omap_init_i2c(void)
>          * either don't wire up I2C, or chips that mux it differently...
>          * it can include clocking and address info, maybe more.
>          */
> -       if (cpu_is_omap24xx()) {
> +       if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 if (machine_is_omap_h4()) {
>                         omap_cfg_reg(M19_24XX_I2C1_SCL);
>                         omap_cfg_reg(L15_24XX_I2C1_SDA);
> @@ -164,7 +164,7 @@ static inline void omap_init_i2c(void) {
>  static void omap_init_kp(void)
>  {
>         /* REVISIT: 2430 keypad is on TWL4030 */
> -       if (cpu_is_omap2430())
> +       if (cpu_is_omap2430() || cpu_is_omap34xx())
>                 return;
>
>         if (machine_is_omap_h2() || machine_is_omap_h3()) {
> @@ -295,7 +295,7 @@ static void __init omap_init_mmc(void)
>         const struct omap_mmc_conf      *mmc;
>
>         /* REVISIT: 2430 has HS MMC */
> -       if (cpu_is_omap2430())
> +       if (cpu_is_omap2430() || cpu_is_omap34xx())
>                 return;
>
>         /* NOTE:  assumes MMC was never (wrongly) enabled */
> @@ -526,7 +526,7 @@ static int __init omap_init_devices(void
>         omap_init_uwire();
>         omap_init_wdt();
>         omap_init_rng();
> -       if (!cpu_is_omap2430()) {
> +       if (!cpu_is_omap2430() || !cpu_is_omap34xx()) {

AIUI this condition is always going to be true. (perhaps "&&")

>                 omap_init_i2c();
>         }
>         return 0;
> diff -purN linux-omap/arch/arm/plat-omap/dma.c val_3430_GIT/arch/arm/plat-omap/dma.c
> --- linux-omap/arch/arm/plat-omap/dma.c 2007-05-25 13:27:04.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/dma.c       2007-05-28 12:49:40.000000000 -0500
> @@ -628,7 +628,7 @@ void omap_clear_dma(int lch)
>
>         if (cpu_is_omap24xx()) {
>                 int i;
> -               u32 lch_base = OMAP24XX_DMA_BASE + lch * 0x60 + 0x80;
> +               u32 lch_base = OMAP_DMA4_BASE + lch * 0x60 + 0x80;
>                 for (i = 0; i < 0x44; i += 4)
>                         omap_writel(0, lch_base + i);
>         }
> diff -purN linux-omap/arch/arm/plat-omap/dmtimer.c val_3430_GIT/arch/arm/plat-omap/dmtimer.c
> --- linux-omap/arch/arm/plat-omap/dmtimer.c     2007-04-04 18:13:49.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/dmtimer.c   2007-05-28 12:47:13.000000000 -0500
> @@ -70,7 +70,7 @@
>  struct omap_dm_timer {
>         unsigned long phys_base;
>         int irq;
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>         struct clk *iclk, *fclk;
>  #endif
>         void __iomem *io_base;
> @@ -122,6 +122,34 @@ static const char *dm_source_names[] = {
>
>  static struct clk *dm_source_clocks[3];
>
> +#elif defined(CONFIG_ARCH_OMAP3)
> +
> +#define omap_dm_clk_enable(x) clk_enable(x)
> +#define omap_dm_clk_disable(x) clk_disable(x)
> +
> +static struct omap_dm_timer dm_timers[] = {
> +       { .phys_base    = 0x48318000, .irq      = INT_24XX_GPTIMER1 },
> +       { .phys_base    = 0x49032000, .irq      = INT_24XX_GPTIMER2 },
> +       { .phys_base    = 0x49034000, .irq      = INT_24XX_GPTIMER3 },
> +       { .phys_base    = 0x49036000, .irq      = INT_24XX_GPTIMER4 },
> +       { .phys_base    = 0x49038000, .irq      = INT_24XX_GPTIMER5 },
> +       { .phys_base    = 0x4903A000, .irq      = INT_24XX_GPTIMER6 },
> +       { .phys_base    = 0x4903C000, .irq      = INT_24XX_GPTIMER7 },
> +       { .phys_base    = 0x4903E000, .irq      = INT_24XX_GPTIMER8 },
> +       { .phys_base    = 0x49040000, .irq      = INT_24XX_GPTIMER9 },
> +       { .phys_base    = 0x48086000, .irq      = INT_24XX_GPTIMER10 },
> +       { .phys_base    = 0x48088000, .irq      = INT_24XX_GPTIMER11 },
> +       { .phys_base    = 0x48304000, .irq      = INT_24XX_GPTIMER12 },
> +};
> +
> +static const char *dm_source_names[] = {
> +       "sys_ck",
> +       "func_32k_ck",
> +       "alt_ck"
> +};
> +
> +static struct clk *dm_source_clocks[3];
> +
>  #else
>
>  #error OMAP architecture not supported!
> @@ -191,7 +219,6 @@ struct omap_dm_timer *omap_dm_timer_requ
>         struct omap_dm_timer *timer = NULL;
>         unsigned long flags;
>         int i;
> -
>         spin_lock_irqsave(&dm_timer_lock, flags);
>         for (i = 0; i < dm_timer_count; i++) {
>                 if (dm_timers[i].reserved)
> @@ -299,7 +326,7 @@ __u32 omap_dm_timer_modify_idlect_mask(_
>         return inputmask;
>  }
>
> -#elif defined(CONFIG_ARCH_OMAP2)
> +#elif defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>
>  struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer)
>  {
> @@ -491,27 +518,27 @@ int omap_dm_timer_init(void)
>         struct omap_dm_timer *timer;
>         int i;
>
> -       if (!(cpu_is_omap16xx() || cpu_is_omap24xx()))
> +       if (!(cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()))
>                 return -ENODEV;
>
>         spin_lock_init(&dm_timer_lock);
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>         for (i = 0; i < ARRAY_SIZE(dm_source_names); i++) {
>                 dm_source_clocks[i] = clk_get(NULL, dm_source_names[i]);
>                 BUG_ON(dm_source_clocks[i] == NULL);
>         }
>  #endif
> -       if (cpu_is_omap243x())
> +       if (cpu_is_omap243x() || cpu_is_omap343x())
>                 dm_timers[0].phys_base = 0x49018000;
>
>         for (i = 0; i < dm_timer_count; i++) {
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>                 char clk_name[16];
>  #endif
>
>                 timer = &dm_timers[i];
>                 timer->io_base = (void __iomem *) io_p2v(timer->phys_base);
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>                 sprintf(clk_name, "gpt%d_ick", i + 1);
>                 timer->iclk = clk_get(NULL, clk_name);
>                 sprintf(clk_name, "gpt%d_fck", i + 1);
> diff -purN linux-omap/arch/arm/plat-omap/gpio.c val_3430_GIT/arch/arm/plat-omap/gpio.c
> --- linux-omap/arch/arm/plat-omap/gpio.c        2007-05-07 20:57:49.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/gpio.c      2007-05-28 12:48:14.000000000 -0500
> @@ -120,17 +120,29 @@
>  #define OMAP24XX_GPIO_CLEARDATAOUT     0x0090
>  #define OMAP24XX_GPIO_SETDATAOUT       0x0094
>
> +/*
> + * omap34xx specific GPIO registers
> + */
> +
> +#define OMAP34XX_GPIO1_BASE            (void __iomem *)0x48310000
> +#define OMAP34XX_GPIO2_BASE            (void __iomem *)0x49050000
> +#define OMAP34XX_GPIO3_BASE            (void __iomem *)0x49052000
> +#define OMAP34XX_GPIO4_BASE            (void __iomem *)0x49054000
> +#define OMAP34XX_GPIO5_BASE            (void __iomem *)0x49056000
> +#define OMAP34XX_GPIO6_BASE            (void __iomem *)0x49058000
> +
> +
>  struct gpio_bank {
>         void __iomem *base;
>         u16 irq;
>         u16 virtual_irq_start;
>         int method;
>         u32 reserved_map;
> -#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX)
> +#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         u32 suspend_wakeup;
>         u32 saved_wakeup;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         u32 non_wakeup_gpios;
>         u32 enabled_non_wakeup_gpios;
>
> @@ -195,6 +207,18 @@ static struct gpio_bank gpio_bank_243x[5
>
>  #endif
>
> +#ifdef CONFIG_ARCH_OMAP34XX
> +static struct gpio_bank gpio_bank_34xx[6] = {
> +       { OMAP34XX_GPIO1_BASE, INT_34XX_GPIO_BANK1, IH_GPIO_BASE,       METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO2_BASE, INT_34XX_GPIO_BANK2, IH_GPIO_BASE + 32,  METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO3_BASE, INT_34XX_GPIO_BANK3, IH_GPIO_BASE + 64,  METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO4_BASE, INT_34XX_GPIO_BANK4, IH_GPIO_BASE + 96,  METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO5_BASE, INT_34XX_GPIO_BANK5, IH_GPIO_BASE + 128, METHOD_GPIO_24XX },
> +       { OMAP34XX_GPIO6_BASE, INT_34XX_GPIO_BANK6, IH_GPIO_BASE + 160, METHOD_GPIO_24XX },
> +};
> +
> +#endif
> +
>  static struct gpio_bank *gpio_bank;
>  static int gpio_bank_count;
>
> @@ -225,6 +249,10 @@ static inline struct gpio_bank *get_gpio
>         if (cpu_is_omap24xx())
>                 return &gpio_bank[gpio >> 5];
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx())
> +               return &gpio_bank[gpio >> 5];
> +#endif
>  }
>
>  static inline int get_gpio_index(int gpio)
> @@ -237,6 +265,10 @@ static inline int get_gpio_index(int gpi
>         if (cpu_is_omap24xx())
>                 return gpio & 0x1f;
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx())
> +               return gpio & 0x1f;
> +#endif
>         return gpio & 0x0f;
>  }
>
> @@ -267,6 +299,10 @@ static inline int gpio_valid(int gpio)
>         if (cpu_is_omap24xx() && gpio < 128)
>                 return 0;
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx() && gpio < 160)
> +               return 0;
> +#endif
>         return -1;
>  }
>
> @@ -306,7 +342,7 @@ static void _set_gpio_direction(struct g
>                 reg += OMAP730_GPIO_DIR_CONTROL;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_OE;
>                 break;
> @@ -380,7 +416,7 @@ static void _set_gpio_dataout(struct gpi
>                         l &= ~(1 << gpio);
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 if (enable)
>                         reg += OMAP24XX_GPIO_SETDATAOUT;
> @@ -438,7 +474,7 @@ int omap_get_gpio_datain(int gpio)
>                 reg += OMAP730_GPIO_DATA_INPUT;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_DATAIN;
>                 break;
> @@ -458,7 +494,7 @@ do {        \
>         __raw_writel(l, base + reg); \
>  } while(0)
>
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>  static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
>  {
>         void __iomem *base = bank->base;
> @@ -587,7 +623,7 @@ static int _set_gpio_triggering(struct g
>                         goto bad;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 set_24xx_gpio_triggering(bank, gpio, trigger);
>                 break;
> @@ -607,7 +643,7 @@ static int gpio_irq_type(unsigned irq, u
>         unsigned gpio;
>         int retval;
>
> -       if (!cpu_is_omap24xx() && irq > IH_MPUIO_BASE)
> +       if (!(cpu_is_omap24xx() || cpu_is_omap34xx()) && irq > IH_MPUIO_BASE)
>                 gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
>         else
>                 gpio = irq - IH_GPIO_BASE;
> @@ -619,7 +655,7 @@ static int gpio_irq_type(unsigned irq, u
>                 return -EINVAL;
>
>         /* OMAP1 allows only only edge triggering */
> -       if (!cpu_is_omap24xx()
> +       if (!(cpu_is_omap24xx() || cpu_is_omap34xx())
>                         && (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH)))
>                 return -EINVAL;
>
> @@ -660,7 +696,7 @@ static void _clear_gpio_irqbank(struct g
>                 reg += OMAP730_GPIO_INT_STATUS;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_IRQSTATUS1;
>                 break;
> @@ -672,8 +708,10 @@ static void _clear_gpio_irqbank(struct g
>         __raw_writel(gpio_mask, reg);
>
>         /* Workaround for clearing DSP GPIO interrupts to allow retention */
> -       if (cpu_is_omap2420())
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
> +       if (cpu_is_omap2420() || cpu_is_omap34xx())
>                 __raw_writel(gpio_mask, bank->base + OMAP24XX_GPIO_IRQSTATUS2);
> +#endif
>  }
>
>  static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
> @@ -716,7 +754,7 @@ static u32 _get_gpio_irqbank_mask(struct
>                 inv = 1;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 reg += OMAP24XX_GPIO_IRQENABLE1;
>                 mask = 0xffffffff;
> @@ -779,7 +817,7 @@ static void _enable_gpio_irqbank(struct
>                         l |= gpio_mask;
>                 break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 if (enable)
>                         reg += OMAP24XX_GPIO_SETIRQENABLE1;
> @@ -825,7 +863,7 @@ static int _set_gpio_wakeup(struct gpio_
>                 spin_unlock(&bank->lock);
>                 return 0;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         case METHOD_GPIO_24XX:
>                 if (bank->non_wakeup_gpios & (1 << gpio)) {
>                         printk(KERN_ERR "Unable to modify wakeup on "
> @@ -931,7 +969,7 @@ void omap_free_gpio(int gpio)
>                 __raw_writel(1 << get_gpio_index(gpio), reg);
>         }
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         if (bank->method == METHOD_GPIO_24XX) {
>                 /* Disable wake-up during idle for dynamic tick */
>                 void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
> @@ -980,7 +1018,7 @@ static void gpio_irq_handler(unsigned in
>         if (bank->method == METHOD_GPIO_730)
>                 isr_reg = bank->base + OMAP730_GPIO_INT_STATUS;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>         if (bank->method == METHOD_GPIO_24XX)
>                 isr_reg = bank->base + OMAP24XX_GPIO_IRQSTATUS1;
>  #endif
> @@ -994,7 +1032,7 @@ static void gpio_irq_handler(unsigned in
>                 if (cpu_is_omap15xx() && (bank->method == METHOD_MPUIO))
>                         isr &= 0x0000ffff;
>
> -               if (cpu_is_omap24xx()) {
> +               if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                         level_mask =
>                                 __raw_readl(bank->base +
>                                         OMAP24XX_GPIO_LEVELDETECT0) |
> @@ -1063,7 +1101,7 @@ static void gpio_irq_handler(unsigned in
>                         }
>                 }
>
> -               if (cpu_is_omap24xx()) {
> +               if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                         /* clear level sensitive interrupts after handler(s) */
>                         _enable_gpio_irqbank(bank, isr_saved & level_mask, 0);
>                         _clear_gpio_irqbank(bank, isr_saved & level_mask);
> @@ -1242,7 +1280,7 @@ static int initialized;
>  static struct clk * gpio_ick;
>  static struct clk * gpio_fck;
>
> -#ifdef CONFIG_ARCH_OMAP2430
> +#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX)
>  static struct clk * gpio5_ick;
>  static struct clk * gpio5_fck;
>  #endif
> @@ -1261,7 +1299,7 @@ static int __init _omap_gpio_init(void)
>                 else
>                         clk_enable(gpio_ick);
>         }
> -       if (cpu_is_omap24xx()) {
> +       if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 gpio_ick = clk_get(NULL, "gpios_ick");
>                 if (IS_ERR(gpio_ick))
>                         printk("Could not get gpios_ick\n");
> @@ -1274,10 +1312,10 @@ static int __init _omap_gpio_init(void)
>                         clk_enable(gpio_fck);
>
>                 /*
> -                * On 2430 GPIO 5 uses CORE L4 ICLK
> +                * On 2430 & 3430 GPIO 5 uses CORE L4 ICLK
>                  */
> -#ifdef CONFIG_ARCH_OMAP2430
> -               if (cpu_is_omap2430()) {
> +#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430)
> +               if (cpu_is_omap2430() || cpu_is_omap3430()) {
>                         gpio5_ick = clk_get(NULL, "gpio5_ick");
>                         if (IS_ERR(gpio5_ick))
>                                 printk("Could not get gpio5_ick\n");
> @@ -1290,7 +1328,7 @@ static int __init _omap_gpio_init(void)
>                                 clk_enable(gpio5_fck);
>                 }
>  #endif
> -}
> +       }
>
>  #ifdef CONFIG_ARCH_OMAP15XX
>         if (cpu_is_omap15xx()) {
> @@ -1338,6 +1376,17 @@ static int __init _omap_gpio_init(void)
>                         (rev >> 4) & 0x0f, rev & 0x0f);
>         }
>  #endif
> +#ifdef CONFIG_ARCH_OMAP34XX
> +       if (cpu_is_omap34xx()) {
> +               int rev;
> +
> +               gpio_bank_count = 6;
> +               gpio_bank = gpio_bank_34xx;
> +               rev = omap_readl(gpio_bank[0].base + OMAP24XX_GPIO_REVISION);
> +               printk(KERN_INFO "OMAP34xx GPIO hardware version %d.%d\n",
> +                       (rev >> 4) & 0x0f, rev & 0x0f);
> +       }
> +#endif
>         for (i = 0; i < gpio_bank_count; i++) {
>                 int j, gpio_count = 16;
>
> @@ -1368,7 +1417,7 @@ static int __init _omap_gpio_init(void)
>                         gpio_count = 32; /* 730 has 32-bit GPIOs */
>                 }
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 if (bank->method == METHOD_GPIO_24XX) {
>                         static const u32 non_wakeup_gpios[] = {
>                                 0xe203ffc0, 0x08700040
> @@ -1404,21 +1453,26 @@ static int __init _omap_gpio_init(void)
>         if (cpu_is_omap16xx())
>                 omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, ULPD_CAM_CLK_CTRL);
>
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX)
>         /* Enable autoidle for the OCP interface */
>         if (cpu_is_omap24xx())
>                 omap_writel(1 << 0, 0x48019010);
> +#elif defined(CONFIG_ARCH_OMAP34XX)
> +       if (cpu_is_omap34xx())
> +               omap_writel(1 << 0, 0x48306814);
>  #endif
>
> +/* TODO: should we do the above for OMAP3 as well? */
> +
>         return 0;
>  }
>
> -#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX)
> +#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX) || defined (CONFIG_ARCH_OMAP34XX)
>  static int omap_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
>  {
>         int i;
>
> -       if (!cpu_is_omap24xx() && !cpu_is_omap16xx())
> +       if (!cpu_is_omap24xx() && !cpu_is_omap16xx() && !cpu_is_omap34xx())
>                 return 0;
>
>         for (i = 0; i < gpio_bank_count; i++) {
> @@ -1435,7 +1489,7 @@ static int omap_gpio_suspend(struct sys_
>                         wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
>                         break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 case METHOD_GPIO_24XX:
>                         wake_status = bank->base + OMAP24XX_GPIO_SETWKUENA;
>                         wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
> @@ -1475,7 +1529,7 @@ static int omap_gpio_resume(struct sys_d
>                         wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
>                         break;
>  #endif
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 case METHOD_GPIO_24XX:
>                         wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
>                         wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
> @@ -1507,7 +1561,7 @@ static struct sys_device omap_gpio_devic
>
>  #endif
>
> -#ifdef CONFIG_ARCH_OMAP24XX
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>
>  static int workaround_enabled;
>
> @@ -1523,15 +1577,19 @@ void omap2_gpio_prepare_for_retention(vo
>
>                 if (!(bank->enabled_non_wakeup_gpios))
>                         continue;
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 bank->saved_datain = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
>                 l1 = __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT);
>                 l2 = __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT);
> +#endif
>                 bank->saved_fallingdetect = l1;
>                 bank->saved_risingdetect = l2;
>                 l1 &= ~bank->enabled_non_wakeup_gpios;
>                 l2 &= ~bank->enabled_non_wakeup_gpios;
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 __raw_writel(l1, bank->base + OMAP24XX_GPIO_FALLINGDETECT);
>                 __raw_writel(l2, bank->base + OMAP24XX_GPIO_RISINGDETECT);
> +#endif
>                 c++;
>         }
>         if (!c) {
> @@ -1553,26 +1611,31 @@ void omap2_gpio_resume_after_retention(v
>
>                 if (!(bank->enabled_non_wakeup_gpios))
>                         continue;
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 __raw_writel(bank->saved_fallingdetect,
>                                  bank->base + OMAP24XX_GPIO_FALLINGDETECT);
>                 __raw_writel(bank->saved_risingdetect,
>                                  bank->base + OMAP24XX_GPIO_RISINGDETECT);
> +#endif
>                 /* Check if any of the non-wakeup interrupt GPIOs have changed
>                  * state.  If so, generate an IRQ by software.  This is
>                  * horribly racy, but it's the best we can do to work around
>                  * this silicon bug. */
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                 l = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
> +#endif
>                 l ^= bank->saved_datain;
>                 l &= bank->non_wakeup_gpios;
>                 if (l) {
>                         u32 old0, old1;
> -
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>                         old0 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0);
>                         old1 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
>                         __raw_writel(old0 | l, bank->base + OMAP24XX_GPIO_LEVELDETECT0);
>                         __raw_writel(old1 | l, bank->base + OMAP24XX_GPIO_LEVELDETECT1);
>                         __raw_writel(old0, bank->base + OMAP24XX_GPIO_LEVELDETECT0);
>                         __raw_writel(old1, bank->base + OMAP24XX_GPIO_LEVELDETECT1);
> +#endif
>                 }
>         }
>
> @@ -1601,8 +1664,8 @@ static int __init omap_gpio_sysinit(void
>
>         mpuio_init();
>
> -#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX)
> -       if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
> +#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
> +       if (cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 if (ret == 0) {
>                         ret = sysdev_class_register(&omap_gpio_sysclass);
>                         if (ret == 0)
> @@ -1664,7 +1727,7 @@ static int dbg_gpio_show(struct seq_file
>
>                 if (bank_is_mpuio(bank))
>                         gpio = OMAP_MPUIO(0);
> -               else if (cpu_is_omap24xx() || cpu_is_omap730())
> +               else if (cpu_is_omap24xx() || cpu_is_omap730() || cpu_is_omap34xx())
>                         bankwidth = 32;
>
>                 for (j = 0; j < bankwidth; j++, gpio++, mask <<= 1) {
> diff -purN linux-omap/arch/arm/plat-omap/sram.c val_3430_GIT/arch/arm/plat-omap/sram.c
> --- linux-omap/arch/arm/plat-omap/sram.c        2007-05-25 13:27:04.000000000 -0500
> +++ val_3430_GIT/arch/arm/plat-omap/sram.c      2007-05-28 12:47:13.000000000 -0500
> @@ -31,7 +31,7 @@
>  #define OMAP2_SRAM_VA          0xd0000000
>  #define OMAP2_SRAM_PUB_VA      0xd0000800
>
> -#if defined(CONFIG_ARCH_OMAP24XX)
> +#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>  #define SRAM_BOOTLOADER_SZ     0x00
>  #else
>  #define SRAM_BOOTLOADER_SZ     0x80
> @@ -92,7 +92,7 @@ void __init omap_detect_sram(void)
>  {
>         unsigned long reserved;
>
> -       if (cpu_is_omap24xx()) {
> +       if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 if (is_sram_locked()) {
>                         omap_sram_base = OMAP2_SRAM_PUB_VA;
>                         omap_sram_start = OMAP2_SRAM_PUB_PA;
> @@ -102,7 +102,7 @@ void __init omap_detect_sram(void)
>                         omap_sram_start = OMAP2_SRAM_PA;
>                         if (cpu_is_omap242x())
>                                 omap_sram_size = 0xa0000; /* 640K */
> -                       else if (cpu_is_omap243x())
> +                       else if (cpu_is_omap243x() || cpu_is_omap34xx())
>                                 omap_sram_size = 0x10000; /* 64K */
>                 }
>         } else {
> @@ -149,7 +149,7 @@ void __init omap_map_sram(void)
>         if (omap_sram_size == 0)
>                 return;
>
> -       if (cpu_is_omap24xx()) {
> +       if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
>                 omap_sram_io_desc[0].virtual = OMAP2_SRAM_VA;
>
>                 base = OMAP2_SRAM_PA;
> @@ -224,7 +224,7 @@ int __init omap1_sram_init(void)
>  #define omap1_sram_init()      do {} while (0)
>  #endif
>
> -#ifdef CONFIG_ARCH_OMAP2
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>
>  static void (*_omap2_sram_ddr_init)(u32 *slow_dll_ctrl, u32 fast_dll_ctrl,
>                               u32 base_cs, u32 force_unlock);
> @@ -279,7 +279,7 @@ int __init omap_sram_init(void)
>         omap_detect_sram();
>         omap_map_sram();
>
> -       if (!cpu_is_omap24xx())
> +       if (!(cpu_is_omap24xx() || cpu_is_omap34xx()))
>                 omap1_sram_init();
>         else
>                 omap2_sram_init();

Maybe omap cpu_class_is_omap2() would be more apropriate in places like this?

Regards,
Andrew

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

* Re: [PATCH 7/11] Adding OMAP3430 support to plat-omap
  2007-05-29 10:13 ` andrzej zaborowski
@ 2007-05-29 16:51   ` Tony Lindgren
  0 siblings, 0 replies; 4+ messages in thread
From: Tony Lindgren @ 2007-05-29 16:51 UTC (permalink / raw)
  To: andrzej zaborowski; +Cc: Linux OMAP

* andrzej zaborowski <balrogg@gmail.com> [070529 03:14]:
>> @@ -279,7 +279,7 @@ int __init omap_sram_init(void)
>>         omap_detect_sram();
>>         omap_map_sram();
>>
>> -       if (!cpu_is_omap24xx())
>> +       if (!(cpu_is_omap24xx() || cpu_is_omap34xx()))
>>                 omap1_sram_init();
>>         else
>>                 omap2_sram_init();
>
> Maybe omap cpu_class_is_omap2() would be more apropriate in places like 
> this?

I agree, that cuts down the if this and that clutter.

Tony

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

end of thread, other threads:[~2007-05-29 16:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-29  6:22 [PATCH 7/11] Adding OMAP3430 support to plat-omap Syed Mohammed, Khasim
2007-05-29  6:54 ` Trilok Soni
2007-05-29 10:13 ` andrzej zaborowski
2007-05-29 16:51   ` Tony Lindgren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox