[U-Boot] [PATCH v3 38/62] dm: core: Expand platdata for of-platdata devices

Simon Glass sjg at chromium.org
Fri Jul 15 05:59:44 CEST 2016


On 4 July 2016 at 11:58, Simon Glass <sjg at chromium.org> wrote:
> Devices which use of-platdata have their own platdata. However, in many
> cases the driver will have its own auto-alloced platdata, for use with the
> device tree. The ofdata_to_platdata() method converts the device tree
> settings to platdata.
>
> With of-platdata we would not normally allocate the platdata since it is
> provided by the U_BOOT_DEVICE() declaration. However this is inconvenient
> since the of-platdata struct is closely tied to the device tree properties.
> It is unlikely to exactly match the platdata needed by the driver.
>
> In fact a useful approach is to declare platdata in the driver like this:
>
> struct r3288_mmc_platdata {
>         struct dtd_rockchip_rk3288_dw_mshc of_platdata;
>         /* the 'normal' fields go here */
> };
>
> In this case we have dt_platadata available, but the normal fields are not
> present, since ofdata_to_platdata() is never called. In fact driver model
> doesn't allocate any space for the 'normal' fields, since it sees that there
> is already platform data attached to the device.
>
> To make this easier, adjust driver model to allocate the full size of the
> struct (i.e. platdata_auto_alloc_size from the driver) and copy in the
> of-platdata. This means that when the driver's bind() method is called,
> the of-platdata will be present, followed by zero bytes for the empty
> 'normal field' portion.
>
> A new DM_FLAG_OF_PLATDATA flag is available that indicates that the platdata
> came from of-platdata. When the allocation/copy happens, the
> DM_FLAG_ALLOC_PDATA flag will be set as well. The dtoc tool is updated to
> output the platdata_size field, since U-Boot has no other way of knowing
> the size of the of-platdata struct.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v3:
> - Don't try to expand when there is no of-platdata
>
> Changes in v2: None
>
>  drivers/core/device.c | 43 ++++++++++++++++++++++++++++++++-----------
>  include/dm/device.h   |  2 ++
>  include/dm/platdata.h |  5 +++++
>  tools/dtoc/dtoc.py    |  2 ++
>  4 files changed, 41 insertions(+), 11 deletions(-)

Applied to u-boot-dm


More information about the U-Boot mailing list