summaryrefslogtreecommitdiffstats
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
parent31343957ea42a9340345c17288e56cfa07304bb8 (diff)
parent176bd2605edfd7d64370736abe8c44833068788b (diff)
downloadbarebox-bb2873db3ef11e7b1299b1cca129f5d002e47f59.tar.gz
barebox-bb2873db3ef11e7b1299b1cca129f5d002e47f59.tar.xz
Merge branch 'for-next/misc'
-rw-r--r--Documentation/boards/stm32mp.rst35
-rw-r--r--Makefile7
-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
-rw-r--r--common/blspec.c4
-rw-r--r--common/complete.c9
-rw-r--r--common/image-fit.c6
-rw-r--r--common/oftree.c14
-rw-r--r--common/resource.c6
-rw-r--r--drivers/mtd/core.c5
-rw-r--r--drivers/mtd/nor/cfi_flash.c4
-rw-r--r--drivers/power/reset/reboot-mode.c4
-rw-r--r--drivers/usb/dwc2/gadget.c2
-rw-r--r--drivers/usb/dwc2/host.c2
-rw-r--r--drivers/video/Kconfig8
-rw-r--r--drivers/video/Makefile3
-rw-r--r--drivers/video/simplefb-client.c149
-rw-r--r--drivers/video/simplefb-fixup.c (renamed from drivers/video/simplefb.c)0
-rw-r--r--fs/fs.c29
-rw-r--r--images/Makefile.stm32mp5
-rw-r--r--include/linux/platform_data/simplefb.h46
-rw-r--r--include/linux/reset.h7
-rw-r--r--include/linux/stat.h12
-rw-r--r--include/stringlist.h2
-rw-r--r--lib/parameter.c2
-rw-r--r--lib/stringlist.c23
-rw-r--r--scripts/imx/imx-image.c15
41 files changed, 519 insertions, 229 deletions
diff --git a/Documentation/boards/stm32mp.rst b/Documentation/boards/stm32mp.rst
index 87fff7d125..24b7a19ceb 100644
--- a/Documentation/boards/stm32mp.rst
+++ b/Documentation/boards/stm32mp.rst
@@ -32,6 +32,7 @@ The resulting images will be placed under ``images/``:
barebox-stm32mp15xx-dkx.img # both DK1 and DK2
barebox-stm32mp157c-lxa-mc1.img
barebox-stm32mp157c-seeed-odyssey.img
+ barebox-stm32mp15x-ev1.img # stm32mp157c-ev1 and friends
Flashing barebox
@@ -94,8 +95,38 @@ acknowledge.
Boot source selection
---------------------
-The STM32MP BootROM samples three boot pins at reset. Usually BOOT1 is
-pulled down and BOOT0 and BOOT2 are connected to a 2P DIP switch::
+The STM32MP BootROM samples three boot pins at reset. On official
+eval kit, they are either connected to a 3P DIP switch or 2P (with
+BOOT1 pulled down).
+
+EV-1
+^^^^
+SW1 on the DK boards sets boot mode as follows::
+
+ +-------+
+ | --- |
+ BOOT2 | O-- |
+ BOOT1 | O --O |
+ BOOT0 | N O-- | <---- SD-Card
+ +-------+
+
+ +-------+
+ | --- |
+ BOOT2 | --O |
+ BOOT1 | O O-- |
+ BOOT0 | N --O | <---- eMMC
+ +-------+
+
+ +-------+
+ | --- |
+ BOOT2 | --O |
+ BOOT1 | O --O |
+ BOOT0 | N --O | <---- DFU on UART and USB OTG
+ +-------+
+
+DK-1/DK-2
+^^^^^^^^^
+Boot mode on the DK board is set as follows::
+-------+
BOOT2 | O O-- |
diff --git a/Makefile b/Makefile
index a52694360e..dc67f22c36 100644
--- a/Makefile
+++ b/Makefile
@@ -630,6 +630,13 @@ KBUILD_CFLAGS += $(call cc-option, -fno-delete-null-pointer-checks,)
# disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
+# Make sure -fstack-check isn't enabled (like gentoo apparently did)
+KBUILD_CFLAGS += $(call cc-option,-fno-stack-check)
+
+# ensure -fcf-protection is disabled as it is incompatible with our sjlj
+# Platforms that have their setjmp appropriately implemented may override this
+KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
+
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
# Align the bit size of userspace programs with the kernel
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";
+ };
};
diff --git a/common/blspec.c b/common/blspec.c
index c05d8a8297..ad80d7a8cd 100644
--- a/common/blspec.c
+++ b/common/blspec.c
@@ -729,7 +729,9 @@ static int blspec_scan_cdev(struct bootentries *bootentries, struct cdev *cdev)
found += ret;
}
- rootpath = cdev_mount_default(cdev, NULL);
+ rootpath = cdev_get_mount_path(cdev);
+ if (!rootpath)
+ rootpath = cdev_mount_default(cdev, NULL);
if (!IS_ERR(rootpath)) {
ret = blspec_scan_directory(bootentries, rootpath);
if (ret > 0)
diff --git a/common/complete.c b/common/complete.c
index ad630f4c95..e504b75606 100644
--- a/common/complete.c
+++ b/common/complete.c
@@ -101,14 +101,7 @@ static int path_command_complete(struct string_list *sl, char *instr)
else
strcat(tmp, " ");
- /* This function is called
- * after command_complete,
- * so we check if a double
- * entry exist */
- if (string_list_contains
- (sl, tmp) == 0) {
- string_list_add_sorted(sl, tmp);
- }
+ string_list_add_sort_uniq(sl, tmp);
}
}
diff --git a/common/image-fit.c b/common/image-fit.c
index 538e61f51b..2c5ef7f687 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -230,11 +230,9 @@ static struct digest *fit_alloc_digest(struct device_node *sig_node,
return ERR_PTR(-EINVAL);
}
- if (strcmp(algo_name, "sha1,rsa2048") == 0) {
+ if (strncmp(algo_name, "sha1,", 5) == 0) {
algo = HASH_ALGO_SHA1;
- } else if (strcmp(algo_name, "sha256,rsa2048") == 0) {
- algo = HASH_ALGO_SHA256;
- } else if (strcmp(algo_name, "sha256,rsa4096") == 0) {
+ } else if (strncmp(algo_name, "sha256,", 7) == 0) {
algo = HASH_ALGO_SHA256;
} else {
pr_err("unknown algo %s\n", algo_name);
diff --git a/common/oftree.c b/common/oftree.c
index 075b9d6b8b..60d4327155 100644
--- a/common/oftree.c
+++ b/common/oftree.c
@@ -319,21 +319,27 @@ int of_fix_tree(struct device_node *node)
struct fdt_header *of_get_fixed_tree(struct device_node *node)
{
int ret;
- struct fdt_header *fdt;
+ struct fdt_header *fdt = NULL;
+ struct device_node *freenp = NULL;
if (!node) {
node = of_get_root_node();
if (!node)
return NULL;
+
+ freenp = node = of_copy_node(NULL, node);
+ if (!node)
+ return NULL;
}
ret = of_fix_tree(node);
if (ret)
- return NULL;
+ goto out;
fdt = of_flatten_dtb(node);
- if (!fdt)
- return NULL;
+
+out:
+ of_delete_node(freenp);
return fdt;
}
diff --git a/common/resource.c b/common/resource.c
index 92fe96252f..ff4318a0d7 100644
--- a/common/resource.c
+++ b/common/resource.c
@@ -61,12 +61,14 @@ struct resource *__request_region(struct resource *parent,
goto ok;
if (start > r->end)
continue;
- debug("%s: 0x%08llx:0x%08llx conflicts with 0x%08llx:0x%08llx\n",
+ debug("%s: 0x%08llx:0x%08llx (%s) conflicts with 0x%08llx:0x%08llx (%s)\n",
__func__,
(unsigned long long)start,
(unsigned long long)end,
+ name,
(unsigned long long)r->start,
- (unsigned long long)r->end);
+ (unsigned long long)r->end,
+ r->name);
return ERR_PTR(-EBUSY);
}
diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c
index af33ad665c..22eb2a056c 100644
--- a/drivers/mtd/core.c
+++ b/drivers/mtd/core.c
@@ -222,8 +222,11 @@ static int mtd_op_erase(struct cdev *cdev, loff_t count, loff_t offset)
printf("Skipping bad block at 0x%08llx\n", addr);
} else {
ret = mtd_erase(mtd, &erase);
- if (ret)
+ if (ret) {
+ printf("%s: failed to erase block at 0x%08llx\n",
+ __func__, addr);
return ret;
+ }
}
addr += mtd->erasesize;
diff --git a/drivers/mtd/nor/cfi_flash.c b/drivers/mtd/nor/cfi_flash.c
index 225b03ec3d..ba0bd1b4eb 100644
--- a/drivers/mtd/nor/cfi_flash.c
+++ b/drivers/mtd/nor/cfi_flash.c
@@ -969,6 +969,10 @@ static int cfi_probe_one(struct flash_info *info, int num)
return PTR_ERR(iores);
info->base = IOMEM(iores->start);
+ /* TODO: either remap memory region or disable NULL pointer page */
+ if (IS_ENABLED(CONFIG_MMU) && iores->start == 0)
+ return -EPERM;
+
ret = flash_detect_size(info);
if (ret) {
dev_warn(info->dev, "## Unknown FLASH on Bank at 0x%p - Size = 0x%08lx = %ld MB\n",
diff --git a/drivers/power/reset/reboot-mode.c b/drivers/power/reset/reboot-mode.c
index df3be03edf..d9b51dfea6 100644
--- a/drivers/power/reset/reboot-mode.c
+++ b/drivers/power/reset/reboot-mode.c
@@ -71,10 +71,6 @@ static int of_reboot_mode_fixup(struct device_node *root, void *ctx)
srcnp = reboot->dev->device_node;
dstnp = of_get_node_by_reproducible_name(root, srcnp);
- /* nothing to do when called on barebox-internal tree */
- if (srcnp == dstnp)
- return 0;
-
if (dstnp) {
dstparent = dstnp->parent;
of_delete_node(dstnp);
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index b8ec37be78..053a243d64 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -307,7 +307,7 @@ static void dwc2_gadget_start_req(struct dwc2 *dwc2,
dwc2_writel(dwc2, ureq->dma, dma_reg);
dwc2_dbg(dwc2, "%s: 0x%pad => 0x%08x\n",
- __func__, (void *)ureq->dma, dma_reg);
+ __func__, &ureq->dma, dma_reg);
}
if (hs_ep->isochronous && hs_ep->interval == 1) {
diff --git a/drivers/usb/dwc2/host.c b/drivers/usb/dwc2/host.c
index 7a070d91f3..b5a51f5668 100644
--- a/drivers/usb/dwc2/host.c
+++ b/drivers/usb/dwc2/host.c
@@ -181,7 +181,7 @@ static int transfer_chunk(struct dwc2 *dwc2, u8 hc,
}
dwc2_dbg(dwc2, "chunk: pid=%d xfer_len=%u pkts=%u dma_addr=%pad\n",
- *pid, xfer_len, num_packets, (void *)dma_addr);
+ *pid, xfer_len, num_packets, &dma_addr);
dwc2_writel(dwc2, dma_addr, HCDMA(hc));
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index b6d468c63c..95d993dde8 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -101,8 +101,14 @@ source "drivers/video/imx-ipu-v3/Kconfig"
source "drivers/video/bochs/Kconfig"
+config DRIVER_VIDEO_SIMPLEFB_CLIENT
+ bool "Simple framebuffer client support"
+ depends on OFTREE
+ help
+ Add support for reusing a previously set up simple framebuffer.
+
config DRIVER_VIDEO_SIMPLEFB
- bool "Simple framebuffer support"
+ bool "Simple framebuffer fixup support"
depends on OFTREE
help
Add support for setting up the kernel's simple framebuffer driver
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 28d0fe205b..2c002f7e53 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -19,7 +19,8 @@ obj-$(CONFIG_DRIVER_VIDEO_PXA) += pxa.o
obj-$(CONFIG_DRIVER_VIDEO_SDL) += sdl.o
obj-$(CONFIG_DRIVER_VIDEO_OMAP) += omap.o
obj-$(CONFIG_DRIVER_VIDEO_BCM283X) += bcm2835.o
-obj-$(CONFIG_DRIVER_VIDEO_SIMPLEFB) += simplefb.o
+obj-$(CONFIG_DRIVER_VIDEO_SIMPLEFB_CLIENT) += simplefb-client.o
+obj-$(CONFIG_DRIVER_VIDEO_SIMPLEFB) += simplefb-fixup.o
obj-$(CONFIG_DRIVER_VIDEO_IMX_IPUV3) += imx-ipu-v3/
obj-$(CONFIG_DRIVER_VIDEO_EFI_GOP) += efi_gop.o
obj-$(CONFIG_DRIVER_VIDEO_FB_SSD1307) += ssd1307fb.o
diff --git a/drivers/video/simplefb-client.c b/drivers/video/simplefb-client.c
new file mode 100644
index 0000000000..2d0495f616
--- /dev/null
+++ b/drivers/video/simplefb-client.c
@@ -0,0 +1,149 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Simplest possible simple frame-buffer driver, as a platform device
+ *
+ * Copyright (c) 2013, Stephen Warren
+ *
+ * Based on q40fb.c, which was:
+ * Copyright (C) 2001 Richard Zidlicky <rz@linux-m68k.org>
+ *
+ * Also based on offb.c, which was:
+ * Copyright (C) 1997 Geert Uytterhoeven
+ * Copyright (C) 1996 Paul Mackerras
+ */
+
+#include <common.h>
+#include <fb.h>
+#include <io.h>
+#include <linux/platform_data/simplefb.h>
+#include <driver.h>
+#include <of.h>
+
+static struct fb_ops simplefb_ops;
+
+static struct simplefb_format simplefb_formats[] = SIMPLEFB_FORMATS;
+
+struct simplefb_params {
+ u32 width;
+ u32 height;
+ u32 stride;
+ struct simplefb_format *format;
+};
+
+static int simplefb_parse_dt(struct device_d *dev,
+ struct simplefb_params *params)
+{
+ struct device_node *np = dev->device_node;
+ int ret;
+ const char *format;
+ int i;
+
+ ret = of_property_read_u32(np, "width", &params->width);
+ if (ret) {
+ dev_err(dev, "Can't parse width property\n");
+ return ret;
+ }
+
+ ret = of_property_read_u32(np, "height", &params->height);
+ if (ret) {
+ dev_err(dev, "Can't parse height property\n");
+ return ret;
+ }
+
+ ret = of_property_read_u32(np, "stride", &params->stride);
+ if (ret) {
+ dev_err(dev, "Can't parse stride property\n");
+ return ret;
+ }
+
+ ret = of_property_read_string(np, "format", &format);
+ if (ret) {
+ dev_err(dev, "Can't parse format property\n");
+ return ret;
+ }
+ params->format = NULL;
+ for (i = 0; i < ARRAY_SIZE(simplefb_formats); i++) {
+ if (strcmp(format, simplefb_formats[i].name))
+ continue;
+ params->format = &simplefb_formats[i];
+ break;
+ }
+ if (!params->format) {
+ dev_err(dev, "Invalid format value\n");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int simplefb_probe(struct device_d *dev)
+{
+ int ret;
+ struct simplefb_params params;
+ struct fb_info *info;
+ struct resource *mem;
+
+ ret = -ENODEV;
+ if (dev->device_node)
+ ret = simplefb_parse_dt(dev, &params);
+
+ if (ret)
+ return ret;
+
+ mem = dev_request_mem_resource(dev, 0);
+ if (IS_ERR(mem)) {
+ dev_err(dev, "No memory resource\n");
+ return PTR_ERR(mem);
+ }
+
+ info = xzalloc(sizeof(*info));
+ dev->priv = info;
+
+ info->xres = params.width;
+ info->yres = params.height;
+ info->bits_per_pixel = params.format->bits_per_pixel;
+ info->red = params.format->red;
+ info->green = params.format->green;
+ info->blue = params.format->blue;
+ info->transp = params.format->transp;
+ info->line_length = params.stride;
+
+ info->screen_base = (void *)mem->start;
+ info->screen_size = resource_size(mem);
+
+
+ info->fbops = &simplefb_ops;
+
+ dev_info(dev, "framebuffer at 0x%p, 0x%lx bytes\n",
+ info->screen_base, info->screen_size);
+ dev_info(dev, "format=%s, mode=%dx%dx%d, linelength=%d\n",
+ params.format->name,
+ info->xres, info->yres,
+ info->bits_per_pixel, info->line_length);
+
+ ret = register_framebuffer(info);
+ if (ret < 0) {
+ dev_err(dev, "Unable to register simplefb: %d\n", ret);
+ return ret;
+ }
+
+ dev_info(dev, "simplefb registered!\n");
+
+ return 0;
+}
+
+static const struct of_device_id simplefb_of_match[] = {
+ { .compatible = "simple-framebuffer", },
+ { },
+};
+
+static struct driver_d simplefb_driver = {
+ .name = "simple-framebuffer",
+ .of_compatible = simplefb_of_match,
+ .probe = simplefb_probe,
+};
+device_platform_driver(simplefb_driver);
+
+MODULE_AUTHOR("Stephen Warren <swarren@wwwdotorg.org>");
+MODULE_DESCRIPTION("Simple framebuffer driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb-fixup.c
index a2c59de364..a2c59de364 100644
--- a/drivers/video/simplefb.c
+++ b/drivers/video/simplefb-fixup.c
diff --git a/fs/fs.c b/fs/fs.c
index 3db24b7b68..a023324913 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -909,7 +909,6 @@ EXPORT_SYMBOL(readdir);
static void stat_inode(struct inode *inode, struct stat *s)
{
- s->st_dev = 0;
s->st_ino = inode->i_ino;
s->st_mode = inode->i_mode;
s->st_uid = inode->i_uid;
@@ -951,9 +950,10 @@ const char *cdev_get_mount_path(struct cdev *cdev)
/*
* cdev_mount_default - mount a cdev to the default path
*
- * If a cdev is already mounted return the path it's mounted on, otherwise
- * mount it to /mnt/<cdevname> and return the path. Returns an error pointer
- * on failure.
+ * If a cdev is already mounted to the default mount path return the path
+ * it's mounted on. If it is mounted to any other path return EBUSY.
+ * Otherwise mount it to /mnt/<cdevname> and return the path. Returns an
+ * error pointer on failure.
*/
const char *cdev_mount_default(struct cdev *cdev, const char *fsoptions)
{
@@ -962,15 +962,24 @@ const char *cdev_mount_default(struct cdev *cdev, const char *fsoptions)
int ret;
/*
- * If this cdev is already mounted somewhere use this path
- * instead of mounting it again to avoid corruption on the
- * filesystem. Note this ignores eventual fsoptions though.
+ * If this cdev is already mounted somewhere other than the
+ * default mount path return -EBUSY instead of mounting it
+ * again to avoid corruption on the filesystem. Note this
+ * ignores eventual fsoptions though. If the cdev is already
+ * mounted on the default path just return that path.
*/
path = cdev_get_mount_path(cdev);
- if (path)
- return path;
-
newpath = basprintf("/mnt/%s", cdev->name);
+
+ if (path) {
+ if (strcmp(newpath, path)) {
+ free(newpath);
+ return ERR_PTR(-EBUSY);
+ } else {
+ return path;
+ }
+ }
+
make_directory(newpath);
devpath = basprintf("/dev/%s", cdev->name);
diff --git a/images/Makefile.stm32mp b/images/Makefile.stm32mp
index eafe84a721..3384f5014b 100644
--- a/images/Makefile.stm32mp
+++ b/images/Makefile.stm32mp
@@ -27,3 +27,8 @@ pblb-$(CONFIG_MACH_SEEED_ODYSSEY) += start_stm32mp157c_seeed_odyssey
FILE_barebox-stm32mp157c-seeed-odyssey.img = start_stm32mp157c_seeed_odyssey.pblb.stm32
OPTS_start_stm32mp157c_seeed_odyssey.pblb.stm32 = $(STM32MP1_OPTS)
image-$(CONFIG_MACH_SEEED_ODYSSEY) += barebox-stm32mp157c-seeed-odyssey.img
+
+pblb-$(CONFIG_MACH_STM32MP15X_EV1) += start_stm32mp15x_ev1
+FILE_barebox-stm32mp15x-ev1.img = start_stm32mp15x_ev1.pblb.stm32
+OPTS_start_stm32mp15x_ev1.pblb.stm32 = $(STM32MP1_OPTS)
+image-$(CONFIG_MACH_STM32MP15X_EV1) += barebox-stm32mp15x-ev1.img
diff --git a/include/linux/platform_data/simplefb.h b/include/linux/platform_data/simplefb.h
new file mode 100644
index 0000000000..a4f07eccd8
--- /dev/null
+++ b/include/linux/platform_data/simplefb.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * simplefb.h - Simple Framebuffer Device
+ *
+ * Copyright (C) 2013 David Herrmann <dh.herrmann@gmail.com>
+ */
+
+#ifndef __PLATFORM_DATA_SIMPLEFB_H__
+#define __PLATFORM_DATA_SIMPLEFB_H__
+
+#include <video/fourcc.h>
+#include <fb.h>
+#include <linux/types.h>
+
+/* format array, use it to initialize a "struct simplefb_format" array */
+#define SIMPLEFB_FORMATS \
+{ \
+ { "r5g6b5", 16, {11, 5}, {5, 6}, {0, 5}, {0, 0}, DRM_FORMAT_RGB565 }, \
+ { "x1r5g5b5", 16, {10, 5}, {5, 5}, {0, 5}, {0, 0}, DRM_FORMAT_XRGB1555 }, \
+ { "a1r5g5b5", 16, {10, 5}, {5, 5}, {0, 5}, {15, 1}, DRM_FORMAT_ARGB1555 }, \
+ { "r8g8b8", 24, {16, 8}, {8, 8}, {0, 8}, {0, 0}, DRM_FORMAT_RGB888 }, \
+ { "x8r8g8b8", 32, {16, 8}, {8, 8}, {0, 8}, {0, 0}, DRM_FORMAT_XRGB8888 }, \
+ { "a8r8g8b8", 32, {16, 8}, {8, 8}, {0, 8}, {24, 8}, DRM_FORMAT_ARGB8888 }, \
+ { "a8b8g8r8", 32, {0, 8}, {8, 8}, {16, 8}, {24, 8}, DRM_FORMAT_ABGR8888 }, \
+ { "x2r10g10b10", 32, {20, 10}, {10, 10}, {0, 10}, {0, 0}, DRM_FORMAT_XRGB2101010 }, \
+ { "a2r10g10b10", 32, {20, 10}, {10, 10}, {0, 10}, {30, 2}, DRM_FORMAT_ARGB2101010 }, \
+}
+
+/*
+ * Data-Format for Simple-Framebuffers
+ * @name: unique 0-terminated name that can be used to identify the mode
+ * @red,green,blue: Offsets and sizes of the single RGB parts
+ * @transp: Offset and size of the alpha bits. length=0 means no alpha
+ * @fourcc: 32bit DRM four-CC code (see drm_fourcc.h)
+ */
+struct simplefb_format {
+ const char *name;
+ u32 bits_per_pixel;
+ struct fb_bitfield red;
+ struct fb_bitfield green;
+ struct fb_bitfield blue;
+ struct fb_bitfield transp;
+ u32 fourcc;
+};
+
+#endif /* __PLATFORM_DATA_SIMPLEFB_H__ */
diff --git a/include/linux/reset.h b/include/linux/reset.h
index 4a92a177bc..a166fe1cfe 100644
--- a/include/linux/reset.h
+++ b/include/linux/reset.h
@@ -21,43 +21,36 @@ int __must_check device_reset_us(struct device_d *dev, int us);
static inline int reset_control_reset(struct reset_control *rstc)
{
- WARN_ON(1);
return 0;
}
static inline int reset_control_assert(struct reset_control *rstc)
{
- WARN_ON(1);
return 0;
}
static inline int reset_control_deassert(struct reset_control *rstc)
{
- WARN_ON(1);
return 0;
}
static inline struct reset_control *
reset_control_get(struct device_d *dev, const char *id)
{
- WARN_ON(1);
return NULL;
}
static inline void reset_control_put(struct reset_control *rstc)
{
- WARN_ON(1);
}
static inline int device_reset_us(struct device_d *dev, int us)
{
- WARN_ON(1);
return 0;
}
static inline int device_reset(struct device_d *dev)
{
- WARN_ON(1);
return 0;
}
diff --git a/include/linux/stat.h b/include/linux/stat.h
index 87fe068396..f5043d8bce 100644
--- a/include/linux/stat.h
+++ b/include/linux/stat.h
@@ -45,8 +45,6 @@ extern "C" {
#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO)
struct stat {
- unsigned short st_dev;
- unsigned short __pad1;
unsigned long st_ino;
unsigned short st_mode;
unsigned short st_nlink;
@@ -55,16 +53,6 @@ struct stat {
unsigned short st_rdev;
unsigned short __pad2;
loff_t st_size;
- unsigned long st_blksize;
- unsigned long st_blocks;
- unsigned long st_atime;
- unsigned long __unused1;
- unsigned long st_mtime;
- unsigned long __unused2;
- unsigned long st_ctime;
- unsigned long __unused3;
- unsigned long __unused4;
- unsigned long __unused5;
};
#ifdef __cplusplus
diff --git a/include/stringlist.h b/include/stringlist.h
index 5cd452ca5f..c5d6e70a36 100644
--- a/include/stringlist.h
+++ b/include/stringlist.h
@@ -12,12 +12,14 @@ struct string_list {
int string_list_add(struct string_list *sl, const char *str);
int string_list_add_asprintf(struct string_list *sl, const char *fmt, ...);
int string_list_add_sorted(struct string_list *sl, const char *str);
+int string_list_add_sort_uniq(struct string_list *sl, const char *str);
int string_list_contains(struct string_list *sl, const char *str);
void string_list_print_by_column(struct string_list *sl);
static inline void string_list_init(struct string_list *sl)
{
INIT_LIST_HEAD(&sl->list);
+ sl->str = NULL;
}
static inline void string_list_free(struct string_list *sl)
diff --git a/lib/parameter.c b/lib/parameter.c
index f57b7d07fd..173420c58a 100644
--- a/lib/parameter.c
+++ b/lib/parameter.c
@@ -746,7 +746,6 @@ struct param_d *dev_add_param_bitmask(struct device_d *dev, const char *name,
struct param_ip {
struct param_d param;
IPaddr_t *ip;
- const char *format;
int (*set)(struct param_d *p, void *priv);
int (*get)(struct param_d *p, void *priv);
};
@@ -825,7 +824,6 @@ struct param_mac {
struct param_d param;
char *mac;
u8 mac_str[sizeof("xx:xx:xx:xx:xx:xx")];
- const char *format;
int (*set)(struct param_d *p, void *priv);
int (*get)(struct param_d *p, void *priv);
};
diff --git a/lib/stringlist.c b/lib/stringlist.c
index 8e92c1b207..719fecdaa4 100644
--- a/lib/stringlist.c
+++ b/lib/stringlist.c
@@ -60,6 +60,29 @@ int string_list_add_sorted(struct string_list *sl, const char *str)
return 0;
}
+int string_list_add_sort_uniq(struct string_list *sl, const char *str)
+{
+ struct string_list *new, *entry = sl;
+
+ string_list_for_each_entry(entry, sl) {
+ int cmp = strcmp(entry->str, str);
+
+ if (cmp < 0)
+ continue;
+ if (cmp == 0)
+ return 0;
+
+ break;
+ }
+
+ new = xmalloc(sizeof(*new));
+ new->str = xstrdup(str);
+
+ list_add_tail(&new->list, &entry->list);
+
+ return 0;
+}
+
int string_list_contains(struct string_list *sl, const char *str)
{
struct string_list *entry;
diff --git a/scripts/imx/imx-image.c b/scripts/imx/imx-image.c
index 6cbee1d9bd..3e277e82fa 100644
--- a/scripts/imx/imx-image.c
+++ b/scripts/imx/imx-image.c
@@ -985,9 +985,18 @@ int main(int argc, char *argv[])
}
if (add_barebox_header) {
- pwrite(outfd, bb_header, sizeof_bb_header, 0);
- if (data.cpu_type == IMX_CPU_IMX35)
- pwrite(outfd, bb_header, sizeof_bb_header, header_len);
+ ret = pwrite(outfd, bb_header, sizeof_bb_header, 0);
+ if (ret < 0) {
+ fprintf(stderr, "pwrite failed: %s\n", strerror(errno));
+ exit(1);
+ }
+ if (data.cpu_type == IMX_CPU_IMX35) {
+ ret = pwrite(outfd, bb_header, sizeof_bb_header, header_len);
+ if (ret < 0) {
+ fprintf(stderr, "pwrite failed: %s\n", strerror(errno));
+ exit(1);
+ }
+ }
}
xwrite(outfd, infile, insize);