All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 00/27] spl: Use linker list and parameters for SPL image loading
@ 2016-09-25  0:19 Simon Glass
  2016-09-25  0:19 ` [U-Boot] [PATCH v2 01/27] spl: Move spl_board_load_image() into a generic header Simon Glass
                   ` (26 more replies)
  0 siblings, 27 replies; 71+ messages in thread
From: Simon Glass @ 2016-09-25  0:19 UTC (permalink / raw)
  To: u-boot


At present the SPL code uses a global spl_image variable which is shared
amongst lots of files, some in common/spl and some elsewhere. There is no
need for this to be global, and in fact a parameter makes it easier to
understand what information the functions act on. It also reduces the BSS
use in the SPL (at the expense of stack) which is useful on boards which
don't have BSS available early on.

There are many global functions for loading images from each boot device
type, like spl_mmc_load_image() and spl_spi_load_image(). Mostly these take
the same parameters (none or a u32). There are various rules for compiling
in calls to these functions and in some cases somewhat different rules for
compiling in the functions themselves. For example, spl_spi_load_image() is
called if either of CONFIG_SPL_SPI_SUPPORT or CONFIG_SPL_SPI__FLASHSUPPORT
is enabled, but included in the image if CONFIG_SPL_SPI_LOAD is enabled.

There is work in progress to look at that problem (Andrew F. Davis has sent
some patches [1]), and this series does not address it. But even with that
fixed its seems better to use a linker list and a consistent function
signature for loading images.

This series converts spl_image into a parameter and moves the SPL load
functions into a linker list, where each method is declared in the file
that provides it. The existing dispatching code is dropped.

There is a priorty value attached to each loader which should allow the
existing ordering to be maintained.

Code size is about 20 bytes larger on average which I think is acceptable.
The BSS size drops by about 64 bytes, but really this just transfers to
the stack.

There is an obvious follow-on from this, to move boot_name_table[] into the
same linker list struct (i.e. add a name field to struct spl_image_loader).
The complication here is that we don't want naming if
CONFIG_SPL_LIBCOMMON_SUPPORT is not enabled, since it bloats the code. In
addition I think that common/spl/spl.c can be tidied up a little.

Finally, my reading of the load functions is that they could do with some
rationalisation once we have a way to init any device without
subsystem-specific function calls. For example, spl_sata.c and spl_usb.c
contain very similar code but for the init methods.

[1] http://patchwork.ozlabs.org/patch/662945/

Changes in v2:
- Fix typo - rename spL_find_loader() to spl_ll_find_loader()
- Add a memset() to clear the spl_image data

Simon Glass (27):
  spl: Move spl_board_load_image() into a generic header
  spl: Add a parameter to spl_set_header_raw_uboot()
  spl: Add a parameter to spl_parse_image_header()
  spl: Add a parameter to jump_to_image_linux()
  spl: Add function comments to spl_start_uboot()
  spl: Kconfig: Move SPL_DISPLAY_PRINT to Kconfig
  spl: Convert boot_device into a struct
  spl: Add a way to declare an SPL image loader
  spl: Convert spl_ram_load_image() to use linker list
  spl: Convert spl_mmc_load_image() to use linker list
  spl: Convert spl_ubi_load_image() to use linker list
  spl: Convert spl_nand_load_image() to use linker list
  spl: Convert spl_onenand_load_image() to use linker list
  spl: Convert spl_nor_load_image() to use linker list
  spl: Convert spl_ymodem_load_image() to use linker list
  spl: Convert spl_usb_load_image() to use linker list
  spl: Convert spl_sata_load_image() to use linker list
  spl: spi: Move the generic SPI loader into common/spl
  spl: Convert spl_spi_load_image() to use linker list
  spi: Move freescale-specific code into a private header
  spl: Convert spl_net_load_image() to use linker list
  spl: Convert spl_board_load_image() to use linker list
  spl: Pass spl_image as a parameter to load_image() methods
  spl: Update ext functions to take an spl_image parameter
  spl: Update fat functions to take an spl_image parameter
  spl: Update spl_load_simple_fit() to take an spl_image param
  spl: Make spl_boot_list a local variable

 arch/arm/cpu/armv7/omap4/Kconfig                   |   3 +
 arch/arm/cpu/armv7/omap5/Kconfig                   |   3 +
 arch/arm/include/asm/spl.h                         |   9 --
 arch/arm/lib/spl.c                                 |   4 +-
 arch/arm/mach-sunxi/board.c                        |   6 +-
 arch/arm/mach-uniphier/boot-mode/spl_board.c       |  10 +-
 arch/microblaze/cpu/spl.c                          |   4 +-
 arch/powerpc/lib/spl.c                             |   4 +-
 arch/sandbox/cpu/spl.c                             |   4 +-
 arch/sandbox/include/asm/spl.h                     |   8 -
 board/Arcturus/ucp1020/spl.c                       |   2 -
 board/freescale/common/spl.h                       |  13 ++
 board/freescale/p1010rdb/spl.c                     |   3 +-
 board/freescale/p1022ds/spl.c                      |   3 +-
 board/freescale/p1_p2_rdb_pc/spl.c                 |   3 +-
 board/freescale/t102xqds/spl.c                     |   7 +-
 board/freescale/t102xrdb/spl.c                     |   7 +-
 board/freescale/t104xrdb/spl.c                     |   7 +-
 board/freescale/t208xqds/spl.c                     |   7 +-
 board/freescale/t208xrdb/spl.c                     |   7 +-
 common/spl/Kconfig                                 |   9 ++
 common/spl/Makefile                                |   1 +
 common/spl/spl.c                                   | 178 ++++++++-------------
 common/spl/spl_ext.c                               |  21 +--
 common/spl/spl_fat.c                               |  23 +--
 common/spl/spl_fit.c                               |   9 +-
 common/spl/spl_mmc.c                               |  72 +++++----
 common/spl/spl_nand.c                              |  37 +++--
 common/spl/spl_net.c                               |  36 ++++-
 common/spl/spl_nor.c                               |  18 ++-
 common/spl/spl_onenand.c                           |   9 +-
 common/spl/spl_sata.c                              |  15 +-
 .../mtd/spi/spi_spl_load.c => common/spl/spl_spi.c |  22 +--
 common/spl/spl_ubi.c                               |  14 +-
 common/spl/spl_usb.c                               |  17 +-
 common/spl/spl_ymodem.c                            |  13 +-
 drivers/mtd/spi/Makefile                           |   1 -
 drivers/mtd/spi/fsl_espi_spl.c                     |   4 +-
 drivers/mtd/spi/sunxi_spi_spl.c                    |  11 +-
 include/configs/ti_omap4_common.h                  |   1 -
 include/configs/ti_omap5_common.h                  |   1 -
 include/spi_flash.h                                |   3 -
 include/spl.h                                      | 151 +++++++++++++----
 43 files changed, 463 insertions(+), 317 deletions(-)
 create mode 100644 board/freescale/common/spl.h
 rename drivers/mtd/spi/spi_spl_load.c => common/spl/spl_spi.c (78%)

