mbox series

[00/30] dm: Implement OF_PLATDATA_INST in driver model (part E)

Message ID 20201231041000.660925-1-sjg@chromium.org
Headers show
Series dm: Implement OF_PLATDATA_INST in driver model (part E) | expand

Message

Simon Glass Dec. 31, 2020, 4:09 a.m. UTC
This series builds on the recent dtoc implementation of build-time device
instantiation.

It adds the required driver model support, which is basically a few more
data structures.

With this, sandbox_spl and chromebook_coral both use the new feature.

For coral TPL there is a 1.5KB code-size reduction and a 1.75KB data-size
increase:

   text   data     bss     dec     hex
  18836   3080      12   21928    55a8    original
  17229   4896      12   22137    5679    with OF_PLATDATA_INST
  17277   4896      12   22185    56a9    with OF_PLATDATA_RT

The extra data size is due to the build-time devices which are now
included in the image instead of being built at runtime. Also the private
data for each device is allocated in the data region at present, even
through much of it is just zeroes.

The reduction in code size is due to not needing to bind devices at
runtime, as a well as a simplified probe() function. Coral requires that
data be copied out to RAM before being updated, so that adds a small
amount to size (shown in the third line).

Quite a lot of future work is possible, including reducing the size of
data structures. See [1] for more ideas. But this series implements the
basic feature.

To try this out on your board, define CONFIG_SPL_OF_PLATDATA_INST and see
what you get.

Note: SPL tests do not yet pass with this series. The driver_rt struct
is not set up so device_get_by_driver_info_idx() does not work. This means
that looking up phandles will fail. This will be addressed in a v2
series, along with documentation updates and a little more information on
code-size impact.

This series is available at u-boot-dm/tin-working

[1]  https://lists.denx.de/pipermail/u-boot/2020-July/418433.html


Simon Glass (30):
  sandbox: Drop debug message in os_spl_to_uboot()
  linker_lists: Allow use in data structures
  dm: core: Add macros to access the new linker lists
  dm: core: Allow dropping run-time binding of devices
  dm: core: Adjust uclass setup with of-platdata
  dm: core: Set up driver model for OF_PLATDATA_INST
  dm: core: Skip adding uclasses with OF_PLATDATA_INST
  dm: Add the new dtoc-generated files to the build
  dm: core: Include dt-decl.h automatically
  dm: test: Avoid destroying uclasses with of-platdata-inst
  clk: sandbox: Move priv/plat data to a header file
  clk: fixed-rate: Export driver parts for OF_PLATDATA_INST
  clk: sandbox: Create a special fixed-rate driver
  sandbox: Create a new sandbox_noinst build
  test: Run sandbox_spl tests on sandbox_noinst
  azure/gitlab: Add tests for sandbox_noinst
  dm: core: Add an option to support SPL in read-only memory
  dm: core: Create a struct for device runtime info
  dm: core: Move flags to device-runtime info
  dm: core: Allow storing priv/plat data separately
  sandbox: Define a region for device priv/plat data
  dm: core: Use separate priv/plat data region
  x86: Define a region for device priv/plat data
  x86: apl: Fix the header order in pmc
  x86: apl: Tell of-platdata about a required header file
  x86: itss: Tidy up bind() for of-platdata-inst
  x86: Support a fake PCI device with of-platdata-inst
  x86: Don't include reset driver in SPL
  x86: coral: Drop ACPI properties from of-platdata
  x86: apl: Use read-only SPL and new of-platdata

 .azure-pipelines.yml               |   3 +
 .gitlab-ci.yml                     |  10 +-
 arch/sandbox/cpu/os.c              |   1 -
 arch/sandbox/cpu/u-boot-spl.lds    |   8 +
 arch/sandbox/dts/sandbox.dtsi      |   2 +-
 arch/sandbox/include/asm/clk.h     |  24 +++
 arch/x86/cpu/apollolake/Kconfig    |   2 +
 arch/x86/cpu/apollolake/pmc.c      |   2 +-
 arch/x86/cpu/apollolake/punit.c    |   1 +
 arch/x86/cpu/intel_common/itss.c   |   5 +-
 arch/x86/cpu/u-boot-spl.lds        |   8 +
 arch/x86/dts/reset.dtsi            |   2 +-
 arch/x86/lib/tpl.c                 |   1 +
 board/sandbox/MAINTAINERS          |   7 +
 common/spl/Kconfig                 |  24 +++
 configs/chromebook_coral_defconfig |   1 +
 configs/sandbox_noinst_defconfig   | 229 +++++++++++++++++++++++++++++
 configs/sandbox_spl_defconfig      |   1 +
 drivers/clk/clk_fixed_rate.c       |  14 +-
 drivers/clk/clk_sandbox.c          |  40 ++++-
 drivers/clk/clk_sandbox_test.c     |   6 -
 drivers/core/device.c              |  83 ++++++++---
 drivers/core/root.c                |  83 +++++++++--
 drivers/core/uclass.c              |   5 +-
 dts/Kconfig                        |  38 +++++
 include/asm-generic/global_data.h  |  22 +++
 include/asm-generic/sections.h     |   3 +
 include/dm/device-internal.h       |  26 ++++
 include/dm/device.h                |  38 ++++-
 include/dm/root.h                  |   3 +
 include/dm/uclass-internal.h       |  23 +++
 include/dm/uclass.h                |  20 +++
 include/dm/util.h                  |   9 ++
 include/dt-structs.h               |   2 +
 include/linker_lists.h             |  28 ++++
 include/linux/clk-provider.h       |   5 +
 scripts/Makefile.spl               |   3 +-
 test/dm/of_platdata.c              |   2 +-
 test/dm/test-main.c                |   3 +-
 test/run                           |   4 +
 40 files changed, 724 insertions(+), 67 deletions(-)
 create mode 100644 configs/sandbox_noinst_defconfig

