diff options
Diffstat (limited to 'arch')
44 files changed, 650 insertions, 126 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 9ce16b9006..5ccdb83dc7 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -222,7 +222,7 @@ KBUILD_IMAGE := barebox.kwb barebox.kwbuart endif barebox.imximg: $(KBUILD_BINARY) FORCE - $(call if_changed,imx_image) + $(call if_changed,imx_image,$(CFG_$(@F)),) boarddir = $(srctree)/arch/arm/boards imxcfg-$(CONFIG_MACH_FREESCALE_MX53_SMD) += $(boarddir)/freescale-mx53-smd/flash-header.imxcfg diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile index 1029e8f46f..5a755c9636 100644 --- a/arch/arm/boards/Makefile +++ b/arch/arm/boards/Makefile @@ -70,6 +70,7 @@ obj-$(CONFIG_MACH_MX23EVK) += freescale-mx23-evk/ obj-$(CONFIG_MACH_MX28EVK) += freescale-mx28-evk/ obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard/ obj-$(CONFIG_MACH_NESO) += guf-neso/ +obj-$(CONFIG_MACH_NETGEAR_RN104) += netgear-rn104/ obj-$(CONFIG_MACH_NOMADIK_8815NHK) += nhk8815/ obj-$(CONFIG_MACH_NVIDIA_BEAVER) += nvidia-beaver/ obj-$(CONFIG_MACH_NVIDIA_JETSON) += nvidia-jetson-tk1/ diff --git a/arch/arm/boards/afi-gf/lowlevel.c b/arch/arm/boards/afi-gf/lowlevel.c index 4aaecb9e88..efe15ec99f 100644 --- a/arch/arm/boards/afi-gf/lowlevel.c +++ b/arch/arm/boards/afi-gf/lowlevel.c @@ -222,7 +222,7 @@ static noinline int gf_sram_init(void) while(__raw_readl(AM33XX_WDT_REG(WWPS)) != 0x0); /* Setup the PLLs and the clocks for the peripherals */ - am33xx_pll_init(MPUPLL_M_500, 24, DDRPLL_M_200); + am33xx_pll_init(MPUPLL_M_500, DDRPLL_M_200); board_config_ddr(); diff --git a/arch/arm/boards/archosg9/board.c b/arch/arm/boards/archosg9/board.c index f80714ec37..6f82f5ee26 100644 --- a/arch/arm/boards/archosg9/board.c +++ b/arch/arm/boards/archosg9/board.c @@ -26,6 +26,7 @@ #include <gpio_keys.h> #include <twl6030_pwrbtn.h> #include <readkey.h> +#include <input/input.h> #include "archos_features.h" #define GPIO_LCD_PWON 38 @@ -72,8 +73,8 @@ static struct twl6030_pwrbtn_platform_data pwrbtn_data = { .code = BB_KEY_ENTER }; static struct gpio_keys_button keys[] = { - { .code = BB_KEY_UP , .gpio = 43, .active_low = 1 }, - { .code = BB_KEY_DOWN, .gpio = 44, .active_low = 1 }, + { .code = KEY_UP , .gpio = 43, .active_low = 1 }, + { .code = KEY_DOWN, .gpio = 44, .active_low = 1 }, }; static struct gpio_keys_platform_data gk_data = { .buttons = keys, diff --git a/arch/arm/boards/at91sam9261ek/init.c b/arch/arm/boards/at91sam9261ek/init.c index a0b0219191..6cb170192a 100644 --- a/arch/arm/boards/at91sam9261ek/init.c +++ b/arch/arm/boards/at91sam9261ek/init.c @@ -39,6 +39,7 @@ #include <readkey.h> #include <led.h> #include <spi/spi.h> +#include <input/input.h> static struct atmel_nand_data nand_pdata = { .ale = 22, @@ -235,13 +236,13 @@ static void ek_add_device_lcdc(void) {} #ifdef CONFIG_KEYBOARD_GPIO struct gpio_keys_button keys[] = { { - .code = BB_KEY_UP, + .code = KEY_UP, .gpio = AT91_PIN_PA26, }, { - .code = BB_KEY_DOWN, + .code = KEY_DOWN, .gpio = AT91_PIN_PA25, }, { - .code = BB_KEY_ENTER, + .code = KEY_ENTER, .gpio = AT91_PIN_PA24, }, }; diff --git a/arch/arm/boards/at91sam9m10g45ek/init.c b/arch/arm/boards/at91sam9m10g45ek/init.c index e00908bc39..fb444d820d 100644 --- a/arch/arm/boards/at91sam9m10g45ek/init.c +++ b/arch/arm/boards/at91sam9m10g45ek/init.c @@ -40,6 +40,7 @@ #include <gpio_keys.h> #include <readkey.h> #include <spi/spi.h> +#include <input/input.h> /* * board revision encoding @@ -183,25 +184,25 @@ static void ek_device_add_leds(void) {} #ifdef CONFIG_KEYBOARD_GPIO struct gpio_keys_button keys[] = { { - .code = BB_KEY_HOME, + .code = KEY_HOME, .gpio = AT91_PIN_PB6, }, { - .code = BB_KEY_RETURN, + .code = KEY_ENTER, .gpio = AT91_PIN_PB7, }, { - .code = BB_KEY_LEFT, + .code = KEY_LEFT, .gpio = AT91_PIN_PB14, }, { - .code = BB_KEY_RIGHT, + .code = KEY_RIGHT, .gpio = AT91_PIN_PB15, }, { - .code = BB_KEY_UP, + .code = KEY_UP, .gpio = AT91_PIN_PB16, }, { - .code = BB_KEY_DOWN, + .code = KEY_DOWN, .gpio = AT91_PIN_PB17, }, { - .code = BB_KEY_RETURN, + .code = KEY_ENTER, .gpio = AT91_PIN_PB18, }, }; diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c index 05b3e5f157..79d598561c 100644 --- a/arch/arm/boards/beaglebone/lowlevel.c +++ b/arch/arm/boards/beaglebone/lowlevel.c @@ -138,11 +138,11 @@ static noinline int beaglebone_sram_init(void) /* Setup the PLLs and the clocks for the peripherals */ if (is_beaglebone_black()) { - am33xx_pll_init(MPUPLL_M_500, 24, DDRPLL_M_400); + am33xx_pll_init(MPUPLL_M_500, DDRPLL_M_400); am335x_sdram_init(0x18B, &ddr3_cmd_ctrl, &ddr3_regs, &ddr3_data); } else { - am33xx_pll_init(MPUPLL_M_500, 24, DDRPLL_M_266); + am33xx_pll_init(MPUPLL_M_500, DDRPLL_M_266); am335x_sdram_init(0x18B, &ddr2_cmd_ctrl, &ddr2_regs, &ddr2_data); } diff --git a/arch/arm/boards/cm-fx6/board.c b/arch/arm/boards/cm-fx6/board.c index edef18f8ac..f4380629e3 100644 --- a/arch/arm/boards/cm-fx6/board.c +++ b/arch/arm/boards/cm-fx6/board.c @@ -84,9 +84,17 @@ late_initcall(cm_fx6_eeprom_init); static int cm_fx6_devices_init(void) { + const char *hostname; + if (!of_machine_is_compatible("compulab,cm-fx6")) return 0; + if (of_machine_is_compatible("compulab,utilite")) + hostname = "utilite"; + else + hostname = "cm-fx6"; + barebox_set_hostname(hostname); + if (IS_ENABLED(CONFIG_PHYLIB)) phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffff, phy_fixup); diff --git a/arch/arm/boards/netgear-rn104/Makefile b/arch/arm/boards/netgear-rn104/Makefile new file mode 100644 index 0000000000..01c7a259e9 --- /dev/null +++ b/arch/arm/boards/netgear-rn104/Makefile @@ -0,0 +1,2 @@ +obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/netgear-rn104/board.c b/arch/arm/boards/netgear-rn104/board.c new file mode 100644 index 0000000000..40a8c178f1 --- /dev/null +++ b/arch/arm/boards/netgear-rn104/board.c @@ -0,0 +1 @@ +/* empty */ diff --git a/arch/arm/boards/netgear-rn104/kwbimage.cfg b/arch/arm/boards/netgear-rn104/kwbimage.cfg new file mode 100644 index 0000000000..83a4149053 --- /dev/null +++ b/arch/arm/boards/netgear-rn104/kwbimage.cfg @@ -0,0 +1,7 @@ +VERSION 1 +BOOT_FROM nand +DESTADDR 00600000 +EXECADDR 006a0000 +NAND_BLKSZ 00020000 +NAND_BADBLK_LOCATION 01 +BINARY binary.0 0000005b 00000068 diff --git a/arch/arm/boards/netgear-rn104/lowlevel.c b/arch/arm/boards/netgear-rn104/lowlevel.c new file mode 100644 index 0000000000..f0d6df0da6 --- /dev/null +++ b/arch/arm/boards/netgear-rn104/lowlevel.c @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2014 Uwe Kleine-Koenig <uwe@kleine-koenig.org> + */ + +#include <common.h> +#include <asm/barebox-arm.h> +#include <asm/barebox-arm-head.h> +#include <mach/lowlevel.h> + +extern char __dtb_armada_370_rn104_bb_start[]; + +ENTRY_FUNCTION(start_netgear_rn104, r0, r1, r2) +{ + void *fdt; + + arm_cpu_lowlevel_init(); + + fdt = __dtb_armada_370_rn104_bb_start - + get_runtime_offset(); + + mvebu_barebox_entry(fdt); +} diff --git a/arch/arm/boards/nvidia-beaver/entry.c b/arch/arm/boards/nvidia-beaver/entry.c index 9b7e253b4f..0f487bbd67 100644 --- a/arch/arm/boards/nvidia-beaver/entry.c +++ b/arch/arm/boards/nvidia-beaver/entry.c @@ -15,9 +15,6 @@ */ #include <common.h> -#include <linux/sizes.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> #include <mach/lowlevel.h> #include <mach/lowlevel-dvc.h> @@ -25,15 +22,11 @@ extern char __dtb_tegra30_beaver_start[]; ENTRY_FUNCTION(start_nvidia_beaver, r0, r1, r2) { - uint32_t fdt; - - tegra_cpu_lowlevel_setup(); + tegra_cpu_lowlevel_setup(__dtb_tegra30_beaver_start); tegra_dvc_init(); tegra30_tps62366a_ramp_vddcore(); tegra30_tps65911_cpu_rail_enable(); - fdt = (uint32_t)__dtb_tegra30_beaver_start - get_runtime_offset(); - - tegra_avp_reset_vector(fdt); + tegra_avp_reset_vector(); } diff --git a/arch/arm/boards/nvidia-jetson-tk1/entry.c b/arch/arm/boards/nvidia-jetson-tk1/entry.c index 8f112a3a91..da40f74e85 100644 --- a/arch/arm/boards/nvidia-jetson-tk1/entry.c +++ b/arch/arm/boards/nvidia-jetson-tk1/entry.c @@ -15,9 +15,6 @@ */ #include <common.h> -#include <linux/sizes.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> #include <mach/lowlevel.h> #include <mach/lowlevel-dvc.h> @@ -25,15 +22,11 @@ extern char __dtb_tegra124_jetson_tk1_start[]; ENTRY_FUNCTION(start_nvidia_jetson, r0, r1, r2) { - uint32_t fdt; - - tegra_cpu_lowlevel_setup(); + tegra_cpu_lowlevel_setup(__dtb_tegra124_jetson_tk1_start); tegra_dvc_init(); tegra124_dvc_pinmux(); tegra124_as3722_enable_essential_rails(0x3c00); - fdt = (uint32_t)__dtb_tegra124_jetson_tk1_start - get_runtime_offset(); - - tegra_avp_reset_vector(fdt); + tegra_avp_reset_vector(); } diff --git a/arch/arm/boards/phytec-som-am335x/lowlevel.c b/arch/arm/boards/phytec-som-am335x/lowlevel.c index 64c1c53f67..d7afbb6af3 100644 --- a/arch/arm/boards/phytec-som-am335x/lowlevel.c +++ b/arch/arm/boards/phytec-som-am335x/lowlevel.c @@ -32,7 +32,6 @@ #include "ram-timings.h" -#define CLK_M_OSC_MHZ 25 #define DDR_IOCTRL 0x18B static const struct am33xx_cmd_control physom_cmd = { @@ -67,11 +66,10 @@ static noinline void physom_board_init(int sdram, void *fdt) writel(WDT_DISABLE_CODE1, AM33XX_WDT_REG(WSPR)); while (readl(AM33XX_WDT_REG(WWPS)) != 0x0); - writel(WDT_DISABLE_CODE2, AM33XX_WDT_REG(WSPR)); while (readl(AM33XX_WDT_REG(WWPS)) != 0x0); - am33xx_pll_init(MPUPLL_M_600, CLK_M_OSC_MHZ, DDRPLL_M_400); + am33xx_pll_init(MPUPLL_M_600, DDRPLL_M_400); am335x_sdram_init(DDR_IOCTRL, &physom_cmd, &timing->regs, diff --git a/arch/arm/boards/toradex-colibri-t20/entry.c b/arch/arm/boards/toradex-colibri-t20/entry.c index a25958fb41..9557b13f95 100644 --- a/arch/arm/boards/toradex-colibri-t20/entry.c +++ b/arch/arm/boards/toradex-colibri-t20/entry.c @@ -15,22 +15,15 @@ */ #include <common.h> -#include <linux/sizes.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> #include <mach/lowlevel.h> extern char __dtb_tegra20_colibri_iris_start[]; static void common_toradex_colibri_t20_iris_start(void) { - uint32_t fdt; + tegra_cpu_lowlevel_setup(__dtb_tegra20_colibri_iris_start); - tegra_cpu_lowlevel_setup(); - - fdt = (uint32_t)__dtb_tegra20_colibri_iris_start - get_runtime_offset(); - - tegra_avp_reset_vector(fdt); + tegra_avp_reset_vector(); } ENTRY_FUNCTION(start_colibri_t20_256_usbload, r0, r1, r2) diff --git a/arch/arm/boards/toshiba-ac100/entry.c b/arch/arm/boards/toshiba-ac100/entry.c index fb695c32d6..56979c9ba1 100644 --- a/arch/arm/boards/toshiba-ac100/entry.c +++ b/arch/arm/boards/toshiba-ac100/entry.c @@ -15,20 +15,13 @@ */ #include <common.h> -#include <linux/sizes.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> #include <mach/lowlevel.h> extern char __dtb_tegra20_paz00_start[]; ENTRY_FUNCTION(start_toshiba_ac100, r0, r1, r2) { - uint32_t fdt; + tegra_cpu_lowlevel_setup(__dtb_tegra20_paz00_start); - tegra_cpu_lowlevel_setup(); - - fdt = (uint32_t)__dtb_tegra20_paz00_start - get_runtime_offset(); - - tegra_avp_reset_vector(fdt); + tegra_avp_reset_vector(); } diff --git a/arch/arm/boards/usb-a926x/init.c b/arch/arm/boards/usb-a926x/init.c index 958c3c3662..a9a0549adf 100644 --- a/arch/arm/boards/usb-a926x/init.c +++ b/arch/arm/boards/usb-a926x/init.c @@ -41,6 +41,7 @@ #include <gpio_keys.h> #include <readkey.h> #include <spi/spi.h> +#include <input/input.h> static void usb_a9260_set_board_type(void) { @@ -340,16 +341,16 @@ struct gpio_led dab_mmx_leds[] = { #ifdef CONFIG_KEYBOARD_GPIO struct gpio_keys_button keys[] = { { - .code = BB_KEY_UP, + .code = KEY_UP, .gpio = AT91_PIN_PB25, }, { - .code = BB_KEY_HOME, + .code = KEY_HOME, .gpio = AT91_PIN_PB13, }, { - .code = BB_KEY_DOWN, + .code = KEY_DOWN, .gpio = AT91_PIN_PA26, }, { - .code = BB_KEY_ENTER, + .code = KEY_ENTER, .gpio = AT91_PIN_PC9, }, }; diff --git a/arch/arm/configs/mvebu_defconfig b/arch/arm/configs/mvebu_defconfig index 6d1b021768..39372fd93b 100644 --- a/arch/arm/configs/mvebu_defconfig +++ b/arch/arm/configs/mvebu_defconfig @@ -1,5 +1,6 @@ CONFIG_ARCH_MVEBU=y CONFIG_MACH_GLOBALSCALE_MIRABOX=y +CONFIG_MACH_NETGEAR_RN104=y CONFIG_MACH_LENOVO_IX4_300D=y CONFIG_MACH_MARVELL_ARMADA_XP_GP=y CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3=y diff --git a/arch/arm/crypto/sha1_glue.c b/arch/arm/crypto/sha1_glue.c index 176aa9ec69..57cd9d1014 100644 --- a/arch/arm/crypto/sha1_glue.c +++ b/arch/arm/crypto/sha1_glue.c @@ -119,6 +119,7 @@ static struct digest_algo m = { .name = "sha1", .driver_name = "sha1-asm", .priority = 150, + .algo = HASH_ALGO_SHA1, }, .init = sha1_init, diff --git a/arch/arm/crypto/sha256_glue.c b/arch/arm/crypto/sha256_glue.c index f8086f6ac7..e649609a8e 100644 --- a/arch/arm/crypto/sha256_glue.c +++ b/arch/arm/crypto/sha256_glue.c @@ -173,6 +173,7 @@ static struct digest_algo sha224 = { .name = "sha224", .driver_name = "sha224-asm", .priority = 150, + .algo = HASH_ALGO_SHA224, }, .length = SHA224_DIGEST_SIZE, @@ -195,6 +196,7 @@ static struct digest_algo sha256 = { .name = "sha256", .driver_name = "sha256-asm", .priority = 150, + .algo = HASH_ALGO_SHA256, }, .length = SHA256_DIGEST_SIZE, diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 2da930eb91..d85c23768e 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -28,6 +28,7 @@ pbl-dtb-$(CONFIG_MACH_GUF_VINCELL) += imx53-guf-vincell.dtb.o imx53-guf-vincell- pbl-dtb-$(CONFIG_MACH_GW_VENTANA) += imx6q-gw54xx.dtb.o pbl-dtb-$(CONFIG_MACH_LENOVO_IX4_300D) += armada-xp-lenovo-ix4-300d-bb.dtb.o pbl-dtb-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += armada-xp-gp-bb.dtb.o +pbl-dtb-$(CONFIG_MACH_NETGEAR_RN104) += armada-370-rn104-bb.dtb.o pbl-dtb-$(CONFIG_MACH_NITROGEN6X) += imx6q-nitrogen6x.dtb.o imx6dl-nitrogen6x.dtb.o pbl-dtb-$(CONFIG_MACH_NVIDIA_BEAVER) += tegra30-beaver.dtb.o pbl-dtb-$(CONFIG_MACH_NVIDIA_JETSON) += tegra124-jetson-tk1.dtb.o diff --git a/arch/arm/dts/armada-370-rn104-bb.dts b/arch/arm/dts/armada-370-rn104-bb.dts new file mode 100644 index 0000000000..32f961e529 --- /dev/null +++ b/arch/arm/dts/armada-370-rn104-bb.dts @@ -0,0 +1,11 @@ +/* + * Barebox specific DT overlay for Netgear ReadyNAS 104 + */ + +#include "arm/armada-370-netgear-rn104.dts" + +/ { + chosen { + stdout-path = "/soc/internal-regs/serial@12000"; + }; +}; diff --git a/arch/arm/dts/imx53-ccxmx53.dts b/arch/arm/dts/imx53-ccxmx53.dts index ac6103ad83..85d20c3b63 100644 --- a/arch/arm/dts/imx53-ccxmx53.dts +++ b/arch/arm/dts/imx53-ccxmx53.dts @@ -10,6 +10,95 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include <arm/imx53-ccxmx53.dts> +/dts-v1/; #include "imx53-ccxmx53.dtsi" -#include "imx53.dtsi" + +/ { + model = "Digi ConnectCore ccxmx53"; + compatible = "digi,imx53-ccxmx53", "fsl,imx53"; +}; + +&iomuxc { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_hog>; + + imx53-ccxmx53 { + pinctrl_hog: hoggrp { + + }; + + pinctrl_esdhc2: esdhc2grp { + fsl,pins = < + MX53_PAD_SD2_CMD__ESDHC2_CMD 0x1d5 + MX53_PAD_SD2_CLK__ESDHC2_CLK 0x1d5 + MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5 + MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5 + MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5 + MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5 + /* SD2_CD */ + MX53_PAD_GPIO_4__GPIO1_4 0x1d5 + /* SD2_WP */ + MX53_PAD_GPIO_2__GPIO1_2 0x1d5 + >; + }; + + pinctrl_esdhc3: esdhc3grp { + fsl,pins = < + MX53_PAD_PATA_DATA8__ESDHC3_DAT0 0x1d5 + MX53_PAD_PATA_DATA9__ESDHC3_DAT1 0x1d5 + MX53_PAD_PATA_DATA10__ESDHC3_DAT2 0x1d5 + MX53_PAD_PATA_DATA11__ESDHC3_DAT3 0x1d5 + MX53_PAD_PATA_IORDY__ESDHC3_CLK 0x1d5 + MX53_PAD_PATA_RESET_B__ESDHC3_CMD 0x1d5 + >; + }; + }; +}; + +&i2c2 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c2>; + clock-frequency = <400000>; + status = "okay"; +}; + +&i2c3 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c3>; + clock-frequency = <400000>; + status = "okay"; +}; + +&esdhc2 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_esdhc2>; + cd-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>; + wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; + bus-width = <4>; + status = "okay"; +}; + +&esdhc3 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_esdhc3>; + bus-width = <4>; + non-removable; + status = "okay"; +}; + +&fec { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_fec>; + phy-mode = "rmii"; + phy-reset-gpios = <&gpio7 6 0>; + phy-reset-duration = <10>; + status = "okay"; +}; + +&sata { + status = "okay"; +}; + +&iim { + barebox,provide-mac-address = <&fec 1 9>; +}; diff --git a/arch/arm/dts/imx53-ccxmx53.dtsi b/arch/arm/dts/imx53-ccxmx53.dtsi index 6f76d2867a..5553c68e25 100644 --- a/arch/arm/dts/imx53-ccxmx53.dtsi +++ b/arch/arm/dts/imx53-ccxmx53.dtsi @@ -1,3 +1,19 @@ +/* + * Copyright 2011 Freescale Semiconductor, Inc. + * Copyright 2011 Linaro Ltd. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#include "imx53.dtsi" +#include <arm/imx53.dtsi> + + / { chosen { linux,stdout-path = &uart1; @@ -9,9 +25,210 @@ }; }; +/ { + memory { + reg = <0x70000000 0x40000000>; + }; + +}; + +&iomuxc { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_hog>; + + imx53-ccxmx53 { + pinctrl_hog: hoggrp { + + }; + + pinctrl_fec: fecgrp { + fsl,pins = < + MX53_PAD_FEC_MDC__FEC_MDC 0x80000000 + MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000 + MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000 + MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000 + MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000 + MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000 + MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000 + MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000 + MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000 + MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000 + >; + }; + + pinctrl_i2c1: i2c1grp { + fsl,pins = < + MX53_PAD_CSI0_DAT8__I2C1_SDA 0xc0000000 + MX53_PAD_CSI0_DAT9__I2C1_SCL 0xc0000000 + >; + }; + + pinctrl_i2c2: i2c2grp { + fsl,pins = < + MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000 + MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000 + >; + }; + + pinctrl_i2c3: i2c3grp { + fsl,pins = < + MX53_PAD_GPIO_6__I2C3_SDA 0xc0000000 + MX53_PAD_GPIO_5__I2C3_SCL 0xc0000000 + >; + }; + + pinctrl_uart1: uart1grp { + fsl,pins = < + MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4 + MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4 + >; + }; + + pinctrl_nand: nandgrp { + fsl,pins = < + MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B 0x4 + MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B 0x4 + MX53_PAD_NANDF_CLE__EMI_NANDF_CLE 0x4 + MX53_PAD_NANDF_ALE__EMI_NANDF_ALE 0x4 + MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B 0xe0 + MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0 0xe0 + MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0 0x4 + MX53_PAD_PATA_DATA0__EMI_NANDF_D_0 0xa4 + MX53_PAD_PATA_DATA1__EMI_NANDF_D_1 0xa4 + MX53_PAD_PATA_DATA2__EMI_NANDF_D_2 0xa4 + MX53_PAD_PATA_DATA3__EMI_NANDF_D_3 0xa4 + MX53_PAD_PATA_DATA4__EMI_NANDF_D_4 0xa4 + MX53_PAD_PATA_DATA5__EMI_NANDF_D_5 0xa4 + MX53_PAD_PATA_DATA6__EMI_NANDF_D_6 0xa4 + MX53_PAD_PATA_DATA7__EMI_NANDF_D_7 0xa4 + >; + }; + }; +}; + +&i2c1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c1>; + clock-frequency = <400000>; + status = "okay"; + + pmic: dialog@68 { + compatible = "dlg,da9053-aa"; + reg = <0x68>; + interrupt-parent = <&gpio7>; + interrupts = <11 0x8>; /* low-level active IRQ at GPIO7_11 */ + + regulators { + buck1_reg: buck1 { + regulator-name = "BUCKCORE"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1400000>; + regulator-always-on; + }; + + buck2_reg: buck2 { + regulator-name = "BUCKPRO"; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <1350000>; + regulator-always-on; + }; + + buck3_reg: buck3 { + regulator-name = "BUCKMEM"; + regulator-min-microvolt = <1420000>; + regulator-max-microvolt = <1580000>; + regulator-always-on; + }; + + buck4_reg: buck4 { + regulator-name = "BUCKPERI"; + regulator-min-microvolt = <2370000>; + regulator-max-microvolt = <2630000>; + regulator-always-on; + }; + + ldo1_reg: ldo1 { + regulator-name = "ldo1_1v3"; + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <1350000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo2_reg: ldo2 { + regulator-name = "ldo2_1v3"; + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <1350000>; + regulator-always-on; + }; + + ldo3_reg: ldo3 { + regulator-name = "ldo3_3v3"; + regulator-min-microvolt = <3250000>; + regulator-max-microvolt = <3350000>; + regulator-always-on; + }; + + ldo4_reg: ldo4 { + regulator-name = "ldo4_2v775"; + regulator-min-microvolt = <2770000>; + regulator-max-microvolt = <2780000>; + regulator-always-on; + }; + + ldo5_reg: ldo5 { + regulator-name = "ldo5_3v3"; + regulator-min-microvolt = <3250000>; + regulator-max-microvolt = <3350000>; + regulator-always-on; + }; + + ldo6_reg: ldo6 { + regulator-name = "ldo6_1v3"; + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <1350000>; + regulator-always-on; + }; + + ldo7_reg: ldo7 { + regulator-name = "ldo7_2v75"; + regulator-min-microvolt = <2700000>; + regulator-max-microvolt = <2800000>; + regulator-always-on; + }; + + ldo8_reg: ldo8 { + regulator-name = "ldo8_1v8"; + regulator-min-microvolt = <1750000>; + regulator-max-microvolt = <1850000>; + regulator-always-on; + }; + + ldo9_reg: ldo9 { + regulator-name = "ldo9_1v5"; + regulator-min-microvolt = <1450000>; + regulator-max-microvolt = <1550000>; + regulator-always-on; + }; + + ldo10_reg: ldo10 { + regulator-name = "ldo10_1v3"; + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <1350000>; + regulator-always-on; + }; + }; + }; +}; + &nfc { #address-cells = <1>; #size-cells = <1>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_nand>; + nand-bus-width = <8>; + nand-ecc-mode = "hw"; + status = "okay"; partition@0 { label = "barebox"; @@ -33,3 +250,9 @@ reg = <0x500000 0x07B00000>; }; }; + +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart1>; + status = "okay"; +}; diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index 7bb9b43656..1913d5f97a 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -86,9 +86,11 @@ static int __do_bootm_linux(struct image_data *data, unsigned long free_mem, int } } - ret = bootm_load_initrd(data, initrd_start); - if (ret) - return ret; + if (bootm_has_initrd(data)) { + ret = bootm_load_initrd(data, initrd_start); + if (ret) + return ret; + } if (data->initrd_res) { initrd_start = data->initrd_res->start; @@ -110,6 +112,9 @@ static int __do_bootm_linux(struct image_data *data, unsigned long free_mem, int printf("...\n"); } + if (data->dryrun) + return 0; + start_linux((void *)kernel, swap, initrd_start, initrd_size, data->oftree); restart_machine(); @@ -135,7 +140,7 @@ static int do_bootm_linux(struct image_data *data) * relocate itself before decompression. */ load_address = mem_start + PAGE_ALIGN( - uimage_get_size(data->os, data->os_num) * 4); + bootm_get_os_size(data) * 4); if (bootm_verbose(data)) printf("no OS load address, defaulting to 0x%08lx\n", load_address); @@ -223,6 +228,7 @@ static int do_bootz_linux_fdt(int fd, struct image_data *data) ret = -EINVAL; goto err_free; } + free(oftree); } else { data->oftree = oftree; } @@ -354,37 +360,9 @@ static struct image_handler zimage_handler = { .filetype = filetype_arm_zimage, }; -static int do_bootm_barebox(struct image_data *data) -{ - void *barebox; - - barebox = read_file(data->os_file, NULL); - if (!barebox) - return -EINVAL; - - if (IS_ENABLED(CONFIG_OFTREE) && data->of_root_node) { - data->oftree = of_get_fixed_tree(data->of_root_node); - fdt_add_reserve_map(data->oftree); - of_print_cmdline(data->of_root_node); - if (bootm_verbose(data) > 1) - of_print_nodes(data->of_root_node, 0); - } - - if (bootm_verbose(data)) { - printf("\nStarting barebox at 0x%p", barebox); - if (data->oftree) - printf(", oftree at 0x%p", data->oftree); - printf("...\n"); - } - - start_linux(barebox, 0, 0, 0, data->oftree); - - restart_machine(); -} - static struct image_handler barebox_handler = { .name = "ARM barebox", - .bootm = do_bootm_barebox, + .bootm = do_bootm_linux, .filetype = filetype_arm_barebox, }; @@ -553,6 +531,12 @@ BAREBOX_MAGICVAR(aimage_noverwrite_bootargs, "Disable overwrite of the bootargs BAREBOX_MAGICVAR(aimage_noverwrite_tags, "Disable overwrite of the tags addr with the one present in aimage"); #endif +static struct image_handler arm_fit_handler = { + .name = "FIT image", + .bootm = do_bootm_linux, + .filetype = filetype_oftree, +}; + static struct binfmt_hook binfmt_aimage_hook = { .type = filetype_aimage, .exec = "bootm", @@ -578,6 +562,8 @@ static int armlinux_register_image_handler(void) register_image_handler(&aimage_handler); binfmt_register(&binfmt_aimage_hook); } + if (IS_BUILTIN(CONFIG_CMD_BOOTM_FITIMAGE)) + register_image_handler(&arm_fit_handler); binfmt_register(&binfmt_arm_zimage_hook); binfmt_register(&binfmt_barebox_hook); diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 3f6dd7743e..c631c33cf3 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -66,6 +66,12 @@ config ARCH_IMX_IMXIMAGE help if enabled the imx-image tool is compiled +config ARCH_IMX_IMXIMAGE_SSL_SUPPORT + bool + help + This enables SSL support for the imx-image tool. This is required + for created images for HABv3. This adds openssl to the build dependencies + config ARCH_IMX_XLOAD bool depends on ARCH_IMX51 @@ -695,8 +701,12 @@ config IMX_OCOTP_WRITE mw -l -d /dev/imx-ocotp 0x8C 0x00001234 mw -l -d /dev/imx-ocotp 0x88 0x56789ABC +config HAB + bool + config HABV4 tristate "HABv4 support" + select HAB depends on ARCH_IMX6 help High Assurance Boot, as found on i.MX28/i.MX6. @@ -735,6 +745,30 @@ config HABV4_IMG_CRT_PEM endif +config HABV3 + tristate "HABv3 support" + select HAB + select ARCH_IMX_IMXIMAGE_SSL_SUPPORT + depends on ARCH_IMX25 + help + High Assurance Boot, as found on i.MX25. + +if HABV3 + +config HABV3_SRK_PEM + string "Path to SRK Certificate (PEM)" + default "../crts/SRK1_sha256_2048_65537_v3_ca_x509_crt.pem" + +config HABV3_CSF_CRT_DER + string "Path to CSF certificate" + default "../crts/CSF1_1_sha256_2048_65537_v3_ca_crt.der" + +config HABV3_IMG_CRT_DER + string "Path to IMG certificate" + default "../crts/IMG1_1_sha256_2048_65537_v3_usr_crt.der" + +endif + endmenu endif diff --git a/arch/arm/mach-imx/imx25.c b/arch/arm/mach-imx/imx25.c index 8761d63682..3cfeebbe93 100644 --- a/arch/arm/mach-imx/imx25.c +++ b/arch/arm/mach-imx/imx25.c @@ -20,6 +20,9 @@ #include <mach/generic.h> #include <linux/sizes.h> +#define MX25_BOOTROM_HAB_MAGIC 0x3c95cac6 +#define MX25_DRYICE_GPR 0x3c + void imx25_setup_weimcs(size_t cs, unsigned upper, unsigned lower, unsigned additional) { @@ -55,9 +58,32 @@ u64 imx_uid(void) int imx25_init(void) { + int val; + imx25_boot_save_loc((void *)MX25_CCM_BASE_ADDR); add_generic_device("imx25-esdctl", 0, NULL, MX25_ESDCTL_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); + /* + * When the i.MX25 is used with internal boot, the boot ROM always + * performs some HAB actions. These will copy the value from DryIce + * GPR (0x53ffc03c) to a location in SRAM (0x78001734) and then overwrites + * the GPR with 0x3c95cac6. + * After the HAB routine is done, the boot ROM should copy the previously + * saved value from SRAM back to the GPR. The last step is not done. + * The boot ROM is officially broken in this regard. + * This renders the Non-volatile memory to a Non-Non-volatile memory. + * To still be able to use the GPR for its intended purpose, copy the + * saved SRAM value back manually. + */ + val = readl(MX25_IRAM_BASE_ADDR + 0x1734); + + /* + * When there is a different value in SRAM than the magic value + * it must be a value saved to the GPR. + */ + if (val != MX25_BOOTROM_HAB_MAGIC) + writel(val, MX25_DRYICE_BASE_ADDR + MX25_DRYICE_GPR); + return 0; } diff --git a/arch/arm/mach-imx/include/mach/devices.h b/arch/arm/mach-imx/include/mach/devices.h index 4c07f464c2..45bb0a51ee 100644 --- a/arch/arm/mach-imx/include/mach/devices.h +++ b/arch/arm/mach-imx/include/mach/devices.h @@ -1,6 +1,6 @@ #include <fec.h> -#include <matrix_keypad.h> +#include <input/matrix_keypad.h> #include <i2c/i2c.h> #include <mach/spi.h> #include <mach/imx-nand.h> diff --git a/arch/arm/mach-imx/include/mach/habv3-imx25-gencsf.h b/arch/arm/mach-imx/include/mach/habv3-imx25-gencsf.h new file mode 100644 index 0000000000..4b81d49203 --- /dev/null +++ b/arch/arm/mach-imx/include/mach/habv3-imx25-gencsf.h @@ -0,0 +1,43 @@ +/* + * This snippet can be included from a i.MX flash header configuration + * file for generating signed images. The necessary keys/certificates + * are expected in these config variables: + * + * CONFIG_HABV3_SRK_PEM + * CONFIG_HABV3_SRK_PEM + * CONFIG_HABV3_IMG_CRT_PEM + */ +super_root_key CONFIG_HABV3_SRK_PEM + +hab [Header] +hab Version = 3.0 +hab Security Configuration = Engineering +hab Hash Algorithm = SHA256 +hab Engine = RTIC +hab Certificate Format = WTLS +hab Signature Format = PKCS1 +hab UID = Generic +hab Code = 0x00 + +hab [Install SRK] +hab File = "not-used" + +hab [Install CSFK] +hab File = CONFIG_HABV3_CSF_CRT_DER + +hab [Authenticate CSF] +/* below is the command that unlock the access to the DryIce registers */ + +hab [Write Data] +hab Width = 4 +hab Address Data = 0x53FFC03C 0xCA693569 + +hab [Install Key] +hab Verification index = 1 +hab Target index = 2 +hab File = CONFIG_HABV3_IMG_CRT_DER + +hab [Authenticate Data] +hab Verification index = 2 + +hab_blocks diff --git a/arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h b/arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h new file mode 100644 index 0000000000..1a143a8b18 --- /dev/null +++ b/arch/arm/mach-imx/include/mach/habv4-imx6-gencsf.h @@ -0,0 +1,44 @@ +/* + * This snippet can be included from a i.MX flash header configuration + * file for generating signed images. The necessary keys/certificates + * are expected in these config variables: + * + * CONFIG_HABV4_TABLE_BIN + * CONFIG_HABV4_CSF_CRT_PEM + * CONFIG_HABV4_IMG_CRT_PEM + */ + +hab [Header] +hab Version = 4.1 +hab Hash Algorithm = sha256 +hab Engine Configuration = 0 +hab Certificate Format = X509 +hab Signature Format = CMS +hab Engine = CAAM + +hab [Install SRK] +hab File = CONFIG_HABV4_TABLE_BIN +hab # SRK index within SRK-Table 0..3 +hab Source index = 0 + +hab [Install CSFK] +hab File = CONFIG_HABV4_CSF_CRT_PEM + +hab [Authenticate CSF] + +hab [Unlock] +hab Engine = CAAM +hab Features = RNG + +hab [Install Key] +/* verification key index in key store (0, 2...5) */ +hab Verification index = 0 +/* target key index in key store (2...5) */ +hab Target index = 2 +hab File = CONFIG_HABV4_IMG_CRT_PEM + +hab [Authenticate Data] +/* verification key index in key store (2...5) */ +hab Verification index = 2 + +hab_blocks
\ No newline at end of file diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig index 5e96f16e8c..79fcc8d3ac 100644 --- a/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig @@ -37,6 +37,10 @@ config MACH_GLOBALSCALE_MIRABOX bool "Globalscale Mirabox" select ARCH_ARMADA_370 +config MACH_NETGEAR_RN104 + bool "Netgear ReadyNAS 104" + select ARCH_ARMADA_370 + # # Armada XP SoC boards # diff --git a/arch/arm/mach-omap/am33xx_clock.c b/arch/arm/mach-omap/am33xx_clock.c index 6d8addef32..ad735cb216 100644 --- a/arch/arm/mach-omap/am33xx_clock.c +++ b/arch/arm/mach-omap/am33xx_clock.c @@ -15,6 +15,7 @@ #include <common.h> #include <asm/io.h> #include <mach/am33xx-clock.h> +#include <asm-generic/div64.h> #define PRCM_MOD_EN 0x2 #define PRCM_FORCE_WAKEUP 0x2 @@ -304,8 +305,13 @@ void am33xx_enable_ddr_clocks(void) /* * Configure the PLL/PRCM for necessary peripherals */ -void am33xx_pll_init(int mpupll_M, int osc, int ddrpll_M) +void am33xx_pll_init(int mpupll_M, int ddrpll_M) { + int osc; + + osc = am33xx_get_osc_clock(); + osc /= 1000; + mpu_pll_config(mpupll_M, osc); core_pll_config(osc); per_pll_config(osc); @@ -318,3 +324,30 @@ void am33xx_pll_init(int mpupll_M, int osc, int ddrpll_M) /* Enable the required peripherals */ am33xx_enable_per_clocks(); } + +/* + * Return the OSC clock value from SYSBOOT pins in kHz. + */ +int am33xx_get_osc_clock(void) +{ + int osc; + u32 sysboot; + + sysboot = (readl(AM33XX_CTRL_STATUS) >> 22) & 3; + switch (sysboot) { + case 0: + osc = 19200; + break; + case 1: + osc = 24000; + break; + case 2: + osc = 25000; + break; + case 3: + osc = 26000; + break; + } + + return osc; +} diff --git a/arch/arm/mach-omap/dmtimer.c b/arch/arm/mach-omap/dmtimer.c index 56adda080a..e223b8cc8f 100644 --- a/arch/arm/mach-omap/dmtimer.c +++ b/arch/arm/mach-omap/dmtimer.c @@ -31,6 +31,7 @@ #include <init.h> #include <io.h> #include <mach/am33xx-silicon.h> +#include <mach/am33xx-clock.h> #include <stdio.h> @@ -82,24 +83,9 @@ static struct clocksource dmtimer_cs = { static int dmtimer_init(void) { u64 clk_speed; - int sysboot; - - sysboot = (readl(AM33XX_CTRL_STATUS) >> 22) & 3; - switch (sysboot) { - case 0: - clk_speed = 19200000; - break; - case 1: - clk_speed = 24000000; - break; - case 2: - clk_speed = 25000000; - break; - case 3: - clk_speed = 26000000; - break; - } + clk_speed = am33xx_get_osc_clock(); + clk_speed *= 1000; dmtimer_cs.mult = clocksource_hz2mult(clk_speed, dmtimer_cs.shift); /* Enable counter */ diff --git a/arch/arm/mach-omap/include/mach/am33xx-clock.h b/arch/arm/mach-omap/include/mach/am33xx-clock.h index 2d6a727e1c..284d5f8cf6 100644 --- a/arch/arm/mach-omap/include/mach/am33xx-clock.h +++ b/arch/arm/mach-omap/include/mach/am33xx-clock.h @@ -183,7 +183,8 @@ #define CM_ALWON_GPMC_CLKCTRL CM_PER_GPMC_CLKCTRL -void am33xx_pll_init(int mpupll_M, int osc, int ddrpll_M); +void am33xx_pll_init(int mpupll_M, int ddrpll_M); void am33xx_enable_ddr_clocks(void); +int am33xx_get_osc_clock(void); #endif /* endif _AM33XX_CLOCKS_H_ */ diff --git a/arch/arm/mach-omap/omap_generic.c b/arch/arm/mach-omap/omap_generic.c index 4e26c6ba0b..34ed94007e 100644 --- a/arch/arm/mach-omap/omap_generic.c +++ b/arch/arm/mach-omap/omap_generic.c @@ -79,6 +79,11 @@ static int do_bootm_omap_barebox(struct image_data *data) if (!barebox) return -EINVAL; + if (data->dryrun) { + free(barebox); + return 0; + } + omap_start_barebox(barebox); } diff --git a/arch/arm/mach-tegra/include/mach/lowlevel.h b/arch/arm/mach-tegra/include/mach/lowlevel.h index 0c76b8883c..f70688e029 100644 --- a/arch/arm/mach-tegra/include/mach/lowlevel.h +++ b/arch/arm/mach-tegra/include/mach/lowlevel.h @@ -24,6 +24,7 @@ #ifndef __TEGRA_LOWLEVEL_H #define __TEGRA_LOWLEVEL_H +#include <asm/barebox-arm.h> #include <linux/compiler.h> #include <linux/sizes.h> #include <io.h> @@ -244,18 +245,18 @@ void tegra_ll_delay_usec(int delay) } /* reset vector for the AVP, to be called from board reset vector */ -void tegra_avp_reset_vector(uint32_t boarddata); +void tegra_avp_reset_vector(void); /* reset vector for the main CPU complex */ -void tegra_maincomplex_entry(void); +void tegra_maincomplex_entry(char *fdt); static __always_inline -void tegra_cpu_lowlevel_setup(void) +void tegra_cpu_lowlevel_setup(char *fdt) { uint32_t r; if (tegra_cpu_is_maincomplex()) - tegra_maincomplex_entry(); + tegra_maincomplex_entry(fdt - get_runtime_offset()); /* set the cpu to SVC32 mode */ __asm__ __volatile__("mrs %0, cpsr":"=r"(r)); diff --git a/arch/arm/mach-tegra/tegra_avp_init.c b/arch/arm/mach-tegra/tegra_avp_init.c index 20fcf3f1d1..16dc65be07 100644 --- a/arch/arm/mach-tegra/tegra_avp_init.c +++ b/arch/arm/mach-tegra/tegra_avp_init.c @@ -257,14 +257,11 @@ static void tegra_cluster_switch_hp(void) writel(reg, TEGRA_FLOW_CTRL_BASE + FLOW_CLUSTER_CONTROL); } -void tegra_avp_reset_vector(uint32_t boarddata) +void tegra_avp_reset_vector(void) { int num_cores; unsigned int entry_address = 0; - /* put boarddata in scratch reg, for main CPU to fetch after startup */ - writel(boarddata, TEGRA_PMC_BASE + PMC_SCRATCH(10)); - /* we want to bring up the high performance CPU complex */ if (tegra_get_chiptype() >= TEGRA30) tegra_cluster_switch_hp(); diff --git a/arch/arm/mach-tegra/tegra_maincomplex_init.c b/arch/arm/mach-tegra/tegra_maincomplex_init.c index 6c6bdf6c15..27bb3363a3 100644 --- a/arch/arm/mach-tegra/tegra_maincomplex_init.c +++ b/arch/arm/mach-tegra/tegra_maincomplex_init.c @@ -23,7 +23,7 @@ #include <mach/tegra20-pmc.h> #include <mach/tegra20-car.h> -void tegra_maincomplex_entry(void) +void tegra_maincomplex_entry(char *fdt) { uint32_t rambase, ramsize; enum tegra_chiptype chiptype; @@ -79,6 +79,5 @@ void tegra_maincomplex_entry(void) unreachable(); } - barebox_arm_entry(rambase, ramsize, - (void *)readl(TEGRA_PMC_BASE + PMC_SCRATCH(10))); + barebox_arm_entry(rambase, ramsize, fdt); } diff --git a/arch/blackfin/lib/blackfin_linux.c b/arch/blackfin/lib/blackfin_linux.c index 2561a7e152..da2f78bcb5 100644 --- a/arch/blackfin/lib/blackfin_linux.c +++ b/arch/blackfin/lib/blackfin_linux.c @@ -50,6 +50,9 @@ static int do_bootm_linux(struct image_data *idata) appl = (void *)(idata->os_address + idata->os_entry); printf("Starting Kernel at 0x%p\n", appl); + if (idata->dryrun) + return 0; + icache_disable(); strncpy(cmdlinedest, cmdline, 0x1000); diff --git a/arch/efi/efi/efi-image.c b/arch/efi/efi/efi-image.c index b6437f4078..c78043b0de 100644 --- a/arch/efi/efi/efi-image.c +++ b/arch/efi/efi/efi-image.c @@ -190,7 +190,7 @@ static inline void linux_efi_handover(efi_handle_t handle, static int do_bootm_efi(struct image_data *data) { void *tmp; - void *initrd; + void *initrd = NULL; size_t size; efi_handle_t handle; int ret; @@ -244,6 +244,13 @@ static int do_bootm_efi(struct image_data *data) printf("...\n"); } + if (data->dryrun) { + BS->unload_image(handle); + free(boot_header); + free(initrd); + return 0; + } + efi_set_variable_usec("LoaderTimeExecUSec", &efi_systemd_vendor_guid, get_time_ns()/1000); diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index 84f72f5ac0..6702372333 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -1,6 +1,7 @@ #include <boot.h> #include <common.h> #include <libfile.h> +#include <malloc.h> #include <init.h> #include <fs.h> #include <errno.h> @@ -17,6 +18,11 @@ static int do_bootm_barebox(struct image_data *data) if (!barebox) return -EINVAL; + if (data->dryrun) { + free(barebox); + return 0; + } + shutdown_barebox(); barebox(); diff --git a/arch/nios2/lib/bootm.c b/arch/nios2/lib/bootm.c index 77da119bde..ac70330729 100644 --- a/arch/nios2/lib/bootm.c +++ b/arch/nios2/lib/bootm.c @@ -42,6 +42,9 @@ static int do_bootm_linux(struct image_data *idata) if (ret) return ret; + if (idata->dryrun) + return 0; + kernel = (void *)(idata->os_address + idata->os_entry); /* kernel parameters passing diff --git a/arch/ppc/lib/ppclinux.c b/arch/ppc/lib/ppclinux.c index 409c0cf261..a36682caf2 100644 --- a/arch/ppc/lib/ppclinux.c +++ b/arch/ppc/lib/ppclinux.c @@ -60,6 +60,9 @@ static int do_bootm_linux(struct image_data *data) return -EINVAL; } + if (data->dryrun) + return 0; + /* Relocate the device tree if outside the initial * Linux mapped TLB. */ |