Add MXS bootlets package

MXS platforms (imx23 and imx28) are relying on bootlets as their first
stage bootloaders, that can then either start a regular second stage
bootloader or directly a Linux kernel. However, the Makefile allows
only to build u-boot and linux images at the same time, which is
not very convenient as we will more likely use only one of them,
so we need to duplicate a bit what is already done so that we are able
to choose what we want to generate.

thomas.petazzoni@free-electrons.com:

 * Remove incorrect dependency on BR2_PACKAGE_ELFTOSB

 * Each board configuration option is for one board, not multiple
   boards, so use singular.

 * The i.MX28 support is for i.MX28 EVK only, reflect that in the
   option prompt and the option name.

 * Use 'generic-package' instead of GENTARGETS

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Maxime Ripard 2012-07-18 18:02:43 +02:00 committed by Thomas Petazzoni
parent cc160a941e
commit 2a636d1521
5 changed files with 229 additions and 1 deletions

View File

@ -5,6 +5,7 @@ source "boot/at91dataflashboot/Config.in"
source "boot/barebox/Config.in"
source "boot/grub/Config.in"
source "boot/lpc32xxcdl/Config.in"
source "boot/mxs-bootlets/Config.in"
source "boot/syslinux/Config.in"
source "boot/uboot/Config.in"
source "boot/xloader/Config.in"

View File

@ -1 +1 @@
include boot/*/*.mk
include boot/*/*.mk

View File

@ -0,0 +1,90 @@
config BR2_TARGET_MXS_BOOTLETS
bool "mxs-bootlets"
depends on BR2_arm
help
Stage1 bootloaders for Freescale iMX23/iMX28 SoCs
if BR2_TARGET_MXS_BOOTLETS
choice
prompt "Source"
default BR2_TARGET_MXS_BOOTLETS_FREESCALE
help
Select the location of the bootlets you want to use
config BR2_TARGET_MXS_BOOTLETS_FREESCALE
bool "Freescale 10.12.01 version"
config BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL
bool "Custom tarball"
config BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT
bool "Custom Git repository"
endchoice
config BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL_URL
depends on BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL
string "URL of custom bootlets tarball"
if BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT
config BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_URL
string "URL of custom Git repository"
config BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_VERSION
string "Custom Git version"
endif
choice
prompt "Bootstream"
help
Select which bootstream to generate
config BR2_TARGET_MXS_BOOTLETS_BAREBOX
depends on BR2_TARGET_BAREBOX
bool "Barebox Bootloader"
config BR2_TARGET_MXS_BOOTLETS_LINUX
depends on BR2_LINUX_KERNEL
bool "Linux Kernel"
config BR2_TARGET_MXS_BOOTLETS_UBOOT
depends on BR2_TARGET_UBOOT
bool "U-boot bootloader"
endchoice
config BR2_TARGET_MXS_BOOTLETS_HAS_IVT
bool "HAB Support"
help
Enable this option if you are building bootlets
for the iMX28 platform that needs to include instructions
for the secure boot mechanism present on these SoCs
choice
prompt "Board"
help
Select the board to build the bootlets for
config BR2_TARGET_MXS_BOOTLETS_STMP37xx
bool "Sigmatel ST-MP3-7xx Board"
config BR2_TARGET_MXS_BOOTLETS_STMP378x
bool "Sigmatel ST-MP3-78x Board"
config BR2_TARGET_MXS_BOOTLETS_IMX28EVK
bool "Freescale iMX28 EVK Board"
config BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD
bool "Custom board"
endchoice
config BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD_NAME
string "Custom board name"
depends on BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD
help
Name of the board to build the bootlets for
endif

View File

@ -0,0 +1,34 @@
// STMP378x ROM command script to load and run U-Boot
sources {
power_prep="./power_prep/power_prep";
sdram_prep="./boot_prep/boot_prep";
barebox="./barebox";
}
section (0) {
//----------------------------------------------------------
// Power Supply initialization
//----------------------------------------------------------
load power_prep;
load ivt (entry = power_prep:_start) > 0x8000;
hab call 0x8000;
//----------------------------------------------------------
// SDRAM initialization
//----------------------------------------------------------
load sdram_prep;
load ivt (entry = sdram_prep:_start) > 0x8000;
hab call 0x8000;
//----------------------------------------------------------
// Load and call u_boot - ELF ARM image
//----------------------------------------------------------
load barebox;
load ivt (entry = barebox:exception_vectors) > 0x8000;
hab call 0x8000;
}

View File

