Skip to content
Snippets Groups Projects
  • Masahiro Yamada's avatar
    01f14456
    ARM: prepare for moving SoC sources into mach-* · 01f14456
    Masahiro Yamada authored and Tom Rini's avatar Tom Rini committed
    In U-boot, the directory structure, arch/$(ARCH)/cpu/$(CPU)/$(SOC)/
    has been adopted except that $(CPU) is missing from some
    architectures and $(SOC) is missing from some CPUs.
    
    This structure did not fit very well in some cases.
    
    [1] AT91
    
    AT91 SoC family have been developed across some ARM processor
    generations.  Generally speaking, some IPs are often re-used in the
    same SoC family (same SoC vendor) even when the main processor is
    updated.  As a result, a SoC-common directory is needed in the upper
    level.  Currently, AT91 source files are placed as follows:
    
      arch/arm/cpu/arm920t/at91/*
      arch/arm/cpu/arm926ejs/at91/*
      arch/arm/cpu/armv7/at91/*
      arch/arm/cpu/at91-common/*
    
    Once directories are split, the motivation for refactorings across
    CPU directories is lost.  Some files in arm920t/at91/ and
    arm926ejs/at91/ are so similar that they could be merged.
    
    [2] Tegra
    
    Tegra is a little bit special case where different CPUs are used for
    SPL and the main U-boot.  To obey the arch/$(ARCH)/cpu/$(CPU)/$(SOC)
    structure, the source files must be placed across the CPUs,
    again SoC-common directory is necessary in the upper level.
    
    Moreover, there are several families in Tegra: Tegra20, Tegra30,
    Tegra114, Tegra124.  Here again, the tegra-common directory is needed
    to contain commonly-used files.
    
    Tegra directories have been sprinkled in the directory structure.
    
      arch/arm/cpu/arm720t/tegra20
      arch/arm/cpu/arm720t/tegra30
      arch/arm/cpu/arm720t/tegra114
      arch/arm/cpu/arm720t/tegra124
      arch/arm/cpu/arm720t/tegra-common
      arch/arm/cpu/armv7/tegra20
      arch/arm/cpu/armv7/tegra30
      arch/arm/cpu/armv7/tegra114
      arch/arm/cpu/armv7/tegra124
      arch/arm/cpu/armv7/tegra-common
      arch/arm/cpu/tegra20-common
      arch/arm/cpu/tegra30-common
      arch/arm/cpu/tegra114-common
      arch/arm/cpu/tegra124-common
      arch/arm/cpu/tegra-common
    
    As you see, splitting SoC code by the CPU is not going well,
    especially for ARM.
    Why don't we collect SoC-specific files into a single place?
    
    A good example we can follow is Linux's arch/arm/mach-* structure.
    
    This item was discussed in the following thread:
    http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/188548/
    
    
    
    Looks like I got some positive responses and we are almost ready to
    start this movement.
    
    This commit prepares arch/arm/Makefile for describing machdirs in it.
    
    After this commit, we can move SoC directory to arch/arm/mach-$(SOC)
    in simple steps although some cases such as AT91 and Tegra need more
    fixes.
    
    What we generally have to do is:
    
    [1] Move files arch/arm/cpu/$(CPU)/$(SOC)/* to arch/arm/mach-$(SOC)/*
    [2] Add machine entry into arch/arm/Makefile
    [3] Remove "obj-y += $(SOC)" from arch/arm/cpu/$(CPU)/Makefile
    [4] Fix the Kconfig file path in arch/arm/Kconfig
    [5] Modify MAINTAINERS if necessary
    
    Signed-off-by: default avatarMasahiro Yamada <yamada.m@jp.panasonic.com>
    01f14456
    History
    ARM: prepare for moving SoC sources into mach-*
    Masahiro Yamada authored and Tom Rini's avatar Tom Rini committed
    In U-boot, the directory structure, arch/$(ARCH)/cpu/$(CPU)/$(SOC)/
    has been adopted except that $(CPU) is missing from some
    architectures and $(SOC) is missing from some CPUs.
    
    This structure did not fit very well in some cases.
    
    [1] AT91
    
    AT91 SoC family have been developed across some ARM processor
    generations.  Generally speaking, some IPs are often re-used in the
    same SoC family (same SoC vendor) even when the main processor is
    updated.  As a result, a SoC-common directory is needed in the upper
    level.  Currently, AT91 source files are placed as follows:
    
      arch/arm/cpu/arm920t/at91/*
      arch/arm/cpu/arm926ejs/at91/*
      arch/arm/cpu/armv7/at91/*
      arch/arm/cpu/at91-common/*
    
    Once directories are split, the motivation for refactorings across
    CPU directories is lost.  Some files in arm920t/at91/ and
    arm926ejs/at91/ are so similar that they could be merged.
    
    [2] Tegra
    
    Tegra is a little bit special case where different CPUs are used for
    SPL and the main U-boot.  To obey the arch/$(ARCH)/cpu/$(CPU)/$(SOC)
    structure, the source files must be placed across the CPUs,
    again SoC-common directory is necessary in the upper level.
    
    Moreover, there are several families in Tegra: Tegra20, Tegra30,
    Tegra114, Tegra124.  Here again, the tegra-common directory is needed
    to contain commonly-used files.
    
    Tegra directories have been sprinkled in the directory structure.
    
      arch/arm/cpu/arm720t/tegra20
      arch/arm/cpu/arm720t/tegra30
      arch/arm/cpu/arm720t/tegra114
      arch/arm/cpu/arm720t/tegra124
      arch/arm/cpu/arm720t/tegra-common
      arch/arm/cpu/armv7/tegra20
      arch/arm/cpu/armv7/tegra30
      arch/arm/cpu/armv7/tegra114
      arch/arm/cpu/armv7/tegra124
      arch/arm/cpu/armv7/tegra-common
      arch/arm/cpu/tegra20-common
      arch/arm/cpu/tegra30-common
      arch/arm/cpu/tegra114-common
      arch/arm/cpu/tegra124-common
      arch/arm/cpu/tegra-common
    
    As you see, splitting SoC code by the CPU is not going well,
    especially for ARM.
    Why don't we collect SoC-specific files into a single place?
    
    A good example we can follow is Linux's arch/arm/mach-* structure.
    
    This item was discussed in the following thread:
    http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/188548/
    
    
    
    Looks like I got some positive responses and we are almost ready to
    start this movement.
    
    This commit prepares arch/arm/Makefile for describing machdirs in it.
    
    After this commit, we can move SoC directory to arch/arm/mach-$(SOC)
    in simple steps although some cases such as AT91 and Tegra need more
    fixes.
    
    What we generally have to do is:
    
    [1] Move files arch/arm/cpu/$(CPU)/$(SOC)/* to arch/arm/mach-$(SOC)/*
    [2] Add machine entry into arch/arm/Makefile
    [3] Remove "obj-y += $(SOC)" from arch/arm/cpu/$(CPU)/Makefile
    [4] Fix the Kconfig file path in arch/arm/Kconfig
    [5] Modify MAINTAINERS if necessary
    
    Signed-off-by: default avatarMasahiro Yamada <yamada.m@jp.panasonic.com>