Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Kumar Gala

On Nov 28, 2011, at 5:42 PM, Tabi Timur-B04825 wrote:

 On Thu, Nov 17, 2011 at 11:56 AM, Dmitry Eremin-Solenikov
 dbarysh...@gmail.com wrote:
 
 diff --git a/arch/powerpc/platforms/85xx/p1022_ds.c 
 b/arch/powerpc/platforms/85xx/p1022_ds.c
 index 00d93a4..cacb4d4 100644
 --- a/arch/powerpc/platforms/85xx/p1022_ds.c
 +++ b/arch/powerpc/platforms/85xx/p1022_ds.c
 @@ -330,10 +330,6 @@ static void __init p1022_ds_setup_arch(void)
  }
 
  static struct of_device_id __initdata p1022_ds_ids[] = {
 -   { .type = soc, },
 -   { .compatible = soc, },
 -   { .compatible = simple-bus, },
 -   { .compatible = gianfar, },
/* So that the DMA channel nodes can be probed individually: */
{ .compatible = fsl,eloplus-dma, },
{},
 @@ -343,6 +339,7 @@ static int __init p1022_ds_publish_devices(void)
  {
return of_platform_bus_probe(NULL, p1022_ds_ids, NULL);
  }
 +machine_device_initcall(p1022_ds, mpc85xx_common_publish_devices);
  machine_device_initcall(p1022_ds, p1022_ds_publish_devices);
 
 I don't think this is working.  I need to investigate some more to be
 sure, but it looks like this is not picking up fsl,eloplus-dma.
 None of the DMA channels are being probed in the audio driver
 (sound/soc/fsl_dma.c).

Hmm, that's odd.  Should see if the issues exists before the change.

- k
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Timur Tabi
Kumar Gala wrote:

 I don't think this is working.  I need to investigate some more to be
 sure, but it looks like this is not picking up fsl,eloplus-dma.
 None of the DMA channels are being probed in the audio driver
 (sound/soc/fsl_dma.c).
 
 Hmm, that's odd.  Should see if the issues exists before the change.

If I move the fsl,eloplus-dma into mpc85xx_common_ids[], then everything 
works.

I suspect there's some kind of state machine in of_platform_bus_probe() that 
allows it to find the DMA channel nodes if it's scanned everything else first.  
I'm trying to debug it now.

-- 
Timur Tabi
Linux kernel developer at Freescale

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Timur Tabi
Timur Tabi wrote:

 If I move the fsl,eloplus-dma into mpc85xx_common_ids[], then everything 
 works.
 
 I suspect there's some kind of state machine in of_platform_bus_probe() that 
 allows it to find the DMA channel nodes if it's scanned everything else 
 first.  I'm trying to debug it now.

So why do we need mpc85xx_common_ids[] at all?  Why can't 
of_platform_bus_probe() just scan the entire tree?

-- 
Timur Tabi
Linux kernel developer at Freescale

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Kumar Gala

On Nov 29, 2011, at 10:20 AM, Timur Tabi wrote:

 Timur Tabi wrote:
 
 If I move the fsl,eloplus-dma into mpc85xx_common_ids[], then everything 
 works.
 
 I suspect there's some kind of state machine in of_platform_bus_probe() that 
 allows it to find the DMA channel nodes if it's scanned everything else 
 first.  I'm trying to debug it now.
 
 So why do we need mpc85xx_common_ids[] at all?  Why can't 
 of_platform_bus_probe() just scan the entire tree?

Ben would probably have to answer that.  I can't remember why he wanted it.  
I'm sure he has a good reason.

- k
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Timur Tabi
Kumar Gala wrote:
 Ben would probably have to answer that.  I can't remember why he wanted it.  
 I'm sure he has a good reason.

Well, I'm not sure what's going on with the code.  I *think* what's happening 
is that the first call of_platform_bus_probe() is scanning most, but not all, 
of the tree, and it's somehow reserving all of those nodes.  Then we call 
of_platform_bus_probe() again, but it never finds the DMA nodes.  
of_platform_bus_probe() never actually calls of_platform_bus_create() this time 
around.  Perhaps the recursive nature of of_platform_bus_create() is part of 
the problem.

The only fix I can think of is to move fsl,eloplus-dma into 
mpc85xx_common_ids[].  I'll post a patch that does that, and we can discuss it.

-- 
Timur Tabi
Linux kernel developer at Freescale

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Scott Wood
On 11/29/2011 10:20 AM, Timur Tabi wrote:
 Timur Tabi wrote:
 
 If I move the fsl,eloplus-dma into mpc85xx_common_ids[], then everything 
 works.

 I suspect there's some kind of state machine in of_platform_bus_probe() that 
 allows it to find the DMA channel nodes if it's scanned everything else 
 first.  I'm trying to debug it now.

Probably mpc85xx_common_ids[] can probe the soc node but not the dma
node, and the p1022-specific list can probe the dma node but not the soc
node, so it doesn't get to the dma node.

 So why do we need mpc85xx_common_ids[] at all?  Why can't 
 of_platform_bus_probe() just scan the entire tree?

That would generate a lot of useless platform devices that are either
not really devices, or duplicate a device sitting on another bus (i2c,
pci, etc).  It could also result in a device being probed and matching a
driver, when the device is unavailable in a way that is more complicated
than status = disabled (such as p1022 muxing), or otherwise requires
special handling.

-Scott

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Kumar Gala

On Nov 29, 2011, at 12:52 PM, Timur Tabi wrote:

 Kumar Gala wrote:
 Ben would probably have to answer that.  I can't remember why he wanted it.  
 I'm sure he has a good reason.
 
 Well, I'm not sure what's going on with the code.  I *think* what's happening 
 is that the first call of_platform_bus_probe() is scanning most, but not all, 
 of the tree, and it's somehow reserving all of those nodes.  Then we call 
 of_platform_bus_probe() again, but it never finds the DMA nodes.  
 of_platform_bus_probe() never actually calls of_platform_bus_create() this 
 time around.  Perhaps the recursive nature of of_platform_bus_create() is 
 part of the problem.
 
 The only fix I can think of is to move fsl,eloplus-dma into 
 mpc85xx_common_ids[].  I'll post a patch that does that, and we can discuss 
 it.

what if you make the p1022_ds_ids call first?  Maybe we need to add 'soc' to 
p1022_ds_ids list

- k
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-29 Thread Timur Tabi
Kumar Gala wrote:
  The only fix I can think of is to move fsl,eloplus-dma into 
  mpc85xx_common_ids[].  I'll post a patch that does that, and we can 
  discuss it.

 what if you make the p1022_ds_ids call first?  Maybe we need to add 'soc' to 
 p1022_ds_ids list

Reversing the calls does not help.  p1022_ds_ids[] is ignored either way.  The 
same problem exists in mpc85xx_publish_devices(), so this patch breaks several 
boards.

Copying lines into p1022_ds_ids[] causes kernel BUGS() like this:

sysfs: cannot create duplicate filename '/devices/e0005000.localbus'

because we end up duplicating probes.

-- 
Timur Tabi
Linux kernel developer at Freescale

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-28 Thread Tabi Timur-B04825
On Thu, Nov 17, 2011 at 11:56 AM, Dmitry Eremin-Solenikov
dbarysh...@gmail.com wrote:

 diff --git a/arch/powerpc/platforms/85xx/p1022_ds.c 
 b/arch/powerpc/platforms/85xx/p1022_ds.c
 index 00d93a4..cacb4d4 100644
 --- a/arch/powerpc/platforms/85xx/p1022_ds.c
 +++ b/arch/powerpc/platforms/85xx/p1022_ds.c
 @@ -330,10 +330,6 @@ static void __init p1022_ds_setup_arch(void)
  }

  static struct of_device_id __initdata p1022_ds_ids[] = {
 -       { .type = soc, },
 -       { .compatible = soc, },
 -       { .compatible = simple-bus, },
 -       { .compatible = gianfar, },
        /* So that the DMA channel nodes can be probed individually: */
        { .compatible = fsl,eloplus-dma, },
        {},
 @@ -343,6 +339,7 @@ static int __init p1022_ds_publish_devices(void)
  {
        return of_platform_bus_probe(NULL, p1022_ds_ids, NULL);
  }
 +machine_device_initcall(p1022_ds, mpc85xx_common_publish_devices);
  machine_device_initcall(p1022_ds, p1022_ds_publish_devices);

I don't think this is working.  I need to investigate some more to be
sure, but it looks like this is not picking up fsl,eloplus-dma.
None of the DMA channels are being probed in the audio driver
(sound/soc/fsl_dma.c).

--
Timur Tabi
Linux kernel developer at Freescale
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-23 Thread Kumar Gala

On Nov 17, 2011, at 11:56 AM, Dmitry Eremin-Solenikov wrote:

 85xx board files have a lot of duplication in *_publish_devices()/
 *_declare_of_platform_devices() functions. Merge that into a single
 function common to most of the boards.
 
 Signed-off-by: Dmitry Eremin-Solenikov dbarysh...@gmail.com
 ---
 arch/powerpc/platforms/85xx/ksi8560.c|   17 +-
 arch/powerpc/platforms/85xx/mpc8536_ds.c |   14 +---
 arch/powerpc/platforms/85xx/mpc85xx.h|2 +
 arch/powerpc/platforms/85xx/mpc85xx_ads.c|   18 +--
 arch/powerpc/platforms/85xx/mpc85xx_cds.c|   14 +---
 arch/powerpc/platforms/85xx/mpc85xx_common.c |   16 +
 arch/powerpc/platforms/85xx/mpc85xx_ds.c |   18 ++-
 arch/powerpc/platforms/85xx/mpc85xx_mds.c|   44 +
 arch/powerpc/platforms/85xx/mpc85xx_rdb.c|   16 +
 arch/powerpc/platforms/85xx/p1022_ds.c   |5 +--
 arch/powerpc/platforms/85xx/sbc8548.c|   18 ++-
 arch/powerpc/platforms/85xx/sbc8560.c|   18 +--
 arch/powerpc/platforms/85xx/socrates.c   |   12 +--
 arch/powerpc/platforms/85xx/stx_gp3.c|   14 +---
 arch/powerpc/platforms/85xx/tqm85xx.c|   14 +---
 arch/powerpc/platforms/85xx/xes_mpc85xx.c|   18 ++-
 16 files changed, 40 insertions(+), 218 deletions(-)

applied to next

- k
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls

2011-11-17 Thread Dmitry Eremin-Solenikov
85xx board files have a lot of duplication in *_publish_devices()/
*_declare_of_platform_devices() functions. Merge that into a single
function common to most of the boards.

Signed-off-by: Dmitry Eremin-Solenikov dbarysh...@gmail.com
---
 arch/powerpc/platforms/85xx/ksi8560.c|   17 +-
 arch/powerpc/platforms/85xx/mpc8536_ds.c |   14 +---
 arch/powerpc/platforms/85xx/mpc85xx.h|2 +
 arch/powerpc/platforms/85xx/mpc85xx_ads.c|   18 +--
 arch/powerpc/platforms/85xx/mpc85xx_cds.c|   14 +---
 arch/powerpc/platforms/85xx/mpc85xx_common.c |   16 +
 arch/powerpc/platforms/85xx/mpc85xx_ds.c |   18 ++-
 arch/powerpc/platforms/85xx/mpc85xx_mds.c|   44 +
 arch/powerpc/platforms/85xx/mpc85xx_rdb.c|   16 +
 arch/powerpc/platforms/85xx/p1022_ds.c   |5 +--
 arch/powerpc/platforms/85xx/sbc8548.c|   18 ++-
 arch/powerpc/platforms/85xx/sbc8560.c|   18 +--
 arch/powerpc/platforms/85xx/socrates.c   |   12 +--
 arch/powerpc/platforms/85xx/stx_gp3.c|   14 +---
 arch/powerpc/platforms/85xx/tqm85xx.c|   14 +---
 arch/powerpc/platforms/85xx/xes_mpc85xx.c|   18 ++-
 16 files changed, 40 insertions(+), 218 deletions(-)

diff --git a/arch/powerpc/platforms/85xx/ksi8560.c 
b/arch/powerpc/platforms/85xx/ksi8560.c
index bf9b1e5..0f3e688 100644
--- a/arch/powerpc/platforms/85xx/ksi8560.c
+++ b/arch/powerpc/platforms/85xx/ksi8560.c
@@ -190,22 +190,7 @@ static void ksi8560_show_cpuinfo(struct seq_file *m)
seq_printf(m, PLL setting\t: 0x%x\n, ((phid1  24)  0x3f));
 }
 
