[U-Boot] [PATCH v9 0/31] Create generic board init for ARM, x86, PPC
Simon Glass
sjg at chromium.org
Mon Mar 11 18:50:24 CET 2013
Hi Tom,
On Mon, Mar 11, 2013 at 10:03 AM, Simon Glass <sjg at chromium.org> wrote:
> This series creates a generic board init implementation which contains
> the essential functions of the major arch/xxx/lib/board.c files. It is
> split into two parts: board_f.c for pre-relocation and board_r.c for
> post-relocation.
>
> What is the motivation for this change?
>
> 1. There is a lot of repeated code in the board.c files. Any change to
> things like setting up the baud rate requires a change in 10 separate
> places.
>
> 2. Since there are 14 separate files, adding a new feature which requires
> initialisation is painful since it must be independently added in 14
> places.
>
> 3. As time goes by the architectures naturely diverge since there is
> limited
> pressure to compare features or even CONFIG options against simiilar things
> in other board.c files.
>
> 4. New architectures must implement all the features all over again, and
> sometimes in subtley different ways. This places an unfair burden on
> getting
> a new architecture fully functional and running with U-Boot.
>
> 5. While it is a bit of a tricky change, I believe it is worthwhile and
> achievable. There is no requirement that all code be common, only that
> the code that is common should be located in common/board.c rather than
> arch/xxx/lib/board.c.
>
> All the functions of board_init_f() and board_init_r() are broken into
> separate function calls so that they can easily be included or excluded
> for a particular architecture. It also makes it easier to adopt Graeme's
> initcall proposal assuming this comes about.
>
> http://lists.denx.de/pipermail/u-boot/2012-January/114499.html
>
> This series is not dependent on generic relocation. So relocation
> happens as one big chunk and is still completely arch-specific. See the
> relocation series for a proposed solution to this for ARM:
>
> http://lists.denx.de/pipermail/u-boot/2011-December/112928.html
>
> or x86's implementation which is in mainline. Unifying relocation is
> probably the next step after this series.
>
> Instead of moving over a whole architecture, this series takes the approach
> of simply enabling generic board support for an architecture. It is then up
> to each board to opt in by defining CONFIG_SYS_GENERIC_BOARD in the board
> config file. If this is not done, then the code will be generated as
> before. This allows both sets of code to co-exist until we are comfortable
> with the generic approach, and enough boards run.
>
> ARM is a relatively large board.c file and one which I can test, therefore
> I think it is a good target for this series. On the other hand, x86 is
> relatively small and simple, but different enough that it introduces a
> few issues to be solved. So I have chosen both ARM and x86 for this series.
> After a suggestion from Wolfgang I have added PPC also. This is the
> largest and most feature-full board, so hopefully we have all bases
> covered in this series. Other archs are mostly a subset of these.
>
> A generic global_data structure is now in mainline, and this is required
> for this series.
>
> Similarly we need a generic bd_info structure, since generic code will
> be accessing it. I have done this with a simple generic file for now.
>
> There was dicussion on the list about passing gd_t around as a parameter
> to pre-relocation init functions. I think this makes sense, but it can
> be done as a separate change, and this series does not require it.
>
> While this series needs to stand on its own, the goal is the unification
> of the board init code. So I hope we can address issues with this in mind,
> rather than focusing too narrowly on particular ARM, x86 or PPC issues.
> I have added TODO markers in places where I think there are opportunities
> to relationalise the board init now it is all in one place, but these don't
> need to be addressed for the feature to work, and are best done as smaller
> patches than can be reviewed by individual arch maintainers, I think.
>
> I have run-tested ARM on Tegra Seaboard and x86/coreboot only. To try it
> out, define CONFIG_SYS_GENERIC_BOARD in your board file and rebuild. Most
> likely on PPC at least it will hang, but if you are lucky it will print
> something first :-) I hope to test an SPL board (snow / exynos5250) when
> I can get that booting from mainline.
>
> I have run this though buildman with CONFIG_SYS_GENERIC_BOARD on for all
> ARM, PPC and x86 boards. The only failure is highbank (an ARM board), which
> seems to use SCSI but scsi_init() is not available.
>
> Code size increases by about 1KB on ARM and about 1.3KB on PPC with generic
> board enabled. This is mostly due to the move to using separate functions
> for each part of the init, which will make it easier to move to a pure
> initcall approach later if we want to.
>
> Since this series was first sent there have been additions to the board
> code for ARM and PPC. I have added in these additions. This is a manual
> process, and I expect that people will find problems (and send patches)
> as they try out their boards.
>
I have created a branch on x86 for this as follows, in case this helps. But
I believe Wolfgang is hoping to look at getting it running on PowerPC, so
it might be worth holding off for more news.
The following changes since commit fc959081d41aab2d6f4614c5fb3dd1b77ffcdcf4:
x86: Enable CONFIG_OF_CONTROL on coreboot (2013-03-04 15:57:52 -0800)
are available in the git repository at:
git://git.denx.de/u-boot-x86.git us-board-v10
for you to fetch changes up to 0a2cdf0f505a018e5a781750ada081ac6e81a866:
Use 'unsigned int' for global_data's baudrate (2013-03-11 10:42:20 -0700)
----------------------------------------------------------------
Simon Glass (31):
Introduce generic u-boot.h file
Replace __bss_end__ with __bss_end
Introduce generic link section.h symbol files
arm: Use sections header to obtain link symbols
Change stub example to use asm-generic/sections.h
Introduce a basic initcall implementation
__HAVE_ARCH_GENERIC_BOARD controls availabilty of generic board
Declare watchdog functions in watchdog.h
Introduce generic pre-relocation board_f.c
Introduce generic post-relocation board_r.c
Add spl load feature
arm: Remove use of board_early_init_r/last_stage_init()
arm: Enable generic board support
Add CONFIG_SYS_SYM_OFFSETS to support offset symbols
Adjust board_f.c for ppc
Adjust board_r.c for ppc
ppc: Enable generic board support
x86: Adjust board_f.c for x86
x86: Adjust board_r.c for x86
x86: Use sections header to obtain link symbols
tegra: Enable generic board for Tegra
x86: Enable generic board support
x86: Enable generic board
exynos5: Enable generic board for Exynos5 device tree boards
blackfin: Fix up board_type global data
blackfin: Remove noreturn attribute from cpu_init_f()
avr32: Fix cast warning in board.c
serial: ns16550: Remove unwanted cast
sparc: Fix out-of-tree building
sparc: Fix build warnings in serial.c
Use 'unsigned int' for global_data's baudrate
README | 17 +
arch/arm/config.mk | 3 +
arch/arm/cpu/arm1136/start.S | 2 +-
arch/arm/cpu/arm1136/u-boot-spl.lds | 2 +-
arch/arm/cpu/arm1176/start.S | 2 +-
arch/arm/cpu/arm720t/start.S | 2 +-
arch/arm/cpu/arm920t/ep93xx/u-boot.lds | 2 +-
arch/arm/cpu/arm920t/start.S | 2 +-
arch/arm/cpu/arm925t/start.S | 2 +-
arch/arm/cpu/arm926ejs/davinci/spl.c | 2 +-
arch/arm/cpu/arm926ejs/mxs/start.S | 2 +-
arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds | 2 +-
arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds | 2 +-
arch/arm/cpu/arm926ejs/start.S | 4 +-
arch/arm/cpu/arm946es/start.S | 2 +-
arch/arm/cpu/arm_intcm/start.S | 2 +-
arch/arm/cpu/armv7/omap-common/u-boot-spl.lds | 2 +-
arch/arm/cpu/armv7/socfpga/u-boot-spl.lds | 2 +-
arch/arm/cpu/armv7/start.S | 2 +-
arch/arm/cpu/ixp/start.S | 2 +-
arch/arm/cpu/ixp/u-boot.lds | 2 +-
arch/arm/cpu/pxa/start.S | 2 +-
arch/arm/cpu/s3c44b0/start.S | 2 +-
arch/arm/cpu/sa1100/start.S | 2 +-
arch/arm/cpu/u-boot.lds | 4 +-
arch/arm/include/asm/sections.h | 27 +
arch/arm/include/asm/spl.h | 2 +-
arch/arm/include/asm/u-boot-arm.h | 4 -
arch/arm/include/asm/u-boot.h | 9 +
arch/arm/lib/Makefile | 3 +
arch/arm/lib/board.c | 1 +
arch/arm/lib/crt0.S | 4 +-
arch/arm/lib/spl.c | 2 +-
arch/avr32/cpu/start.S | 2 +-
arch/avr32/cpu/u-boot.lds | 2 +-
arch/avr32/include/asm/sections.h | 6 +-
arch/avr32/lib/board.c | 8 +-
arch/blackfin/cpu/cpu.c | 1 -
arch/blackfin/include/asm/global_data.h | 1 +
arch/blackfin/include/asm/sections.h | 27 +
arch/blackfin/lib/board.c | 2 +-
arch/m68k/include/asm/sections.h | 27 +
arch/m68k/lib/board.c | 5 +-
arch/microblaze/include/asm/sections.h | 27 +
arch/mips/include/asm/sections.h | 27 +
arch/mips/include/asm/u-boot-mips.h | 4 +-
arch/nds32/cpu/n1213/start.S | 2 +-
arch/nds32/cpu/n1213/u-boot.lds | 2 +-
arch/nds32/include/asm/sections.h | 27 +
arch/nds32/include/asm/u-boot-nds32.h | 8 +-
arch/nds32/lib/board.c | 2 +-
arch/nios2/cpu/start.S | 6 +-
arch/nios2/cpu/u-boot.lds | 2 +-
arch/nios2/include/asm/sections.h | 27 +
arch/openrisc/include/asm/sections.h | 27 +
arch/powerpc/config.mk | 3 +
arch/powerpc/cpu/74xx_7xx/start.S | 4 +-
arch/powerpc/cpu/74xx_7xx/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc512x/start.S | 4 +-
arch/powerpc/cpu/mpc512x/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc5xx/start.S | 4 +-
arch/powerpc/cpu/mpc5xx/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc5xxx/spl_boot.c | 2 +-
arch/powerpc/cpu/mpc5xxx/start.S | 4 +-
arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds | 2 +-
arch/powerpc/cpu/mpc5xxx/u-boot-spl.lds | 2 +-
arch/powerpc/cpu/mpc5xxx/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc8220/start.S | 4 +-
arch/powerpc/cpu/mpc8220/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc824x/start.S | 4 +-
arch/powerpc/cpu/mpc824x/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc8260/start.S | 4 +-
arch/powerpc/cpu/mpc8260/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc83xx/start.S | 4 +-
arch/powerpc/cpu/mpc83xx/u-boot-spl.lds | 4 +-
arch/powerpc/cpu/mpc83xx/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc85xx/start.S | 4 +-
arch/powerpc/cpu/mpc85xx/u-boot-nand.lds | 2 +-
arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds | 2 +-
arch/powerpc/cpu/mpc85xx/u-boot-spl.lds | 2 +-
arch/powerpc/cpu/mpc85xx/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc86xx/start.S | 4 +-
arch/powerpc/cpu/mpc86xx/u-boot.lds | 2 +-
arch/powerpc/cpu/mpc8xx/start.S | 4 +-
arch/powerpc/cpu/ppc4xx/start.S | 4 +-
arch/powerpc/cpu/ppc4xx/u-boot.lds | 2 +-
arch/powerpc/include/asm/sections.h | 27 +
arch/powerpc/include/asm/spl.h | 2 +-
arch/powerpc/include/asm/u-boot.h | 7 +
arch/powerpc/lib/Makefile | 2 +
arch/powerpc/lib/board.c | 18 +-
arch/sandbox/include/asm/sections.h | 2 +
arch/sh/cpu/sh2/u-boot.lds | 2 +-
arch/sh/cpu/sh3/u-boot.lds | 2 +-
arch/sh/cpu/sh4/u-boot.lds | 2 +-
arch/sh/include/asm/sections.h | 27 +
arch/sh/lib/board.c | 1 +
arch/sparc/cpu/leon2/Makefile | 7 -
arch/sparc/cpu/leon2/serial.c | 10 -
arch/sparc/cpu/leon3/Makefile | 7 -
arch/sparc/cpu/leon3/serial.c | 10 -
arch/sparc/include/asm/sections.h | 27 +
arch/x86/config.mk | 3 +
arch/x86/cpu/coreboot/sdram.c | 1 +
arch/x86/cpu/u-boot.lds | 4 +-
arch/x86/include/asm/config.h | 1 +
arch/x86/include/asm/sections.h | 27 +
arch/x86/include/asm/u-boot-x86.h | 9 -
arch/x86/include/asm/u-boot.h | 11 +
arch/x86/lib/Makefile | 3 +
arch/x86/lib/board.c | 3 +-
arch/x86/lib/init_helpers.c | 3 +-
arch/x86/lib/relocate.c | 9 +-
board/BuS/eb_cpu5282/u-boot.lds | 2 +-
board/LEOX/elpt860/u-boot.lds | 2 +-
board/RPXClassic/u-boot.lds | 2 +-
board/RPXlite/u-boot.lds | 2 +-
board/RPXlite_dw/u-boot.lds | 2 +-
board/RRvision/u-boot.lds | 2 +-
board/actux1/u-boot.lds | 2 +-
board/actux2/u-boot.lds | 2 +-
board/actux3/u-boot.lds | 2 +-
board/adder/u-boot.lds | 2 +-
board/ait/cam_enc_4xx/u-boot-spl.lds | 2 +-
board/altera/nios2-generic/u-boot.lds | 2 +-
board/amcc/acadia/u-boot-nand.lds | 2 +-
board/amcc/bamboo/u-boot-nand.lds | 2 +-
board/amcc/canyonlands/u-boot-nand.lds | 2 +-
board/amcc/kilauea/u-boot-nand.lds | 2 +-
board/amcc/sequoia/u-boot-nand.lds | 2 +-
board/amcc/sequoia/u-boot-ram.lds | 2 +-
board/astro/mcf5373l/u-boot.lds | 2 +-
board/cm4008/flash.c | 1 +
board/cm41xx/flash.c | 1 +
board/cobra5272/u-boot.lds | 2 +-
board/cogent/u-boot.lds | 2 +-
board/dave/PPChameleonEVB/u-boot.lds | 2 +-
board/davinci/da8xxevm/u-boot-spl-da850evm.lds | 2 +-
board/davinci/da8xxevm/u-boot-spl-hawk.lds | 2 +-
board/dvlhost/u-boot.lds | 2 +-
board/eltec/mhpc/u-boot.lds | 2 +-
board/emk/top860/u-boot.lds | 2 +-
board/ep88x/u-boot.lds | 2 +-
board/esd/dasa_sim/u-boot.lds | 2 +-
board/esd/pmc440/u-boot-nand.lds | 2 +-
board/esd/tasreg/u-boot.lds | 2 +-
board/esteem192e/u-boot.lds | 2 +-
board/evb64260/u-boot.lds | 2 +-
board/fads/u-boot.lds | 2 +-
board/flagadm/u-boot.lds | 2 +-
board/freescale/m5208evbe/u-boot.lds | 2 +-
board/freescale/m52277evb/u-boot.lds | 2 +-
board/freescale/m5235evb/u-boot.lds | 2 +-
board/freescale/m5249evb/u-boot.lds | 2 +-
board/freescale/m5253demo/u-boot.lds | 2 +-
board/freescale/m5253evbe/u-boot.lds | 2 +-
board/freescale/m5271evb/u-boot.lds | 2 +-
board/freescale/m5272c3/u-boot.lds | 2 +-
board/freescale/m5275evb/u-boot.lds | 2 +-
board/freescale/m5282evb/u-boot.lds | 2 +-
board/freescale/m53017evb/u-boot.lds | 2 +-
board/freescale/m5329evb/u-boot.lds | 2 +-
board/freescale/m5373evb/u-boot.lds | 2 +-
board/freescale/m54418twr/u-boot.lds | 2 +-
board/freescale/m54451evb/u-boot.lds | 2 +-
board/freescale/m54455evb/u-boot.lds | 2 +-
board/freescale/m547xevb/u-boot.lds | 2 +-
board/freescale/m548xevb/u-boot.lds | 2 +-
board/freescale/mx31ads/u-boot.lds | 2 +-
board/gaisler/gr_cpci_ax2000/u-boot.lds | 2 +-
board/gaisler/gr_ep2s60/u-boot.lds | 2 +-
board/gaisler/gr_xc3s_1500/u-boot.lds | 2 +-
board/gaisler/grsim/u-boot.lds | 2 +-
board/gaisler/grsim_leon2/u-boot.lds | 2 +-
board/gen860t/u-boot-flashenv.lds | 2 +-
board/gen860t/u-boot.lds | 2 +-
board/genietv/u-boot.lds | 2 +-
board/hermes/u-boot.lds | 2 +-
board/hymod/u-boot.lds | 2 +-
board/icu862/u-boot.lds | 2 +-
board/idmr/u-boot.lds | 2 +-
board/ip860/u-boot.lds | 2 +-
board/ivm/u-boot.lds | 2 +-
board/korat/u-boot-F7FC.lds | 2 +-
board/kup/kup4k/u-boot.lds | 2 +-
board/kup/kup4x/u-boot.lds | 2 +-
board/lwmon/u-boot.lds | 2 +-
board/manroland/uc100/u-boot.lds | 2 +-
board/matrix_vision/mvsmr/u-boot.lds | 2 +-
board/mbx8xx/u-boot.lds | 2 +-
board/mousse/u-boot.lds | 2 +-
board/mvblue/u-boot.lds | 2 +-
board/netphone/u-boot.lds | 2 +-
board/netta/u-boot.lds | 2 +-
board/netta2/u-boot.lds | 2 +-
board/netvia/u-boot.lds | 2 +-
board/nx823/u-boot.lds | 2 +-
board/quantum/u-boot.lds | 2 +-
board/r360mpi/u-boot.lds | 2 +-
board/rbc823/u-boot.lds | 2 +-
board/renesas/sh7752evb/u-boot.lds | 2 +-
board/renesas/sh7757lcr/u-boot.lds | 2 +-
board/rsdproto/u-boot.lds | 2 +-
board/samsung/smdk5250/smdk5250-uboot-spl.lds | 2 +-
board/samsung/smdk6400/u-boot-nand.lds | 2 +-
board/sandpoint/u-boot.lds | 2 +-
board/sixnet/u-boot.lds | 2 +-
board/snmc/qs850/u-boot.lds | 2 +-
board/snmc/qs860t/u-boot.lds | 2 +-
board/spc1920/u-boot.lds | 2 +-
board/spd8xx/u-boot.lds | 2 +-
board/stx/stxxtc/u-boot.lds | 2 +-
board/svm_sc8xx/u-boot.lds | 2 +-
board/tqc/tqm8xx/u-boot.lds | 2 +-
board/v37/u-boot.lds | 2 +-
board/vpac270/u-boot-spl.lds | 2 +-
board/woodburn/woodburn.c | 2 +-
common/Makefile | 4 +
common/board_f.c | 1016
+++++++++++++++++++++++++++++
common/board_r.c | 919
++++++++++++++++++++++++++
config.mk | 8 +
drivers/serial/ns16550.c | 2 +-
examples/standalone/stubs.c | 7 +-
include/asm-generic/global_data.h | 4 +-
include/asm-generic/sections.h | 117 ++++
include/asm-generic/u-boot.h | 162 +++++
include/common.h | 2 +
include/configs/exynos5250-dt.h | 1 +
include/configs/km/keymile-common.h | 4 -
include/configs/km/km-powerpc.h | 4 +
include/configs/tegra-common.h | 2 +
include/ide.h | 7 +
include/initcall.h | 25 +
include/watchdog.h | 18 +
lib/Makefile | 1 +
lib/initcall.c | 39 ++
nand_spl/board/amcc/acadia/u-boot.lds | 2 +-
nand_spl/board/amcc/bamboo/u-boot.lds | 2 +-
nand_spl/board/amcc/canyonlands/u-boot.lds | 2 +-
nand_spl/board/amcc/kilauea/u-boot.lds | 2 +-
nand_spl/board/amcc/sequoia/u-boot.lds | 2 +-
nand_spl/board/freescale/mpc8315erdb/u-boot.lds | 4 +-
nand_spl/board/freescale/mx31pdk/u-boot.lds | 2 +-
nand_spl/board/karo/tx25/u-boot.lds | 2 +-
nand_spl/board/samsung/smdk6400/u-boot.lds | 2 +-
nand_spl/board/sheldon/simpc8313/u-boot.lds | 4 +-
246 files changed, 2958 insertions(+), 294 deletions(-)
create mode 100644 arch/arm/include/asm/sections.h
create mode 100644 arch/blackfin/include/asm/sections.h
create mode 100644 arch/m68k/include/asm/sections.h
create mode 100644 arch/microblaze/include/asm/sections.h
create mode 100644 arch/mips/include/asm/sections.h
create mode 100644 arch/nds32/include/asm/sections.h
create mode 100644 arch/nios2/include/asm/sections.h
create mode 100644 arch/openrisc/include/asm/sections.h
create mode 100644 arch/powerpc/include/asm/sections.h
create mode 100644 arch/sh/include/asm/sections.h
create mode 100644 arch/sparc/include/asm/sections.h
create mode 100644 arch/x86/include/asm/sections.h
create mode 100644 common/board_f.c
create mode 100644 common/board_r.c
create mode 100644 include/asm-generic/sections.h
create mode 100644 include/asm-generic/u-boot.h
create mode 100644 include/initcall.h
create mode 100644 lib/initcall.c
Regards,
Simon
More information about the U-Boot
mailing list