Comments

Walter Lozano Jan. 6, 2021, 2:58 a.m. UTC | #1
Hi Simon,

On 12/31/20 1:09 AM, Simon Glass wrote:
> This series builds on the recent dtoc implementation of build-time device
> instantiation.
>
> It adds the required driver model support, which is basically a few more
> data structures.
>
> With this, sandbox_spl and chromebook_coral both use the new feature.
>
> For coral TPL there is a 1.5KB code-size reduction and a 1.75KB data-size
> increase:
>
>     text   data     bss     dec     hex
>    18836   3080      12   21928    55a8    original
>    17229   4896      12   22137    5679    with OF_PLATDATA_INST
>    17277   4896      12   22185    56a9    with OF_PLATDATA_RT
>
> The extra data size is due to the build-time devices which are now
> included in the image instead of being built at runtime. Also the private
> data for each device is allocated in the data region at present, even
> through much of it is just zeroes.
>
> The reduction in code size is due to not needing to bind devices at
> runtime, as a well as a simplified probe() function. Coral requires that
> data be copied out to RAM before being updated, so that adds a small
> amount to size (shown in the third line).
>
> Quite a lot of future work is possible, including reducing the size of
> data structures. See [1] for more ideas. But this series implements the
> basic feature.
>
> To try this out on your board, define CONFIG_SPL_OF_PLATDATA_INST and see
> what you get.
>
> Note: SPL tests do not yet pass with this series. The driver_rt struct
> is not set up so device_get_by_driver_info_idx() does not work. This means
> that looking up phandles will fail. This will be addressed in a v2
> series, along with documentation updates and a little more information on
> code-size impact.
>
> This series is available at u-boot-dm/tin-working
>
> [1]  https://lists.denx.de/pipermail/u-boot/2020-July/418433.html

Thanks for this series. I have done a quick review, but I plan to do a 
deeper one and some testing during the following days.

Regards,

Walter


