Subject: [PATCH 1/7] ARM: ux500: New DT:ed snowball_platform_devs for one-by-one device enablement

From: [email-masked] (Lee Jones)
Date: Tue, 10 Apr 2012 10:26:29 +0100

On 10/04/12 10:03, Linus Walleij wrote:
> On Thu, Apr 5, 2012 at 11:55 AM, Lee Jones<[email-masked]>  wrote:
>
>> During Device Tree enablement it is necessary to remove
>> snowball_<device>* platform_data segments one at at time,
>> as and when particular devices are DT enabled. This patch
>> provides a temporary solution. Once this new struct is
>> empty it will be removed again.
>>
>> Signed-off-by: Lee Jones<[email-masked]>
>
> This is not exactly elegant and I cannot quite see how the pieces
> fit together.
>
>> ---
>>   arch/arm/mach-ux500/board-mop500.c |   18 ++++++++++++++++--
>>   1 files changed, 16 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
>> index 77d03c1..29e0ade 100644
>> --- a/arch/arm/mach-ux500/board-mop500.c
>> +++ b/arch/arm/mach-ux500/board-mop500.c
>> @@ -609,6 +609,13 @@ static struct platform_device *snowball_platform_devs[] __initdata = {
>>         &ab8500_device,
>>   };
>>
>> +static struct platform_device *snowball_of_platform_devs[] __initdata = {
>> +&snowball_led_dev,
>> +&snowball_key_dev,
>> +&snowball_sbnet_dev,
>> +&ab8500_device,
>> +};
>
> So above this array is an identical array which is going to become
> unused, then why
> not just rename the other array with _of_ or just skip the whole
> business altogether?

Eh? No, that won't help. The other array needs to be kept fully intact 
for non-DT boots. The idea is that each element from the DT array will 
be removed sequentially as they are DT enabled. For instance, I already 
have a patch with enables the SMSC911x chip, which also removes the 
&snowball_sbnet_dev entry. After that something else will be enabled and 
its cohort will be subsequently removed too. Only when all these devices 
have been DT enabled can the struct be removed.

>> +
>>   static void __init mop500_init_machine(void)
>>   {
>>         struct device *parent = NULL;
>> @@ -786,8 +793,15 @@ static void __init u8500_init_machine(void)
>>                 mop500_sdi_init(parent);
>>         } else if (of_machine_is_compatible("calaosystems,snowball-a9500")) {
>>                 snowball_pins_init();
>> -               platform_add_devices(snowball_platform_devs,
>> -                               ARRAY_SIZE(snowball_platform_devs));
>
> So first you remove ths use of that array...
>
>> +
>> +               /* Devices to be DT:ed:
>> +                    snowball_led_dev   = todo
>> +                    snowball_key_dev   = todo
>> +                    snowball_sbnet_dev = todo
>> +                    ab8500_device      = todo
>> +               */
>
> /*
>   * Comment style
>   */

No problem, I'll fix that.

>> +               platform_add_devices(snowball_of_platform_devs,
>> +                               ARRAY_SIZE(snowball_of_platform_devs));
>
> And insert an identical array?
>
> The only change is that you now have an *unused* array with all it's
> parents set and then an array with all parents set to NULL which you
> use. I don't get it ...

Nothing is unused. When DT is disabled snowball_platform_devs will be 
used to add the platform devices. This is, and will remain fully 
populated for non-DT boots. The DT'ed version will decrease in size 
until the final element is removed along with the definition.

I have ran this past Arnd, who thought this was a good idea. It's only a 
temporary solution which well aide us in enabling devices spanned over 
multiple submissions, rather than attempting to enable everything in a 
single patch-set - which isn't going to happen.

Kind regards,
Lee

-- 
Lee Jones
Linaro ST-Ericsson Landing Team Lead
M: +44 77 88 633 515
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog