mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 05:50:17 +00:00 
			
		
		
		
	Move the option to Kconfig renaming it to CONFIG_HAVE_GENERIC_BOARD. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Alexey Brodkin <abrodkin@synopsys.com>
		
			
				
	
	
		
			193 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
# (C) Copyright 2014 Google, Inc
 | 
						|
# Simon Glass <sjg@chromium.org>
 | 
						|
#
 | 
						|
# SPDX-License-Identifier:	GPL-2.0+
 | 
						|
#
 | 
						|
 | 
						|
DEPRECATION NOTICE FOR arch/<arch>/lib/board.c
 | 
						|
 | 
						|
For board maintainers: Please submit patches for boards you maintain before
 | 
						|
July 2014, to make them use generic board.
 | 
						|
 | 
						|
For architecture maintainers: Please submit patches to remove your
 | 
						|
architecture-specific board.c file before October 2014.
 | 
						|
 | 
						|
 | 
						|
Background
 | 
						|
----------
 | 
						|
 | 
						|
U-Boot has traditionally had a board.c file for each architecture. This has
 | 
						|
introduced quite a lot of duplication, with each architecture tending to do
 | 
						|
initialisation slightly differently. To address this, a new 'generic board
 | 
						|
init' feature was introduced a year ago in March 2013 (further motivation is
 | 
						|
provided in the cover letter below).
 | 
						|
 | 
						|
 | 
						|
What has changed?
 | 
						|
-----------------
 | 
						|
 | 
						|
The main change is that the arch/<arch>/lib/board.c file is being removed in
 | 
						|
favour of common/board_f.c (for pre-relocation init) and common/board_r.c
 | 
						|
(for post-relocation init).
 | 
						|
 | 
						|
Related to this, the global_data and bd_t structures now have a core set of
 | 
						|
fields which are common to all architectures. Architecture-specific fields
 | 
						|
have been moved to separate structures.
 | 
						|
 | 
						|
 | 
						|
Supported Arcthitectures
 | 
						|
------------------------
 | 
						|
 | 
						|
If you are unlucky then your architecture may not support generic board.
 | 
						|
The following architectures are supported now:
 | 
						|
 | 
						|
   arc
 | 
						|
   arm
 | 
						|
   avr32
 | 
						|
   blackfin
 | 
						|
   m68k
 | 
						|
   microblaze
 | 
						|
   mips
 | 
						|
   nios2
 | 
						|
   powerpc
 | 
						|
   sandbox
 | 
						|
   x86
 | 
						|
 | 
						|
If your architecture is not supported, you need to select
 | 
						|
HAVE_GENERIC_BOARD in arch/Kconfig
 | 
						|
and test it with a suitable board, as follows.
 | 
						|
 | 
						|
 | 
						|
Adding Support for your Board
 | 
						|
-----------------------------
 | 
						|
 | 
						|
To enable generic board for your board, define CONFIG_SYS_GENERIC_BOARD in
 | 
						|
your board config header file.
 | 
						|
 | 
						|
Test that U-Boot still functions correctly on your board, and fix any
 | 
						|
problems you find. Don't be surprised if there are no problems - generic
 | 
						|
board has had a reasonable amount of testing with common boards.
 | 
						|
 | 
						|
 | 
						|
DeadLine
 | 
						|
--------
 | 
						|
 | 
						|
Please don't take this the wrong way - there is no intent to make your life
 | 
						|
miserable, and we have the greatest respect and admiration for U-Boot users.
 | 
						|
However, with any migration there has to be a period where the old way is
 | 
						|
deprecated and removed. Every patch to the deprecated code introduces a
 | 
						|
potential breakage in the new unused code. Therefore:
 | 
						|
 | 
						|
Boards or architectures not converted over to general board by the
 | 
						|
end of 2014 may be forcibly changed over (potentially causing run-time
 | 
						|
breakage) or removed.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Further Background
 | 
						|
------------------
 | 
						|
 | 
						|
The full text of the original generic board series is reproduced below.
 | 
						|
 | 
						|
--8<-------------
 | 
						|
 | 
						|
This series creates a generic board.c implementation which contains
 | 
						|
the essential functions of the major arch/xxx/lib/board.c files.
 | 
						|
 | 
						|
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 due to errors in
 | 
						|
the board config, which I have sent patches for. The main issue is
 | 
						|
just the difference between __bss_end and __bss_end__.
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
------------->8--
 | 
						|
 | 
						|
Simon Glass, sjg@chromium.org
 | 
						|
March 2014
 |