Re: [RFC: PATCH] Fix to support multiple HWMODS for a single device

2010-08-23 Thread kishon

Thanks Benoit for your review comments.

On Monday 23 August 2010 05:31 PM, Datta, Shubhrajyoti wrote:


   

-Original Message-
From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
ow...@vger.kernel.org] On Behalf Of Cousson, Benoit
Sent: Monday, August 23, 2010 5:20 PM
To: ABRAHAM, KISHON VIJAY
Cc: linux-omap@vger.kernel.org; khil...@deeprootsystems.com;
p...@pwsan.com
Subject: Re: [RFC: PATCH] Fix to support multiple HWMODS for a single
device

Hi Vijay,

On 8/23/2010 12:46 PM, ABRAHAM, KISHON VIJAY wrote:
 

The current HWMOD code expects multiple HWMODS to be filled in
   

consecutive
 

memory location before passing to omap_device_build_ss().
   

Just a minor comment: this is not the "The current HWMOD code" but the
omap_device core code.

 

Ignoring this
will result in incorrect HWMOD data being extracted. This means before
   

calling
 

omap_device_build_ss() the user has to create memory chunks, copy all
   

the HWMOD
 

structures to it taking care of the mutex.
   

I don't think it was an expectation, this is simply a bug :-)
So copying hwmod structures before calling this API is clearly not the
right way to do fix that...

 

This fix uses the pointer to pointer to OMAP_HWMOD structure passed to
omap_device_build_ss() to correctly extract the appropriate
OMAP_HWMOD structure.
   

Yes, this is the proper way of fixing that.

 

This patch is created on top of origin/pm-wip/hwmods-omap4.
   

You can do it on the mainline too, there is no dependency with lo/master
or pm-wip for that one. That fix will be able to go to mainline faster.

 

Signed-off-by: Kishon Vijay Abraham I
---
   arch/arm/plat-omap/omap_device.c |   42 +++---
   


 

   1 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-
   

omap/omap_device.c
 

index d2b1609..e94bd7a 100644
--- a/arch/arm/plat-omap/omap_device.c
+++ b/arch/arm/plat-omap/omap_device.c
@@ -257,12 +257,12 @@ static inline struct omap_device
   

*_find_by_pdev(struct platform_device *pdev)
 

*/
   int omap_device_count_resources(struct omap_device *od)
   {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int c = 0;
int i;

-   for (i = 0, oh = *od->hwmods; i<   od->hwmods_cnt; i++, oh++)
-   c += omap_hwmod_count_resources(oh);
+   for (i = 0, oh = od->hwmods; i<   od->hwmods_cnt; i++, oh++)
+   c += omap_hwmod_count_resources(*oh);
   

In that case, you might prefer using array type of access in order to
make the code more readable (i.e. oh[i]). Or even avoid the oh variable.

   +c += omap_hwmod_count_resources(od->hwmods[i]);

Just for my information, what kind of device are you working on that
require multiple hwmods?
 


The McBSP qualifies for 2 hwmods and 1 device as OMAP3 has sidetone support 
also.

   

Otherwise, this is a good catch. Thanks for fixing that.

Regards,
Benoit


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [RFC: PATCH] Fix to support multiple HWMODS for a single device

2010-08-23 Thread Datta, Shubhrajyoti


> -Original Message-
> From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
> ow...@vger.kernel.org] On Behalf Of Cousson, Benoit
> Sent: Monday, August 23, 2010 5:20 PM
> To: ABRAHAM, KISHON VIJAY
> Cc: linux-omap@vger.kernel.org; khil...@deeprootsystems.com;
> p...@pwsan.com
> Subject: Re: [RFC: PATCH] Fix to support multiple HWMODS for a single
> device
> 
> Hi Vijay,
> 
> On 8/23/2010 12:46 PM, ABRAHAM, KISHON VIJAY wrote:
> > The current HWMOD code expects multiple HWMODS to be filled in
> consecutive
> > memory location before passing to omap_device_build_ss().
> 
> Just a minor comment: this is not the "The current HWMOD code" but the
> omap_device core code.
> 
> > Ignoring this
> > will result in incorrect HWMOD data being extracted. This means before
> calling
> > omap_device_build_ss() the user has to create memory chunks, copy all
> the HWMOD
> > structures to it taking care of the mutex.
> 
> I don't think it was an expectation, this is simply a bug :-)
> So copying hwmod structures before calling this API is clearly not the
> right way to do fix that...
> 
> > This fix uses the pointer to pointer to OMAP_HWMOD structure passed to
> > omap_device_build_ss() to correctly extract the appropriate
> > OMAP_HWMOD structure.
> 
> Yes, this is the proper way of fixing that.
> 
> > This patch is created on top of origin/pm-wip/hwmods-omap4.
> 
> You can do it on the mainline too, there is no dependency with lo/master
> or pm-wip for that one. That fix will be able to go to mainline faster.
> 
> >
> > Signed-off-by: Kishon Vijay Abraham I
> > ---
> >   arch/arm/plat-omap/omap_device.c |   42 +++---
> 
> >   1 files changed, 21 insertions(+), 21 deletions(-)
> >
> > diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-
> omap/omap_device.c
> > index d2b1609..e94bd7a 100644
> > --- a/arch/arm/plat-omap/omap_device.c
> > +++ b/arch/arm/plat-omap/omap_device.c
> > @@ -257,12 +257,12 @@ static inline struct omap_device
> *_find_by_pdev(struct platform_device *pdev)
> >*/
> >   int omap_device_count_resources(struct omap_device *od)
> >   {
> > -   struct omap_hwmod *oh;
> > +   struct omap_hwmod **oh;
> > int c = 0;
> > int i;
> >
> > -   for (i = 0, oh = *od->hwmods; i<  od->hwmods_cnt; i++, oh++)
> > -   c += omap_hwmod_count_resources(oh);
> > +   for (i = 0, oh = od->hwmods; i<  od->hwmods_cnt; i++, oh++)
> > +   c += omap_hwmod_count_resources(*oh);
> 
> In that case, you might prefer using array type of access in order to
> make the code more readable (i.e. oh[i]). Or even avoid the oh variable.
> 
>   +   c += omap_hwmod_count_resources(od->hwmods[i]);
> 
> Just for my information, what kind of device are you working on that
> require multiple hwmods?


The McBSP qualifies for 2 hwmods and 1 device as OMAP3 has sidetone support 
also.

> 
> Otherwise, this is a good catch. Thanks for fixing that.
> 
> Regards,
> Benoit
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC: PATCH] Fix to support multiple HWMODS for a single device

