All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] OMAP2/3: VENC hwmod: add OCPIF_SWSUP_IDLE flag to interface
@ 2011-03-04  6:02 ` Paul Walmsley
  0 siblings, 0 replies; 4+ messages in thread
From: Paul Walmsley @ 2011-03-04  6:02 UTC (permalink / raw)
  To: linux-omap
  Cc: linux-arm-kernel, tony, khilman, b-cousson, svadivu, sumit.semwal

[-- Attachment #1: Type: TEXT/PLAIN, Size: 2900 bytes --]


According to the hwmod interface data, the DSS submodule "VENC" uses a
clock, "dss_54m_fck"/"dss_tv_fck", which the PRCM cannot autoidle.  By
default, the hwmod code assumes that interface clocks can be autoidled
by the PRCM.  When the interface clock can't be autoidled by the PRCM,
those interfaces must be marked with the OCPIF_SWSUP_IDLE flag.
Otherwise, the "interface clock" will always have a non-zero use
count, and the device won't enter idle.  This problem was observed on
N8x0.

Fix the immediate problem by marking the VENC interface with the
OCPIF_SWSUP_IDLE flag.  But it's not clear that
"dss_54m_fck"/"dss_tv_fck" is really the correct interface clock for
VENC.  It may be that the VENC interface should use a
hardware-autoidling interface clock.  This is the situation on OMAP4,
which uses "l3_div_ck" as the VENC interface clock, which can be
autoidled by the PRCM.  Clarification from TI is needed.

Problem found and patch tested on N8x0 by Tony Lindgren
<tony@atomide.com>.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Senthilvadivu Guruswamy <svadivu@ti.com>
Cc: Sumit Semwal <sumit.semwal@ti.com>
Cc: Kevin Hilman <khilman@ti.com>
Cc: Benoît Cousson <b-cousson@ti.com>
---
 arch/arm/mach-omap2/omap_hwmod_2420_data.c |    1 +
 arch/arm/mach-omap2/omap_hwmod_2430_data.c |    1 +
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |    1 +
 3 files changed, 3 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 e0bc2c7..61e58bd 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -1410,6 +1410,7 @@ static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
 			.flags	= OMAP_FIREWALL_L4,
 		}
 	},
+	.flags		= OCPIF_SWSUP_IDLE,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 4aa74d7..490789a 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -1485,6 +1485,7 @@ static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = {
 	.clk		= "dss_54m_fck",
 	.addr		= omap2430_dss_venc_addrs,
 	.addr_cnt	= ARRAY_SIZE(omap2430_dss_venc_addrs),
+	.flags		= OCPIF_SWSUP_IDLE,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index e2792cf..eb48b8c 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -1844,6 +1844,7 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
 			.flags	= OMAP_FIREWALL_L4,
 		}
 	},
+	.flags		= OCPIF_SWSUP_IDLE,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-- 
1.7.2.3

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

* [PATCH] OMAP2/3: VENC hwmod: add OCPIF_SWSUP_IDLE flag to interface
@ 2011-03-04  6:02 ` Paul Walmsley
  0 siblings, 0 replies; 4+ messages in thread
From: Paul Walmsley @ 2011-03-04  6:02 UTC (permalink / raw)
  To: linux-arm-kernel


According to the hwmod interface data, the DSS submodule "VENC" uses a
clock, "dss_54m_fck"/"dss_tv_fck", which the PRCM cannot autoidle.  By
default, the hwmod code assumes that interface clocks can be autoidled
by the PRCM.  When the interface clock can't be autoidled by the PRCM,
those interfaces must be marked with the OCPIF_SWSUP_IDLE flag.
Otherwise, the "interface clock" will always have a non-zero use
count, and the device won't enter idle.  This problem was observed on
N8x0.

Fix the immediate problem by marking the VENC interface with the
OCPIF_SWSUP_IDLE flag.  But it's not clear that
"dss_54m_fck"/"dss_tv_fck" is really the correct interface clock for
VENC.  It may be that the VENC interface should use a
hardware-autoidling interface clock.  This is the situation on OMAP4,
which uses "l3_div_ck" as the VENC interface clock, which can be
autoidled by the PRCM.  Clarification from TI is needed.

Problem found and patch tested on N8x0 by Tony Lindgren
<tony@atomide.com>.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Senthilvadivu Guruswamy <svadivu@ti.com>
Cc: Sumit Semwal <sumit.semwal@ti.com>
Cc: Kevin Hilman <khilman@ti.com>
Cc: Beno?t Cousson <b-cousson@ti.com>
---
 arch/arm/mach-omap2/omap_hwmod_2420_data.c |    1 +
 arch/arm/mach-omap2/omap_hwmod_2430_data.c |    1 +
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |    1 +
 3 files changed, 3 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 e0bc2c7..61e58bd 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -1410,6 +1410,7 @@ static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
 			.flags	= OMAP_FIREWALL_L4,
 		}
 	},
