summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--common/memsize.c8
-rw-r--r--common/menu.c9
-rw-r--r--drivers/core/ofnode.c13
-rw-r--r--drivers/cpu/Kconfig2
-rw-r--r--drivers/firmware/scmi/mailbox_agent.c2
-rw-r--r--drivers/firmware/scmi/optee_agent.c3
-rw-r--r--drivers/iommu/iommu-uclass.c3
-rw-r--r--drivers/phy/Kconfig10
-rw-r--r--drivers/phy/Makefile1
-rw-r--r--drivers/phy/phy-mtk-ufs.c190
-rw-r--r--drivers/power/domain/power-domain-uclass.c3
-rw-r--r--drivers/ufs/cdns-platform.c1
-rw-r--r--drivers/ufs/ufs-amd-versal2.c1
-rw-r--r--drivers/ufs/ufs-pci.c1
-rw-r--r--drivers/ufs/ufs-qcom.c1
-rw-r--r--drivers/ufs/ufs-renesas-rcar-gen5.c1
-rw-r--r--drivers/ufs/ufs-renesas.c1
-rw-r--r--drivers/ufs/ufs-rockchip.c1
-rw-r--r--drivers/ufs/ufs-uclass.c12
-rw-r--r--drivers/ufs/ufshcd-dwc.c1
-rw-r--r--include/ufs.h9
-rw-r--r--lib/efi_loader/efi_boottime.c8
-rw-r--r--lib/efi_selftest/efi_selftest_loadimage.c7
-rw-r--r--lib/efi_selftest/efi_selftest_manageprotocols.c8
-rw-r--r--scripts/Makefile.lib2
-rw-r--r--tools/atmelimage.c2
27 files changed, 259 insertions, 43 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 08d01c41f35..245e422d72f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -795,5 +795,5 @@ vf2:
qemu-x86_64:
variables:
ROLE: qemu-x86_64
- TEST_PY_TEST_SPEC: "and not sleep"
+ TEST_PY_TEST_SPEC: "not sleep"
<<: *sjg_lab_dfn
diff --git a/common/memsize.c b/common/memsize.c
index 3c3ae6f1eba..1abf3fc47d7 100644
--- a/common/memsize.c
+++ b/common/memsize.c
@@ -85,6 +85,8 @@ long get_ram_size(long *base, long maxsize)
addr = base + cnt;
sync();
*addr = save[--i];
+ if (dcache_en)
+ dcache_flush_invalidate(addr);
}
return (0);
}
@@ -93,6 +95,8 @@ long get_ram_size(long *base, long maxsize)
addr = base + cnt; /* pointer arith! */
val = *addr;
*addr = save[--i];
+ if (dcache_en)
+ dcache_flush_invalidate(addr);
if (val != ~cnt) {
size = cnt * sizeof(long);
/*
@@ -104,6 +108,8 @@ long get_ram_size(long *base, long maxsize)
cnt <<= 1) {
addr = base + cnt;
*addr = save[--i];
+ if (dcache_en)
+ dcache_flush_invalidate(addr);
}
/* warning: don't restore save_base in this case,
* it is already done in the loop because
@@ -115,6 +121,8 @@ long get_ram_size(long *base, long maxsize)
}
}
*base = save_base;
+ if (dcache_en)
+ dcache_flush_invalidate(base);
return (maxsize);
}
diff --git a/common/menu.c b/common/menu.c
index ae5afa14766..02df3b8f133 100644
--- a/common/menu.c
+++ b/common/menu.c
@@ -556,11 +556,6 @@ enum bootmenu_key bootmenu_conv_key(int ichar)
case ' ':
key = BKEY_SPACE;
break;
- case 'A' ... 'Z':
- case 'a' ... 'z':
- case '0' ... '9':
- key = BKEY_SHORTCUT;
- break;
default:
key = BKEY_NONE;
break;
@@ -591,8 +586,10 @@ enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
key = bootmenu_conv_key(c);
- if (key == BKEY_SHORTCUT)
+ if (key == BKEY_NONE && isalnum(c)) {
+ key = BKEY_SHORTCUT;
cch->shortcut_key = bootmenu_conv_shortcut_key(menu, c);
+ }
return key;
}
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index cf1cf8abfbe..3a36b6fdd03 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -164,15 +164,20 @@ void *ofnode_lookup_fdt(ofnode node)
void *ofnode_to_fdt(ofnode node)
{
+ void *fdt;
+
#ifdef OF_CHECKS
if (of_live_active())
- return NULL;
+ panic("%s called with live tree in use!\n", __func__);
#endif
if (CONFIG_IS_ENABLED(OFNODE_MULTI_TREE) && ofnode_valid(node))
- return ofnode_lookup_fdt(node);
+ fdt = ofnode_lookup_fdt(node);
+ else
+ fdt = (void *)gd->fdt_blob;
+
+ assert(fdt);
- /* Use the control FDT by default */
- return (void *)gd->fdt_blob;
+ return fdt;
}
/**
diff --git a/drivers/cpu/Kconfig b/drivers/cpu/Kconfig
index 4cc3679c009..6a96be94de4 100644
--- a/drivers/cpu/Kconfig
+++ b/drivers/cpu/Kconfig
@@ -3,7 +3,7 @@ config CPU
help
This allows drivers to be provided for CPUs and their type to be
specified in the board's device tree. For boards which support
- multiple CPUs, then normally have to be set up in U-Boot so that
+ multiple CPUs, they normally have to be set up in U-Boot so that
they can work correctly in the OS. This provides a framework for
finding out information about available CPUs and making changes.
diff --git a/drivers/firmware/scmi/mailbox_agent.c b/drivers/firmware/scmi/mailbox_agent.c
index 16a82f55ab7..cda94565de5 100644
--- a/drivers/firmware/scmi/mailbox_agent.c
+++ b/drivers/firmware/scmi/mailbox_agent.c
@@ -101,7 +101,7 @@ static int scmi_mbox_get_channel(struct udevice *dev,
struct scmi_mbox_channel *chan;
int ret;
- if (!dev_read_prop(protocol, "shmem", NULL)) {
+ if (!dev_has_ofnode(protocol) || !dev_read_prop(protocol, "shmem", NULL)) {
/* Uses agent base channel */
*channel = container_of(base_chan, struct scmi_channel, ref);
diff --git a/drivers/firmware/scmi/optee_agent.c b/drivers/firmware/scmi/optee_agent.c
index 631625d715b..7170bd1e682 100644
--- a/drivers/firmware/scmi/optee_agent.c
+++ b/drivers/firmware/scmi/optee_agent.c
@@ -331,7 +331,8 @@ static int scmi_optee_get_channel(struct udevice *dev,
u32 channel_id;
int ret;
- if (dev_read_u32(protocol, "linaro,optee-channel-id", &channel_id)) {
+ if (!dev_has_ofnode(protocol) ||
+ dev_read_u32(protocol, "linaro,optee-channel-id", &channel_id)) {
/* Uses agent base channel */
*channel = container_of(base_chan, struct scmi_channel, ref);
diff --git a/drivers/iommu/iommu-uclass.c b/drivers/iommu/iommu-uclass.c
index bb31cd519d2..31b40e5713a 100644
--- a/drivers/iommu/iommu-uclass.c
+++ b/drivers/iommu/iommu-uclass.c
@@ -79,6 +79,9 @@ int dev_iommu_enable(struct udevice *dev)
const struct iommu_ops *ops;
int i, count, ret = 0;
+ if (!dev_has_ofnode(dev))
+ return 0;
+
count = dev_count_phandle_with_args(dev, "iommus",
"#iommu-cells", 0);
for (i = 0; i < count; i++) {
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 87729b479bd..09810b62b51 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -282,6 +282,16 @@ config PHY_MTK_TPHY
multi-ports is first version, otherwise is second veriosn,
so you can easily distinguish them by banks layout.
+config PHY_MTK_UFS
+ tristate "MediaTek UFS M-PHY driver"
+ depends on ARCH_MEDIATEK
+ depends on PHY
+ help
+ Support for UFS M-PHY on MediaTek chipsets.
+ Enable this to provide vendor-specific probing,
+ initialization, power on and power off flow of
+ specified M-PHYs.
+
config PHY_NPCM_USB
bool "Nuvoton NPCM USB PHY support"
depends on PHY
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index 5a6df0ecfeb..83102349669 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -37,6 +37,7 @@ obj-$(CONFIG_MT76X8_USB_PHY) += mt76x8-usb-phy.o
obj-$(CONFIG_PHY_DA8XX_USB) += phy-da8xx-usb.o
obj-$(CONFIG_PHY_EXYNOS_USBDRD) += phy-exynos-usbdrd.o
obj-$(CONFIG_PHY_MTK_TPHY) += phy-mtk-tphy.o
+obj-$(CONFIG_PHY_MTK_UFS) += phy-mtk-ufs.o
obj-$(CONFIG_PHY_NPCM_USB) += phy-npcm-usb.o
obj-$(CONFIG_$(PHASE_)PHY_IMX8MQ_USB) += phy-imx8mq-usb.o
obj-$(CONFIG_PHY_IMX8M_PCIE) += phy-imx8m-pcie.o
diff --git a/drivers/phy/phy-mtk-ufs.c b/drivers/phy/phy-mtk-ufs.c
new file mode 100644
index 00000000000..1eda3df858d
--- /dev/null
+++ b/drivers/phy/phy-mtk-ufs.c
@@ -0,0 +1,190 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 MediaTek Inc.
+ * Author: Stanley Chu <[email protected]>
+ *
+ * Copyright (c) 2025, Igor Belwon <[email protected]>
+ */
+
+#include "dm/ofnode.h"
+#include "dm/read.h"
+#include <clk.h>
+#include <dm.h>
+#include <generic-phy.h>
+#include <malloc.h>
+#include <mapmem.h>
+#include <regmap.h>
+#include <syscon.h>
+#include <asm/io.h>
+#include <dm/device_compat.h>
+#include <dm/devres.h>
+#include <linux/bitfield.h>
+#include <linux/bitops.h>
+#include <linux/delay.h>
+
+#include <dt-bindings/phy/phy.h>
+
+/* mphy register and offsets */
+#define MP_GLB_DIG_8C 0x008C
+#define FRC_PLL_ISO_EN BIT(8)
+#define PLL_ISO_EN BIT(9)
+#define FRC_FRC_PWR_ON BIT(10)
+#define PLL_PWR_ON BIT(11)
+
+#define MP_LN_DIG_RX_9C 0xA09C
+#define FSM_DIFZ_FRC BIT(18)
+
+#define MP_LN_DIG_RX_AC 0xA0AC
+#define FRC_RX_SQ_EN BIT(0)
+#define RX_SQ_EN BIT(1)
+
+#define MP_LN_RX_44 0xB044
+#define FRC_CDR_PWR_ON BIT(17)
+#define CDR_PWR_ON BIT(18)
+#define FRC_CDR_ISO_EN BIT(19)
+#define CDR_ISO_EN BIT(20)
+
+#define UFSPHY_CLKS_CNT 2
+
+struct mtk_ufs_phy {
+ struct udevice *dev;
+ void __iomem *mmio;
+
+ struct clk *unipro_clk;
+ struct clk *mp_clk;
+};
+
+static void ufs_mtk_phy_set_active(struct mtk_ufs_phy *phy)
+{
+ /* release DA_MP_PLL_PWR_ON */
+ setbits_le32(phy->mmio + MP_GLB_DIG_8C, PLL_PWR_ON);
+ clrbits_le32(phy->mmio + MP_GLB_DIG_8C, FRC_FRC_PWR_ON);
+
+ /* release DA_MP_PLL_ISO_EN */
+ clrbits_le32(phy->mmio + MP_GLB_DIG_8C, PLL_ISO_EN);
+ clrbits_le32(phy->mmio + MP_GLB_DIG_8C, FRC_PLL_ISO_EN);
+
+ /* release DA_MP_CDR_PWR_ON */
+ setbits_le32(phy->mmio + MP_LN_RX_44, CDR_PWR_ON);
+ clrbits_le32(phy->mmio + MP_LN_RX_44, FRC_CDR_PWR_ON);
+
+ /* release DA_MP_CDR_ISO_EN */
+ clrbits_le32(phy->mmio + MP_LN_RX_44, CDR_ISO_EN);
+ clrbits_le32(phy->mmio + MP_LN_RX_44, FRC_CDR_ISO_EN);
+
+ /* release DA_MP_RX0_SQ_EN */
+ setbits_le32(phy->mmio + MP_LN_DIG_RX_AC, RX_SQ_EN);
+ clrbits_le32(phy->mmio + MP_LN_DIG_RX_AC, FRC_RX_SQ_EN);
+
+ /* delay 1us to wait DIFZ stable */
+ udelay(1);
+
+ /* release DIFZ */
+ clrbits_le32(phy->mmio + MP_LN_DIG_RX_9C, FSM_DIFZ_FRC);
+}
+
+static int mtk_phy_power_on(struct phy *phy)
+{
+ struct mtk_ufs_phy *ufs_phy = dev_get_priv(phy->dev);
+ int ret;
+
+ ret = clk_enable(ufs_phy->mp_clk);
+ if (ret < 0) {
+ dev_err(phy->dev, "failed to enable mp_clk\n");
+ return ret;
+ }
+
+ ret = clk_enable(ufs_phy->unipro_clk);
+ if (ret < 0) {
+ dev_err(phy->dev, "failed to enable unipro_clk %d\n", ret);
+ clk_disable(ufs_phy->unipro_clk);
+ return ret;
+ }
+
+ ufs_mtk_phy_set_active(ufs_phy);
+
+ return 0;
+}
+
+static int mtk_phy_power_off(struct phy *phy)
+{
+ struct mtk_ufs_phy *ufs_phy = dev_get_priv(phy->dev);
+
+ /* Set PHY to Deep Hibernate mode */
+ setbits_le32(ufs_phy->mmio + MP_LN_DIG_RX_9C, FSM_DIFZ_FRC);
+
+ /* force DA_MP_RX0_SQ_EN */
+ setbits_le32(ufs_phy->mmio + MP_LN_DIG_RX_AC, FRC_RX_SQ_EN);
+ clrbits_le32(ufs_phy->mmio + MP_LN_DIG_RX_AC, RX_SQ_EN);
+
+ /* force DA_MP_CDR_ISO_EN */
+ setbits_le32(ufs_phy->mmio + MP_LN_RX_44, FRC_CDR_ISO_EN);
+ setbits_le32(ufs_phy->mmio + MP_LN_RX_44, CDR_ISO_EN);
+
+ /* force DA_MP_CDR_PWR_ON */
+ setbits_le32(ufs_phy->mmio + MP_LN_RX_44, FRC_CDR_PWR_ON);
+ clrbits_le32(ufs_phy->mmio + MP_LN_RX_44, CDR_PWR_ON);
+
+ /* force DA_MP_PLL_ISO_EN */
+ setbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, FRC_PLL_ISO_EN);
+ setbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, PLL_ISO_EN);
+
+ /* force DA_MP_PLL_PWR_ON */
+ setbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, FRC_FRC_PWR_ON);
+ clrbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, PLL_PWR_ON);
+
+ return 0;
+}
+
+static const struct phy_ops mtk_ufs_phy_ops = {
+ .power_on = mtk_phy_power_on,
+ .power_off = mtk_phy_power_off,
+};
+
+static int mtk_ufs_phy_probe(struct udevice *dev)
+{
+ struct mtk_ufs_phy *phy = dev_get_priv(dev);
+ fdt_addr_t addr;
+ int ret;
+
+ phy = devm_kzalloc(dev, sizeof(*phy), GFP_KERNEL);
+ if (!phy)
+ return -ENOMEM;
+
+ addr = dev_read_addr(dev);
+ if (addr == FDT_ADDR_T_NONE)
+ return -ENOMEM;
+
+ phy->dev = dev;
+ phy->mmio = map_sysmem(addr, 0);
+
+ phy->mp_clk = devm_clk_get(dev, "mp");
+ if (IS_ERR(phy->mp_clk)) {
+ ret = PTR_ERR(phy->mp_clk);
+ dev_err(dev, "Failed to get mp clock (ret=%d)\n", ret);
+ return ret;
+ }
+
+ phy->unipro_clk = devm_clk_get(dev, "unipro");
+ if (IS_ERR(phy->unipro_clk)) {
+ ret = PTR_ERR(phy->unipro_clk);
+ dev_err(dev, "Failed to get unipro clock (ret=%d)\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static const struct udevice_id mtk_ufs_phy_id_table[] = {
+ {.compatible = "mediatek,mt8183-ufsphy"},
+ {},
+};
+
+U_BOOT_DRIVER(mtk_ufs_phy) = {
+ .name = "mtk-ufs_phy",
+ .id = UCLASS_PHY,
+ .of_match = mtk_ufs_phy_id_table,
+ .ops = &mtk_ufs_phy_ops,
+ .probe = mtk_ufs_phy_probe,
+ .priv_auto = sizeof(struct mtk_ufs_phy),
+};
diff --git a/drivers/power/domain/power-domain-uclass.c b/drivers/power/domain/power-domain-uclass.c
index d9fa8ad4bd2..cea68945cbd 100644
--- a/drivers/power/domain/power-domain-uclass.c
+++ b/drivers/power/domain/power-domain-uclass.c
@@ -180,6 +180,9 @@ static int dev_power_domain_ctrl(struct udevice *dev, bool on)
struct power_domain pd;
int i, count, ret = 0;
+ if (!dev_has_ofnode(dev))
+ return 0;
+
count = dev_count_phandle_with_args(dev, "power-domains",
"#power-domain-cells", 0);
for (i = 0; i < count; i++) {
diff --git a/drivers/ufs/cdns-platform.c b/drivers/ufs/cdns-platform.c
index 87d9c5bad79..40883a187b0 100644
--- a/drivers/ufs/cdns-platform.c
+++ b/drivers/ufs/cdns-platform.c
@@ -7,7 +7,6 @@
#include <clk.h>
#include <dm.h>
-#include <ufs.h>
#include <asm/io.h>
#include <dm/device_compat.h>
#include <linux/bitops.h>
diff --git a/drivers/ufs/ufs-amd-versal2.c b/drivers/ufs/ufs-amd-versal2.c
index dd62c9819ba..6c949b2ca76 100644
--- a/drivers/ufs/ufs-amd-versal2.c
+++ b/drivers/ufs/ufs-amd-versal2.c
@@ -5,7 +5,6 @@
#include <clk.h>
#include <dm.h>
-#include <ufs.h>
#include <asm/io.h>
#include <dm/device_compat.h>
#include <zynqmp_firmware.h>
diff --git a/drivers/ufs/ufs-pci.c b/drivers/ufs/ufs-pci.c
index 5b9c72a695d..e1e010d027c 100644
--- a/drivers/ufs/ufs-pci.c
+++ b/drivers/ufs/ufs-pci.c
@@ -7,7 +7,6 @@
#include <dm.h>
#include <errno.h>
#include <pci.h>
-#include <ufs.h>
#include <dm/device_compat.h>
#include "ufs.h"
diff --git a/drivers/ufs/ufs-qcom.c b/drivers/ufs/ufs-qcom.c
index ee43958d5d8..dc40ee62daf 100644
--- a/drivers/ufs/ufs-qcom.c
+++ b/drivers/ufs/ufs-qcom.c
@@ -14,7 +14,6 @@
#include <dm.h>
#include <dm/device_compat.h>
#include <generic-phy.h>
-#include <ufs.h>
#include <asm/gpio.h>
#include <interconnect.h>
diff --git a/drivers/ufs/ufs-renesas-rcar-gen5.c b/drivers/ufs/ufs-renesas-rcar-gen5.c
index cc53e91449c..a21ae3f390e 100644
--- a/drivers/ufs/ufs-renesas-rcar-gen5.c
+++ b/drivers/ufs/ufs-renesas-rcar-gen5.c
@@ -7,7 +7,6 @@
#include <clk.h>
#include <dm.h>
-#include <ufs.h>
#include <asm/io.h>
#include <dm/device_compat.h>
#include <linux/iopoll.h>
diff --git a/drivers/ufs/ufs-renesas.c b/drivers/ufs/ufs-renesas.c
index 5652309911e..a206e3c6d58 100644
--- a/drivers/ufs/ufs-renesas.c
+++ b/drivers/ufs/ufs-renesas.c
@@ -7,7 +7,6 @@
#include <clk.h>
#include <dm.h>
-#include <ufs.h>
#include <asm/io.h>
#include <dm/device_compat.h>
#include <linux/bitops.h>
diff --git a/drivers/ufs/ufs-rockchip.c b/drivers/ufs/ufs-rockchip.c
index 0384244387d..643a6ffb9bc 100644
--- a/drivers/ufs/ufs-rockchip.c
+++ b/drivers/ufs/ufs-rockchip.c
@@ -13,7 +13,6 @@
#include <linux/err.h>
#include <linux/ioport.h>
#include <reset.h>
-#include <ufs.h>
#include "ufs.h"
#include "unipro.h"
diff --git a/drivers/ufs/ufs-uclass.c b/drivers/ufs/ufs-uclass.c
index 3c8e4299259..7a80a9d5664 100644
--- a/drivers/ufs/ufs-uclass.c
+++ b/drivers/ufs/ufs-uclass.c
@@ -917,11 +917,13 @@ static int ufshcd_send_command(struct ufs_hba *hba, unsigned int task_tag)
enabled_intr_status = intr_status & hba->intr_mask;
ufshcd_writel(hba, intr_status, REG_INTERRUPT_STATUS);
- if (get_timer(start) > QUERY_REQ_TIMEOUT) {
- dev_err(hba->dev,
- "Timedout waiting for UTP response\n");
-
- return -ETIMEDOUT;
+ if (hba->max_pwr_info.info.pwr_rx != SLOWAUTO_MODE &&
+ hba->max_pwr_info.info.pwr_tx != SLOWAUTO_MODE) {
+ if (get_timer(start) > QUERY_REQ_TIMEOUT) {
+ dev_err(hba->dev,
+ "Timedout waiting for UTP response\n");
+ return -ETIMEDOUT;
+ }
}
if (enabled_intr_status & UFSHCD_ERROR_MASK) {
diff --git a/drivers/ufs/ufshcd-dwc.c b/drivers/ufs/ufshcd-dwc.c
index 3f62e59a060..98422d742a0 100644
--- a/drivers/ufs/ufshcd-dwc.c
+++ b/drivers/ufs/ufshcd-dwc.c
@@ -7,7 +7,6 @@
*/
#include <clk.h>
#include <dm.h>
-#include <ufs.h>
#include <asm/io.h>
#include <dm/device_compat.h>
#include <linux/bitops.h>
diff --git a/include/ufs.h b/include/ufs.h
index 702b8359dbd..f6e27d90e43 100644
--- a/include/ufs.h
+++ b/include/ufs.h
@@ -20,13 +20,4 @@ int ufs_probe(void);
*/
int ufs_probe_dev(int index);
-/*
- * ufs_scsi_bind() - Create a new scsi device as a child of the UFS device and
- * bind it to the ufs_scsi driver
- * @ufs_dev: UFS device
- * @scsi_devp: Pointer to scsi device
- *
- * Return: 0 if Ok, -ve on error
- */
-int ufs_scsi_bind(struct udevice *ufs_dev, struct udevice **scsi_devp);
#endif
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index b424d924896..de57823bd44 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -2096,8 +2096,12 @@ efi_status_t EFIAPI efi_load_image(bool boot_policy,
EFI_ENTRY("%d, %p, %pD, %p, %zu, %p", boot_policy, parent_image,
file_path, source_buffer, source_size, image_handle);
- if (!image_handle || (!source_buffer && !file_path) ||
- !efi_search_obj(parent_image) ||
+ if (!source_buffer && !file_path) {
+ ret = EFI_NOT_FOUND;
+ goto error;
+ }
+
+ if (!image_handle || !efi_search_obj(parent_image) ||
/* The parent image handle must refer to a loaded image */
!parent_image->type) {
ret = EFI_INVALID_PARAMETER;
diff --git a/lib/efi_selftest/efi_selftest_loadimage.c b/lib/efi_selftest/efi_selftest_loadimage.c
index 967eaa58c69..0e8fc6216f0 100644
--- a/lib/efi_selftest/efi_selftest_loadimage.c
+++ b/lib/efi_selftest/efi_selftest_loadimage.c
@@ -562,6 +562,13 @@ static int execute(void)
return EFI_ST_FAILURE;
}
+ ret = boottime->load_image(false, handle_image, NULL, NULL, 0,
+ &handle);
+ if (ret != EFI_NOT_FOUND) {
+ efi_st_error("Unexpected load_image return value\n");
+ return EFI_ST_FAILURE;
+ }
+
return EFI_ST_SUCCESS;
}
diff --git a/lib/efi_selftest/efi_selftest_manageprotocols.c b/lib/efi_selftest/efi_selftest_manageprotocols.c
index 097b2ae3545..31ea67748a5 100644
--- a/lib/efi_selftest/efi_selftest_manageprotocols.c
+++ b/lib/efi_selftest/efi_selftest_manageprotocols.c
@@ -6,7 +6,7 @@
*
* This unit test checks the following protocol services:
* InstallProtocolInterface, UninstallProtocolInterface,
- * InstallMultipleProtocolsInterfaces, UninstallMultipleProtocolsInterfaces,
+ * InstallMultipleProtocolInterfaces, UninstallMultipleProtocolInterfaces,
* HandleProtocol, ProtocolsPerHandle,
* LocateHandle, LocateHandleBuffer.
*/
@@ -189,7 +189,7 @@ static int execute(void)
}
/*
- * Test error handling in UninstallMultipleProtocols
+ * Test error handling in UninstallMultipleProtocolInterfaces
*
* These are the installed protocol interfaces on handle 2:
*
@@ -240,7 +240,7 @@ static int execute(void)
efi_st_error("LocateHandleBuffer failed to locate new handle\n");
return EFI_ST_FAILURE;
}
- /* Clear the buffer, we are reusing it it the next step. */
+ /* Clear the buffer, we are reusing it in the next step. */
boottime->set_mem(buffer, sizeof(efi_handle_t) * buffer_size, 0);
/*
@@ -289,7 +289,7 @@ static int execute(void)
}
/*
- * Test UninstallMultipleProtocols
+ * Test UninstallMultipleProtocolInterfaces
*/
ret = boottime->uninstall_multiple_protocol_interfaces(
handle2,
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 377a4700b94..7386353e0cc 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -437,6 +437,8 @@ cmd_dtc_diff = \
$(DTC) -s -O dts -o [email protected] -b 0 \
-i $(dir $<) -i $(u_boot_dtsi_loc) $(DTC_FLAGS) $(dtc-tmp) || \
(echo "Check $(shell pwd)/$(pre-tmp) for errors" && false); \
+ sed -i '/\<phandle\> = <0x[0-9a-f]\+>;/ d' [email protected]; \
+ sed -i '/\<phandle\> = <0x[0-9a-f]\+>;/ d' [email protected]; \
dtn-tmp = $(subst $(comma),_,$(dot-target).dtn.tmp)
diff --git a/tools/atmelimage.c b/tools/atmelimage.c
index 6a2d9d8feab..770f7a0de4e 100644
--- a/tools/atmelimage.c
+++ b/tools/atmelimage.c
@@ -55,7 +55,7 @@ static const char * const configs[] = {
static int atmel_find_pmecc_parameter_in_token(const char *token)
{
size_t pos;
- char *param;
+ const char *param;
debug("token: '%s'\n", token);