2010-08-23 Thread Cousson, Benoit

Hi Vijay,

On 8/23/2010 12:46 PM, ABRAHAM, KISHON VIJAY wrote:

The current HWMOD code expects multiple HWMODS to be filled in consecutive
memory location before passing to omap_device_build_ss().


Just a minor comment: this is not the "The current HWMOD code" but the 
omap_device core code.



Ignoring this
will result in incorrect HWMOD data being extracted. This means before calling
omap_device_build_ss() the user has to create memory chunks, copy all the HWMOD
structures to it taking care of the mutex.


I don't think it was an expectation, this is simply a bug :-)
So copying hwmod structures before calling this API is clearly not the 
right way to do fix that...



This fix uses the pointer to pointer to OMAP_HWMOD structure passed to
omap_device_build_ss() to correctly extract the appropriate
OMAP_HWMOD structure.


Yes, this is the proper way of fixing that.


This patch is created on top of origin/pm-wip/hwmods-omap4.


You can do it on the mainline too, there is no dependency with lo/master 
or pm-wip for that one. That fix will be able to go to mainline faster.




Signed-off-by: Kishon Vijay Abraham I
---
  arch/arm/plat-omap/omap_device.c |   42 +++---
  1 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
index d2b1609..e94bd7a 100644
--- a/arch/arm/plat-omap/omap_device.c
+++ b/arch/arm/plat-omap/omap_device.c
@@ -257,12 +257,12 @@ static inline struct omap_device *_find_by_pdev(struct 
platform_device *pdev)
   */
  int omap_device_count_resources(struct omap_device *od)
  {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int c = 0;
int i;

-   for (i = 0, oh = *od->hwmods; i<  od->hwmods_cnt; i++, oh++)
-   c += omap_hwmod_count_resources(oh);
+   for (i = 0, oh = od->hwmods; i<  od->hwmods_cnt; i++, oh++)
+   c += omap_hwmod_count_resources(*oh);


In that case, you might prefer using array type of access in order to 
make the code more readable (i.e. oh[i]). Or even avoid the oh variable.


 +  c += omap_hwmod_count_resources(od->hwmods[i]);

Just for my information, what kind of device are you working on that 
require multiple hwmods?


Otherwise, this is a good catch. Thanks for fixing that.

Regards,
Benoit


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC: PATCH] Fix to support multiple HWMODS for a single device

2010-08-23 Thread Kishon Vijay Abraham I
The current HWMOD code expects multiple HWMODS to be filled in consecutive
memory location before passing to omap_device_build_ss(). Ignoring this
will result in incorrect HWMOD data being extracted. This means before calling
omap_device_build_ss() the user has to create memory chunks, copy all the HWMOD
structures to it taking care of the mutex.

This fix uses the pointer to pointer to OMAP_HWMOD structure passed to
omap_device_build_ss() to correctly extract the appropriate
OMAP_HWMOD structure.

This patch is created on top of origin/pm-wip/hwmods-omap4. 

Signed-off-by: Kishon Vijay Abraham I 
---
 arch/arm/plat-omap/omap_device.c |   42 +++---
 1 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
index d2b1609..e94bd7a 100644
--- a/arch/arm/plat-omap/omap_device.c
+++ b/arch/arm/plat-omap/omap_device.c
@@ -257,12 +257,12 @@ static inline struct omap_device *_find_by_pdev(struct 
platform_device *pdev)
  */
 int omap_device_count_resources(struct omap_device *od)
 {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int c = 0;
int i;
 
-   for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++)
-   c += omap_hwmod_count_resources(oh);
+   for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++)
+   c += omap_hwmod_count_resources(*oh);
 
