Hi, On Mon, Jan 16, 2012 at 10:03 PM, Simon Glass <s...@chromium.org> wrote: > Hi, > > On Fri, Jan 6, 2012 at 4:24 PM, Simon Glass <s...@chromium.org> wrote: >> This series creates a generic board.c implementation which contains >> the essential functions of the major arch/xxx/lib/board.c files. > > I haven't had huge numbers of comments on this series, but there are a > few. I plan to tidy these up and resubmit, dropping the RFC tag, > sometime this week. > > Any patches / fixes to make this run properly on x86 / PPC would be > gratefully accepted.
An update - Graeme asked me to wait until the x86 refactor is pulled - still waiting for that. Hopefully soon. Regards, Simon > > Regards, > Simon > >> >> 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 10 separate files, adding a new feature which requires >> initialisation is painful since it must be independently added in 10 >> 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 when it is ready. >> >> http://lists.denx.de/pipermail/u-boot/2012-January/114499.html >> >> This series removes the dependency 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 Graeme's recent x86 series v2: >> >> http://lists.denx.de/pipermail/u-boot/2012-January/114467.html >> >> 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 RFC. >> >> A generic global_data structure is also required. This might upset a few >> people. Here is my basic reasoning: most fields are the same, all >> architectures include and need it, most global_data.h files already have >> #ifdefs to select fields for a particular SOC, so it is hard to >> see why architecures are different in this area. We can perhaps add a >> way to put architecture-specific fields into a separate header file, but >> for now I have judged that to be counter-productive. >> >> Similarly we need a generic bd_info structure, since generic code will >> be accessing it. I have done this in the same way as global_data and the >> same comments apply. >> >> 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 (as with the link script >> cleanup series and the generic relocation series) 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 run-tested ARM on Tegra Seaboard only. To try it out, define >> CONFIG_SYS_GENERIC_BOARD in your board file and rebuild. Most likely on >> x86 and PPC at least it will hang, but if you are lucky it will print >> something first :-) >> >> I have run this though MAKEALL with CONFIG_SYS_GENERIC_BOARD on for all >> ARM, PPC and x86 boards. There are a few failures, some due to errors in >> the board config, some due to things that need fixing. I will address >> these with the final series if required. >> >> Note: the first group of commits are required for this series to build, >> but could be separated out if required. I have included them here for >> convenience. >> >> Comments welcome. >> >> Changes in v2: >> - Change generic board to an opt-in system on a per-board basic >> - Add CONFIG_SYS_GENERIC_BOARD to allow board to select generic board >> - Add PowerPC support >> - Rebase to master >> >> Simon Glass (28): >> arm: Change board baud_rate to ulong >> x86: Change board baud_rate to ulong >> arm: Only display frame buffer info if there is LCD/video support >> x86: Remove compiler warning in sc520_timer.c >> x86: Remove dead code in eNET >> x86: Add initial memory barrier macros >> ppc: Add initial memory barrier macros >> Introduce generic global_data >> Introduce generic u-boot.h file >> Introduce generic link symbol file >> arm: Use sections header to obtain link symbols >> x86: Change stub example to use asm-generic/sections.h >> Introduce a basic initcall implementation >> Define CONFIG_SYS_LEGACY_BOARD everywhere >> Introduce generic pre-relocation board_f.c >> Introduce generic post-relocation board_r.c >> Add spl load feature >> arm: Enable generic board support >> Add CONFIG_SYS_SYM_OFFSETS to support offset symbols >> x86: Use sections header to obtain link symbols >> Add x86 fields to generic global_data >> x86: Enable generic board support >> Add ppc fields to generic global data >> Adjust board_f for ppc >> Adjust board_r.c for PowerPC >> ppc: Enable generic board board >> tegra: Mark board init files for ARMv4t >> tegra: Enable generic board for Seaboard. >> >> README | 17 + >> arch/arm/cpu/armv7/tegra2/config.mk | 2 + >> arch/arm/include/asm/global_data.h | 7 + >> arch/arm/include/asm/u-boot-arm.h | 4 - >> arch/arm/include/asm/u-boot.h | 11 +- >> arch/arm/lib/Makefile | 4 +- >> arch/arm/lib/board.c | 1 + >> arch/avr32/config.mk | 3 + >> arch/blackfin/config.mk | 3 + >> arch/m68k/config.mk | 3 + >> arch/microblaze/config.mk | 3 + >> arch/mips/config.mk | 3 + >> arch/nds32/config.mk | 3 + >> arch/nios2/config.mk | 3 + >> arch/powerpc/include/asm/global_data.h | 7 + >> arch/powerpc/include/asm/io.h | 8 + >> arch/powerpc/include/asm/u-boot.h | 7 + >> arch/powerpc/lib/Makefile | 4 +- >> arch/sandbox/config.mk | 3 + >> arch/sh/config.mk | 3 + >> arch/sparc/config.mk | 3 + >> arch/x86/cpu/sc520/sc520_timer.c | 2 +- >> arch/x86/include/asm/global_data.h | 7 + >> arch/x86/include/asm/io.h | 8 + >> arch/x86/include/asm/u-boot-x86.h | 8 - >> arch/x86/include/asm/u-boot.h | 13 +- >> arch/x86/lib/Makefile | 4 +- >> arch/x86/lib/board.c | 1 + >> board/cm4008/flash.c | 1 + >> board/cm41xx/flash.c | 1 + >> board/eNET/eNET.c | 5 - >> common/Makefile | 4 + >> common/board_f.c | 888 >> ++++++++++++++++++++++++++++++++ >> common/board_r.c | 863 >> +++++++++++++++++++++++++++++++ >> common/cmd_bdinfo.c | 6 +- >> config.mk | 8 + >> examples/standalone/stubs.c | 7 +- >> include/asm-generic/global_data.h | 241 +++++++++ >> include/asm-generic/sections.h | 124 +++++ >> include/asm-generic/u-boot.h | 155 ++++++ >> include/common.h | 16 + >> include/configs/seaboard.h | 2 + >> include/initcall.h | 25 + >> lib/Makefile | 1 + >> lib/initcall.c | 41 ++ >> 45 files changed, 2504 insertions(+), 29 deletions(-) >> create mode 100644 common/board_f.c >> create mode 100644 common/board_r.c >> create mode 100644 include/asm-generic/global_data.h >> 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 >> >> -- >> 1.7.3.1 >> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot