Re: [PATCH 2/6] powerpc/85xx: consolidate of_platform_bus_probe calls
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
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
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
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
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
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
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
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
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
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
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 =