pr_debug("omap_device: %s: counted %d total resources across %d "
 "hwmods\n", od->pdev.name, c, od->hwmods_cnt);
@@ -289,12 +289,12 @@ int omap_device_count_resources(struct omap_device *od)
  */
 int omap_device_fill_resources(struct omap_device *od, struct resource *res)
 {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int c = 0;
int i, r;
 
-   for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++) {
-   r = omap_hwmod_fill_resources(oh, res);
+   for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++) {
+   r = omap_hwmod_fill_resources(*oh, res);
res += r;
c += r;
}
@@ -566,7 +566,7 @@ int omap_device_shutdown(struct platform_device *pdev)
 {
int ret, i;
struct omap_device *od;
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
 
od = _find_by_pdev(pdev);
 
@@ -579,8 +579,8 @@ int omap_device_shutdown(struct platform_device *pdev)
 
ret = _omap_device_deactivate(od, IGNORE_WAKEUP_LAT);
 
-   for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++)
-   omap_hwmod_shutdown(oh);
+   for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++)
+   omap_hwmod_shutdown(*oh);
 
od->_state = OMAP_DEVICE_STATE_SHUTDOWN;
 
@@ -692,11 +692,11 @@ void __iomem *omap_device_get_rt_va(struct omap_device 
*od)
  */
 int omap_device_enable_hwmods(struct omap_device *od)
 {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int i;
 
-   for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++)
-   omap_hwmod_enable(oh);
+   for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++)
+   omap_hwmod_enable(*oh);
 
/* XXX pass along return value here? */
return 0;
@@ -710,11 +710,11 @@ int omap_device_enable_hwmods(struct omap_device *od)
  */
 int omap_device_idle_hwmods(struct omap_device *od)
 {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int i;
 
-   for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++)
-   omap_hwmod_idle(oh);
+   for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++)
+   omap_hwmod_idle(*oh);
 
/* XXX pass along return value here? */
return 0;
@@ -729,11 +729,11 @@ int omap_device_idle_hwmods(struct omap_device *od)
  */
 int omap_device_disable_clocks(struct omap_device *od)
 {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int i;
 
-   for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++)
-   omap_hwmod_disable_clocks(oh);
+   for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++)
+   omap_hwmod_disable_clocks(*oh);
 
/* XXX pass along return value here? */
return 0;
@@ -748,11 +748,11 @@ int omap_device_disable_clocks(struct omap_device *od)
  */
 int omap_device_enable_clocks(struct omap_device *od)
 {
-   struct omap_hwmod *oh;
+   struct omap_hwmod **oh;
int i;
 
-   for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++)
-   omap_hwmod_enable_clocks(oh);
+   for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++)
+   omap_hwmod_enable_clocks(*oh);
 
/* XXX pass along return value here? */
return 0;
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majord

[RFC/PATCH] Fix to support multiple HWMODS for a single device

2010-08-22 Thread kishon


>From 24ffaa67c44065a9caa3ee3525dd863d32c67269 Mon Sep 17 00:00:00 2001
From: Kishon Vijay Abraham I 
Date: Sun, 22 Aug 2010 15:06:42 +0530
Subject: [RFC/PATCH] Fix to support multiple HWMODS for a single device

The current code expects multiple HWMODS to be filled in consecutive
memory location before passing to omap_device_build_ss(). Ignoring this
will result in incorrect data being populated in omap_hwmod_fill_resources().
This means before calling omap_device_build_ss() the user has to create memory
chunks, copy all the HWMOD structures to it taking care of the mutex
variable as well.

This fix does some pointer calculations to the existing function
omap_device_fill_resources() in order to fill the resources properly.

Signed-off-by: Kishon Vijay Abraham I 
---
 arch/arm/plat-omap/omap_device.c |7 +++
 1 files changed, 3 insertions(+), 4 deletions(-)
 mode change 100644 => 100755 arch/arm/plat-omap/omap_device.c

diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
old mode 100644
new mode 100755
index d2b1609..8013292
--- a/arch/arm/plat-omap/omap_device.c
+++ b/arch/arm/plat-omap/omap_device.c
@@ -289,12 +289,12 @@ int omap_device_count_resources(struct omap_device *od)
  */
 int omap_device_fill_resources(struct omap_device *od, struct resource *res)
 {
-	struct omap_hwmod *oh;
+	struct omap_hwmod **oh;
 	int c = 0;
 	int i, r;
 
-	for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++) {
-		r = omap_hwmod_fill_resources(oh, res);
+	for (i = 0, oh = od->hwmods; i < od->hwmods_cnt; i++, oh++) {
+		r = omap_hwmod_fill_resources(*oh, res);
 		res += r;
 		c += r;
 	}
@@ -694,7 +694,6 @@ int omap_device_enable_hwmods(struct omap_device *od)
 {
 	struct omap_hwmod *oh;
 	int i;
-
 	for (i = 0, oh = *od->hwmods; i < od->hwmods_cnt; i++, oh++)
 		omap_hwmod_enable(oh);
 
-- 
1.7.0.4