-- 
2.8.0.rc3.226.g39d4020

^ permalink raw reply	[flat|nested] 71+ messages in thread

end of thread, other threads:[~2016-10-07  0:35 UTC | newest]

Thread overview: 71+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-25  0:19 [U-Boot] [PATCH v2 00/27] spl: Use linker list and parameters for SPL image loading Simon Glass
2016-09-25  0:19 ` [U-Boot] [PATCH v2 01/27] spl: Move spl_board_load_image() into a generic header Simon Glass
2016-10-07  0:32   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 02/27] spl: Add a parameter to spl_set_header_raw_uboot() Simon Glass
2016-10-07  0:32   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 03/27] spl: Add a parameter to spl_parse_image_header() Simon Glass
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 04/27] spl: Add a parameter to jump_to_image_linux() Simon Glass
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 05/27] spl: Add function comments to spl_start_uboot() Simon Glass
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 06/27] spl: Kconfig: Move SPL_DISPLAY_PRINT to Kconfig Simon Glass
2016-09-28  1:45   ` Tom Rini
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 07/27] spl: Convert boot_device into a struct Simon Glass
2016-09-28  1:45   ` Tom Rini
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 08/27] spl: Add a way to declare an SPL image loader Simon Glass
2016-09-28  1:45   ` Tom Rini
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:19 ` [U-Boot] [PATCH v2 09/27] spl: Convert spl_ram_load_image() to use linker list Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 10/27] spl: Convert spl_mmc_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 11/27] spl: Convert spl_ubi_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 12/27] spl: Convert spl_nand_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:33   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 13/27] spl: Convert spl_onenand_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 14/27] spl: Convert spl_nor_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 15/27] spl: Convert spl_ymodem_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 16/27] spl: Convert spl_usb_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 17/27] spl: Convert spl_sata_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 18/27] spl: spi: Move the generic SPI loader into common/spl Simon Glass
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 19/27] spl: Convert spl_spi_load_image() to use linker list Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 20/27] spi: Move freescale-specific code into a private header Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 21/27] spl: Convert spl_net_load_image() to use linker list Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 22/27] spl: Convert spl_board_load_image() " Simon Glass
2016-09-28  1:46   ` Tom Rini
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 23/27] spl: Pass spl_image as a parameter to load_image() methods Simon Glass
2016-10-07  0:34   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 24/27] spl: Update ext functions to take an spl_image parameter Simon Glass
2016-10-07  0:35   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 25/27] spl: Update fat " Simon Glass
2016-10-07  0:35   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 26/27] spl: Update spl_load_simple_fit() to take an spl_image param Simon Glass
2016-10-07  0:35   ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-09-25  0:20 ` [U-Boot] [PATCH v2 27/27] spl: Make spl_boot_list a local variable Simon Glass
2016-10-07  0:35   ` [U-Boot] [U-Boot, v2, " Tom Rini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.