Tegra,Tegra124: proposed layout for file hierarchy with example

Hardware / Coreboot - Ronald G. Minnich [google.com] - 13 August 2014 12:36 UTC

This change shows the source structure for nvidia Tegra and Tegra124 SOC. The problem we are trying to solve is that there is a large amount of common code in the form of .c and .h files across many different Tegra SOCs. The solution is to provide common code in a single directory, but not to compile in the common code directory; rather, we compile in a directory for a given SOC. Different SOCs will sometimes need different bits of code from the common directory.

Tegra common code lives in tegra/, but there is no makefile there: if a Tegra common file is needed in a SOC, it is referenced via a Makefile in a specific Tegra SOC.

Another issue is includes. Include files in the common directory might be accessed by a piece of code in an SOC directory. More problematically, code in the common directory might require a file in an SOC directory. We don't want to put the SOC name in an #include path, e.g. in a C file in tegra/ is very undesirable, since we might be compiling for a tegra114.

On some systems this is solved by a pre-pass which creates a set of symbolic links; on others with nested #ifdef in the common code which include different .h files depending on CPP variables. In previous years, both LinuxBIOS and coreboot have tried these solutions and found them inconvenient and error-prone.

We choose to solve it by requiring explicit naming of part of the path of files that are in the common directory. This requirement, coupled with two -I directives in the Makefile.inc, allows common and SOC C code to incorporate both common and SOC .h files.

.c and .h files -- SOC or common -- name include files in the common directory with the prefix tegra/, e.g. SOC files will be included from the SOC directory if they have no prefix: The full patch of clock.h will depend on what SOC is being compiled, which is desirable.

In this way, a common file can pick up a specific SOC file without creating symlinks or other such tricky magic.

We show this usage with one file, soc/nvidia/tega124/clock.c. This compiles.

The last question is where to put the prototype for the function defined in this file -- soc.h?

Change-Id: Iecb635cec70f24a5b3e18caeda09d04a00d29409

3eab7ed Tegra,Tegra124: proposed layout for file hierarchy with example
src/soc/nvidia/tegra124/Makefile.inc | 5 +
src/soc/nvidia/tegra124/clk_rst.h | 497 ++++++++++++++++++++++++++++++++++
src/soc/nvidia/tegra124/clock.c | 42 +++
src/soc/nvidia/tegra124/clock.h | 22 ++
src/soc/nvidia/tegra124/soc.h | 64 +++++
5 files changed, 630 insertions(+)

Upstream: review.coreboot.org


  • Share