linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs
@ 2009-07-09 18:04 Ulrik Bech Hald
  2009-07-09 18:04 ` [PATCH 1/2] watchdog:OMAP3:Register IVA and SECURE WDT, make clks ac Ulrik Bech Hald
  2009-07-22 17:47 ` [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs Wim Van Sebroeck
  0 siblings, 2 replies; 5+ messages in thread
From: Ulrik Bech Hald @ 2009-07-09 18:04 UTC (permalink / raw)
  To: wim; +Cc: linux-omap, Ulrik Bech Hald

This patch series enables support for IVA2 and SECURE
WDTs, available on omap34xx.
The WDTs will be accessible (when present on device) through:
MPU:	/dev/watchdog
SECURE:	/dev/watchdog_secure
IVA2:	/dev/watchdog_iva2

Tested on Zoom1 OMAP3 platform, compile-tested for OMAP2
Signed-off-by: Ulrik Bech Hald <ubh@ti.com>
Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com>
--- 
 arch/arm/mach-omap1/clock.c     |    6 +-
 arch/arm/mach-omap2/clock24xx.c |    4 -
 arch/arm/mach-omap2/clock34xx.c |   12 ++---
 arch/arm/plat-omap/devices.c    |   91 ++++++++++++++++++++++++++++++++--------
 drivers/watchdog/omap_wdt.c     |   34 +++++++++++---
 5 files changed, 112 insertions(+), 35 deletions(-)

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

* [PATCH 1/2] watchdog:OMAP3:Register IVA and SECURE WDT, make clks ac
  2009-07-09 18:04 [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs Ulrik Bech Hald
@ 2009-07-09 18:04 ` Ulrik Bech Hald
  2009-07-09 18:04   ` [PATCH 2/2] watchdog:OMAP3:Enable support for IVA2 and SECURE Ulrik Bech Hald
  2009-07-22 17:47 ` [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs Wim Van Sebroeck
  1 sibling, 1 reply; 5+ messages in thread
From: Ulrik Bech Hald @ 2009-07-09 18:04 UTC (permalink / raw)
  To: wim; +Cc: linux-omap, Ulrik Bech Hald

Enabling registration of IVA and SECURE WDT devices. Making
ick and fck for IVA and SECURE WDTs accessible.

Tested on Zoom1 OMAP3 platform

Signed-off-by: Ulrik Bech Hald <ubh@ti.com>
Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap1/clock.c     |    6 +-
 arch/arm/mach-omap2/clock24xx.c |    4 +-
 arch/arm/mach-omap2/clock34xx.c |   12 +++---
 arch/arm/plat-omap/devices.c    |   91 ++++++++++++++++++++++++++++++++-------
 4 files changed, 86 insertions(+), 27 deletions(-)

diff --git a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c
index 436eed2..c0b5849 100644
--- a/arch/arm/mach-omap1/clock.c
+++ b/arch/arm/mach-omap1/clock.c
@@ -85,9 +85,9 @@ static struct omap_clk omap_clks[] = {
 	CLK(NULL,	"arm_gpio_ck",	&arm_gpio_ck,	CK_1510 | CK_310),
 	CLK(NULL,	"armxor_ck",	&armxor_ck.clk,	CK_16XX | CK_1510 | CK_310),
 	CLK(NULL,	"armtim_ck",	&armtim_ck.clk,	CK_16XX | CK_1510 | CK_310),
-	CLK("omap_wdt",	"fck",		&armwdt_ck.clk,	CK_16XX | CK_1510 | CK_310),
-	CLK("omap_wdt",	"ick",		&armper_ck.clk,	CK_16XX),
-	CLK("omap_wdt", "ick",		&dummy_ck,	CK_1510 | CK_310),
+	CLK("omap_wdt.2", "fck",	&armwdt_ck.clk,	CK_16XX | CK_1510 | CK_310),
+	CLK("omap_wdt.2", "ick",	&armper_ck.clk,	CK_16XX),
+	CLK("omap_wdt.2", "ick",	&dummy_ck,	CK_1510 | CK_310),
 	CLK(NULL,	"arminth_ck",	&arminth_ck1510, CK_1510 | CK_310),
 	CLK(NULL,	"arminth_ck",	&arminth_ck16xx, CK_16XX),
 	/* CK_GEN2 clocks */
diff --git a/arch/arm/mach-omap2/clock24xx.c b/arch/arm/mach-omap2/clock24xx.c
index 44de027..4fe3def 100644
--- a/arch/arm/mach-omap2/clock24xx.c
+++ b/arch/arm/mach-omap2/clock24xx.c
@@ -165,8 +165,8 @@ static struct omap_clk omap24xx_clks[] = {
 	CLK(NULL,	"uart3_fck",	&uart3_fck,	CK_243X | CK_242X),
 	CLK(NULL,	"gpios_ick",	&gpios_ick,	CK_243X | CK_242X),
 	CLK(NULL,	"gpios_fck",	&gpios_fck,	CK_243X | CK_242X),
-	CLK("omap_wdt",	"ick",		&mpu_wdt_ick,	CK_243X | CK_242X),
-	CLK("omap_wdt",	"fck",		&mpu_wdt_fck,	CK_243X | CK_242X),
+	CLK("omap_wdt.2", "ick",	&mpu_wdt_ick,	CK_243X | CK_242X),
+	CLK("omap_wdt.2", "fck",	&mpu_wdt_fck,	CK_243X | CK_242X),
 	CLK(NULL,	"sync_32k_ick",	&sync_32k_ick,	CK_243X | CK_242X),
 	CLK(NULL,	"wdt1_ick",	&wdt1_ick,	CK_243X | CK_242X),
 	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick,	CK_243X | CK_242X),
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
index 045da92..aaea62c 100644
--- a/arch/arm/mach-omap2/clock34xx.c
+++ b/arch/arm/mach-omap2/clock34xx.c
@@ -215,11 +215,11 @@ static struct omap_clk omap34xx_clks[] = {
 	CLK(NULL,	"gpt1_fck",	&gpt1_fck,	CK_343X),
 	CLK(NULL,	"wkup_32k_fck",	&wkup_32k_fck,	CK_343X),
 	CLK(NULL,	"gpio1_dbck",	&gpio1_dbck,	CK_343X),
-	CLK("omap_wdt",	"fck",		&wdt2_fck,	CK_343X),
+	CLK("omap_wdt.1", "fck",	&wdt2_fck,	CK_343X),
 	CLK(NULL,	"wkup_l4_ick",	&wkup_l4_ick,	CK_343X),
 	CLK(NULL,	"usim_ick",	&usim_ick,	CK_3430ES2),
-	CLK("omap_wdt",	"ick",		&wdt2_ick,	CK_343X),
-	CLK(NULL,	"wdt1_ick",	&wdt1_ick,	CK_343X),
+	CLK("omap_wdt.1", "ick",	&wdt2_ick,	CK_343X),
+	CLK("omap_wdt.0", "ick",	&wdt1_ick,	CK_343X),
 	CLK(NULL,	"gpio1_ick",	&gpio1_ick,	CK_343X),
 	CLK(NULL,	"omap_32ksync_ick", &omap_32ksync_ick, CK_343X),
 	CLK(NULL,	"gpt12_ick",	&gpt12_ick,	CK_343X),
@@ -241,14 +241,14 @@ static struct omap_clk omap34xx_clks[] = {
 	CLK(NULL,	"gpio4_dbck",	&gpio4_dbck,	CK_343X),
 	CLK(NULL,	"gpio3_dbck",	&gpio3_dbck,	CK_343X),
 	CLK(NULL,	"gpio2_dbck",	&gpio2_dbck,	CK_343X),
-	CLK(NULL,	"wdt3_fck",	&wdt3_fck,	CK_343X),
+	CLK("omap_wdt.2", "fck",	&wdt3_fck,	CK_343X),
 	CLK(NULL,	"per_l4_ick",	&per_l4_ick,	CK_343X),
 	CLK(NULL,	"gpio6_ick",	&gpio6_ick,	CK_343X),
 	CLK(NULL,	"gpio5_ick",	&gpio5_ick,	CK_343X),
 	CLK(NULL,	"gpio4_ick",	&gpio4_ick,	CK_343X),
 	CLK(NULL,	"gpio3_ick",	&gpio3_ick,	CK_343X),
 	CLK(NULL,	"gpio2_ick",	&gpio2_ick,	CK_343X),
-	CLK(NULL,	"wdt3_ick",	&wdt3_ick,	CK_343X),
+	CLK("omap_wdt.2", "ick",	&wdt3_ick,	CK_343X),
 	CLK(NULL,	"uart3_ick",	&uart3_ick,	CK_343X),
 	CLK(NULL,	"gpt9_ick",	&gpt9_ick,	CK_343X),
 	CLK(NULL,	"gpt8_ick",	&gpt8_ick,	CK_343X),
@@ -275,7 +275,7 @@ static struct omap_clk omap34xx_clks[] = {
 	CLK(NULL,	"sr_l4_ick",	&sr_l4_ick,	CK_343X),
 	CLK(NULL,	"secure_32k_fck", &secure_32k_fck, CK_343X),
 	CLK(NULL,	"gpt12_fck",	&gpt12_fck,	CK_343X),
-	CLK(NULL,	"wdt1_fck",	&wdt1_fck,	CK_343X),
+	CLK("omap_wdt.0", "fck",	&wdt1_fck,	CK_343X),
 };
 
 /* CM_AUTOIDLE_PLL*.AUTO_* bit values */
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c
index a64b692..6abef3f 100644
--- a/arch/arm/plat-omap/devices.c
+++ b/arch/arm/plat-omap/devices.c
@@ -288,42 +288,101 @@ static inline void omap_init_uwire(void) {}
 
 #if	defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE)
 
-static struct resource wdt_resources[] = {
+#define	OMAP44XX_WDT2_BASE	0x4a314000
+#define	OMAP34XX_WDT1_BASE	0x4830c000
+#define	OMAP34XX_WDT2_BASE	0x48314000
+#define	OMAP34XX_WDT3_BASE	0x49030000
+#define	OMAP2430_WDT_BASE	0x49016000
+#define	OMAP2420_WDT_BASE	0x48022000
+#define	OMAP16XX_WDT_BASE	0xfffeb000
+
+static struct resource secure_wdt_resources[] = {
 	{
-		.flags		= IORESOURCE_MEM,
+		.flags = IORESOURCE_MEM,
 	},
 };
 
-static struct platform_device omap_wdt_device = {
-	.name	   = "omap_wdt",
-	.id	     = -1,
-	.num_resources	= ARRAY_SIZE(wdt_resources),
-	.resource	= wdt_resources,
+static struct resource mpu_wdt_resources[] = {
+	{
+		.flags = IORESOURCE_MEM,
+	},
+};
+
+static struct resource iva2_wdt_resources[] = {
+	{
+		.flags = IORESOURCE_MEM,
+	},
+};
+
+static struct platform_device omap_secure_wdt_device = {
+	.name = "omap_wdt",
+	.id = 0,
+	.num_resources = ARRAY_SIZE(secure_wdt_resources),
+	.resource = secure_wdt_resources,
+	.dev = {
+		.platform_data = "watchdog_secure",
+	},
+};
+
+static struct platform_device omap_mpu_wdt_device = {
+	.name = "omap_wdt",
+	.id = 1,
+	.num_resources = ARRAY_SIZE(mpu_wdt_resources),
+	.resource = mpu_wdt_resources,
+	.dev = {
+		.platform_data = "watchdog",
+	},
+};
+
+static struct platform_device omap_iva2_wdt_device = {
+	.name = "omap_wdt",
+	.id = 2,
+	.num_resources = ARRAY_SIZE(iva2_wdt_resources),
+	.resource = iva2_wdt_resources,
+	.dev = {
+		.platform_data = "watchdog_iva2",
+	},
 };
 
 static void omap_init_wdt(void)
 {
 	if (cpu_is_omap16xx())
-		wdt_resources[0].start = 0xfffeb000;
+		mpu_wdt_resources[0].start = OMAP16XX_WDT_BASE;
 	else if (cpu_is_omap2420())
-		wdt_resources[0].start = 0x48022000; /* WDT2 */
+		mpu_wdt_resources[0].start = OMAP2420_WDT_BASE;
 	else if (cpu_is_omap2430())
-		wdt_resources[0].start = 0x49016000; /* WDT2 */
-	else if (cpu_is_omap343x())
-		wdt_resources[0].start = 0x48314000; /* WDT2 */
-	else if (cpu_is_omap44xx())
-		wdt_resources[0].start = 0x4a314000;
+		mpu_wdt_resources[0].start = OMAP2430_WDT_BASE;
+	else if (cpu_is_omap343x()) {
+		secure_wdt_resources[0].start = OMAP34XX_WDT1_BASE;
+		secure_wdt_resources[0].end = secure_wdt_resources[0].start
+			+ 0x4f;
+		mpu_wdt_resources[0].start = OMAP34XX_WDT2_BASE;
+		iva2_wdt_resources[0].start = OMAP34XX_WDT3_BASE;
+		iva2_wdt_resources[0].end = iva2_wdt_resources[0].start + 0x4f;
+	} else if (cpu_is_omap44xx())
+		mpu_wdt_resources[0].start = OMAP44XX_WDT2_BASE;
 	else
 		return;
 
-	wdt_resources[0].end = wdt_resources[0].start + 0x4f;
+	mpu_wdt_resources[0].end = mpu_wdt_resources[0].start + 0x4f;
+
+	/* MPU WDT present across omap family */
+	(void) platform_device_register(&omap_mpu_wdt_device);
 
-	(void) platform_device_register(&omap_wdt_device);
+	if (cpu_is_omap34xx()) {
+		(void) platform_device_register(&omap_iva2_wdt_device);
+		if (omap_type() == OMAP2_DEVICE_TYPE_SEC
+			|| omap_type() == OMAP2_DEVICE_TYPE_EMU)
+			(void)
+			platform_device_register(&omap_secure_wdt_device);
+	}
 }
+
 #else
 static inline void omap_init_wdt(void) {}
 #endif
 
+
 /*-------------------------------------------------------------------------*/
 
 #if defined(CONFIG_HW_RANDOM_OMAP) || defined(CONFIG_HW_RANDOM_OMAP_MODULE)
-- 
1.5.4.3


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

* [PATCH 2/2] watchdog:OMAP3:Enable support for IVA2 and SECURE
  2009-07-09 18:04 ` [PATCH 1/2] watchdog:OMAP3:Register IVA and SECURE WDT, make clks ac Ulrik Bech Hald
@ 2009-07-09 18:04   ` Ulrik Bech Hald
  0 siblings, 0 replies; 5+ messages in thread
From: Ulrik Bech Hald @ 2009-07-09 18:04 UTC (permalink / raw)
  To: wim; +Cc: linux-omap, Ulrik Bech Hald

This patch adds support for IVA2 and SECURE WDTs in the omap_wdt
driver for omap34xx family. SECURE will be available as
/dev/watchdog_secure on HS/EMU devices and IVA2 will be available
as /dev/watchdog_iva2. MPU will still be available as /dev/watchdog

Tested on Zoom1 OMAP3 platform

Signed-off-by: Ulrik Bech Hald <ubh@ti.com>
Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 drivers/watchdog/omap_wdt.c |   34 ++++++++++++++++++++++++++--------
 1 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
index 3ed571a..12409fe 100644
--- a/drivers/watchdog/omap_wdt.c
+++ b/drivers/watchdog/omap_wdt.c
@@ -47,7 +47,9 @@
 
 #include "omap_wdt.h"
 
-static struct platform_device *omap_wdt_dev;
+#define NUM_WDTS	3
+
+static struct platform_device *omap_wdt_dev[NUM_WDTS];
 
 static unsigned timer_margin;
 module_param(timer_margin, uint, 0);
@@ -139,8 +141,23 @@ static void omap_wdt_set_timeout(struct omap_wdt_dev *wdev)
  */
 static int omap_wdt_open(struct inode *inode, struct file *file)
 {
-	struct omap_wdt_dev *wdev = platform_get_drvdata(omap_wdt_dev);
-	void __iomem *base = wdev->base;
+	struct omap_wdt_dev *wdev = NULL;
+	void __iomem *base;
+
+	/* Find match between device node and wdt device */
+	int i;
+	for (i = 0; i < NUM_WDTS; i++) {
+		if (omap_wdt_dev[i]) {
+			wdev = platform_get_drvdata(omap_wdt_dev[i]);
+			if (iminor(inode) == wdev->omap_wdt_miscdev.minor)
+				break;
+		}
+	}
+
+	if (!wdev)
+		return -ENODEV;
+
+	base = wdev->base;
 
 	if (test_and_set_bit(1, (unsigned long *)&(wdev->omap_wdt_users)))
 		return -EBUSY;
@@ -272,7 +289,7 @@ static int __devinit omap_wdt_probe(struct platform_device *pdev)
 		goto err_get_resource;
 	}
 
-	if (omap_wdt_dev) {
+	if (omap_wdt_dev[pdev->id]) {
 		ret = -EBUSY;
 		goto err_busy;
 	}
@@ -321,9 +338,9 @@ static int __devinit omap_wdt_probe(struct platform_device *pdev)
 	omap_wdt_adjust_timeout(timer_margin);
 
 	wdev->omap_wdt_miscdev.parent = &pdev->dev;
-	wdev->omap_wdt_miscdev.minor = WATCHDOG_MINOR;
-	wdev->omap_wdt_miscdev.name = "watchdog";
+	wdev->omap_wdt_miscdev.minor = MISC_DYNAMIC_MINOR;
 	wdev->omap_wdt_miscdev.fops = &omap_wdt_fops;
+	wdev->omap_wdt_miscdev.name = (char *) pdev->dev.platform_data;
 
 	ret = misc_register(&(wdev->omap_wdt_miscdev));
 	if (ret)
@@ -339,7 +356,8 @@ static int __devinit omap_wdt_probe(struct platform_device *pdev)
 	clk_disable(wdev->ick);
 	clk_disable(wdev->fck);
 
-	omap_wdt_dev = pdev;
+	/* keep track of the wdt platform devices in local device array */
+	omap_wdt_dev[pdev->id] = pdev;
 
 	return 0;
 
@@ -391,7 +409,7 @@ static int __devexit omap_wdt_remove(struct platform_device *pdev)
 	iounmap(wdev->base);
 
 	kfree(wdev);
-	omap_wdt_dev = NULL;
+	omap_wdt_dev[pdev->id] = NULL;
 
 	return 0;
 }
-- 
1.5.4.3


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

* Re: [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs
  2009-07-09 18:04 [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs Ulrik Bech Hald
  2009-07-09 18:04 ` [PATCH 1/2] watchdog:OMAP3:Register IVA and SECURE WDT, make clks ac Ulrik Bech Hald
@ 2009-07-22 17:47 ` Wim Van Sebroeck
  1 sibling, 0 replies; 5+ messages in thread
From: Wim Van Sebroeck @ 2009-07-22 17:47 UTC (permalink / raw)
  To: Ulrik Bech Hald; +Cc: Alan Cox, linux-omap

Hi Ulrik,

> This patch series enables support for IVA2 and SECURE
> WDTs, available on omap34xx.
> The WDTs will be accessible (when present on device) through:
> MPU:	/dev/watchdog
> SECURE:	/dev/watchdog_secure
> IVA2:	/dev/watchdog_iva2
> 
> Tested on Zoom1 OMAP3 platform, compile-tested for OMAP2
> Signed-off-by: Ulrik Bech Hald <ubh@ti.com>
> Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com>
> --- 
>  arch/arm/mach-omap1/clock.c     |    6 +-
>  arch/arm/mach-omap2/clock24xx.c |    4 -
>  arch/arm/mach-omap2/clock34xx.c |   12 ++---
>  arch/arm/plat-omap/devices.c    |   91 ++++++++++++++++++++++++++++++++--------
>  drivers/watchdog/omap_wdt.c     |   34 +++++++++++---
>  5 files changed, 112 insertions(+), 35 deletions(-)

Thanks for sending in this patch, but I will put the patch aside for some time.
The reason for this is that:
1) we need to have the new watchdog core infrastructure going in for 2.6.32.
This new core means that we won't reproduce the same code over and over again.
(Both Alan and myself are working on it).
2) We need a thorough discussion first on how we will support multiple watchdog
devices and what the best interface is. I'm not convinced dat the /dev/watchdog*
solution is the right way to go. I think a sysfs interface is suited more. This
sysfs interface would be "version 2" of the new core.

Sorry for the inconvenience, we will get back on this.
Wim.


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

* [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs
@ 2009-06-15 21:11 Ulrik Bech Hald
  0 siblings, 0 replies; 5+ messages in thread
From: Ulrik Bech Hald @ 2009-06-15 21:11 UTC (permalink / raw)
  To: linux-omap; +Cc: Ulrik Bech Hald

This patch series enables support for IVA2 and SECURE
WDTs, available on omap34xx.
The WDTs will be accessible (when present on device) through:
MPU:	/dev/watchdog
SECURE:	/dev/watchdog_secure
IVA:	/dev/watchdog_iva2

Signed-off-by: Ulrik Bech Hald <ubh@ti.com>
--- 
This patch set has a dependency on:
[PATCH 1/2] OMAP2/3: SoC IDs: add omap_type() for determining GP/EMU/HS
[PATCH 1/1] watchdog: OMAP fixes: enable clock in probe, trigger timer reload

 arch/arm/mach-omap2/clock34xx.c |   12 ++---
 arch/arm/plat-omap/devices.c    |   81 ++++++++++++++++++++++++++++++++--------
 drivers/watchdog/omap_wdt.c     |   51 +++++++++++++++++++++----
 3 files changed, 114 insertions(+), 30 deletions(-)




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

end of thread, other threads:[~2009-07-22 17:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-07-09 18:04 [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs Ulrik Bech Hald
2009-07-09 18:04 ` [PATCH 1/2] watchdog:OMAP3:Register IVA and SECURE WDT, make clks ac Ulrik Bech Hald
2009-07-09 18:04   ` [PATCH 2/2] watchdog:OMAP3:Enable support for IVA2 and SECURE Ulrik Bech Hald
2009-07-22 17:47 ` [PATCH 0/2] watchdog:OMAP3:Add support for IVA2, SECURE WDTs Wim Van Sebroeck
  -- strict thread matches above, loose matches on Subject: below --
2009-06-15 21:11 Ulrik Bech Hald

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