+	.flags		= OCPIF_SWSUP_IDLE,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 4aa74d7..490789a 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -1485,6 +1485,7 @@ static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = {
 	.clk		= "dss_54m_fck",
 	.addr		= omap2430_dss_venc_addrs,
 	.addr_cnt	= ARRAY_SIZE(omap2430_dss_venc_addrs),
+	.flags		= OCPIF_SWSUP_IDLE,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index e2792cf..eb48b8c 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -1844,6 +1844,7 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
 			.flags	= OMAP_FIREWALL_L4,
 		}
 	},
+	.flags		= OCPIF_SWSUP_IDLE,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-- 
1.7.2.3

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

* Re: [PATCH] OMAP2/3: VENC hwmod: add OCPIF_SWSUP_IDLE flag to interface
  2011-03-04  6:02 ` Paul Walmsley
@ 2011-03-04 10:57   ` Cousson, Benoit
  -1 siblings, 0 replies; 4+ messages in thread
From: Cousson, Benoit @ 2011-03-04 10:57 UTC (permalink / raw)
  To: Paul Walmsley, Semwal, Sumit
  Cc: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	tony@atomide.com, Hilman, Kevin, Guruswamy, Senthilvadivu,
	Valkeinen, Tomi

+ Tomi

Hi Paul,

On 3/4/2011 7:02 AM, Paul Walmsley wrote:
>
> According to the hwmod interface data, the DSS submodule "VENC" uses a
> clock, "dss_54m_fck"/"dss_tv_fck", which the PRCM cannot autoidle.  By
> default, the hwmod code assumes that interface clocks can be autoidled
> by the PRCM.  When the interface clock can't be autoidled by the PRCM,
> those interfaces must be marked with the OCPIF_SWSUP_IDLE flag.
> Otherwise, the "interface clock" will always have a non-zero use
> count, and the device won't enter idle.  This problem was observed on
> N8x0.
>
> Fix the immediate problem by marking the VENC interface with the
> OCPIF_SWSUP_IDLE flag.  But it's not clear that
> "dss_54m_fck"/"dss_tv_fck" is really the correct interface clock for
> VENC.  It may be that the VENC interface should use a
> hardware-autoidling interface clock.  This is the situation on OMAP4,
> which uses "l3_div_ck" as the VENC interface clock, which can be
> autoidled by the PRCM.  Clarification from TI is needed.

Yep, this is clearly wrong, all DSS modules are using the same 
interconnect port from the L4, thus they should all use the dss_ick as 
interface clock and not the functional clock dss_tv_fck.

There is something strange with that module because the main_clk is 
attached to dss1_alwon_fck instead of dss_tv_fck.

I'm quite sure that both are needed to make that module work and that's 
why it was added as an interface clock.
In theory, one of them should be an optional clock like on OMAP4.


Sumit,

Could you explain the rational behind the usage of dss_tv_fck as an iclk 
and dss1_alwon_fck as a fclk?

Thanks,
Benoit

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

* [PATCH] OMAP2/3: VENC hwmod: add OCPIF_SWSUP_IDLE flag to interface
@ 2011-03-04 10:57   ` Cousson, Benoit
  0 siblings, 0 replies; 4+ messages in thread
From: Cousson, Benoit @ 2011-03-04 10:57 UTC (permalink / raw)
  To: linux-arm-kernel

+ Tomi

Hi Paul,

On 3/4/2011 7:02 AM, Paul Walmsley wrote:
>
> According to the hwmod interface data, the DSS submodule "VENC" uses a
> clock, "dss_54m_fck"/"dss_tv_fck", which the PRCM cannot autoidle.  By
> default, the hwmod code assumes that interface clocks can be autoidled
> by the PRCM.  When the interface clock can't be autoidled by the PRCM,
> those interfaces must be marked with the OCPIF_SWSUP_IDLE flag.
> Otherwise, the "interface clock" will always have a non-zero use
> count, and the device won't enter idle.  This problem was observed on
> N8x0.
>
> Fix the immediate problem by marking the VENC interface with the
> OCPIF_SWSUP_IDLE flag.  But it's not clear that
> "dss_54m_fck"/"dss_tv_fck" is really the correct interface clock for
> VENC.  It may be that the VENC interface should use a
> hardware-autoidling interface clock.  This is the situation on OMAP4,
> which uses "l3_div_ck" as the VENC interface clock, which can be
> autoidled by the PRCM.  Clarification from TI is needed.

Yep, this is clearly wrong, all DSS modules are using the same 
interconnect port from the L4, thus they should all use the dss_ick as 
interface clock and not the functional clock dss_tv_fck.

There is something strange with that module because the main_clk is 
attached to dss1_alwon_fck instead of dss_tv_fck.

I'm quite sure that both are needed to make that module work and that's 
why it was added as an interface clock.
In theory, one of them should be an optional clock like on OMAP4.


Sumit,

Could you explain the rational behind the usage of dss_tv_fck as an iclk 
and dss1_alwon_fck as a fclk?

Thanks,
Benoit

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

end of thread, other threads:[~2011-03-04 10:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-04  6:02 [PATCH] OMAP2/3: VENC hwmod: add OCPIF_SWSUP_IDLE flag to interface Paul Walmsley
2011-03-04  6:02 ` Paul Walmsley
2011-03-04 10:57 ` Cousson, Benoit
2011-03-04 10:57   ` Cousson, Benoit

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