@ -0,0 +1,103 @@
#############################################################
#
# mxs-bootlets
#
#############################################################
ifeq ($(BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL),y)
MXS_BOOTLETS_TARBALL = $(call qstrip,$(BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL_URL))
MXS_BOOTLETS_SITE = $(dir $(MXS_BOOTLETS_TARBALL))
MXS_BOOTLETS_SOURCE = $(notdir $(MXS_BOOTLETS_TARBALL))
else ifeq ($(BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT),y)
MXS_BOOTLETS_SITE = $(BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_URL)
MXS_BOOTLETS_SITE_METHOD = git
MXS_BOOTLETS_VERSION = $(call qstrip,$(BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_VERSION))
else
MXS_BOOTLETS_VERSION = 10.12.01
MXS_BOOTLETS_SITE = http://download.ossystems.com.br/bsp/freescale/source/
MXS_BOOTLETS_SOURCE = imx-bootlets-src-$(MXS_BOOTLETS_VERSION).tar.gz
endif
ifeq ($(BR2_TARGET_MXS_BOOTLETS_STMP37xx),y)
MXS_BOOTLETS_BOARD = stmp37xx_dev
else ifeq ($(BR2_TARGET_MXS_BOOTLETS_STMP378x),y)
MXS_BOOTLETS_BOARD = stmp378x_dev
else ifeq ($(BR2_TARGET_MXS_BOOTLETS_IMX28EVK),y)
MXS_BOOTLETS_BOARD = iMX28_EVK
else ifeq ($(BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD),y)
MXS_BOOTLETS_BOARD = $(call qstrip,$(BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD_NAME))
endif
ifeq ($(BR2_TARGET_MXS_BOOTLETS_HAS_IVT),y)
MXS_BOOTLETS_IVT_SUFFIX = _ivt
MXS_BOOTLETS_ELFTOSB_OPTIONS += -f imx28
endif
MXS_BOOTLETS_DEPENDENCIES = host-elftosb
ifeq ($(BR2_TARGET_MXS_BOOTLETS_BAREBOX),y)
MXS_BOOTLETS_DEPENDENCIES += barebox
MXS_BOOTLETS_BOOTDESC = barebox$(MXS_BOOTLETS_IVT_SUFFIX).bd
MXS_BOOTLETS_BOOTSTREAM = $(MXS_BOOTLETS_BOARD)_barebox$(MXS_BOOTLETS_IVT_SUFFIX).sb
else ifeq ($(BR2_TARGET_MXS_BOOTLETS_LINUX),y)
MXS_BOOTLETS_DEPENDENCIES += linux
MXS_BOOTLETS_BOOTDESC = linux$(MXS_BOOTLETS_IVT_SUFFIX).bd
MXS_BOOTLETS_BOOTSTREAM = $(MXS_BOOTLETS_BOARD)_linux$(MXS_BOOTLETS_IVT_SUFFIX).sb
else ifeq ($(BR2_TARGET_MXS_BOOTLETS_UBOOT),y)
MXS_BOOTLETS_DEPENDENCIES += uboot
MXS_BOOTLETS_BOOTDESC = uboot$(MXS_BOOTLETS_IVT_SUFFIX).bd
MXS_BOOTLETS_BOOTSTREAM = $(MXS_BOOTLETS_BOARD)_uboot$(MXS_BOOTLETS_IVT_SUFFIX).sb
endif
ifeq ($(BR2_TARGET_MXS_BOOTLETS_BAREBOX),y)
define MXS_BOOTLETS_SED_BAREBOX
sed -i 's,[^ *]barebox.*;,\tbarebox="$(BAREBOX_DIR)/barebox";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC)
endef
endif
ifeq ($(BR2_TARGET_MXS_BOOTLETS_LINUX),y)
define MXS_BOOTLETS_BUILD_LINUX_PREP
BOARD=$(MXS_BOOTLETS_BOARD) CROSS_COMPILE="$(TARGET_CROSS)" \
$(MAKE1) -C $(@D) linux_prep
endef
define MXS_BOOTLETS_SED_LINUX
sed -i 's,[^ *]linux_prep.*;,\tlinux_prep="$(@D)/linux_prep/output-target/linux_prep";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC)
sed -i 's,[^ *]zImage.*;,\tzImage="$(LINUX_DIR)/arch/arm/boot/zImage";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC)
endef
endif
ifeq ($(BR2_TARGET_MXS_BOOTLETS_UBOOT),y)
define MXS_BOOTLETS_SED_UBOOT
sed -i 's,[^ *]u_boot.*;,\tu_boot="$(UBOOT_DIR)/u-boot";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC)
endef
endif
define MXS_BOOTLETS_INSTALL_BAREBOX_BOOTDESC
cp boot/mxs-bootlets/barebox_ivt.bd $(@D)/
endef
MXS_BOOTLETS_POST_EXTRACT_HOOKS += MXS_BOOTLETS_INSTALL_BAREBOX_BOOTDESC
define MXS_BOOTLETS_BUILD_CMDS
BOARD=$(MXS_BOOTLETS_BOARD) CROSS_COMPILE="$(TARGET_CROSS)" \
$(MAKE1) -C $(@D) power_prep
BOARD=$(MXS_BOOTLETS_BOARD) CROSS_COMPILE="$(TARGET_CROSS)" \
$(MAKE1) -C $(@D) boot_prep
$(MXS_BOOTLETS_BUILD_LINUX_PREP)
sed -i 's,[^ *]power_prep.*;,\tpower_prep="$(@D)/power_prep/power_prep";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC)
sed -i 's,[^ *]sdram_prep.*;,\tsdram_prep="$(@D)/boot_prep/boot_prep";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC)
$(MXS_BOOTLETS_SED_BAREBOX)
$(MXS_BOOTLETS_SED_LINUX)
$(MXS_BOOTLETS_SED_UBOOT)
$(HOST_DIR)/usr/bin/elftosb $(MXS_BOOTLETS_ELFTOSB_OPTIONS) \
-z -c $(@D)/$(MXS_BOOTLETS_BOOTDESC) \
-o $(@D)/$(MXS_BOOTLETS_BOOTSTREAM)
endef
define MXS_BOOTLETS_INSTALL_TARGET_CMDS
cp $(@D)/$(MXS_BOOTLETS_BOOTSTREAM) $(BINARIES_DIR)/
endef
$(eval $(generic-package))