* [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way
@ 2010-08-16 13:36 Charulatha V
2010-08-16 13:36 ` [PATCH 1/5 v3] OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3 Charulatha V
2010-08-26 22:54 ` [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way Kevin Hilman
0 siblings, 2 replies; 10+ messages in thread
From: Charulatha V @ 2010-08-16 13:36 UTC (permalink / raw)
To: linux-omap; +Cc: wim, khilman, paul, b-cousson, rnayak, p-basak2, Charulatha V
This patch series makes OMAP2PLUS Watchdog Timer Module implemented
in HWMOD FW way. It also implements Watchdog timer driver to
use the runtime PM layer.
This patch series is created on "origin/pm-wip/hwmods-omap4".
This patch series is tested on OMAP3430 SDP and OMAP4430 SDP.
It would be of great help if someone could test the same on
OMAP1 and OMAP2 boards.
Version History:
---------------
Vesrion v3:
Fix Minor comments like renaming omap1 watchdog structures
with an omap1_ prefix
Version v2:
Rebase to latest kernel
Some of the v2 links:
http://www.spinics.net/lists/linux-omap/msg34741.html
http://www.spinics.net/lists/linux-omap/msg34673.html
Version v1:
Initial series
Some of the v1 links:
http://www.spinics.net/lists/linux-omap/msg30628.html
http://www.spinics.net/lists/linux-omap/msg30625.html
Benoit Cousson (1):
OMAP4 HWMOD: Add watchdog hwmods.
Charulatha V (4):
OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3
OMAP2420: WDT: Add watchdog timer HWMOD data for OMAP2420
OMAP2430: WDT: Add watchdog timer HWMOD data for OMAP2430
OMAP2PLUS: WDT: Conversion to runtime PM
arch/arm/mach-omap2/omap_hwmod_2420_data.c | 59 ++++++++++++++++++++++++
arch/arm/mach-omap2/omap_hwmod_2430_data.c | 59 ++++++++++++++++++++++++
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 61 +++++++++++++++++++++++++
arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 68 ++++++++++++++++++++++++++++
arch/arm/mach-omap2/prcm-common.h | 4 ++
arch/arm/plat-omap/devices.c | 64 ++++++++++++++++++--------
drivers/watchdog/omap_wdt.c | 43 +++--------------
7 files changed, 303 insertions(+), 55 deletions(-)
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/5 v3] OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3
2010-08-16 13:36 [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way Charulatha V
@ 2010-08-16 13:36 ` Charulatha V
2010-08-16 13:36 ` [PATCH 2/5 v3] OMAP2420: WDT: Add watchdog timer HWMOD data for OMAP2420 Charulatha V
2010-08-26 22:54 ` [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way Kevin Hilman
1 sibling, 1 reply; 10+ messages in thread
From: Charulatha V @ 2010-08-16 13:36 UTC (permalink / raw)
To: linux-omap; +Cc: wim, khilman, paul, b-cousson, rnayak, p-basak2, Charulatha V
Add hwmod structures for Watchdog module on OMAP3 HWMOD database
Signed-off-by: Charulatha V <charu@ti.com>
Signed-off-by: Basak, Partha <p-basak2@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 61 ++++++++++++++++++++++++++++
arch/arm/mach-omap2/prcm-common.h | 4 ++
2 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 5d8eb58..a9812a8 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -36,6 +36,7 @@ static struct omap_hwmod omap3xxx_iva_hwmod;
static struct omap_hwmod omap3xxx_l3_main_hwmod;
static struct omap_hwmod omap3xxx_l4_core_hwmod;
static struct omap_hwmod omap3xxx_l4_per_hwmod;
+static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
/* L3 -> L4_CORE interface */
static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
@@ -197,6 +198,65 @@ static struct omap_hwmod omap3xxx_iva_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
};
+/* WDTIMER2 <- L4_WKUP interface */
+static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
+ {
+ .pa_start = 0x48314000,
+ .pa_end = 0x4831407f,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
+ .master = &omap3xxx_l4_wkup_hwmod,
+ .slave = &omap3xxx_wd_timer2_hwmod,
+ .clk = "wdt2_ick",
+ .addr = omap3xxx_wd_timer2_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* WDTIMER common */
+
+static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
+ SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
+ SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
+ .name = "wd_timer",
+ .sysc = &omap3xxx_wd_timer_sysc,
+};
+
+/* WDTIMER2 */
+static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = {
+ &omap3xxx_l4_wkup__wd_timer2,
+};
+
+static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
+ .name = "wd_timer2",
+ .class = &omap3xxx_wd_timer_hwmod_class,
+ .main_clk = "wdt2_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_WDT2_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430_EN_WDT2_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_wd_timer2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
&omap3xxx_l3_main_hwmod,
&omap3xxx_l4_core_hwmod,
@@ -204,6 +264,7 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
&omap3xxx_l4_wkup_hwmod,
&omap3xxx_mpu_hwmod,
&omap3xxx_iva_hwmod,
+ &omap3xxx_wd_timer2_hwmod,
NULL,
};
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h
index 995b7ed..e190c64 100644
--- a/arch/arm/mach-omap2/prcm-common.h
+++ b/arch/arm/mach-omap2/prcm-common.h
@@ -237,6 +237,8 @@
#define OMAP24XX_ST_USB_MASK (1 << 0)
/* CM_FCLKEN_WKUP, CM_ICLKEN_WKUP, PM_WKEN_WKUP shared bits */
+#define OMAP24XX_EN_WDT2_SHIFT 3
+#define OMAP24XX_EN_WDT2_MASK (1 << 3)
#define OMAP24XX_EN_GPIOS_SHIFT 2
#define OMAP24XX_EN_GPIOS_MASK (1 << 2)
#define OMAP24XX_EN_GPT1_SHIFT 0
@@ -344,6 +346,8 @@
#define OMAP3430_ST_D2D_MASK (1 << 3)
/* CM_FCLKEN_WKUP, CM_ICLKEN_WKUP, PM_WKEN_WKUP shared bits */
+#define OMAP3430_EN_WDT2_SHIFT 5
+#define OMAP3430_EN_WDT2_MASK (1 << 5)
#define OMAP3430_EN_GPIO1_MASK (1 << 3)
#define OMAP3430_EN_GPIO1_SHIFT 3
#define OMAP3430_EN_GPT12_MASK (1 << 1)
--
1.6.3.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/5 v3] OMAP2420: WDT: Add watchdog timer HWMOD data for OMAP2420
2010-08-16 13:36 ` [PATCH 1/5 v3] OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3 Charulatha V
@ 2010-08-16 13:36 ` Charulatha V
2010-08-16 13:36 ` [PATCH 3/5 v3] OMAP2430: WDT: Add watchdog timer HWMOD data for OMAP2430 Charulatha V
0 siblings, 1 reply; 10+ messages in thread
From: Charulatha V @ 2010-08-16 13:36 UTC (permalink / raw)
To: linux-omap; +Cc: wim, khilman, paul, b-cousson, rnayak, p-basak2, Charulatha V
Add hwmod structures for Watchdog module on OMAP2420
HWMOD database
Signed-off-by: Charulatha V <charu@ti.com>
Signed-off-by: Basak, Partha <p-basak2@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_2420_data.c | 59 ++++++++++++++++++++++++++++
1 files changed, 59 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
index 3cc768e..73a516e 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -33,6 +33,7 @@ static struct omap_hwmod omap2420_mpu_hwmod;
static struct omap_hwmod omap2420_iva_hwmod;
static struct omap_hwmod omap2420_l3_main_hwmod;
static struct omap_hwmod omap2420_l4_core_hwmod;
+static struct omap_hwmod omap2420_wd_timer2_hwmod;
/* L3 -> L4_CORE interface */
static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
@@ -165,12 +166,70 @@ static struct omap_hwmod omap2420_iva_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
};
+/* WDTIMER2 <- L4_WKUP interface */
+static struct omap_hwmod_addr_space omap2420_wd_timer2_addrs[] = {
+ {
+ .pa_start = 0x48022000,
+ .pa_end = 0x4802207f,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = {
+ .master = &omap2420_l4_wkup_hwmod,
+ .slave = &omap2420_wd_timer2_hwmod,
+ .clk = "mpu_wdt_ick",
+ .addr = omap2420_wd_timer2_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2420_wd_timer2_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* WDTIMER common */
+
+static struct omap_hwmod_class_sysconfig omap2420_wd_timer_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
+ SYSC_HAS_AUTOIDLE),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2420_wd_timer_hwmod_class = {
+ .name = "wd_timer",
+ .sysc = &omap2420_wd_timer_sysc,
+};
+
+/* WDTIMER2 */
+static struct omap_hwmod_ocp_if *omap2420_wd_timer2_slaves[] = {
+ &omap2420_l4_wkup__wd_timer2,
+};
+
+static struct omap_hwmod omap2420_wd_timer2_hwmod = {
+ .name = "wd_timer2",
+ .class = &omap2420_wd_timer_hwmod_class,
+ .main_clk = "mpu_wdt_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_WDT2_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_EN_WDT2_SHIFT,
+ },
+ },
+ .slaves = omap2420_wd_timer2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_wd_timer2_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+};
+
static __initdata struct omap_hwmod *omap2420_hwmods[] = {
&omap2420_l3_main_hwmod,
&omap2420_l4_core_hwmod,
&omap2420_l4_wkup_hwmod,
&omap2420_mpu_hwmod,
&omap2420_iva_hwmod,
+ &omap2420_wd_timer2_hwmod,
NULL,
};
--
1.6.3.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/5 v3] OMAP2430: WDT: Add watchdog timer HWMOD data for OMAP2430
2010-08-16 13:36 ` [PATCH 2/5 v3] OMAP2420: WDT: Add watchdog timer HWMOD data for OMAP2420 Charulatha V
@ 2010-08-16 13:36 ` Charulatha V
2010-08-16 13:36 ` [PATCH 4/5 v3] OMAP4 HWMOD: Add watchdog hwmods Charulatha V
0 siblings, 1 reply; 10+ messages in thread
From: Charulatha V @ 2010-08-16 13:36 UTC (permalink / raw)
To: linux-omap; +Cc: wim, khilman, paul, b-cousson, rnayak, p-basak2, Charulatha V
Add hwmod structures for Watchdog module on OMAP2430
HWMOD Databse
Signed-off-by: Charulatha V <charu@ti.com>
Signed-off-by: Basak, Partha <p-basak2@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_2430_data.c | 59 ++++++++++++++++++++++++++++
1 files changed, 59 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 4526628..f74fca0 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -33,6 +33,7 @@ static struct omap_hwmod omap2430_mpu_hwmod;
static struct omap_hwmod omap2430_iva_hwmod;
static struct omap_hwmod omap2430_l3_main_hwmod;
static struct omap_hwmod omap2430_l4_core_hwmod;
+static struct omap_hwmod omap2430_wd_timer2_hwmod;
/* L3 -> L4_CORE interface */
static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = {
@@ -165,12 +166,70 @@ static struct omap_hwmod omap2430_iva_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
};
+/* WDTIMER2 <- L4_WKUP interface */
+static struct omap_hwmod_addr_space omap2430_wd_timer2_addrs[] = {
+ {
+ .pa_start = 0x49016000,
+ .pa_end = 0x4901607f,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = {
+ .master = &omap2430_l4_wkup_hwmod,
+ .slave = &omap2430_wd_timer2_hwmod,
+ .clk = "mpu_wdt_ick",
+ .addr = omap2430_wd_timer2_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2430_wd_timer2_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* WDTIMER common */
+
+static struct omap_hwmod_class_sysconfig omap2430_wd_timer_sysc = {
+ .rev_offs = 0x0,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
+ SYSC_HAS_AUTOIDLE),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = {
+ .name = "wd_timer",
+ .sysc = &omap2430_wd_timer_sysc,
+};
+
+/* WDTIMER2 */
+static struct omap_hwmod_ocp_if *omap2430_wd_timer2_slaves[] = {
+ &omap2430_l4_wkup__wd_timer2,
+};
+
+static struct omap_hwmod omap2430_wd_timer2_hwmod = {
+ .name = "wd_timer2",
+ .class = &omap2430_wd_timer_hwmod_class,
+ .main_clk = "mpu_wdt_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_WDT2_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_EN_WDT2_SHIFT,
+ },
+ },
+ .slaves = omap2430_wd_timer2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_wd_timer2_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+};
+
static __initdata struct omap_hwmod *omap2430_hwmods[] = {
&omap2430_l3_main_hwmod,
&omap2430_l4_core_hwmod,
&omap2430_l4_wkup_hwmod,
&omap2430_mpu_hwmod,
&omap2430_iva_hwmod,
+ &omap2430_wd_timer2_hwmod,
NULL,
};
--
1.6.3.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/5 v3] OMAP4 HWMOD: Add watchdog hwmods.
2010-08-16 13:36 ` [PATCH 3/5 v3] OMAP2430: WDT: Add watchdog timer HWMOD data for OMAP2430 Charulatha V
@ 2010-08-16 13:36 ` Charulatha V
2010-08-16 13:36 ` [PATCH 5/5 v3] OMAP2PLUS: WDT: Conversion to runtime PM Charulatha V
0 siblings, 1 reply; 10+ messages in thread
From: Charulatha V @ 2010-08-16 13:36 UTC (permalink / raw)
To: linux-omap; +Cc: wim, khilman, paul, b-cousson, rnayak, p-basak2, Charulatha V
From: Benoit Cousson <b-cousson@ti.com>
Update omap4 hwmod file with watchdog info.
This patch is extracted from the below patch sent by Benoit
OMAP4: hwmod: Add partial hwmod support for OMAP4430 ES1.0
https://patchwork.kernel.org/patch/99052/
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Signed-off-by: Charulatha V <charu@ti.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
Cc: Rajendra Nayak <rnayak@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 68 ++++++++++++++++++++++++++++
1 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index e20b0ee..06851f7 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -452,6 +452,72 @@ static struct omap_hwmod omap44xx_mpu_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
};
+/*
+ * 'wd_timer' class
+ * 32-bit watchdog upward counter that generates a pulse on the reset pin on
+ * overflow condition
+ */
+
+static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
+ SYSC_HAS_SOFTRESET),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
+ .name = "wd_timer",
+ .sysc = &omap44xx_wd_timer_sysc,
+};
+
+/* wd_timer2 */
+static struct omap_hwmod omap44xx_wd_timer2_hwmod;
+static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
+ { .irq = 80 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
+ {
+ .pa_start = 0x4a314000,
+ .pa_end = 0x4a31407f,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_wkup -> wd_timer2 */
+static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
+ .master = &omap44xx_l4_wkup_hwmod,
+ .slave = &omap44xx_wd_timer2_hwmod,
+ .clk = "l4_wkup_clk_mux_ck",
+ .addr = omap44xx_wd_timer2_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer2_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* wd_timer2 slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
+ &omap44xx_l4_wkup__wd_timer2,
+};
+
+static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
+ .name = "wd_timer2",
+ .class = &omap44xx_wd_timer_hwmod_class,
+ .mpu_irqs = omap44xx_wd_timer2_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer2_irqs),
+ .main_clk = "wd_timer2_fck",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
+ },
+ },
+ .slaves = omap44xx_wd_timer2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
/* dmm class */
&omap44xx_dmm_hwmod,
@@ -472,6 +538,8 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
/* mpu class */
&omap44xx_mpu_hwmod,
+ /* wd_timer class */
+ &omap44xx_wd_timer2_hwmod,
NULL,
};
--
1.6.3.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/5 v3] OMAP2PLUS: WDT: Conversion to runtime PM
2010-08-16 13:36 ` [PATCH 4/5 v3] OMAP4 HWMOD: Add watchdog hwmods Charulatha V
@ 2010-08-16 13:36 ` Charulatha V
2010-08-26 23:03 ` Kevin Hilman
0 siblings, 1 reply; 10+ messages in thread
From: Charulatha V @ 2010-08-16 13:36 UTC (permalink / raw)
To: linux-omap; +Cc: wim, khilman, paul, b-cousson, rnayak, p-basak2, Charulatha V
This patch converts the OMAP Watchdog timer driver to
get adapted to HWMOD FW and to use the runtime PM APIs.
Signed-off-by: Charulatha V <charu@ti.com>
Signed-off-by: Basak, Partha <p-basak2@ti.com>
---
arch/arm/plat-omap/devices.c | 64 ++++++++++++++++++++++++++++-------------
drivers/watchdog/omap_wdt.c | 43 +++++-----------------------
2 files changed, 52 insertions(+), 55 deletions(-)
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c
index d1920be..6885f4f 100644
--- a/arch/arm/plat-omap/devices.c
+++ b/arch/arm/plat-omap/devices.c
@@ -15,6 +15,7 @@
#include <linux/platform_device.h>
#include <linux/io.h>
#include <linux/slab.h>
+#include <linux/err.h>
#include <mach/hardware.h>
#include <asm/mach-types.h>
@@ -28,6 +29,8 @@
#include <plat/menelaus.h>
#include <plat/mcbsp.h>
#include <plat/omap44xx.h>
+#include <plat/omap_hwmod.h>
+#include <plat/omap_device.h>
/*-------------------------------------------------------------------------*/
@@ -236,37 +239,58 @@ static inline void omap_init_uwire(void) {}
#if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE)
-static struct resource wdt_resources[] = {
+struct omap_device_pm_latency omap2_wdt_latency[] = {
+ [0] = {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ },
+};
+
+static void omap2_init_wdt(void)
+{
+ int id = -1;
+ struct omap_device *od;
+ struct omap_hwmod *oh;
+ char *oh_name = "wd_timer2";
+ char *name = "omap_wdt";
+
+ oh = omap_hwmod_lookup(oh_name);
+ if (!oh) {
+ pr_err("Could not look up %s\n", oh_name);
+ return;
+ }
+
+ od = omap_device_build(name, id, oh, NULL, 0,
+ omap2_wdt_latency,
+ ARRAY_SIZE(omap2_wdt_latency), 0);
+ WARN(IS_ERR(od), "Cant build omap_device for %s:%s.\n",
+ name, oh->name);
+ return;
+}
+
+static struct resource omap1_wdt_resources[] = {
{
+ .start = 0xfffeb000,
+ .end = 0xfffeb07F,
.flags = IORESOURCE_MEM,
},
};
-static struct platform_device omap_wdt_device = {
+static struct platform_device omap1_wdt_device = {
.name = "omap_wdt",
.id = -1,
- .num_resources = ARRAY_SIZE(wdt_resources),
- .resource = wdt_resources,
+ .num_resources = ARRAY_SIZE(omap1_wdt_resources),
+ .resource = omap1_wdt_resources,
};
static void omap_init_wdt(void)
{
- if (cpu_is_omap16xx())
- wdt_resources[0].start = 0xfffeb000;
- else if (cpu_is_omap2420())
- wdt_resources[0].start = 0x48022000; /* WDT2 */
- 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;
- else
- return;
-
- wdt_resources[0].end = wdt_resources[0].start + 0x4f;
-
- (void) platform_device_register(&omap_wdt_device);
+ if (cpu_class_is_omap2())
+ omap2_init_wdt();
+ else if (cpu_is_omap16xx())
+ (void) platform_device_register(&omap1_wdt_device);
+ return;
}
#else
static inline void omap_init_wdt(void) {}
diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
index 76b58ab..7645ca3 100644
--- a/drivers/watchdog/omap_wdt.c
+++ b/drivers/watchdog/omap_wdt.c
@@ -38,13 +38,14 @@
#include <linux/err.h>
#include <linux/platform_device.h>
#include <linux/moduleparam.h>
-#include <linux/clk.h>
#include <linux/bitops.h>
#include <linux/io.h>
#include <linux/uaccess.h>
#include <linux/slab.h>
+#include <linux/pm_runtime.h>
#include <mach/hardware.h>
#include <plat/prcm.h>
+#include <plat/omap_device.h>
#include "omap_wdt.h"
@@ -61,8 +62,6 @@ struct omap_wdt_dev {
void __iomem *base; /* physical */
struct device *dev;
int omap_wdt_users;
- struct clk *ick;
- struct clk *fck;
struct resource *mem;
struct miscdevice omap_wdt_miscdev;
};
@@ -146,8 +145,7 @@ static int omap_wdt_open(struct inode *inode, struct file *file)
if (test_and_set_bit(1, (unsigned long *)&(wdev->omap_wdt_users)))
return -EBUSY;
- clk_enable(wdev->ick); /* Enable the interface clock */
- clk_enable(wdev->fck); /* Enable the functional clock */
+ pm_runtime_get_sync(wdev->dev);
/* initialize prescaler */
while (__raw_readl(base + OMAP_WATCHDOG_WPS) & 0x01)
@@ -177,8 +175,7 @@ static int omap_wdt_release(struct inode *inode, struct file *file)
omap_wdt_disable(wdev);
- clk_disable(wdev->ick);
- clk_disable(wdev->fck);
+ pm_runtime_put_sync(wdev->dev);
#else
printk(KERN_CRIT "omap_wdt: Unexpected close, not stopping!\n");
#endif
@@ -292,19 +289,7 @@ static int __devinit omap_wdt_probe(struct platform_device *pdev)
wdev->omap_wdt_users = 0;
wdev->mem = mem;
-
- wdev->ick = clk_get(&pdev->dev, "ick");
- if (IS_ERR(wdev->ick)) {
- ret = PTR_ERR(wdev->ick);
- wdev->ick = NULL;
- goto err_clk;
- }
- wdev->fck = clk_get(&pdev->dev, "fck");
- if (IS_ERR(wdev->fck)) {
- ret = PTR_ERR(wdev->fck);
- wdev->fck = NULL;
- goto err_clk;
- }
+ wdev->dev = &pdev->dev;
wdev->base = ioremap(res->start, resource_size(res));
if (!wdev->base) {
@@ -314,8 +299,8 @@ static int __devinit omap_wdt_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, wdev);
- clk_enable(wdev->ick);
- clk_enable(wdev->fck);
+ pm_runtime_enable(wdev->dev);
+ pm_runtime_get_sync(wdev->dev);
omap_wdt_disable(wdev);
omap_wdt_adjust_timeout(timer_margin);
@@ -333,11 +318,7 @@ static int __devinit omap_wdt_probe(struct platform_device *pdev)
__raw_readl(wdev->base + OMAP_WATCHDOG_REV) & 0xFF,
timer_margin);
- /* autogate OCP interface clock */
- __raw_writel(0x01, wdev->base + OMAP_WATCHDOG_SYS_CONFIG);
-
- clk_disable(wdev->ick);
- clk_disable(wdev->fck);
+ pm_runtime_put_sync(wdev->dev);
omap_wdt_dev = pdev;
@@ -349,12 +330,6 @@ err_misc:
err_ioremap:
wdev->base = NULL;
-
-err_clk:
- if (wdev->ick)
- clk_put(wdev->ick);
- if (wdev->fck)
- clk_put(wdev->fck);
kfree(wdev);
err_kzalloc:
@@ -386,8 +361,6 @@ static int __devexit omap_wdt_remove(struct platform_device *pdev)
release_mem_region(res->start, resource_size(res));
platform_set_drvdata(pdev, NULL);
- clk_put(wdev->ick);
- clk_put(wdev->fck);
iounmap(wdev->base);
kfree(wdev);
--
1.6.3.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way
2010-08-16 13:36 [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way Charulatha V
2010-08-16 13:36 ` [PATCH 1/5 v3] OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3 Charulatha V
@ 2010-08-26 22:54 ` Kevin Hilman
2010-08-27 14:38 ` Varadarajan, Charulatha
1 sibling, 1 reply; 10+ messages in thread
From: Kevin Hilman @ 2010-08-26 22:54 UTC (permalink / raw)
To: Charulatha V; +Cc: linux-omap, wim, paul, b-cousson, rnayak, p-basak2
Charulatha V <charu@ti.com> writes:
> This patch series makes OMAP2PLUS Watchdog Timer Module implemented
> in HWMOD FW way. It also implements Watchdog timer driver to
> use the runtime PM layer.
minor nit: hwmod should not be capitalized, as it's not an acronym.
This common across the other conversions as well, so it's not unique to
you. You just got lucky and got picked on today. :)
> This patch series is created on "origin/pm-wip/hwmods-omap4".
>
> This patch series is tested on OMAP3430 SDP and OMAP4430 SDP.
> It would be of great help if someone could test the same on
> OMAP1 and OMAP2 boards.
At a bare minimum, this should be at least compile tested for OMAP1 &
OMAP2. Also, your team should have some OMAP2 hardware. Please boot
test there.
Kevin
> Version History:
> ---------------
> Vesrion v3:
> Fix Minor comments like renaming omap1 watchdog structures
> with an omap1_ prefix
>
> Version v2:
> Rebase to latest kernel
> Some of the v2 links:
> http://www.spinics.net/lists/linux-omap/msg34741.html
> http://www.spinics.net/lists/linux-omap/msg34673.html
>
> Version v1:
> Initial series
> Some of the v1 links:
> http://www.spinics.net/lists/linux-omap/msg30628.html
> http://www.spinics.net/lists/linux-omap/msg30625.html
>
> Benoit Cousson (1):
> OMAP4 HWMOD: Add watchdog hwmods.
>
> Charulatha V (4):
> OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3
> OMAP2420: WDT: Add watchdog timer HWMOD data for OMAP2420
> OMAP2430: WDT: Add watchdog timer HWMOD data for OMAP2430
> OMAP2PLUS: WDT: Conversion to runtime PM
>
> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 59 ++++++++++++++++++++++++
> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 59 ++++++++++++++++++++++++
> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 61 +++++++++++++++++++++++++
> arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 68 ++++++++++++++++++++++++++++
> arch/arm/mach-omap2/prcm-common.h | 4 ++
> arch/arm/plat-omap/devices.c | 64 ++++++++++++++++++--------
> drivers/watchdog/omap_wdt.c | 43 +++--------------
> 7 files changed, 303 insertions(+), 55 deletions(-)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 5/5 v3] OMAP2PLUS: WDT: Conversion to runtime PM
2010-08-16 13:36 ` [PATCH 5/5 v3] OMAP2PLUS: WDT: Conversion to runtime PM Charulatha V
@ 2010-08-26 23:03 ` Kevin Hilman
2010-08-27 14:39 ` Varadarajan, Charulatha
0 siblings, 1 reply; 10+ messages in thread
From: Kevin Hilman @ 2010-08-26 23:03 UTC (permalink / raw)
To: Charulatha V; +Cc: linux-omap, wim, paul, b-cousson, rnayak, p-basak2
Charulatha V <charu@ti.com> writes:
> This patch converts the OMAP Watchdog timer driver to
> get adapted to HWMOD FW and to use the runtime PM APIs.
Technically, the driver knows nothing about the HWMOD framework, as
that's an OMAP core implementation detail.
What's really happening here is two separate things:
1) conversion of driver to runtime PM instead of clock framework
2) convert platform_device/_data over to be omap_device-based
These should be done in two separate patches (and in that order.)
Other than that, the patch contents look good. Some minor comments below...
> Signed-off-by: Charulatha V <charu@ti.com>
> Signed-off-by: Basak, Partha <p-basak2@ti.com>
> ---
> arch/arm/plat-omap/devices.c | 64 ++++++++++++++++++++++++++++-------------
> drivers/watchdog/omap_wdt.c | 43 +++++-----------------------
> 2 files changed, 52 insertions(+), 55 deletions(-)
>
[...]
> diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
> index 76b58ab..7645ca3 100644
> --- a/drivers/watchdog/omap_wdt.c
> +++ b/drivers/watchdog/omap_wdt.c
> @@ -38,13 +38,14 @@
> #include <linux/err.h>
> #include <linux/platform_device.h>
> #include <linux/moduleparam.h>
> -#include <linux/clk.h>
> #include <linux/bitops.h>
> #include <linux/io.h>
> #include <linux/uaccess.h>
> #include <linux/slab.h>
> +#include <linux/pm_runtime.h>
> #include <mach/hardware.h>
> #include <plat/prcm.h>
> +#include <plat/omap_device.h>
This should not be needed in the driver, as there is no need for driver
to call omap_device API.
[...]
Kevin
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way
2010-08-26 22:54 ` [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way Kevin Hilman
@ 2010-08-27 14:38 ` Varadarajan, Charulatha
0 siblings, 0 replies; 10+ messages in thread
From: Varadarajan, Charulatha @ 2010-08-27 14:38 UTC (permalink / raw)
To: Kevin Hilman
Cc: linux-omap@vger.kernel.org, wim@iguana.be, paul@pwsan.com,
Cousson, Benoit, Nayak, Rajendra, Basak, Partha
> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@deeprootsystems.com]
> Sent: Friday, August 27, 2010 4:25 AM
> To: Varadarajan, Charulatha
> Cc: linux-omap@vger.kernel.org; wim@iguana.be; paul@pwsan.com; Cousson,
> Benoit; Nayak, Rajendra; Basak, Partha
> Subject: Re: [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way
>
> Charulatha V <charu@ti.com> writes:
>
> > This patch series makes OMAP2PLUS Watchdog Timer Module implemented
> > in HWMOD FW way. It also implements Watchdog timer driver to
> > use the runtime PM layer.
>
> minor nit: hwmod should not be capitalized, as it's not an acronym.
> This common across the other conversions as well, so it's not unique to
> you. You just got lucky and got picked on today. :)
Sure, will take care.
>
> > This patch series is created on "origin/pm-wip/hwmods-omap4".
> >
> > This patch series is tested on OMAP3430 SDP and OMAP4430 SDP.
> > It would be of great help if someone could test the same on
> > OMAP1 and OMAP2 boards.
>
> At a bare minimum, this should be at least compile tested for OMAP1 &
> OMAP2. Also, your team should have some OMAP2 hardware. Please boot
> test there.
Okay.
>
> Kevin
>
> > Version History:
> > ---------------
> > Vesrion v3:
> > Fix Minor comments like renaming omap1 watchdog structures
> > with an omap1_ prefix
> >
> > Version v2:
> > Rebase to latest kernel
> > Some of the v2 links:
> > http://www.spinics.net/lists/linux-omap/msg34741.html
> > http://www.spinics.net/lists/linux-omap/msg34673.html
> >
> > Version v1:
> > Initial series
> > Some of the v1 links:
> > http://www.spinics.net/lists/linux-omap/msg30628.html
> > http://www.spinics.net/lists/linux-omap/msg30625.html
> >
> > Benoit Cousson (1):
> > OMAP4 HWMOD: Add watchdog hwmods.
> >
> > Charulatha V (4):
> > OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3
> > OMAP2420: WDT: Add watchdog timer HWMOD data for OMAP2420
> > OMAP2430: WDT: Add watchdog timer HWMOD data for OMAP2430
> > OMAP2PLUS: WDT: Conversion to runtime PM
> >
> > arch/arm/mach-omap2/omap_hwmod_2420_data.c | 59
> ++++++++++++++++++++++++
> > arch/arm/mach-omap2/omap_hwmod_2430_data.c | 59
> ++++++++++++++++++++++++
> > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 61
> +++++++++++++++++++++++++
> > arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 68
> ++++++++++++++++++++++++++++
> > arch/arm/mach-omap2/prcm-common.h | 4 ++
> > arch/arm/plat-omap/devices.c | 64 ++++++++++++++++++---
> -----
> > drivers/watchdog/omap_wdt.c | 43 +++--------------
> > 7 files changed, 303 insertions(+), 55 deletions(-)
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 5/5 v3] OMAP2PLUS: WDT: Conversion to runtime PM
2010-08-26 23:03 ` Kevin Hilman
@ 2010-08-27 14:39 ` Varadarajan, Charulatha
0 siblings, 0 replies; 10+ messages in thread
From: Varadarajan, Charulatha @ 2010-08-27 14:39 UTC (permalink / raw)
To: Kevin Hilman
Cc: linux-omap@vger.kernel.org, wim@iguana.be, paul@pwsan.com,
Cousson, Benoit, Nayak, Rajendra, Basak, Partha
> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@deeprootsystems.com]
> Sent: Friday, August 27, 2010 4:34 AM
> To: Varadarajan, Charulatha
> Cc: linux-omap@vger.kernel.org; wim@iguana.be; paul@pwsan.com; Cousson,
> Benoit; Nayak, Rajendra; Basak, Partha
> Subject: Re: [PATCH 5/5 v3] OMAP2PLUS: WDT: Conversion to runtime PM
>
> Charulatha V <charu@ti.com> writes:
>
> > This patch converts the OMAP Watchdog timer driver to
> > get adapted to HWMOD FW and to use the runtime PM APIs.
>
> Technically, the driver knows nothing about the HWMOD framework, as
> that's an OMAP core implementation detail.
>
> What's really happening here is two separate things:
>
> 1) conversion of driver to runtime PM instead of clock framework
> 2) convert platform_device/_data over to be omap_device-based
>
> These should be done in two separate patches (and in that order.)
Okay.
>
> Other than that, the patch contents look good. Some minor comments
> below...
>
> > Signed-off-by: Charulatha V <charu@ti.com>
> > Signed-off-by: Basak, Partha <p-basak2@ti.com>
> > ---
> > arch/arm/plat-omap/devices.c | 64 ++++++++++++++++++++++++++++-------
> ------
> > drivers/watchdog/omap_wdt.c | 43 +++++-----------------------
> > 2 files changed, 52 insertions(+), 55 deletions(-)
> >
>
> [...]
>
> > diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
> > index 76b58ab..7645ca3 100644
> > --- a/drivers/watchdog/omap_wdt.c
> > +++ b/drivers/watchdog/omap_wdt.c
> > @@ -38,13 +38,14 @@
> > #include <linux/err.h>
> > #include <linux/platform_device.h>
> > #include <linux/moduleparam.h>
> > -#include <linux/clk.h>
> > #include <linux/bitops.h>
> > #include <linux/io.h>
> > #include <linux/uaccess.h>
> > #include <linux/slab.h>
> > +#include <linux/pm_runtime.h>
> > #include <mach/hardware.h>
> > #include <plat/prcm.h>
> > +#include <plat/omap_device.h>
>
> This should not be needed in the driver, as there is no need for driver
> to call omap_device API.
>
Yes, I will not include it.
> [...]
>
> Kevin
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2010-08-27 14:39 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-16 13:36 [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way Charulatha V
2010-08-16 13:36 ` [PATCH 1/5 v3] OMAP3: WDT: Add watchdog timer HWMOD data for OMAP3 Charulatha V
2010-08-16 13:36 ` [PATCH 2/5 v3] OMAP2420: WDT: Add watchdog timer HWMOD data for OMAP2420 Charulatha V
2010-08-16 13:36 ` [PATCH 3/5 v3] OMAP2430: WDT: Add watchdog timer HWMOD data for OMAP2430 Charulatha V
2010-08-16 13:36 ` [PATCH 4/5 v3] OMAP4 HWMOD: Add watchdog hwmods Charulatha V
2010-08-16 13:36 ` [PATCH 5/5 v3] OMAP2PLUS: WDT: Conversion to runtime PM Charulatha V
2010-08-26 23:03 ` Kevin Hilman
2010-08-27 14:39 ` Varadarajan, Charulatha
2010-08-26 22:54 ` [PATCH 0/5 v3] OMAP2PLUS: WDT: Implement WDT in HWMOD way Kevin Hilman
2010-08-27 14:38 ` Varadarajan, Charulatha
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).