-static struct of_device_id __initdata of_bus_ids[] = {
-   { .type = soc, },
-   { .type = simple-bus, },
-   { .name = cpm, },
-   { .name = localbus, },
-   { .compatible = gianfar, },
-   {},
-};
-
-static int __init declare_of_platform_devices(void)
-{
-   of_platform_bus_probe(NULL, of_bus_ids, NULL);
-
-   return 0;
-}
-machine_device_initcall(ksi8560, declare_of_platform_devices);
+machine_device_initcall(ksi8560, mpc85xx_common_publish_devices);
 
 /*
  * Called very early, device-tree isn't unflattened
diff --git a/arch/powerpc/platforms/85xx/mpc8536_ds.c 
b/arch/powerpc/platforms/85xx/mpc8536_ds.c
index 6a4b2c1..9ee6455 100644
--- a/arch/powerpc/platforms/85xx/mpc8536_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc8536_ds.c
@@ -106,19 +106,7 @@ static void __init mpc8536_ds_setup_arch(void)
printk(MPC8536 DS board from Freescale Semiconductor\n);
 }
 
-static struct of_device_id __initdata mpc8536_ds_ids[] = {
-   { .type = soc, },
-   { .compatible = soc, },
-   { .compatible = simple-bus, },
-   { .compatible = gianfar, },
-   {},
-};
-
-static int __init mpc8536_ds_publish_devices(void)
-{
-   return of_platform_bus_probe(NULL, mpc8536_ds_ids, NULL);
-}
-machine_device_initcall(mpc8536_ds, mpc8536_ds_publish_devices);
+machine_device_initcall(mpc8536_ds, mpc85xx_common_publish_devices);
 
 machine_arch_initcall(mpc8536_ds, swiotlb_setup_bus_notifier);
 
diff --git a/arch/powerpc/platforms/85xx/mpc85xx.h 
b/arch/powerpc/platforms/85xx/mpc85xx.h
index fa55e8b..2aa7c5d 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx.h
+++ b/arch/powerpc/platforms/85xx/mpc85xx.h
@@ -1,5 +1,7 @@
 #ifndef MPC85xx_H
 #define MPC85xx_H
+extern int mpc85xx_common_publish_devices(void);
+
 #ifdef CONFIG_CPM2
 extern void mpc85xx_cpm2_pic_init(void);
 #else
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c 
b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
index 8b8f7a2..986554b 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
@@ -193,23 +193,7 @@ static void mpc85xx_ads_show_cpuinfo(struct seq_file *m)
seq_printf(m, PLL setting\t: 0x%x\n, ((phid1  24)  0x3f));
 }
 
-static struct of_device_id __initdata of_bus_ids[] = {
-   { .name = soc, },
-   { .type = soc, },
-   { .name = cpm, },
-   { .name = localbus, },
-   { .compatible = simple-bus, },
-   { .compatible = gianfar, },
-   {},
-};
-
-static int __init declare_of_platform_devices(void)
-{
-   of_platform_bus_probe(NULL, of_bus_ids, NULL);
-
-   return 0;
-}
-machine_device_initcall(mpc85xx_ads, declare_of_platform_devices);
+machine_device_initcall(mpc85xx_ads, mpc85xx_common_publish_devices);
 
 /*
  * Called very early, device-tree isn't unflattened
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_cds.c 
b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
index 93bf18a..a268f43 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_cds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
@@ -333,19 +333,7 @@ static int __init mpc85xx_cds_probe(void)
 return of_flat_dt_is_compatible(root, MPC85xxCDS);
 }
 
-static struct of_device_id __initdata of_bus_ids[] = {
-   { .type = soc, },
-   { .compatible = soc, },
-   { .compatible = simple-bus, },
-   { .compatible =