summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2021-03-23 12:15:22 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2021-03-23 12:15:22 +0100
commitbb2873db3ef11e7b1299b1cca129f5d002e47f59 (patch)
treee53a1697f6ffb81d8f866ddadf3862ab0c04ceef /arch
parent31343957ea42a9340345c17288e56cfa07304bb8 (diff)
parent176bd2605edfd7d64370736abe8c44833068788b (diff)
downloadbarebox-bb2873db3ef11e7b1299b1cca129f5d002e47f59.tar.gz
barebox-bb2873db3ef11e7b1299b1cca129f5d002e47f59.tar.xz
Merge branch 'for-next/misc'
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/Makefile1
-rw-r--r--arch/arm/boards/nxp-imx8mm-evk/board.c6
-rw-r--r--arch/arm/boards/nxp-imx8mp-evk/board.c6
-rw-r--r--arch/arm/boards/stm32mp15x-ev1/Makefile2
-rw-r--r--arch/arm/boards/stm32mp15x-ev1/board.c39
-rw-r--r--arch/arm/boards/stm32mp15x-ev1/lowlevel.c26
-rw-r--r--arch/arm/configs/stm32mp_defconfig9
-rw-r--r--arch/arm/dts/Makefile1
-rw-r--r--arch/arm/dts/stm32mp157c-ev1.dts20
-rw-r--r--arch/arm/dts/zynqmp-clk.dtsi155
-rw-r--r--arch/arm/dts/zynqmp-zcu104-revA.dts1
-rw-r--r--arch/arm/mach-stm32mp/Kconfig8
-rw-r--r--arch/mips/boards/qemu-malta/lowlevel.S3
-rw-r--r--arch/sandbox/board/Makefile1
-rw-r--r--arch/sandbox/board/led.c67
-rw-r--r--arch/sandbox/dts/sandbox.dts4
16 files changed, 184 insertions, 165 deletions
diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
index 7a3645df11..9ccb75e27b 100644
--- a/arch/arm/boards/Makefile
+++ b/arch/arm/boards/Makefile
@@ -133,6 +133,7 @@ obj-$(CONFIG_MACH_SOLIDRUN_CUBOX) += solidrun-cubox/
obj-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += solidrun-microsom/
obj-$(CONFIG_MACH_STM32MP15XX_DKX) += stm32mp15xx-dkx/
obj-$(CONFIG_MACH_LXA_MC1) += lxa-mc1/
+obj-$(CONFIG_MACH_STM32MP15X_EV1) += stm32mp15x-ev1/
obj-$(CONFIG_MACH_TECHNEXION_PICO_HOBBIT) += technexion-pico-hobbit/
obj-$(CONFIG_MACH_TECHNEXION_WANDBOARD) += technexion-wandboard/
obj-$(CONFIG_MACH_TNY_A9260) += tny-a926x/
diff --git a/arch/arm/boards/nxp-imx8mm-evk/board.c b/arch/arm/boards/nxp-imx8mm-evk/board.c
index 2603a2ab07..6e4df60065 100644
--- a/arch/arm/boards/nxp-imx8mm-evk/board.c
+++ b/arch/arm/boards/nxp-imx8mm-evk/board.c
@@ -33,7 +33,7 @@ static int ar8031_phy_fixup(struct phy_device *phydev)
static int nxp_imx8mm_evk_init(void)
{
int emmc_bbu_flag = 0;
- int emmc_sd_flag = 0;
+ int sd_bbu_flag = 0;
if (!of_machine_is_compatible("fsl,imx8mm-evk"))
return 0;
@@ -46,14 +46,14 @@ static int nxp_imx8mm_evk_init(void)
emmc_bbu_flag = BBU_HANDLER_FLAG_DEFAULT;
} else {
of_device_enable_path("/chosen/environment-sd");
- emmc_sd_flag = BBU_HANDLER_FLAG_DEFAULT;
+ sd_bbu_flag = BBU_HANDLER_FLAG_DEFAULT;
}
} else {
of_device_enable_path("/chosen/environment-emmc");
emmc_bbu_flag = BBU_HANDLER_FLAG_DEFAULT;
}
- imx8m_bbu_internal_mmc_register_handler("SD", "/dev/mmc1.barebox", emmc_sd_flag);
+ imx8m_bbu_internal_mmc_register_handler("SD", "/dev/mmc1.barebox", sd_bbu_flag);
imx8m_bbu_internal_mmcboot_register_handler("eMMC", "/dev/mmc2", emmc_bbu_flag);
phy_register_fixup_for_uid(PHY_ID_AR8031, AR_PHY_ID_MASK,
diff --git a/arch/arm/boards/nxp-imx8mp-evk/board.c b/arch/arm/boards/nxp-imx8mp-evk/board.c
index f64f466810..a3ff598108 100644
--- a/arch/arm/boards/nxp-imx8mp-evk/board.c
+++ b/arch/arm/boards/nxp-imx8mp-evk/board.c
@@ -17,7 +17,7 @@
static int nxp_imx8mp_evk_init(void)
{
int emmc_bbu_flag = 0;
- int emmc_sd_flag = 0;
+ int sd_bbu_flag = 0;
u32 val;
if (!of_machine_is_compatible("fsl,imx8mp-evk"))
@@ -29,14 +29,14 @@ static int nxp_imx8mp_evk_init(void)
emmc_bbu_flag = BBU_HANDLER_FLAG_DEFAULT;
} else {
of_device_enable_path("/chosen/environment-sd");
- emmc_sd_flag = BBU_HANDLER_FLAG_DEFAULT;
+ sd_bbu_flag = BBU_HANDLER_FLAG_DEFAULT;
}
} else {
of_device_enable_path("/chosen/environment-emmc");
emmc_bbu_flag = BBU_HANDLER_FLAG_DEFAULT;
}
- imx8m_bbu_internal_mmc_register_handler("SD", "/dev/mmc1.barebox", emmc_sd_flag);
+ imx8m_bbu_internal_mmc_register_handler("SD", "/dev/mmc1.barebox", sd_bbu_flag);
imx8m_bbu_internal_mmc_register_handler("eMMC", "/dev/mmc2", emmc_bbu_flag);
val = readl(MX8MP_IOMUXC_GPR_BASE_ADDR + MX8MP_IOMUXC_GPR1);
diff --git a/arch/arm/boards/stm32mp15x-ev1/Makefile b/arch/arm/boards/stm32mp15x-ev1/Makefile
new file mode 100644
index 0000000000..092c31d6b2
--- /dev/null
+++ b/arch/arm/boards/stm32mp15x-ev1/Makefile
@@ -0,0 +1,2 @@
+lwl-y += lowlevel.o
+obj-y += board.o
diff --git a/arch/arm/boards/stm32mp15x-ev1/board.c b/arch/arm/boards/stm32mp15x-ev1/board.c
new file mode 100644
index 0000000000..b8e26cd37b
--- /dev/null
+++ b/arch/arm/boards/stm32mp15x-ev1/board.c
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+#include <bootsource.h>
+#include <common.h>
+#include <init.h>
+#include <mach/bbu.h>
+
+static int ed1_probe(struct device_d *dev)
+{
+ int flags;
+
+ flags = bootsource_get_instance() == 0 ? BBU_HANDLER_FLAG_DEFAULT : 0;
+ stm32mp_bbu_mmc_register_handler("sd", "/dev/mmc0.ssbl", flags);
+
+ flags = bootsource_get_instance() == 1 ? BBU_HANDLER_FLAG_DEFAULT : 0;
+ stm32mp_bbu_mmc_register_handler("emmc", "/dev/mmc1.ssbl", flags);
+
+ if (bootsource_get_instance() == 0)
+ of_device_enable_path("/chosen/environment-sd");
+ else
+ of_device_enable_path("/chosen/environment-emmc");
+
+ barebox_set_model("STM32MP157C-ED1");
+
+ return 0;
+}
+
+/* ED1 is the SoM on top of the EV1 */
+static const struct of_device_id ed1_of_match[] = {
+ { .compatible = "st,stm32mp157c-ed1" },
+ { /* sentinel */ },
+};
+
+static struct driver_d ed1_board_driver = {
+ .name = "board-stm32mp15x-ed1",
+ .probe = ed1_probe,
+ .of_compatible = ed1_of_match,
+};
+postcore_platform_driver(ed1_board_driver);
diff --git a/arch/arm/boards/stm32mp15x-ev1/lowlevel.c b/arch/arm/boards/stm32mp15x-ev1/lowlevel.c
new file mode 100644
index 0000000000..06ff6291b8
--- /dev/null
+++ b/arch/arm/boards/stm32mp15x-ev1/lowlevel.c
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: GPL-2.0+
+#include <common.h>
+#include <mach/entry.h>
+#include <debug_ll.h>
+
+extern char __dtb_z_stm32mp157c_ev1_start[];
+
+static void setup_uart(void)
+{
+ /* first stage has set up the UART, so nothing to do here */
+ putc_ll('>');
+}
+
+ENTRY_FUNCTION(start_stm32mp15x_ev1, r0, r1, r2)
+{
+ void *fdt;
+
+ stm32mp_cpu_lowlevel_init();
+
+ if (IS_ENABLED(CONFIG_DEBUG_LL))
+ setup_uart();
+
+ fdt = __dtb_z_stm32mp157c_ev1_start + get_runtime_offset();
+
+ stm32mp1_barebox_entry(fdt);
+}
diff --git a/arch/arm/configs/stm32mp_defconfig b/arch/arm/configs/stm32mp_defconfig
index e1ee4ec082..49041b1f48 100644
--- a/arch/arm/configs/stm32mp_defconfig
+++ b/arch/arm/configs/stm32mp_defconfig
@@ -2,6 +2,7 @@ CONFIG_ARCH_STM32MP=y
CONFIG_MACH_STM32MP15XX_DKX=y
CONFIG_MACH_LXA_MC1=y
CONFIG_MACH_SEEED_ODYSSEY=y
+CONFIG_MACH_STM32MP15X_EV1=y
CONFIG_THUMB2_BAREBOX=y
CONFIG_ARM_BOARD_APPEND_ATAG=y
CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
@@ -92,7 +93,6 @@ CONFIG_CMD_TIME=y
CONFIG_NET=y
CONFIG_NET_NETCONSOLE=y
CONFIG_NET_FASTBOOT=y
-CONFIG_OFDEVICE=y
CONFIG_OF_BAREBOX_DRIVERS=y
CONFIG_AIODEV=y
CONFIG_STM32_ADC=y
@@ -105,6 +105,13 @@ CONFIG_REALTEK_PHY=y
# CONFIG_SPI is not set
CONFIG_I2C=y
CONFIG_I2C_STM32=y
+CONFIG_USB_HOST=y
+CONFIG_USB_DWC2_HOST=y
+CONFIG_USB_DWC2_GADGET=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DFU=y
+CONFIG_USB_GADGET_SERIAL=y
+CONFIG_USB_GADGET_FASTBOOT=y
CONFIG_VIDEO=y
CONFIG_DRIVER_VIDEO_BACKLIGHT=y
CONFIG_DRIVER_VIDEO_SIMPLE_PANEL=y
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 63bd73dfaa..d5f61768a5 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -113,6 +113,7 @@ lwl-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += imx6dl-hummingboard.dtb.o imx6q-hummingb
lwl-$(CONFIG_MACH_SEEED_ODYSSEY) += stm32mp157c-odyssey.dtb.o
lwl-$(CONFIG_MACH_STM32MP15XX_DKX) += stm32mp157c-dk2.dtb.o stm32mp157a-dk1.dtb.o
lwl-$(CONFIG_MACH_LXA_MC1) += stm32mp157c-lxa-mc1.dtb.o
+lwl-$(CONFIG_MACH_STM32MP15X_EV1) += stm32mp157c-ev1.dtb.o
lwl-$(CONFIG_MACH_SCB9328) += imx1-scb9328.dtb.o
lwl-$(CONFIG_MACH_TECHNEXION_WANDBOARD) += imx6q-wandboard.dtb.o imx6dl-wandboard.dtb.o
lwl-$(CONFIG_MACH_TECHNEXION_PICO_HOBBIT) += imx6ul-pico-hobbit.dtb.o
diff --git a/arch/arm/dts/stm32mp157c-ev1.dts b/arch/arm/dts/stm32mp157c-ev1.dts
new file mode 100644
index 0000000000..742eca7a33
--- /dev/null
+++ b/arch/arm/dts/stm32mp157c-ev1.dts
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR X11)
+
+#include <arm/stm32mp157c-ev1.dts>
+#include "stm32mp151.dtsi"
+
+/ {
+ chosen {
+ environment-sd {
+ compatible = "barebox,environment";
+ device-path = &sdmmc1, "partname:barebox-environment";
+ status = "disabled";
+ };
+
+ environment-emmc {
+ compatible = "barebox,environment";
+ device-path = &sdmmc2, "partname:barebox-environment";
+ status = "disabled";
+ };
+ };
+};
diff --git a/arch/arm/dts/zynqmp-clk.dtsi b/arch/arm/dts/zynqmp-clk.dtsi
deleted file mode 100644
index 68ece9aa67..0000000000
--- a/arch/arm/dts/zynqmp-clk.dtsi
+++ /dev/null
@@ -1,155 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Clock specification for Xilinx ZynqMP
- *
- * (C) Copyright 2017, Xilinx, Inc.
- *
- * Michal Simek <michal.simek@xilinx.com>
- */
-
-#include <dt-bindings/clock/xlnx-zynqmp-clk.h>
-
-&zynqmp_firmware {
- zynqmp_clk: clock-controller {
- #clock-cells = <1>;
- compatible = "xlnx,zynqmp-clk";
- clocks = <&pss_ref_clk>, <&video_clk>, <&pss_alt_ref_clk>, <&aux_ref_clk>, <&gt_crx_ref_clk>;
- clock-names = "pss_ref_clk", "video_clk", "pss_alt_ref_clk", "aux_ref_clk", "gt_crx_ref_clk";
- };
-};
-
-/ {
- pss_ref_clk: pss_ref_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <33333333>;
- };
-
- video_clk: video_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <27000000>;
- };
-
- pss_alt_ref_clk: pss_alt_ref_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <0>;
- };
-
- gt_crx_ref_clk: gt_crx_ref_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <108000000>;
- };
-
- aux_ref_clk: aux_ref_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <27000000>;
- };
-};
-
-&can0 {
- clocks = <&zynqmp_clk CAN0_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&can1 {
- clocks = <&zynqmp_clk CAN1_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&cpu0 {
- clocks = <&zynqmp_clk ACPU>;
-};
-
-&gem0 {
- clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM0_TX>, <&zynqmp_clk GEM0_REF>, <&zynqmp_clk GEM_TSU>;
- clock-names = "pclk", "hclk", "tx_clk", "rx_clk", "tsu_clk";
-};
-
-&gem1 {
- clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM1_TX>, <&zynqmp_clk GEM1_REF>, <&zynqmp_clk GEM_TSU>;
- clock-names = "pclk", "hclk", "tx_clk", "rx_clk", "tsu_clk";
-};
-
-&gem2 {
- clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM2_TX>, <&zynqmp_clk GEM2_REF>, <&zynqmp_clk GEM_TSU>;
- clock-names = "pclk", "hclk", "tx_clk", "rx_clk", "tsu_clk";
-};
-
-&gem3 {
- clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM3_TX>, <&zynqmp_clk GEM3_REF>, <&zynqmp_clk GEM_TSU>;
- clock-names = "pclk", "hclk", "tx_clk", "rx_clk", "tsu_clk";
-};
-
-&gpio {
- clocks = <&zynqmp_clk LPD_LSBUS>;
-};
-
-&i2c0 {
- clocks = <&zynqmp_clk I2C0_REF>;
-};
-
-&i2c1 {
- clocks = <&zynqmp_clk I2C1_REF>;
-};
-
-&pcie {
- clocks = <&zynqmp_clk PCIE_REF>;
-};
-
-&sata {
- clocks = <&zynqmp_clk SATA_REF>;
-};
-
-&sdhci0 {
- clocks = <&zynqmp_clk SDIO0_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&sdhci1 {
- clocks = <&zynqmp_clk SDIO1_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&spi0 {
- clocks = <&zynqmp_clk SPI0_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&spi1 {
- clocks = <&zynqmp_clk SPI0_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&ttc0 {
- clocks = <&zynqmp_clk LPD_LSBUS>;
-};
-
-&ttc1 {
- clocks = <&zynqmp_clk LPD_LSBUS>;
-};
-
-&ttc2 {
- clocks = <&zynqmp_clk LPD_LSBUS>;
-};
-
-&ttc3 {
- clocks = <&zynqmp_clk LPD_LSBUS>;
-};
-
-&uart0 {
- clocks = <&zynqmp_clk UART0_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&uart1 {
- clocks = <&zynqmp_clk UART1_REF>, <&zynqmp_clk LPD_LSBUS>;
-};
-
-&usb0 {
- clocks = <&zynqmp_clk USB0_BUS_REF>, <&zynqmp_clk USB3_DUAL_REF>;
-};
-
-&usb1 {
- clocks = <&zynqmp_clk USB1_BUS_REF>, <&zynqmp_clk USB3_DUAL_REF>;
-};
-
-&watchdog0 {
- clocks = <&zynqmp_clk WDT>;
-};
diff --git a/arch/arm/dts/zynqmp-zcu104-revA.dts b/arch/arm/dts/zynqmp-zcu104-revA.dts
index 8b8dd84c1d..8c467ee970 100644
--- a/arch/arm/dts/zynqmp-zcu104-revA.dts
+++ b/arch/arm/dts/zynqmp-zcu104-revA.dts
@@ -8,4 +8,3 @@
*/
#include <arm64/xilinx/zynqmp-zcu104-revA.dts>
-#include "zynqmp-clk.dtsi"
diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
index b8ccbaab67..95d3dc510d 100644
--- a/arch/arm/mach-stm32mp/Kconfig
+++ b/arch/arm/mach-stm32mp/Kconfig
@@ -23,4 +23,12 @@ config MACH_SEEED_ODYSSEY
select ARCH_STM32MP157
bool "Seeed Studio Odyssey"
+config MACH_STM32MP15X_EV1
+ select ARCH_STM32MP157
+ bool "STM32MP15X-EV1 board"
+ help
+ builds a single barebox-stm32mp15x-ev1.img that can be deployed
+ as SSBL on any STM32MP15X-EVAL platform, like the
+ STM32MP157C-EV1
+
endif
diff --git a/arch/mips/boards/qemu-malta/lowlevel.S b/arch/mips/boards/qemu-malta/lowlevel.S
index e4ecde45cf..98821e0426 100644
--- a/arch/mips/boards/qemu-malta/lowlevel.S
+++ b/arch/mips/boards/qemu-malta/lowlevel.S
@@ -40,8 +40,7 @@ ENTRY_FUNCTION(BOARD_PBL_START)
0x1fc00010 address is reserved for BoardID
*/
.org 0x10
- .word 0xffffffff
- .word 0xffffffff
+ .asciiz "barebox"
__start:
mips_disable_interrupts
diff --git a/arch/sandbox/board/Makefile b/arch/sandbox/board/Makefile
index c504c967de..ffb1dbc21e 100644
--- a/arch/sandbox/board/Makefile
+++ b/arch/sandbox/board/Makefile
@@ -7,5 +7,6 @@ obj-y += dtb.o
obj-y += power.o
obj-y += dev-random.o
obj-y += watchdog.o
+obj-$(CONFIG_LED) += led.o
extra-y += barebox.lds
diff --git a/arch/sandbox/board/led.c b/arch/sandbox/board/led.c
new file mode 100644
index 0000000000..b7ab81112b
--- /dev/null
+++ b/arch/sandbox/board/led.c
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#include <common.h>
+#include <init.h>
+#include <led.h>
+#include <mach/linux.h>
+#include <of.h>
+
+static struct sandbox_led {
+ struct led led;
+ bool active;
+} sandbox_led;
+
+static inline void terminal_puts(const char *s)
+{
+ linux_write(1, s, strlen(s));
+}
+
+static void sandbox_led_set(struct led *led, unsigned int brightness)
+{
+ terminal_puts("\x1b]2;barebox ");
+ while (brightness--)
+ terminal_puts(".");
+ terminal_puts("\a");
+
+ sandbox_led.active = true;
+}
+
+static int sandbox_led_of_probe(struct device_d *dev)
+{
+ struct device_node *np = dev->device_node;
+ int ret;
+
+ if (sandbox_led.led.set)
+ return -EBUSY;
+
+ sandbox_led.led.name = xstrdup(np->name);
+ sandbox_led.led.max_value = 5;
+ sandbox_led.led.set = sandbox_led_set;
+
+ ret = led_register(&sandbox_led.led);
+ if (ret)
+ return ret;
+
+ led_of_parse_trigger(&sandbox_led.led, np);
+
+ return 0;
+}
+
+static void sandbox_led_of_remove(struct device_d *dev)
+{
+ if (sandbox_led.active)
+ sandbox_led_set(NULL, 0);
+}
+
+static struct of_device_id sandbox_led_of_ids[] = {
+ { .compatible = "barebox,sandbox-led", },
+ { }
+};
+
+static struct driver_d sandbox_led_of_driver = {
+ .name = "sandbox-led",
+ .probe = sandbox_led_of_probe,
+ .remove = sandbox_led_of_remove,
+ .of_compatible = sandbox_led_of_ids,
+};
+device_platform_driver(sandbox_led_of_driver);
diff --git a/arch/sandbox/dts/sandbox.dts b/arch/sandbox/dts/sandbox.dts
index ef1fa7b866..e99986bb90 100644
--- a/arch/sandbox/dts/sandbox.dts
+++ b/arch/sandbox/dts/sandbox.dts
@@ -98,4 +98,8 @@
sound {
compatible = "barebox,sandbox-sound";
};
+
+ led {
+ compatible = "barebox,sandbox-led";
+ };
};