[U-Boot] [PATCH v4 09/15] dm: Cast away the const-ness of the global_data pointer

Simon Glass
2014-06-18T05:36:42Z

Hi Marek,

On 17 June 2014 16:42, Marek Vasut <marex@denx.de> wrote:
> On Thursday, June 12, 2014 at 05:26:50 AM, Simon Glass wrote:
>> Hi Marek,
>>
>> On 8 June 2014 01:00, Marek Vasut <marex@denx.de> wrote:
>> > On Friday, June 06, 2014 at 09:13:26 PM, Simon Glass wrote:
>> >> In a very few cases we need to adjust the driver model root device, such
>> >> as when setting it up at initialisation. Add a macro to make this
>> >> easier.
>> >>
>> >> Signed-off-by: Simon Glass <sjg@chromium.org>
>> >> ---
>> >
>> > [...]
>> >
>> >> - ret = device_bind_by_name(NULL, &root_info, &gd->dm_root);
>> >> + ret = device_bind_by_name(NULL, &root_info, &DM_ROOT());
>> >
>> > [...]
>> >
>> >> +/* Cast away any volatile pointer */
>> >> +#define DM_ROOT() (((gd_t *)gd)->dm_root)
>> >> +#define DM_UCLASS_ROOT() (((gd_t *)gd)->uclass_root)
>> >
>> > Can you implement this "DM_ROOT()" macro as a function instead ? I
>> > believe that'd be much nicer , would have typechecking etc., usual
>> > stuff.
>>
>> I had a look at this. I don't see how I can do it, but you might have
>> ideas.
>>
>> In this function call I need to pass a pointer without its const bit.
>> I made it const since nothing should change the dm root except driver
>> model itself.
>
> All right, I will just be doing a little guesswork here. Shall you not have some
> functions to change the DM root then instead of exposing the DM root ? Such
> functions shall not be exported publicly , but available via separate header
> file too ?

Firstly I should retitle the commit - it is of course the volatile
that I'm trying to get rid of as it says in the commit message. I
might have just been trying to confuse everyone.

I have code like this:

INIT_LIST_HEAD(&gd->uclass_root);

I don't see how I can turn this into a function. I suppose I could
init the list head in a temporary variable and then assign it to
gd->uclass_root, perhaps with memcpy(), but that doesn't really seem
any better to me.

>
> Sorry, I might be completely wrong.

Well I'm not saying it's pretty, so if you have time and come up with
a better option please let me know.

Also, this is not exported 'publicly'. It is in device-internal.h

Regards,
Simon