>
> Simon Glass (30):
>    sandbox: Drop debug message in os_spl_to_uboot()
>    linker_lists: Allow use in data structures
>    dm: core: Add macros to access the new linker lists
>    dm: core: Allow dropping run-time binding of devices
>    dm: core: Adjust uclass setup with of-platdata
>    dm: core: Set up driver model for OF_PLATDATA_INST
>    dm: core: Skip adding uclasses with OF_PLATDATA_INST
>    dm: Add the new dtoc-generated files to the build
>    dm: core: Include dt-decl.h automatically
>    dm: test: Avoid destroying uclasses with of-platdata-inst
>    clk: sandbox: Move priv/plat data to a header file
>    clk: fixed-rate: Export driver parts for OF_PLATDATA_INST
>    clk: sandbox: Create a special fixed-rate driver
>    sandbox: Create a new sandbox_noinst build
>    test: Run sandbox_spl tests on sandbox_noinst
>    azure/gitlab: Add tests for sandbox_noinst
>    dm: core: Add an option to support SPL in read-only memory
>    dm: core: Create a struct for device runtime info
>    dm: core: Move flags to device-runtime info
>    dm: core: Allow storing priv/plat data separately
>    sandbox: Define a region for device priv/plat data
>    dm: core: Use separate priv/plat data region
>    x86: Define a region for device priv/plat data
>    x86: apl: Fix the header order in pmc
>    x86: apl: Tell of-platdata about a required header file
>    x86: itss: Tidy up bind() for of-platdata-inst
>    x86: Support a fake PCI device with of-platdata-inst
>    x86: Don't include reset driver in SPL
>    x86: coral: Drop ACPI properties from of-platdata
>    x86: apl: Use read-only SPL and new of-platdata
>
>   .azure-pipelines.yml               |   3 +
>   .gitlab-ci.yml                     |  10 +-
>   arch/sandbox/cpu/os.c              |   1 -
>   arch/sandbox/cpu/u-boot-spl.lds    |   8 +
>   arch/sandbox/dts/sandbox.dtsi      |   2 +-
>   arch/sandbox/include/asm/clk.h     |  24 +++
>   arch/x86/cpu/apollolake/Kconfig    |   2 +
>   arch/x86/cpu/apollolake/pmc.c      |   2 +-
>   arch/x86/cpu/apollolake/punit.c    |   1 +
>   arch/x86/cpu/intel_common/itss.c   |   5 +-
>   arch/x86/cpu/u-boot-spl.lds        |   8 +
>   arch/x86/dts/reset.dtsi            |   2 +-
>   arch/x86/lib/tpl.c                 |   1 +
>   board/sandbox/MAINTAINERS          |   7 +
>   common/spl/Kconfig                 |  24 +++
>   configs/chromebook_coral_defconfig |   1 +
>   configs/sandbox_noinst_defconfig   | 229 +++++++++++++++++++++++++++++
>   configs/sandbox_spl_defconfig      |   1 +
>   drivers/clk/clk_fixed_rate.c       |  14 +-
>   drivers/clk/clk_sandbox.c          |  40 ++++-
>   drivers/clk/clk_sandbox_test.c     |   6 -
>   drivers/core/device.c              |  83 ++++++++---
>   drivers/core/root.c                |  83 +++++++++--
>   drivers/core/uclass.c              |   5 +-
>   dts/Kconfig                        |  38 +++++
>   include/asm-generic/global_data.h  |  22 +++
>   include/asm-generic/sections.h     |   3 +
>   include/dm/device-internal.h       |  26 ++++
>   include/dm/device.h                |  38 ++++-
>   include/dm/root.h                  |   3 +
>   include/dm/uclass-internal.h       |  23 +++
>   include/dm/uclass.h                |  20 +++
>   include/dm/util.h                  |   9 ++
>   include/dt-structs.h               |   2 +
>   include/linker_lists.h             |  28 ++++
>   include/linux/clk-provider.h       |   5 +
>   scripts/Makefile.spl               |   3 +-
>   test/dm/of_platdata.c              |   2 +-
>   test/dm/test-main.c                |   3 +-
>   test/run                           |   4 +
>   40 files changed, 724 insertions(+), 67 deletions(-)
>   create mode 100644 configs/sandbox_noinst_defconfig
>