Accepting request 883207 from hardware👢staging
- mx53loco now uses u-boot-dtb.imx instead of u-boot.imx - Update to 2021.04 OBS-URL: https://build.opensuse.org/request/show/883207 OBS-URL: https://build.opensuse.org/package/show/hardware:boot/u-boot?expand=0&rev=137
This commit is contained in:
parent
e496d800be
commit
65c7a7d831
@ -1,4 +1,4 @@
|
||||
From da36e129a526f1a7921c7971013d3f5918c504a3 Mon Sep 17 00:00:00 2001
|
||||
From 64c8c72d668be879002700dfcf917b06832632a5 Mon Sep 17 00:00:00 2001
|
||||
From: Guillaume GARDET <guillaume.gardet@free.fr>
|
||||
Date: Wed, 13 Apr 2016 13:44:29 +0200
|
||||
Subject: [PATCH] XXX openSUSE XXX: Prepend partition 3 (and 4 for chromebook
|
||||
@ -12,10 +12,10 @@ Subject: [PATCH] XXX openSUSE XXX: Prepend partition 3 (and 4 for chromebook
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h
|
||||
index c9862260a3..39e3247d41 100644
|
||||
index 2627c2a6a5..7dccc083cf 100644
|
||||
--- a/include/config_distro_bootcmd.h
|
||||
+++ b/include/config_distro_bootcmd.h
|
||||
@@ -145,7 +145,7 @@
|
||||
@@ -151,7 +151,7 @@
|
||||
"load ${devtype} ${devnum}:${distro_bootpart} " \
|
||||
"${fdt_addr_r} ${prefix}${efi_fdtfile}\0" \
|
||||
\
|
||||
@ -24,7 +24,7 @@ index c9862260a3..39e3247d41 100644
|
||||
"scan_dev_for_efi=" \
|
||||
"setenv efi_fdtfile ${fdtfile}; " \
|
||||
BOOTENV_EFI_SET_FDTFILE_FALLBACK \
|
||||
@@ -472,7 +472,7 @@
|
||||
@@ -478,7 +478,7 @@
|
||||
"scan_dev_for_boot_part=" \
|
||||
"part list ${devtype} ${devnum} -bootable devplist; " \
|
||||
"env exists devplist || setenv devplist 1; " \
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 34515ca90618bb0545ce360abb91b6037b1546e3 Mon Sep 17 00:00:00 2001
|
||||
From 31b4bbb7ddadd1ee9109bc6087d998746db7b1dd Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
Date: Mon, 2 May 2016 23:25:07 +0200
|
||||
Subject: [PATCH] Revert "Revert "omap3: Use raw SPL by default for mmc1""
|
||||
@ -9,10 +9,10 @@ This reverts commit 7fa75d0ac5502db813d109c1df7bd0da34688685.
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/boot-common.c b/arch/arm/mach-omap2/boot-common.c
|
||||
index cb9d7fdb15..50dec906df 100644
|
||||
index 1268a32503..e564fad0e9 100644
|
||||
--- a/arch/arm/mach-omap2/boot-common.c
|
||||
+++ b/arch/arm/mach-omap2/boot-common.c
|
||||
@@ -133,8 +133,6 @@ void save_omap_boot_params(void)
|
||||
@@ -134,8 +134,6 @@ void save_omap_boot_params(void)
|
||||
(boot_device <= MMC_BOOT_DEVICES_END)) {
|
||||
switch (boot_device) {
|
||||
case BOOT_DEVICE_MMC1:
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 2f2b5324682ebf078c78372e74ce759b3620e4bc Mon Sep 17 00:00:00 2001
|
||||
From faef6b729e84803c91ef6c61f6e167e4da40c98e Mon Sep 17 00:00:00 2001
|
||||
From: Guillaume Gardet <guillaume.gardet@arm.com>
|
||||
Date: Fri, 18 Sep 2020 15:27:37 +0200
|
||||
Subject: [PATCH] rpi: Use firmware provided device tree
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Guillaume Gardet <guillaume.gardet@free.fr>
|
||||
5 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/configs/rpi_0_w_defconfig b/configs/rpi_0_w_defconfig
|
||||
index 93d790aae6..cae50fa2ab 100644
|
||||
index 01565991f5..c0a9b6c788 100644
|
||||
--- a/configs/rpi_0_w_defconfig
|
||||
+++ b/configs/rpi_0_w_defconfig
|
||||
@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y
|
||||
@ -41,7 +41,7 @@ index 93d790aae6..cae50fa2ab 100644
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
diff --git a/configs/rpi_2_defconfig b/configs/rpi_2_defconfig
|
||||
index 33f27cf09f..e546c3e7be 100644
|
||||
index 1ad0626782..33e0ef6989 100644
|
||||
--- a/configs/rpi_2_defconfig
|
||||
+++ b/configs/rpi_2_defconfig
|
||||
@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y
|
||||
@ -54,7 +54,7 @@ index 33f27cf09f..e546c3e7be 100644
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig
|
||||
index cdc67cb3ac..2256ad1fc1 100644
|
||||
index a14d7eefbc..15c62adc69 100644
|
||||
--- a/configs/rpi_3_32b_defconfig
|
||||
+++ b/configs/rpi_3_32b_defconfig
|
||||
@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y
|
||||
@ -67,7 +67,7 @@ index cdc67cb3ac..2256ad1fc1 100644
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
diff --git a/configs/rpi_3_defconfig b/configs/rpi_3_defconfig
|
||||
index 7075d39d10..4a34d35898 100644
|
||||
index 4aedfb17cd..daeb6d1b64 100644
|
||||
--- a/configs/rpi_3_defconfig
|
||||
+++ b/configs/rpi_3_defconfig
|
||||
@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y
|
||||
@ -80,7 +80,7 @@ index 7075d39d10..4a34d35898 100644
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
diff --git a/configs/rpi_defconfig b/configs/rpi_defconfig
|
||||
index bba36ca7fc..98728fc8c0 100644
|
||||
index 78638105f7..06b390d907 100644
|
||||
--- a/configs/rpi_defconfig
|
||||
+++ b/configs/rpi_defconfig
|
||||
@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y
|
||||
|
@ -1,4 +1,4 @@
|
||||
From ec7b043f9c2b0cb4e7ff2a9ae808456b310375c9 Mon Sep 17 00:00:00 2001
|
||||
From 612aefa5be3ff8074a17862ca5121b86da401e02 Mon Sep 17 00:00:00 2001
|
||||
From: Guillaume GARDET <guillaume.gardet@free.fr>
|
||||
Date: Mon, 9 Apr 2018 10:28:26 +0200
|
||||
Subject: [PATCH] Temp workaround for Chromebook snow to avoid the 'unable to
|
||||
@ -9,10 +9,10 @@ Subject: [PATCH] Temp workaround for Chromebook snow to avoid the 'unable to
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
|
||||
index 7702f4be3f..ff2cd946fc 100644
|
||||
index 7c8a312fa7..2865e9f964 100644
|
||||
--- a/drivers/mmc/dw_mmc.c
|
||||
+++ b/drivers/mmc/dw_mmc.c
|
||||
@@ -603,7 +603,8 @@ void dwmci_setup_cfg(struct mmc_config *cfg, struct dwmci_host *host,
|
||||
@@ -608,7 +608,8 @@ void dwmci_setup_cfg(struct mmc_config *cfg, struct dwmci_host *host,
|
||||
cfg->host_caps |= MMC_MODE_4BIT;
|
||||
cfg->host_caps &= ~MMC_MODE_8BIT;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 45f65400eede913d46a21868122678753305a294 Mon Sep 17 00:00:00 2001
|
||||
From c31a2d2fe0e9386ba98bfe64fa3b07cc8f09cc34 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
Date: Thu, 26 Apr 2018 13:30:32 +0200
|
||||
Subject: [PATCH] tools: zynqmpbif: Add support for load=after
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 5b3fe80ea3daebde777533fc40bd071c860438b0 Mon Sep 17 00:00:00 2001
|
||||
From 042795c3d5a9048c5dc1b3ddeb63f17c22f8374b Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Fri, 17 Jan 2020 20:59:02 +0100
|
||||
Subject: [PATCH] Kconfig: add btrfs to distro boot
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Kconfig b/Kconfig
|
||||
index 6dc20ed25b..35e8dc7bad 100644
|
||||
index 86f0a39bb0..fea92305a3 100644
|
||||
--- a/Kconfig
|
||||
+++ b/Kconfig
|
||||
@@ -143,6 +143,7 @@ config DISTRO_DEFAULTS
|
@ -1,44 +0,0 @@
|
||||
From 6c0413e2528f4fc699c01f47e60fcf2d16b5fc75 Mon Sep 17 00:00:00 2001
|
||||
From: Guillaume Gardet <guillaume.gardet@arm.com>
|
||||
Date: Fri, 18 Sep 2020 15:28:41 +0200
|
||||
Subject: [PATCH] boo#1123170: Remove ubifs support from omap3_beagle to keep a
|
||||
small u-boot.img
|
||||
|
||||
---
|
||||
configs/omap3_beagle_defconfig | 3 ++-
|
||||
include/configs/omap3_beagle.h | 1 -
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configs/omap3_beagle_defconfig b/configs/omap3_beagle_defconfig
|
||||
index 514bc01b1f..f232df0e41 100644
|
||||
--- a/configs/omap3_beagle_defconfig
|
||||
+++ b/configs/omap3_beagle_defconfig
|
||||
@@ -41,7 +41,6 @@ CONFIG_CMD_FS_UUID=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nand0=omap2-nand.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=omap2-nand.0:512k(spl),1920k(u-boot),128k(u-boot-env),128k(dtb),6m(kernel),-(rootfs)"
|
||||
-CONFIG_CMD_UBI=y
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_SPL_PARTITION_UUIDS=y
|
||||
@@ -77,6 +76,8 @@ CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
|
||||
CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
|
||||
CONFIG_SYS_NAND_U_BOOT_OFFS=0x80000
|
||||
CONFIG_DM_ETH=y
|
||||
+CONFIG_SPL_NAND_SIMPLE=y
|
||||
+CONFIG_MTD_UBI=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_OMAP3_SPI=y
|
||||
diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
|
||||
index 6563335f91..bc19317387 100644
|
||||
--- a/include/configs/omap3_beagle.h
|
||||
+++ b/include/configs/omap3_beagle.h
|
||||
@@ -81,7 +81,6 @@
|
||||
#define BOOT_TARGET_DEVICES(func) \
|
||||
func(MMC, mmc, 0) \
|
||||
func(LEGACY_MMC, legacy_mmc, 0) \
|
||||
- func(UBIFS, ubifs, 0) \
|
||||
func(NAND, nand, 0)
|
||||
|
||||
#else /* !CONFIG_MTD_RAW_NAND */
|
@ -1,89 +0,0 @@
|
||||
From f9fb8e59d10feb1fd5866864f8dd9994b1d60306 Mon Sep 17 00:00:00 2001
|
||||
From: Guillaume Gardet <guillaume.gardet@arm.com>
|
||||
Date: Fri, 18 Sep 2020 15:29:27 +0200
|
||||
Subject: [PATCH] boo#1144161: Remove nand/mtd/spi/dfu/fastboot support from
|
||||
am335x_evm to keep a small u-boot.img
|
||||
|
||||
---
|
||||
configs/am335x_evm_defconfig | 31 ++-----------------------------
|
||||
1 file changed, 2 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/configs/am335x_evm_defconfig b/configs/am335x_evm_defconfig
|
||||
index eb5a299bbc..c615c54b1c 100644
|
||||
--- a/configs/am335x_evm_defconfig
|
||||
+++ b/configs/am335x_evm_defconfig
|
||||
@@ -16,25 +16,16 @@ CONFIG_ARCH_MISC_INIT=y
|
||||
CONFIG_SPL_FIT_IMAGE_TINY=y
|
||||
CONFIG_SPL_ETH_SUPPORT=y
|
||||
# CONFIG_SPL_FS_EXT4 is not set
|
||||
-CONFIG_SPL_MTD_SUPPORT=y
|
||||
CONFIG_SPL_MUSB_NEW_SUPPORT=y
|
||||
-CONFIG_SPL_NAND_DRIVERS=y
|
||||
-CONFIG_SPL_NAND_ECC=y
|
||||
-CONFIG_SPL_NAND_BASE=y
|
||||
+# CONFIG_SPL_NAND_SUPPORT is not set
|
||||
CONFIG_SPL_NET_SUPPORT=y
|
||||
CONFIG_SPL_NET_VCI_STRING="AM335x U-Boot SPL"
|
||||
CONFIG_SPL_OS_BOOT=y
|
||||
CONFIG_SPL_USB_GADGET=y
|
||||
CONFIG_SPL_USB_ETHER=y
|
||||
CONFIG_CMD_SPL=y
|
||||
-CONFIG_CMD_SPL_NAND_OFS=0x00080000
|
||||
-# CONFIG_CMD_FLASH is not set
|
||||
-CONFIG_CMD_NAND=y
|
||||
+# CONFIG_CMD_DM is not set
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
-CONFIG_BOOTP_DNS2=y
|
||||
-CONFIG_CMD_MTDPARTS=y
|
||||
-CONFIG_MTDIDS_DEFAULT="nand0=nand.0"
|
||||
-CONFIG_MTDPARTS_DEFAULT="mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),128k(NAND.SPL.backup2),128k(NAND.SPL.backup3),256k(NAND.u-boot-spl-os),1m(NAND.u-boot),128k(NAND.u-boot-env),128k(NAND.u-boot-env.backup1),8m(NAND.kernel),-(NAND.file-system)"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_LIST="am335x-evm am335x-bone am335x-boneblack am335x-evmsk am335x-bonegreen am335x-icev2 am335x-pocketbeagle"
|
||||
@@ -47,38 +38,21 @@ CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||
CONFIG_BOOTCOUNT_LIMIT=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_CLK_CDCE9XX=y
|
||||
-CONFIG_DFU_TFTP=y
|
||||
-CONFIG_DFU_MMC=y
|
||||
-CONFIG_DFU_NAND=y
|
||||
-CONFIG_DFU_RAM=y
|
||||
-CONFIG_USB_FUNCTION_FASTBOOT=y
|
||||
-CONFIG_FASTBOOT_FLASH=y
|
||||
-CONFIG_FASTBOOT_FLASH_MMC_DEV=1
|
||||
-CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_DM_MMC=y
|
||||
# CONFIG_MMC_HW_PARTITIONING is not set
|
||||
CONFIG_MMC_OMAP_HS=y
|
||||
-CONFIG_MTD=y
|
||||
-CONFIG_MTD_RAW_NAND=y
|
||||
-CONFIG_DM_SPI_FLASH=y
|
||||
-CONFIG_SF_DEFAULT_SPEED=24000000
|
||||
-CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_PHY_ATHEROS=y
|
||||
CONFIG_PHY_SMSC=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_DRIVER_TI_CPSW=y
|
||||
-CONFIG_SPI=y
|
||||
-CONFIG_DM_SPI=y
|
||||
-CONFIG_OMAP3_SPI=y
|
||||
CONFIG_TIMER=y
|
||||
CONFIG_OMAP_TIMER=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB=y
|
||||
CONFIG_DM_USB_GADGET=y
|
||||
-CONFIG_SPL_DM_USB_GADGET=y
|
||||
CONFIG_USB_MUSB_HOST=y
|
||||
CONFIG_USB_MUSB_GADGET=y
|
||||
CONFIG_USB_MUSB_TI=y
|
||||
@@ -86,7 +60,6 @@ CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x0451
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0xd022
|
||||
-CONFIG_USB_ETHER=y
|
||||
CONFIG_WDT=y
|
||||
# CONFIG_SPL_WDT is not set
|
||||
CONFIG_DYNAMIC_CRC_TABLE=y
|
@ -1,4 +1,4 @@
|
||||
From 0901a320eb56b18739af922493ef17916daa1d80 Mon Sep 17 00:00:00 2001
|
||||
From 4b2b7d1548bc36391f63cbc73626852335b90f33 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Wed, 29 Jan 2020 09:56:06 +0100
|
||||
Subject: [PATCH] configs: Re-sync with CONFIG_DISTRO_DEFAULTS
|
||||
@ -18,7 +18,7 @@ Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
5 files changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
|
||||
index 5fbbfd7236..1afe9a4665 100644
|
||||
index cfda83474b..657c72b595 100644
|
||||
--- a/configs/sandbox64_defconfig
|
||||
+++ b/configs/sandbox64_defconfig
|
||||
@@ -77,7 +77,6 @@ CONFIG_CMD_REGULATOR=y
|
||||
@ -30,7 +30,7 @@ index 5fbbfd7236..1afe9a4665 100644
|
||||
CONFIG_CMD_CRAMFS=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
|
||||
index f1ec701a9f..5bc9186d6e 100644
|
||||
index 5bc90d09a8..a1f91a5870 100644
|
||||
--- a/configs/sandbox_defconfig
|
||||
+++ b/configs/sandbox_defconfig
|
||||
@@ -90,7 +90,6 @@ CONFIG_CMD_REGULATOR=y
|
||||
@ -52,7 +52,7 @@ index fdad9bd7b4..560ce858f2 100644
|
||||
+# CONFIG_CMD_BTRFS is not set
|
||||
+# CONFIG_FS_BTRFS is not set
|
||||
diff --git a/configs/turris_mox_defconfig b/configs/turris_mox_defconfig
|
||||
index 66dc2473d6..906d79a5c3 100644
|
||||
index f938fbb475..399941d4e1 100644
|
||||
--- a/configs/turris_mox_defconfig
|
||||
+++ b/configs/turris_mox_defconfig
|
||||
@@ -36,7 +36,6 @@ CONFIG_CMD_TFTPPUT=y
|
@ -1,4 +1,4 @@
|
||||
From 96d142c3738348da1ea98e39a8bbaf5c4a640692 Mon Sep 17 00:00:00 2001
|
||||
From 650c3bf0b238e402efbb462ee284a3413028a82d Mon Sep 17 00:00:00 2001
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Tue, 29 Sep 2020 10:13:33 +0200
|
||||
Subject: [PATCH] sunxi: dts: OrangePi Zero: Add SPI aliases to make bus usable
|
@ -1,4 +1,4 @@
|
||||
From b1098dbd2cc344dd9c2df14d7dfab0eb0a107959 Mon Sep 17 00:00:00 2001
|
||||
From 779e02d702960aaa13facd1add368caefc35702e Mon Sep 17 00:00:00 2001
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Mon, 28 Sep 2020 23:02:01 +0200
|
||||
Subject: [PATCH] sunxi: dts: OrangePi Zero: Enable SPI flash.
|
@ -1,22 +0,0 @@
|
||||
From 880d8bd547bf71fd91216d2725455fc373dd981a Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Wed, 29 Jan 2020 10:26:43 +0100
|
||||
Subject: [PATCH] configs: am335x_evm: disable BTRFS
|
||||
|
||||
Disable BTRFS as otherwise the image get's too big.
|
||||
|
||||
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
---
|
||||
configs/am335x_evm_defconfig | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/configs/am335x_evm_defconfig b/configs/am335x_evm_defconfig
|
||||
index c615c54b1c..62db21203d 100644
|
||||
--- a/configs/am335x_evm_defconfig
|
||||
+++ b/configs/am335x_evm_defconfig
|
||||
@@ -65,3 +65,5 @@ CONFIG_WDT=y
|
||||
CONFIG_DYNAMIC_CRC_TABLE=y
|
||||
CONFIG_RSA=y
|
||||
CONFIG_LZO=y
|
||||
+# CONFIG_CMD_BTRFS is not set
|
||||
+# CONFIG_FS_BTRFS is not set
|
@ -1,4 +1,4 @@
|
||||
From 415d7b01833b5c4271a9f7c209b82a5e9198ff21 Mon Sep 17 00:00:00 2001
|
||||
From 71eae7038a475626427e1aeaa3ba8251ea3fbfa4 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Mon, 28 Sep 2020 23:02:02 +0200
|
||||
Subject: [PATCH] sunxi: Enable SPI support on Orange Pi Zero
|
@ -1,4 +1,4 @@
|
||||
From 42719d4568f2aec214e5d096fe0e096ba2000265 Mon Sep 17 00:00:00 2001
|
||||
From dd35ffaf8b307852f994b7adab00d0313acd973c Mon Sep 17 00:00:00 2001
|
||||
From: Guillaume Gardet <guillaume.gardet@arm.com>
|
||||
Date: Wed, 18 Nov 2020 13:42:04 +0000
|
||||
Subject: [PATCH] Disable CONFIG_CMD_BTRFS in xilinx_zynqmp_virt_defconfig to
|
||||
@ -9,10 +9,10 @@ Subject: [PATCH] Disable CONFIG_CMD_BTRFS in xilinx_zynqmp_virt_defconfig to
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/configs/xilinx_zynqmp_virt_defconfig b/configs/xilinx_zynqmp_virt_defconfig
|
||||
index e400cd4702..a490f04de3 100644
|
||||
index 0bf4b7d692..6e6d14b7f3 100644
|
||||
--- a/configs/xilinx_zynqmp_virt_defconfig
|
||||
+++ b/configs/xilinx_zynqmp_virt_defconfig
|
||||
@@ -59,6 +59,7 @@ CONFIG_CMD_TIME=y
|
||||
@@ -60,6 +60,7 @@ CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_TIMER=y
|
||||
CONFIG_CMD_TPM=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
33
0012-smbios-Fix-table-when-no-string-is-.patch
Normal file
33
0012-smbios-Fix-table-when-no-string-is-.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From c6623753e7523061f0301ccce32785020a02832e Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Wed, 17 Mar 2021 12:20:32 +0100
|
||||
Subject: [PATCH] smbios: Fix table when no string is present
|
||||
|
||||
When no string is present in a table, next_ptr points to the same
|
||||
location as eos. When calculating the string table length, we would only
|
||||
reserve one \0. By spec a SMBIOS table has to end with two \0\0 when no
|
||||
strings a present.
|
||||
|
||||
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
|
||||
Series-to: sjg@chromium.org
|
||||
Series-cc: bmeng.cn@gmail.com
|
||||
Series-cc: xypron.glpk@gmx.de
|
||||
Series-cc: u-boot@lists.denx.de
|
||||
---
|
||||
lib/smbios.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/smbios.c b/lib/smbios.c
|
||||
index 7d463c84a9..d21d37cdac 100644
|
||||
--- a/lib/smbios.c
|
||||
+++ b/lib/smbios.c
|
||||
@@ -153,7 +153,7 @@ static int smbios_add_prop(struct smbios_ctx *ctx, const char *prop)
|
||||
static void smbios_set_eos(struct smbios_ctx *ctx, char *eos)
|
||||
{
|
||||
ctx->eos = eos;
|
||||
- ctx->next_ptr = eos;
|
||||
+ ctx->next_ptr = eos + 1;
|
||||
ctx->last_str = NULL;
|
||||
}
|
||||
|
@ -1,32 +0,0 @@
|
||||
From e9db4aca83892ceba98c7712b91e31ada2ae2010 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:19 +0100
|
||||
Subject: [PATCH] rpi: Add identifier for the new RPi400
|
||||
|
||||
The Raspberry Pi Foundation released the new RPi400 which we want to
|
||||
detect, so we can enable Ethernet on it and know the correct device tree
|
||||
file name.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
board/raspberrypi/rpi/rpi.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
|
||||
index 6b1fa5fc14..b66698e4a9 100644
|
||||
--- a/board/raspberrypi/rpi/rpi.c
|
||||
+++ b/board/raspberrypi/rpi/rpi.c
|
||||
@@ -157,6 +157,11 @@ static const struct rpi_model rpi_models_new_scheme[] = {
|
||||
DTB_DIR "bcm2711-rpi-4-b.dtb",
|
||||
true,
|
||||
},
|
||||
+ [0x13] = {
|
||||
+ "400",
|
||||
+ DTB_DIR "bcm2711-rpi-400.dtb",
|
||||
+ true,
|
||||
+ },
|
||||
};
|
||||
|
||||
static const struct rpi_model rpi_models_old_scheme[] = {
|
@ -1,36 +0,0 @@
|
||||
From b47e23c6f7a461ff3943d17ff7b6f23af27d5130 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:20 +0100
|
||||
Subject: [PATCH] rpi: Add identifier for the new CM4
|
||||
|
||||
The Raspberry Pi Foundation released the new Compute Module 4 which we
|
||||
want to detect, so we can enable Ethernet on it and know the correct
|
||||
device tree file name.
|
||||
|
||||
Note that this sets the Ethernet option to true since the official CM4
|
||||
IO board has an Ethernet port. But that might not be the case when using
|
||||
custom ones.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
board/raspberrypi/rpi/rpi.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
|
||||
index b66698e4a9..abcf41a5a8 100644
|
||||
--- a/board/raspberrypi/rpi/rpi.c
|
||||
+++ b/board/raspberrypi/rpi/rpi.c
|
||||
@@ -162,6 +162,11 @@ static const struct rpi_model rpi_models_new_scheme[] = {
|
||||
DTB_DIR "bcm2711-rpi-400.dtb",
|
||||
true,
|
||||
},
|
||||
+ [0x14] = {
|
||||
+ "Compute Module 4",
|
||||
+ DTB_DIR "bcm2711-rpi-cm4.dtb",
|
||||
+ true,
|
||||
+ },
|
||||
};
|
||||
|
||||
static const struct rpi_model rpi_models_old_scheme[] = {
|
@ -1,54 +0,0 @@
|
||||
From ce6a449a4b8721a295915187e5fa9fab0b686b3b Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:21 +0100
|
||||
Subject: [PATCH] pci: pcie-brcmstb: Fix inbound window configurations
|
||||
|
||||
So far we've assumed a fixed configuration for inbound windows as we had
|
||||
a single user for this controller. But the controller's DMA constraints
|
||||
were improved starting with BCM2711's B1 revision of the SoC, notably
|
||||
available in CM4 and Pi400. They allow for wider inbound windows. We can
|
||||
now cover the whole address space, whereas before we where limited to
|
||||
the lower 3GB.
|
||||
|
||||
This information is passed to us through DT's 'dma-ranges' property and
|
||||
it's specially important for us to honor it since some interactions with
|
||||
the board's co-processor assume we're doing so (specifically the XHCI
|
||||
firmware load operation, which is handled by the co-processor after
|
||||
u-boot has correctly configured the PCIe controller).
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
drivers/pci/pcie_brcmstb.c | 12 +++++-------
|
||||
1 file changed, 5 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/pcie_brcmstb.c b/drivers/pci/pcie_brcmstb.c
|
||||
index dade79e9c8..f6e8ad0d0a 100644
|
||||
--- a/drivers/pci/pcie_brcmstb.c
|
||||
+++ b/drivers/pci/pcie_brcmstb.c
|
||||
@@ -432,6 +432,7 @@ static int brcm_pcie_probe(struct udevice *dev)
|
||||
struct pci_controller *hose = dev_get_uclass_priv(ctlr);
|
||||
struct brcm_pcie *pcie = dev_get_priv(dev);
|
||||
void __iomem *base = pcie->base;
|
||||
+ struct pci_region region;
|
||||
bool ssc_good = false;
|
||||
int num_out_wins = 0;
|
||||
u64 rc_bar2_offset, rc_bar2_size;
|
||||
@@ -468,13 +469,10 @@ static int brcm_pcie_probe(struct udevice *dev)
|
||||
MISC_CTRL_SCB_ACCESS_EN_MASK |
|
||||
MISC_CTRL_CFG_READ_UR_MODE_MASK |
|
||||
MISC_CTRL_MAX_BURST_SIZE_128);
|
||||
- /*
|
||||
- * TODO: When support for other SoCs than BCM2711 is added we may
|
||||
- * need to use the base address and size(s) provided in the dma-ranges
|
||||
- * property.
|
||||
- */
|
||||
- rc_bar2_offset = 0;
|
||||
- rc_bar2_size = 0xc0000000;
|
||||
+
|
||||
+ pci_get_dma_regions(dev, ®ion, 0);
|
||||
+ rc_bar2_offset = region.bus_start - region.phys_start;
|
||||
+ rc_bar2_size = 1ULL << fls64(region.size - 1);
|
||||
|
||||
tmp = lower_32_bits(rc_bar2_offset);
|
||||
u32p_replace_bits(&tmp, brcm_pcie_encode_ibar_size(rc_bar2_size),
|
@ -1,357 +0,0 @@
|
||||
From c655ed2fd2cfa3a70783402a4cab78bbd0277858 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:22 +0100
|
||||
Subject: [PATCH] dm: Introduce xxx_get_dma_range()
|
||||
|
||||
Add the following functions to get a specific device's DMA ranges:
|
||||
- dev_get_dma_range()
|
||||
- ofnode_get_dma_range()
|
||||
- of_get_dma_range()
|
||||
- fdt_get_dma_range()
|
||||
They are specially useful in oder to be able validate a physical address
|
||||
space range into a bus's and to convert addresses from and to address
|
||||
spaces.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
common/fdt_support.c | 73 +++++++++++++++++++++++++++++++++++++++
|
||||
drivers/core/of_addr.c | 78 ++++++++++++++++++++++++++++++++++++++++++
|
||||
drivers/core/ofnode.c | 9 +++++
|
||||
drivers/core/read.c | 6 ++++
|
||||
include/dm/of_addr.h | 17 +++++++++
|
||||
include/dm/ofnode.h | 16 +++++++++
|
||||
include/dm/read.h | 21 ++++++++++++
|
||||
include/fdt_support.h | 14 ++++++++
|
||||
8 files changed, 234 insertions(+)
|
||||
|
||||
diff --git a/common/fdt_support.c b/common/fdt_support.c
|
||||
index 5ae75df3c6..bf855d26c8 100644
|
||||
--- a/common/fdt_support.c
|
||||
+++ b/common/fdt_support.c
|
||||
@@ -1342,6 +1342,79 @@ u64 fdt_translate_dma_address(const void *blob, int node_offset,
|
||||
return __of_translate_address(blob, node_offset, in_addr, "dma-ranges");
|
||||
}
|
||||
|
||||
+int fdt_get_dma_range(const void *blob, int node, phys_addr_t *cpu,
|
||||
+ dma_addr_t *bus, u64 *size)
|
||||
+{
|
||||
+ bool found_dma_ranges = false;
|
||||
+ struct of_bus *bus_node;
|
||||
+ const fdt32_t *ranges;
|
||||
+ int na, ns, pna, pns;
|
||||
+ int parent = node;
|
||||
+ int ret = 0;
|
||||
+ int len;
|
||||
+
|
||||
+ /* Find the closest dma-ranges property */
|
||||
+ while (parent >= 0) {
|
||||
+ ranges = fdt_getprop(blob, parent, "dma-ranges", &len);
|
||||
+
|
||||
+ /* Ignore empty ranges, they imply no translation required */
|
||||
+ if (ranges && len > 0)
|
||||
+ break;
|
||||
+
|
||||
+ /* Once we find 'dma-ranges', then a missing one is an error */
|
||||
+ if (found_dma_ranges && !ranges) {
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (ranges)
|
||||
+ found_dma_ranges = true;
|
||||
+
|
||||
+ parent = fdt_parent_offset(blob, parent);
|
||||
+ }
|
||||
+
|
||||
+ if (!ranges || parent < 0) {
|
||||
+ debug("no dma-ranges found for node %s\n",
|
||||
+ fdt_get_name(blob, node, NULL));
|
||||
+ ret = -ENOENT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* switch to that node */
|
||||
+ node = parent;
|
||||
+ parent = fdt_parent_offset(blob, node);
|
||||
+ if (parent < 0) {
|
||||
+ printf("Found dma-ranges in root node, shoudln't happen\n");
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* Get the address sizes both for the bus and its parent */
|
||||
+ bus_node = of_match_bus(blob, node);
|
||||
+ bus_node->count_cells(blob, node, &na, &ns);
|
||||
+ if (!OF_CHECK_COUNTS(na, ns)) {
|
||||
+ printf("%s: Bad cell count for %s\n", __FUNCTION__,
|
||||
+ fdt_get_name(blob, node, NULL));
|
||||
+ return -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ bus_node = of_match_bus(blob, parent);
|
||||
+ bus_node->count_cells(blob, parent, &pna, &pns);
|
||||
+ if (!OF_CHECK_COUNTS(pna, pns)) {
|
||||
+ printf("%s: Bad cell count for %s\n", __FUNCTION__,
|
||||
+ fdt_get_name(blob, parent, NULL));
|
||||
+ return -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ *bus = fdt_read_number(ranges, na);
|
||||
+ *cpu = fdt_translate_dma_address(blob, node, ranges + na);
|
||||
+ *size = fdt_read_number(ranges + na + pna, ns);
|
||||
+out:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* fdt_node_offset_by_compat_reg: Find a node that matches compatiable and
|
||||
* who's reg property matches a physical cpu address
|
||||
diff --git a/drivers/core/of_addr.c b/drivers/core/of_addr.c
|
||||
index ca34d84922..703bc3e3f5 100644
|
||||
--- a/drivers/core/of_addr.c
|
||||
+++ b/drivers/core/of_addr.c
|
||||
@@ -325,6 +325,84 @@ u64 of_translate_dma_address(const struct device_node *dev, const __be32 *in_add
|
||||
return __of_translate_address(dev, in_addr, "dma-ranges");
|
||||
}
|
||||
|
||||
+int of_get_dma_range(const struct device_node *dev, phys_addr_t *cpu,
|
||||
+ dma_addr_t *bus, u64 *size)
|
||||
+{
|
||||
+ bool found_dma_ranges = false;
|
||||
+ struct device_node *parent;
|
||||
+ struct of_bus *bus_node;
|
||||
+ int na, ns, pna, pns;
|
||||
+ const __be32 *ranges;
|
||||
+ int ret = 0;
|
||||
+ int len;
|
||||
+
|
||||
+ /* Find the closest dma-ranges property */
|
||||
+ dev = of_node_get(dev);
|
||||
+ while (dev) {
|
||||
+ ranges = of_get_property(dev, "dma-ranges", &len);
|
||||
+
|
||||
+ /* Ignore empty ranges, they imply no translation required */
|
||||
+ if (ranges && len > 0)
|
||||
+ break;
|
||||
+
|
||||
+ /* Once we find 'dma-ranges', then a missing one is an error */
|
||||
+ if (found_dma_ranges && !ranges) {
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (ranges)
|
||||
+ found_dma_ranges = true;
|
||||
+
|
||||
+ parent = of_get_parent(dev);
|
||||
+ of_node_put(dev);
|
||||
+ dev = parent;
|
||||
+ }
|
||||
+
|
||||
+ if (!dev || !ranges) {
|
||||
+ debug("no dma-ranges found for node %s\n",
|
||||
+ of_node_full_name(dev));
|
||||
+ ret = -ENOENT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* switch to that node */
|
||||
+ parent = of_get_parent(dev);
|
||||
+ if (!parent) {
|
||||
+ printf("Found dma-ranges in root node, shoudln't happen\n");
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* Get the address sizes both for the bus and its parent */
|
||||
+ bus_node = of_match_bus((struct device_node*)dev);
|
||||
+ bus_node->count_cells(dev, &na, &ns);
|
||||
+ if (!OF_CHECK_COUNTS(na, ns)) {
|
||||
+ printf("Bad cell count for %s\n", of_node_full_name(dev));
|
||||
+ return -EINVAL;
|
||||
+ goto out_parent;
|
||||
+ }
|
||||
+
|
||||
+ bus_node = of_match_bus(parent);
|
||||
+ bus_node->count_cells(parent, &pna, &pns);
|
||||
+ if (!OF_CHECK_COUNTS(pna, pns)) {
|
||||
+ printf("Bad cell count for %s\n", of_node_full_name(parent));
|
||||
+ return -EINVAL;
|
||||
+ goto out_parent;
|
||||
+ }
|
||||
+
|
||||
+ *bus = of_read_number(ranges, na);
|
||||
+ *cpu = of_translate_dma_address(dev, ranges + na);
|
||||
+ *size = of_read_number(ranges + na + pna, ns);
|
||||
+
|
||||
+out_parent:
|
||||
+ of_node_put(parent);
|
||||
+out:
|
||||
+ of_node_put(dev);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int __of_address_to_resource(const struct device_node *dev,
|
||||
const __be32 *addrp, u64 size, unsigned int flags,
|
||||
const char *name, struct resource *r)
|
||||
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
|
||||
index a68076bf35..15470d4875 100644
|
||||
--- a/drivers/core/ofnode.c
|
||||
+++ b/drivers/core/ofnode.c
|
||||
@@ -911,6 +911,15 @@ u64 ofnode_translate_dma_address(ofnode node, const fdt32_t *in_addr)
|
||||
return fdt_translate_dma_address(gd->fdt_blob, ofnode_to_offset(node), in_addr);
|
||||
}
|
||||
|
||||
+int ofnode_get_dma_range(ofnode node, phys_addr_t *cpu, dma_addr_t *bus, u64 *size)
|
||||
+{
|
||||
+ if (ofnode_is_np(node))
|
||||
+ return of_get_dma_range(ofnode_to_np(node), cpu, bus, size);
|
||||
+ else
|
||||
+ return fdt_get_dma_range(gd->fdt_blob, ofnode_to_offset(node),
|
||||
+ cpu, bus, size);
|
||||
+}
|
||||
+
|
||||
int ofnode_device_is_compatible(ofnode node, const char *compat)
|
||||
{
|
||||
if (ofnode_is_np(node))
|
||||
diff --git a/drivers/core/read.c b/drivers/core/read.c
|
||||
index 076125824c..0994fbd979 100644
|
||||
--- a/drivers/core/read.c
|
||||
+++ b/drivers/core/read.c
|
||||
@@ -338,6 +338,12 @@ u64 dev_translate_dma_address(const struct udevice *dev, const fdt32_t *in_addr)
|
||||
return ofnode_translate_dma_address(dev_ofnode(dev), in_addr);
|
||||
}
|
||||
|
||||
+int dev_get_dma_range(const struct udevice *dev, phys_addr_t *cpu,
|
||||
+ dma_addr_t *bus, u64 *size)
|
||||
+{
|
||||
+ return ofnode_get_dma_range(dev_ofnode(dev), cpu, bus, size);
|
||||
+}
|
||||
+
|
||||
int dev_read_alias_highest_id(const char *stem)
|
||||
{
|
||||
if (of_live_active())
|
||||
diff --git a/include/dm/of_addr.h b/include/dm/of_addr.h
|
||||
index 3fa1ffce81..ee21d5cf4f 100644
|
||||
--- a/include/dm/of_addr.h
|
||||
+++ b/include/dm/of_addr.h
|
||||
@@ -44,6 +44,23 @@ u64 of_translate_address(const struct device_node *no, const __be32 *in_addr);
|
||||
*/
|
||||
u64 of_translate_dma_address(const struct device_node *no, const __be32 *in_addr);
|
||||
|
||||
+
|
||||
+/**
|
||||
+ * of_get_dma_range() - get dma-ranges for a specific DT node
|
||||
+ *
|
||||
+ * Get DMA ranges for a specifc node, this is useful to perform bus->cpu and
|
||||
+ * cpu->bus address translations
|
||||
+ *
|
||||
+ * @param blob Pointer to device tree blob
|
||||
+ * @param node_offset Node DT offset
|
||||
+ * @param cpu Pointer to variable storing the range's cpu address
|
||||
+ * @param bus Pointer to variable storing the range's bus address
|
||||
+ * @param size Pointer to variable storing the range's size
|
||||
+ * @return translated DMA address or OF_BAD_ADDR on error
|
||||
+ */
|
||||
+int of_get_dma_range(const struct device_node *dev, phys_addr_t *cpu,
|
||||
+ dma_addr_t *bus, u64 *size);
|
||||
+
|
||||
/**
|
||||
* of_get_address() - obtain an address from a node
|
||||
*
|
||||
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
|
||||
index ced7f6ffb2..dc3dd84d9f 100644
|
||||
--- a/include/dm/ofnode.h
|
||||
+++ b/include/dm/ofnode.h
|
||||
@@ -939,6 +939,22 @@ u64 ofnode_translate_address(ofnode node, const fdt32_t *in_addr);
|
||||
*/
|
||||
u64 ofnode_translate_dma_address(ofnode node, const fdt32_t *in_addr);
|
||||
|
||||
+/**
|
||||
+ * ofnode_get_dma_range() - get dma-ranges for a specific DT node
|
||||
+ *
|
||||
+ * Get DMA ranges for a specifc node, this is useful to perform bus->cpu and
|
||||
+ * cpu->bus address translations
|
||||
+ *
|
||||
+ * @param blob Pointer to device tree blob
|
||||
+ * @param node_offset Node DT offset
|
||||
+ * @param cpu Pointer to variable storing the range's cpu address
|
||||
+ * @param bus Pointer to variable storing the range's bus address
|
||||
+ * @param size Pointer to variable storing the range's size
|
||||
+ * @return translated DMA address or OF_BAD_ADDR on error
|
||||
+ */
|
||||
+int ofnode_get_dma_range(ofnode node, phys_addr_t *cpu, dma_addr_t *bus,
|
||||
+ u64 *size);
|
||||
+
|
||||
/**
|
||||
* ofnode_device_is_compatible() - check if the node is compatible with compat
|
||||
*
|
||||
diff --git a/include/dm/read.h b/include/dm/read.h
|
||||
index 0585eb1228..46e902c57d 100644
|
||||
--- a/include/dm/read.h
|
||||
+++ b/include/dm/read.h
|
||||
@@ -664,6 +664,21 @@ u64 dev_translate_address(const struct udevice *dev, const fdt32_t *in_addr);
|
||||
u64 dev_translate_dma_address(const struct udevice *dev,
|
||||
const fdt32_t *in_addr);
|
||||
|
||||
+/**
|
||||
+ * dev_get_dma_range() - Get a device's DMA constraints
|
||||
+ *
|
||||
+ * Provide the address bases and size of the linear mapping between the CPU and
|
||||
+ * a device's BUS address space.
|
||||
+ *
|
||||
+ * @dev: device giving the context in which to translate the DMA address
|
||||
+ * @cpu: base address for CPU's view of memory
|
||||
+ * @bus: base address for BUS's view of memory
|
||||
+ * @size: size of the address space
|
||||
+ * @return 0 if ok, negative on error
|
||||
+ */
|
||||
+int dev_get_dma_range(const struct udevice *dev, phys_addr_t *cpu,
|
||||
+ dma_addr_t *bus, u64 *size);
|
||||
+
|
||||
/**
|
||||
* dev_read_alias_highest_id - Get highest alias id for the given stem
|
||||
* @stem: Alias stem to be examined
|
||||
@@ -1004,6 +1019,12 @@ static inline u64 dev_translate_dma_address(const struct udevice *dev,
|
||||
return ofnode_translate_dma_address(dev_ofnode(dev), in_addr);
|
||||
}
|
||||
|
||||
+static inline int dev_get_dma_range(const struct udevice *dev, phys_addr_t *cpu,
|
||||
+ dma_addr_t *bus, u64 *size)
|
||||
+{
|
||||
+ return ofnode_get_dma_range(dev_ofnode(dev), cpu, bus, size);
|
||||
+}
|
||||
+
|
||||
static inline int dev_read_alias_highest_id(const char *stem)
|
||||
{
|
||||
if (!CONFIG_IS_ENABLED(OF_LIBFDT))
|
||||
diff --git a/include/fdt_support.h b/include/fdt_support.h
|
||||
index dbbac0fb6a..46eb1dbbb2 100644
|
||||
--- a/include/fdt_support.h
|
||||
+++ b/include/fdt_support.h
|
||||
@@ -260,6 +260,20 @@ u64 fdt_translate_address(const void *blob, int node_offset,
|
||||
u64 fdt_translate_dma_address(const void *blob, int node_offset,
|
||||
const __be32 *in_addr);
|
||||
|
||||
+/**
|
||||
+ * Get DMA ranges for a specifc node, this is useful to perform bus->cpu and
|
||||
+ * cpu->bus address translations
|
||||
+ *
|
||||
+ * @param blob Pointer to device tree blob
|
||||
+ * @param node_offset Node DT offset
|
||||
+ * @param cpu Pointer to variable storing the range's cpu address
|
||||
+ * @param bus Pointer to variable storing the range's bus address
|
||||
+ * @param size Pointer to variable storing the range's size
|
||||
+ * @return translated DMA address or OF_BAD_ADDR on error
|
||||
+ */
|
||||
+int fdt_get_dma_range(const void *blob, int node_offset, phys_addr_t *cpu,
|
||||
+ dma_addr_t *bus, u64 *size);
|
||||
+
|
||||
int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
|
||||
phys_addr_t compat_off);
|
||||
int fdt_alloc_phandle(void *blob);
|
@ -1,113 +0,0 @@
|
||||
From f0b29f058d70dee8b1173da0559a3e16da919950 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:23 +0100
|
||||
Subject: [PATCH] dm: test: Add test case for dev_get_dma_ranges()
|
||||
|
||||
Introduce some new nodes in sandbox's test device-tree and dm tests in
|
||||
order to validate dev_get_dma_range().
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
arch/sandbox/dts/test.dts | 17 ++++++++++++++
|
||||
test/dm/Makefile | 1 +
|
||||
test/dm/read.c | 49 +++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 67 insertions(+)
|
||||
create mode 100644 test/dm/read.c
|
||||
|
||||
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
|
||||
index f3b766271d..3a3b51f83b 100644
|
||||
--- a/arch/sandbox/dts/test.dts
|
||||
+++ b/arch/sandbox/dts/test.dts
|
||||
@@ -292,6 +292,23 @@
|
||||
test5-gpios = <&gpio_a 19>;
|
||||
};
|
||||
|
||||
+ mmio-bus@0 {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ compatible = "denx,u-boot-test-bus";
|
||||
+ dma-ranges = <0x10000000 0x00000000 0x00040000>;
|
||||
+
|
||||
+ subnode@0 {
|
||||
+ compatible = "denx,u-boot-fdt-test";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ mmio-bus@1 {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ compatible = "denx,u-boot-test-bus";
|
||||
+ };
|
||||
+
|
||||
acpi_test1: acpi-test {
|
||||
compatible = "denx,u-boot-acpi-test";
|
||||
acpi-ssdt-test-data = "ab";
|
||||
diff --git a/test/dm/Makefile b/test/dm/Makefile
|
||||
index 46e076ed09..5c52d8b6ea 100644
|
||||
--- a/test/dm/Makefile
|
||||
+++ b/test/dm/Makefile
|
||||
@@ -15,6 +15,7 @@ obj-$(CONFIG_UT_DM) += test-fdt.o
|
||||
obj-$(CONFIG_UT_DM) += test-uclass.o
|
||||
|
||||
obj-$(CONFIG_UT_DM) += core.o
|
||||
+obj-$(CONFIG_UT_DM) += read.o
|
||||
ifneq ($(CONFIG_SANDBOX),)
|
||||
obj-$(CONFIG_ACPIGEN) += acpi.o
|
||||
obj-$(CONFIG_ACPIGEN) += acpigen.o
|
||||
diff --git a/test/dm/read.c b/test/dm/read.c
|
||||
new file mode 100644
|
||||
index 0000000000..7768aa2968
|
||||
--- /dev/null
|
||||
+++ b/test/dm/read.c
|
||||
@@ -0,0 +1,49 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+/*
|
||||
+ * Copyright (c) 2020 Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
+ */
|
||||
+
|
||||
+#include <common.h>
|
||||
+#include <dm.h>
|
||||
+#include <dm/device.h>
|
||||
+#include <dm/ofnode.h>
|
||||
+#include <dm/root.h>
|
||||
+#include <dm/test.h>
|
||||
+#include <dm/uclass-internal.h>
|
||||
+#include <test/ut.h>
|
||||
+
|
||||
+static int dm_test_dma_ranges(struct unit_test_state *uts)
|
||||
+{
|
||||
+ struct udevice *dev;
|
||||
+ phys_addr_t cpu;
|
||||
+ dma_addr_t bus;
|
||||
+ ofnode node;
|
||||
+ u64 size;
|
||||
+
|
||||
+ /* dma-ranges are on the device's node */
|
||||
+ node = ofnode_path("/mmio-bus@0");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_BUS, node, &dev));
|
||||
+ ut_assertok(dev_get_dma_range(dev, &cpu, &bus, &size));
|
||||
+ ut_asserteq_64(0x40000, size);
|
||||
+ ut_asserteq_64(0x0, cpu);
|
||||
+ ut_asserteq_64(0x10000000, bus);
|
||||
+
|
||||
+ /* dma-ranges are on the bus' node */
|
||||
+ node = ofnode_path("/mmio-bus@0/subnode@0");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_FDT, node, &dev));
|
||||
+ ut_assertok(dev_get_dma_range(dev, &cpu, &bus, &size));
|
||||
+ ut_asserteq_64(0x40000, size);
|
||||
+ ut_asserteq_64(0x0, cpu);
|
||||
+ ut_asserteq_64(0x10000000, bus);
|
||||
+
|
||||
+ /* No dma-ranges available */
|
||||
+ node = ofnode_path("/mmio-bus@1");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_BUS, node, &dev));
|
||||
+ ut_asserteq(-ENOENT, dev_get_dma_range(dev, &cpu, &bus, &size));
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+DM_TEST(dm_test_dma_ranges, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
@ -1,140 +0,0 @@
|
||||
From d327db89d06e0532645a2ec5151aaca7299939fd Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:24 +0100
|
||||
Subject: [PATCH] dm: Introduce DMA constraints into the core device model
|
||||
|
||||
Calculating the DMA offset between a bus address space and CPU's every
|
||||
time we call phys_to_bus() and bus_to_phys() isn't ideal performance
|
||||
wise, as it implies traversing the device tree from the device's node up
|
||||
to the root. Since this information is static and available before the
|
||||
device's initialization, parse it before the probe call an provide the
|
||||
DMA offset in 'struct udevice' for the address translation code to use
|
||||
it.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
drivers/core/Kconfig | 10 ++++++++++
|
||||
drivers/core/device.c | 41 +++++++++++++++++++++++++++++++++++++++++
|
||||
include/dm/device.h | 13 +++++++++++++
|
||||
3 files changed, 64 insertions(+)
|
||||
|
||||
diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig
|
||||
index ffae6f9795..295cf2dd00 100644
|
||||
--- a/drivers/core/Kconfig
|
||||
+++ b/drivers/core/Kconfig
|
||||
@@ -113,6 +113,16 @@ config SPL_DM_SEQ_ALIAS
|
||||
numbered devices (e.g. serial0 = &serial0). This feature can be
|
||||
disabled if it is not required, to save code space in SPL.
|
||||
|
||||
+config DM_DMA
|
||||
+ bool "Support per-device DMA constraints"
|
||||
+ depends on DM
|
||||
+ default n
|
||||
+ help
|
||||
+ Enable this to extract per-device DMA constraints, only supported on
|
||||
+ device-tree systems for now. This is needed in order translate
|
||||
+ addresses on systems where different buses have different views of
|
||||
+ the physical address space.
|
||||
+
|
||||
config REGMAP
|
||||
bool "Support register maps"
|
||||
depends on DM
|
||||
diff --git a/drivers/core/device.c b/drivers/core/device.c
|
||||
index 4b3dcb3b37..788ce6046a 100644
|
||||
--- a/drivers/core/device.c
|
||||
+++ b/drivers/core/device.c
|
||||
@@ -421,6 +421,43 @@ fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * device_get_dma_constraints() - Populate device's DMA constraints
|
||||
+ *
|
||||
+ * Gets a device's DMA constraints from firmware. This information is later
|
||||
+ * used by drivers to translate physcal addresses to the device's bus address
|
||||
+ * space. For now only device-tree is supported.
|
||||
+ *
|
||||
+ * @dev: Pointer to target device
|
||||
+ * Return: 0 if OK or if no DMA constraints were found, error otherwise
|
||||
+ */
|
||||
+static int device_get_dma_constraints(struct udevice *dev)
|
||||
+{
|
||||
+ struct udevice *parent = dev->parent;
|
||||
+ phys_addr_t cpu = 0;
|
||||
+ dma_addr_t bus = 0;
|
||||
+ u64 size = 0;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!CONFIG_IS_ENABLED(DM_DMA) || !parent || !dev_has_of_node(parent))
|
||||
+ return 0;
|
||||
+
|
||||
+ /*
|
||||
+ * We start parsing for dma-ranges from the device's bus node. This is
|
||||
+ * specially important on nested buses.
|
||||
+ */
|
||||
+ ret = dev_get_dma_range(parent, &cpu, &bus, &size);
|
||||
+ /* Don't return an error if no 'dma-ranges' were found */
|
||||
+ if (ret && ret != -ENOENT) {
|
||||
+ dm_warn("%s: failed to get DMA range, %d\n", dev->name, ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ dev_set_dma_offset(dev, cpu - bus);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
int device_probe(struct udevice *dev)
|
||||
{
|
||||
const struct driver *drv;
|
||||
@@ -482,6 +519,10 @@ int device_probe(struct udevice *dev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
+ ret = device_get_dma_constraints(dev);
|
||||
+ if (ret)
|
||||
+ goto fail;
|
||||
+
|
||||
ret = uclass_pre_probe_device(dev);
|
||||
if (ret)
|
||||
goto fail;
|
||||
diff --git a/include/dm/device.h b/include/dm/device.h
|
||||
index 5bef484247..b27889af01 100644
|
||||
--- a/include/dm/device.h
|
||||
+++ b/include/dm/device.h
|
||||
@@ -138,6 +138,8 @@ enum {
|
||||
* When CONFIG_DEVRES is enabled, devm_kmalloc() and friends will
|
||||
* add to this list. Memory so-allocated will be freed
|
||||
* automatically when the device is removed / unbound
|
||||
+ * @dma_offset: Offset between the physical address space (CPU's) and the
|
||||
+ * device's bus address space
|
||||
*/
|
||||
struct udevice {
|
||||
const struct driver *driver;
|
||||
@@ -161,6 +163,9 @@ struct udevice {
|
||||
#ifdef CONFIG_DEVRES
|
||||
struct list_head devres_head;
|
||||
#endif
|
||||
+#if CONFIG_IS_ENABLED(DM_DMA)
|
||||
+ ulong dma_offset;
|
||||
+#endif
|
||||
};
|
||||
|
||||
/* Maximum sequence number supported */
|
||||
@@ -172,6 +177,14 @@ struct udevice {
|
||||
/* Returns non-zero if the device is active (probed and not removed) */
|
||||
#define device_active(dev) ((dev)->flags & DM_FLAG_ACTIVATED)
|
||||
|
||||
+#if CONFIG_IS_ENABLED(DM_DMA)
|
||||
+#define dev_set_dma_offset(_dev, _offset) _dev->dma_offset = _offset
|
||||
+#define dev_get_dma_offset(_dev) _dev->dma_offset
|
||||
+#else
|
||||
+#define dev_set_dma_offset(_dev, _offset)
|
||||
+#define dev_get_dma_offset(_dev) 0
|
||||
+#endif
|
||||
+
|
||||
static inline int dev_of_offset(const struct udevice *dev)
|
||||
{
|
||||
return ofnode_to_offset(dev->node);
|
@ -1,120 +0,0 @@
|
||||
From 763aa398ef98782c2801611b9918ea84375b2b79 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:25 +0100
|
||||
Subject: [PATCH] dm: test: Add test case for dev->dma_offset
|
||||
|
||||
Add test to validate dev->dma_offset is properly set on devices.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
arch/sandbox/dts/test.dts | 4 ++++
|
||||
configs/sandbox64_defconfig | 1 +
|
||||
configs/sandbox_defconfig | 1 +
|
||||
configs/sandbox_flattree_defconfig | 1 +
|
||||
configs/sandbox_spl_defconfig | 1 +
|
||||
test/dm/core.c | 30 ++++++++++++++++++++++++++++++
|
||||
6 files changed, 38 insertions(+)
|
||||
|
||||
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
|
||||
index 3a3b51f83b..78f0100282 100644
|
||||
--- a/arch/sandbox/dts/test.dts
|
||||
+++ b/arch/sandbox/dts/test.dts
|
||||
@@ -307,6 +307,10 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "denx,u-boot-test-bus";
|
||||
+
|
||||
+ subnode@0 {
|
||||
+ compatible = "denx,u-boot-fdt-test";
|
||||
+ };
|
||||
};
|
||||
|
||||
acpi_test1: acpi-test {
|
||||
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
|
||||
index 1afe9a4665..f250723827 100644
|
||||
--- a/configs/sandbox64_defconfig
|
||||
+++ b/configs/sandbox64_defconfig
|
||||
@@ -93,6 +93,7 @@ CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0"
|
||||
CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||
CONFIG_NETCONSOLE=y
|
||||
CONFIG_IP_DEFRAG=y
|
||||
+CONFIG_DM_DMA=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_DEVRES=y
|
||||
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
|
||||
index 5bc9186d6e..e40f619e75 100644
|
||||
--- a/configs/sandbox_defconfig
|
||||
+++ b/configs/sandbox_defconfig
|
||||
@@ -107,6 +107,7 @@ CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0"
|
||||
CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||
CONFIG_NETCONSOLE=y
|
||||
CONFIG_IP_DEFRAG=y
|
||||
+CONFIG_DM_DMA=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_DEVRES=y
|
||||
diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
|
||||
index edca7f1808..f5923bf713 100644
|
||||
--- a/configs/sandbox_flattree_defconfig
|
||||
+++ b/configs/sandbox_flattree_defconfig
|
||||
@@ -75,6 +75,7 @@ CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0"
|
||||
CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||
CONFIG_NETCONSOLE=y
|
||||
CONFIG_IP_DEFRAG=y
|
||||
+CONFIG_DM_DMA=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_DEVRES=y
|
||||
diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig
|
||||
index 479f0226e3..0a4815770c 100644
|
||||
--- a/configs/sandbox_spl_defconfig
|
||||
+++ b/configs/sandbox_spl_defconfig
|
||||
@@ -94,6 +94,7 @@ CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||
CONFIG_NETCONSOLE=y
|
||||
CONFIG_IP_DEFRAG=y
|
||||
CONFIG_SPL_DM=y
|
||||
+CONFIG_DM_DMA=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SPL_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
diff --git a/test/dm/core.c b/test/dm/core.c
|
||||
index 6f380a574c..8ca49d09ee 100644
|
||||
--- a/test/dm/core.c
|
||||
+++ b/test/dm/core.c
|
||||
@@ -1066,3 +1066,33 @@ static int dm_test_inactive_child(struct unit_test_state *uts)
|
||||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_inactive_child, UT_TESTF_SCAN_PDATA);
|
||||
+
|
||||
+static int dm_test_dma_offset(struct unit_test_state *uts)
|
||||
+{
|
||||
+ struct udevice *dev;
|
||||
+ ofnode node;
|
||||
+
|
||||
+ /* Make sure the bus's dma-ranges aren't taken into account here */
|
||||
+ node = ofnode_path("/mmio-bus@0");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_BUS, node, &dev));
|
||||
+ ut_asserteq_64(0, dev->dma_offset);
|
||||
+
|
||||
+ /* Device behind a bus with dma-ranges */
|
||||
+ node = ofnode_path("/mmio-bus@0/subnode@0");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_FDT, node, &dev));
|
||||
+ ut_asserteq_64(-0x10000000ULL, dev->dma_offset);
|
||||
+
|
||||
+ /* This one has no dma-ranges */
|
||||
+ node = ofnode_path("/mmio-bus@1");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_BUS, node, &dev));
|
||||
+ node = ofnode_path("/mmio-bus@1/subnode@0");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_FDT, node, &dev));
|
||||
+ ut_asserteq_64(0, dev->dma_offset);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+DM_TEST(dm_test_dma_offset, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
@ -1,47 +0,0 @@
|
||||
From c9ac0a0da12755016d1fbfe2a31bab0ddcdddfda Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:26 +0100
|
||||
Subject: [PATCH] dm: Introduce dev_phys_to_bus()/dev_bus_to_phys()
|
||||
|
||||
These functions, instead of relying on hard-coded platform-specific
|
||||
address translations, make use of the DMA constraints provided by the DM
|
||||
core. This allows for per-device translations.
|
||||
|
||||
We can't yet get rid of the legacy phys_to_bus()/bus_to_phys()
|
||||
implementations as some of its users are not integrated into the
|
||||
device model.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
include/phys2bus.h | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/include/phys2bus.h b/include/phys2bus.h
|
||||
index dc9b8e5a25..866b8b51a8 100644
|
||||
--- a/include/phys2bus.h
|
||||
+++ b/include/phys2bus.h
|
||||
@@ -21,4 +21,21 @@ static inline unsigned long bus_to_phys(unsigned long bus)
|
||||
}
|
||||
#endif
|
||||
|
||||
+#if CONFIG_IS_ENABLED(DM)
|
||||
+#include <dm/device.h>
|
||||
+
|
||||
+static inline dma_addr_t dev_phys_to_bus(struct udevice *dev, phys_addr_t phys)
|
||||
+{
|
||||
+ return phys - dev_get_dma_offset(dev);
|
||||
+}
|
||||
+
|
||||
+static inline phys_addr_t dev_bus_to_phys(struct udevice *dev, dma_addr_t bus)
|
||||
+{
|
||||
+ return bus + dev_get_dma_offset(dev);
|
||||
+}
|
||||
+#else
|
||||
+#define dev_phys_to_bus(_, _addr) _addr
|
||||
+#define dev_bus_to_phys(_, _addr) _addr
|
||||
+#endif
|
||||
+
|
||||
#endif
|
@ -1,73 +0,0 @@
|
||||
From f169928dad5b95413fefc3749e54a39bf481c401 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:27 +0100
|
||||
Subject: [PATCH] dm: test: Add test case for
|
||||
dev_phys_to_bus()/dev_bus_to_phys()
|
||||
|
||||
By reusing DT nodes already available in sandbox's test DT introduce a
|
||||
test to validate dev_phys_to_bus()/dev_bus_to_phys().
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
test/dm/Makefile | 1 +
|
||||
test/dm/phys2bus.c | 37 +++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 38 insertions(+)
|
||||
create mode 100644 test/dm/phys2bus.c
|
||||
|
||||
diff --git a/test/dm/Makefile b/test/dm/Makefile
|
||||
index 5c52d8b6ea..ac86abaa88 100644
|
||||
--- a/test/dm/Makefile
|
||||
+++ b/test/dm/Makefile
|
||||
@@ -16,6 +16,7 @@ obj-$(CONFIG_UT_DM) += test-uclass.o
|
||||
|
||||
obj-$(CONFIG_UT_DM) += core.o
|
||||
obj-$(CONFIG_UT_DM) += read.o
|
||||
+obj-$(CONFIG_UT_DM) += phys2bus.o
|
||||
ifneq ($(CONFIG_SANDBOX),)
|
||||
obj-$(CONFIG_ACPIGEN) += acpi.o
|
||||
obj-$(CONFIG_ACPIGEN) += acpigen.o
|
||||
diff --git a/test/dm/phys2bus.c b/test/dm/phys2bus.c
|
||||
new file mode 100644
|
||||
index 0000000000..342f2fa8eb
|
||||
--- /dev/null
|
||||
+++ b/test/dm/phys2bus.c
|
||||
@@ -0,0 +1,37 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+/*
|
||||
+ * Copyright (c) 2020 Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
+ */
|
||||
+
|
||||
+#include <common.h>
|
||||
+#include <dm.h>
|
||||
+#include <mapmem.h>
|
||||
+#include <phys2bus.h>
|
||||
+#include <dm/device.h>
|
||||
+#include <dm/ofnode.h>
|
||||
+#include <dm/root.h>
|
||||
+#include <dm/test.h>
|
||||
+#include <dm/uclass-internal.h>
|
||||
+#include <test/ut.h>
|
||||
+
|
||||
+static int dm_test_phys_to_bus(struct unit_test_state *uts)
|
||||
+{
|
||||
+ struct udevice *dev;
|
||||
+ ofnode node;
|
||||
+
|
||||
+ node = ofnode_path("/mmio-bus@0");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_BUS, node, &dev));
|
||||
+ /* In this case it should be transparent, no dma-ranges in parent bus */
|
||||
+ ut_asserteq_addr((void*)0xfffffULL, (void*)dev_phys_to_bus(dev, 0xfffff));
|
||||
+ ut_asserteq_addr((void*)0xfffffULL, (void*)(ulong)dev_bus_to_phys(dev, 0xfffff));
|
||||
+
|
||||
+ node = ofnode_path("/mmio-bus@0/subnode@0");
|
||||
+ ut_assert(ofnode_valid(node));
|
||||
+ ut_assertok(uclass_get_device_by_ofnode(UCLASS_TEST_FDT, node, &dev));
|
||||
+ ut_asserteq_addr((void*)0x100fffffULL, (void*)dev_phys_to_bus(dev, 0xfffff));
|
||||
+ ut_asserteq_addr((void*)0xfffffULL, (void*)(ulong)dev_bus_to_phys(dev, 0x100fffff));
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+DM_TEST(dm_test_phys_to_bus, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
@ -1,319 +0,0 @@
|
||||
From bc8e6db54d2f5a51b2e74af47a79a0a366f3c611 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:28 +0100
|
||||
Subject: [PATCH] xhci: translate virtual addresses into the bus's address
|
||||
space
|
||||
|
||||
So far we've been content with passing physical addresses when
|
||||
configuring memory addresses into XHCI controllers, but not all
|
||||
platforms have buses with transparent mappings. Specifically the
|
||||
Raspberry Pi 4 might introduce an offset to memory accesses incoming
|
||||
from its PCIe port.
|
||||
|
||||
Introduce xhci_virt_to_bus() and xhci_bus_to_virt() to cater with these
|
||||
limitations, and make sure we don't break non DM users.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
drivers/usb/host/xhci-mem.c | 45 +++++++++++++++++++-----------------
|
||||
drivers/usb/host/xhci-ring.c | 13 +++++++----
|
||||
drivers/usb/host/xhci.c | 4 ++--
|
||||
include/usb/xhci.h | 20 +++++++++++++++-
|
||||
4 files changed, 53 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
|
||||
index b002d6f166..83147d51b5 100644
|
||||
--- a/drivers/usb/host/xhci-mem.c
|
||||
+++ b/drivers/usb/host/xhci-mem.c
|
||||
@@ -110,7 +110,7 @@ static void xhci_scratchpad_free(struct xhci_ctrl *ctrl)
|
||||
|
||||
ctrl->dcbaa->dev_context_ptrs[0] = 0;
|
||||
|
||||
- free((void *)(uintptr_t)le64_to_cpu(ctrl->scratchpad->sp_array[0]));
|
||||
+ free(xhci_bus_to_virt(ctrl, le64_to_cpu(ctrl->scratchpad->sp_array[0])));
|
||||
free(ctrl->scratchpad->sp_array);
|
||||
free(ctrl->scratchpad);
|
||||
ctrl->scratchpad = NULL;
|
||||
@@ -216,8 +216,8 @@ static void *xhci_malloc(unsigned int size)
|
||||
* @param link_trbs flag to indicate whether to link the trbs or NOT
|
||||
* @return none
|
||||
*/
|
||||
-static void xhci_link_segments(struct xhci_segment *prev,
|
||||
- struct xhci_segment *next, bool link_trbs)
|
||||
+static void xhci_link_segments(struct xhci_ctrl *ctrl, struct xhci_segment *prev,
|
||||
+ struct xhci_segment *next, bool link_trbs)
|
||||
{
|
||||
u32 val;
|
||||
u64 val_64 = 0;
|
||||
@@ -226,7 +226,7 @@ static void xhci_link_segments(struct xhci_segment *prev,
|
||||
return;
|
||||
prev->next = next;
|
||||
if (link_trbs) {
|
||||
- val_64 = virt_to_phys(next->trbs);
|
||||
+ val_64 = xhci_virt_to_bus(ctrl, next->trbs);
|
||||
prev->trbs[TRBS_PER_SEGMENT-1].link.segment_ptr =
|
||||
cpu_to_le64(val_64);
|
||||
|
||||
@@ -304,7 +304,8 @@ static struct xhci_segment *xhci_segment_alloc(void)
|
||||
* @param link_trbs flag to indicate whether to link the trbs or NOT
|
||||
* @return pointer to the newly created RING
|
||||
*/
|
||||
-struct xhci_ring *xhci_ring_alloc(unsigned int num_segs, bool link_trbs)
|
||||
+struct xhci_ring *xhci_ring_alloc(struct xhci_ctrl *ctrl, unsigned int num_segs,
|
||||
+ bool link_trbs)
|
||||
{
|
||||
struct xhci_ring *ring;
|
||||
struct xhci_segment *prev;
|
||||
@@ -327,12 +328,12 @@ struct xhci_ring *xhci_ring_alloc(unsigned int num_segs, bool link_trbs)
|
||||
next = xhci_segment_alloc();
|
||||
BUG_ON(!next);
|
||||
|
||||
- xhci_link_segments(prev, next, link_trbs);
|
||||
+ xhci_link_segments(ctrl, prev, next, link_trbs);
|
||||
|
||||
prev = next;
|
||||
num_segs--;
|
||||
}
|
||||
- xhci_link_segments(prev, ring->first_seg, link_trbs);
|
||||
+ xhci_link_segments(ctrl, prev, ring->first_seg, link_trbs);
|
||||
if (link_trbs) {
|
||||
/* See section 4.9.2.1 and 6.4.4.1 */
|
||||
prev->trbs[TRBS_PER_SEGMENT-1].link.control |=
|
||||
@@ -354,6 +355,7 @@ static int xhci_scratchpad_alloc(struct xhci_ctrl *ctrl)
|
||||
struct xhci_hccr *hccr = ctrl->hccr;
|
||||
struct xhci_hcor *hcor = ctrl->hcor;
|
||||
struct xhci_scratchpad *scratchpad;
|
||||
+ uint64_t val_64;
|
||||
int num_sp;
|
||||
uint32_t page_size;
|
||||
void *buf;
|
||||
@@ -371,8 +373,9 @@ static int xhci_scratchpad_alloc(struct xhci_ctrl *ctrl)
|
||||
scratchpad->sp_array = xhci_malloc(num_sp * sizeof(u64));
|
||||
if (!scratchpad->sp_array)
|
||||
goto fail_sp2;
|
||||
- ctrl->dcbaa->dev_context_ptrs[0] =
|
||||
- cpu_to_le64((uintptr_t)scratchpad->sp_array);
|
||||
+
|
||||
+ val_64 = xhci_virt_to_bus(ctrl, scratchpad->sp_array);
|
||||
+ ctrl->dcbaa->dev_context_ptrs[0] = cpu_to_le64(val_64);
|
||||
|
||||
xhci_flush_cache((uintptr_t)&ctrl->dcbaa->dev_context_ptrs[0],
|
||||
sizeof(ctrl->dcbaa->dev_context_ptrs[0]));
|
||||
@@ -393,8 +396,8 @@ static int xhci_scratchpad_alloc(struct xhci_ctrl *ctrl)
|
||||
xhci_flush_cache((uintptr_t)buf, num_sp * page_size);
|
||||
|
||||
for (i = 0; i < num_sp; i++) {
|
||||
- uintptr_t ptr = (uintptr_t)buf + i * page_size;
|
||||
- scratchpad->sp_array[i] = cpu_to_le64(ptr);
|
||||
+ val_64 = xhci_virt_to_bus(ctrl, buf + i * page_size);
|
||||
+ scratchpad->sp_array[i] = cpu_to_le64(val_64);
|
||||
}
|
||||
|
||||
xhci_flush_cache((uintptr_t)scratchpad->sp_array,
|
||||
@@ -484,9 +487,9 @@ int xhci_alloc_virt_device(struct xhci_ctrl *ctrl, unsigned int slot_id)
|
||||
}
|
||||
|
||||
/* Allocate endpoint 0 ring */
|
||||
- virt_dev->eps[0].ring = xhci_ring_alloc(1, true);
|
||||
+ virt_dev->eps[0].ring = xhci_ring_alloc(ctrl, 1, true);
|
||||
|
||||
- byte_64 = virt_to_phys(virt_dev->out_ctx->bytes);
|
||||
+ byte_64 = xhci_virt_to_bus(ctrl, virt_dev->out_ctx->bytes);
|
||||
|
||||
/* Point to output device context in dcbaa. */
|
||||
ctrl->dcbaa->dev_context_ptrs[slot_id] = cpu_to_le64(byte_64);
|
||||
@@ -522,15 +525,15 @@ int xhci_mem_init(struct xhci_ctrl *ctrl, struct xhci_hccr *hccr,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
- val_64 = virt_to_phys(ctrl->dcbaa);
|
||||
+ val_64 = xhci_virt_to_bus(ctrl, ctrl->dcbaa);
|
||||
/* Set the pointer in DCBAA register */
|
||||
xhci_writeq(&hcor->or_dcbaap, val_64);
|
||||
|
||||
/* Command ring control pointer register initialization */
|
||||
- ctrl->cmd_ring = xhci_ring_alloc(1, true);
|
||||
+ ctrl->cmd_ring = xhci_ring_alloc(ctrl, 1, true);
|
||||
|
||||
/* Set the address in the Command Ring Control register */
|
||||
- trb_64 = virt_to_phys(ctrl->cmd_ring->first_seg->trbs);
|
||||
+ trb_64 = xhci_virt_to_bus(ctrl, ctrl->cmd_ring->first_seg->trbs);
|
||||
val_64 = xhci_readq(&hcor->or_crcr);
|
||||
val_64 = (val_64 & (u64) CMD_RING_RSVD_BITS) |
|
||||
(trb_64 & (u64) ~CMD_RING_RSVD_BITS) |
|
||||
@@ -551,7 +554,7 @@ int xhci_mem_init(struct xhci_ctrl *ctrl, struct xhci_hccr *hccr,
|
||||
ctrl->ir_set = &ctrl->run_regs->ir_set[0];
|
||||
|
||||
/* Event ring does not maintain link TRB */
|
||||
- ctrl->event_ring = xhci_ring_alloc(ERST_NUM_SEGS, false);
|
||||
+ ctrl->event_ring = xhci_ring_alloc(ctrl, ERST_NUM_SEGS, false);
|
||||
ctrl->erst.entries = xhci_malloc(sizeof(struct xhci_erst_entry) *
|
||||
ERST_NUM_SEGS);
|
||||
|
||||
@@ -560,8 +563,8 @@ int xhci_mem_init(struct xhci_ctrl *ctrl, struct xhci_hccr *hccr,
|
||||
for (val = 0, seg = ctrl->event_ring->first_seg;
|
||||
val < ERST_NUM_SEGS;
|
||||
val++) {
|
||||
- trb_64 = virt_to_phys(seg->trbs);
|
||||
struct xhci_erst_entry *entry = &ctrl->erst.entries[val];
|
||||
+ trb_64 = xhci_virt_to_bus(ctrl, seg->trbs);
|
||||
entry->seg_addr = cpu_to_le64(trb_64);
|
||||
entry->seg_size = cpu_to_le32(TRBS_PER_SEGMENT);
|
||||
entry->rsvd = 0;
|
||||
@@ -570,7 +573,7 @@ int xhci_mem_init(struct xhci_ctrl *ctrl, struct xhci_hccr *hccr,
|
||||
xhci_flush_cache((uintptr_t)ctrl->erst.entries,
|
||||
ERST_NUM_SEGS * sizeof(struct xhci_erst_entry));
|
||||
|
||||
- deq = virt_to_phys(ctrl->event_ring->dequeue);
|
||||
+ deq = xhci_virt_to_bus(ctrl, ctrl->event_ring->dequeue);
|
||||
|
||||
/* Update HC event ring dequeue pointer */
|
||||
xhci_writeq(&ctrl->ir_set->erst_dequeue,
|
||||
@@ -585,7 +588,7 @@ int xhci_mem_init(struct xhci_ctrl *ctrl, struct xhci_hccr *hccr,
|
||||
/* this is the event ring segment table pointer */
|
||||
val_64 = xhci_readq(&ctrl->ir_set->erst_base);
|
||||
val_64 &= ERST_PTR_MASK;
|
||||
- val_64 |= virt_to_phys(ctrl->erst.entries) & ~ERST_PTR_MASK;
|
||||
+ val_64 |= xhci_virt_to_bus(ctrl, ctrl->erst.entries) & ~ERST_PTR_MASK;
|
||||
|
||||
xhci_writeq(&ctrl->ir_set->erst_base, val_64);
|
||||
|
||||
@@ -848,7 +851,7 @@ void xhci_setup_addressable_virt_dev(struct xhci_ctrl *ctrl,
|
||||
/* EP 0 can handle "burst" sizes of 1, so Max Burst Size field is 0 */
|
||||
ep0_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(0) | ERROR_COUNT(3));
|
||||
|
||||
- trb_64 = virt_to_phys(virt_dev->eps[0].ring->first_seg->trbs);
|
||||
+ trb_64 = xhci_virt_to_bus(ctrl, virt_dev->eps[0].ring->first_seg->trbs);
|
||||
ep0_ctx->deq = cpu_to_le64(trb_64 | virt_dev->eps[0].ring->cycle_state);
|
||||
|
||||
/*
|
||||
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
|
||||
index d708fc928b..6b31ad4398 100644
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -275,10 +275,13 @@ void xhci_queue_command(struct xhci_ctrl *ctrl, u8 *ptr, u32 slot_id,
|
||||
u32 ep_index, trb_type cmd)
|
||||
{
|
||||
u32 fields[4];
|
||||
- u64 val_64 = virt_to_phys(ptr);
|
||||
+ u64 val_64 = 0;
|
||||
|
||||
BUG_ON(prepare_ring(ctrl, ctrl->cmd_ring, EP_STATE_RUNNING));
|
||||
|
||||
+ if (ptr)
|
||||
+ val_64 = xhci_virt_to_bus(ctrl, ptr);
|
||||
+
|
||||
fields[0] = lower_32_bits(val_64);
|
||||
fields[1] = upper_32_bits(val_64);
|
||||
fields[2] = 0;
|
||||
@@ -401,7 +404,7 @@ void xhci_acknowledge_event(struct xhci_ctrl *ctrl)
|
||||
|
||||
/* Inform the hardware */
|
||||
xhci_writeq(&ctrl->ir_set->erst_dequeue,
|
||||
- virt_to_phys(ctrl->event_ring->dequeue) | ERST_EHB);
|
||||
+ xhci_virt_to_bus(ctrl, ctrl->event_ring->dequeue) | ERST_EHB);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -579,7 +582,7 @@ int xhci_bulk_tx(struct usb_device *udev, unsigned long pipe,
|
||||
u64 addr;
|
||||
int ret;
|
||||
u32 trb_fields[4];
|
||||
- u64 val_64 = virt_to_phys(buffer);
|
||||
+ u64 val_64 = xhci_virt_to_bus(ctrl, buffer);
|
||||
void *last_transfer_trb_addr;
|
||||
int available_length;
|
||||
|
||||
@@ -723,7 +726,7 @@ again:
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
- if ((uintptr_t)(le64_to_cpu(event->trans_event.buffer))
|
||||
+ if ((uintptr_t)(le64_to_cpu(xhci_bus_to_virt(ctrl, event->trans_event.buffer)))
|
||||
!= (uintptr_t)last_transfer_trb_addr) {
|
||||
available_length -=
|
||||
(int)EVENT_TRB_LEN(le32_to_cpu(event->trans_event.transfer_len));
|
||||
@@ -884,7 +887,7 @@ int xhci_ctrl_tx(struct usb_device *udev, unsigned long pipe,
|
||||
if (length > 0) {
|
||||
if (req->requesttype & USB_DIR_IN)
|
||||
field |= TRB_DIR_IN;
|
||||
- buf_64 = virt_to_phys(buffer);
|
||||
+ buf_64 = xhci_virt_to_bus(ctrl, buffer);
|
||||
|
||||
trb_fields[0] = lower_32_bits(buf_64);
|
||||
trb_fields[1] = upper_32_bits(buf_64);
|
||||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
||||
index 7080f8fabe..d27ac01c83 100644
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -604,7 +604,7 @@ static int xhci_set_configuration(struct usb_device *udev)
|
||||
ep_ctx[ep_index] = xhci_get_ep_ctx(ctrl, in_ctx, ep_index);
|
||||
|
||||
/* Allocate the ep rings */
|
||||
- virt_dev->eps[ep_index].ring = xhci_ring_alloc(1, true);
|
||||
+ virt_dev->eps[ep_index].ring = xhci_ring_alloc(ctrl, 1, true);
|
||||
if (!virt_dev->eps[ep_index].ring)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -628,7 +628,7 @@ static int xhci_set_configuration(struct usb_device *udev)
|
||||
cpu_to_le32(MAX_BURST(max_burst) |
|
||||
ERROR_COUNT(err_count));
|
||||
|
||||
- trb_64 = virt_to_phys(virt_dev->eps[ep_index].ring->enqueue);
|
||||
+ trb_64 = xhci_virt_to_bus(ctrl, virt_dev->eps[ep_index].ring->enqueue);
|
||||
ep_ctx[ep_index]->deq = cpu_to_le64(trb_64 |
|
||||
virt_dev->eps[ep_index].ring->cycle_state);
|
||||
|
||||
diff --git a/include/usb/xhci.h b/include/usb/xhci.h
|
||||
index e1d382369a..8d95e213b0 100644
|
||||
--- a/include/usb/xhci.h
|
||||
+++ b/include/usb/xhci.h
|
||||
@@ -16,6 +16,7 @@
|
||||
#ifndef HOST_XHCI_H_
|
||||
#define HOST_XHCI_H_
|
||||
|
||||
+#include <phys2bus.h>
|
||||
#include <reset.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/cache.h>
|
||||
@@ -1221,6 +1222,12 @@ struct xhci_ctrl {
|
||||
#define XHCI_MTK_HOST BIT(0)
|
||||
};
|
||||
|
||||
+#if CONFIG_IS_ENABLED(DM_USB)
|
||||
+#define xhci_to_dev(_ctrl) _ctrl->dev
|
||||
+#else
|
||||
+#define xhci_to_dev(_ctrl) NULL
|
||||
+#endif
|
||||
+
|
||||
unsigned long trb_addr(struct xhci_segment *seg, union xhci_trb *trb);
|
||||
struct xhci_input_control_ctx
|
||||
*xhci_get_input_control_ctx(struct xhci_container_ctx *ctx);
|
||||
@@ -1250,7 +1257,8 @@ int xhci_check_maxpacket(struct usb_device *udev);
|
||||
void xhci_flush_cache(uintptr_t addr, u32 type_len);
|
||||
void xhci_inval_cache(uintptr_t addr, u32 type_len);
|
||||
void xhci_cleanup(struct xhci_ctrl *ctrl);
|
||||
-struct xhci_ring *xhci_ring_alloc(unsigned int num_segs, bool link_trbs);
|
||||
+struct xhci_ring *xhci_ring_alloc(struct xhci_ctrl *ctrl, unsigned int num_segs,
|
||||
+ bool link_trbs);
|
||||
int xhci_alloc_virt_device(struct xhci_ctrl *ctrl, unsigned int slot_id);
|
||||
int xhci_mem_init(struct xhci_ctrl *ctrl, struct xhci_hccr *hccr,
|
||||
struct xhci_hcor *hcor);
|
||||
@@ -1278,4 +1286,14 @@ extern struct dm_usb_ops xhci_usb_ops;
|
||||
|
||||
struct xhci_ctrl *xhci_get_ctrl(struct usb_device *udev);
|
||||
|
||||
+static inline dma_addr_t xhci_virt_to_bus(struct xhci_ctrl *ctrl, void *addr)
|
||||
+{
|
||||
+ return dev_phys_to_bus(xhci_to_dev(ctrl), virt_to_phys(addr));
|
||||
+}
|
||||
+
|
||||
+static inline void *xhci_bus_to_virt(struct xhci_ctrl *ctrl, dma_addr_t addr)
|
||||
+{
|
||||
+ return phys_to_virt(dev_bus_to_phys(xhci_to_dev(ctrl), addr));
|
||||
+}
|
||||
+
|
||||
#endif /* HOST_XHCI_H_ */
|
@ -1,82 +0,0 @@
|
||||
From 8c9cce2f60aa7ded50f42c7de363f7d6af91c66a Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:29 +0100
|
||||
Subject: [PATCH] mmc: Introduce mmc_phys_to_bus()/mmc_bus_to_phys()
|
||||
|
||||
This will allow us to use DM variants of phys_to_bus()/bus_to_phys()
|
||||
when relevant.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
drivers/mmc/sdhci.c | 12 +++++++-----
|
||||
include/mmc.h | 6 ++++++
|
||||
2 files changed, 13 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
|
||||
index 0628934312..62e4f53b8b 100644
|
||||
--- a/drivers/mmc/sdhci.c
|
||||
+++ b/drivers/mmc/sdhci.c
|
||||
@@ -14,12 +14,12 @@
|
||||
#include <log.h>
|
||||
#include <malloc.h>
|
||||
#include <mmc.h>
|
||||
+#include <phys2bus.h>
|
||||
#include <sdhci.h>
|
||||
#include <asm/cache.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
-#include <phys2bus.h>
|
||||
|
||||
static void sdhci_reset(struct sdhci_host *host, u8 mask)
|
||||
{
|
||||
@@ -73,6 +73,7 @@ static void sdhci_transfer_pio(struct sdhci_host *host, struct mmc_data *data)
|
||||
static void sdhci_prepare_dma(struct sdhci_host *host, struct mmc_data *data,
|
||||
int *is_aligned, int trans_bytes)
|
||||
{
|
||||
+ dma_addr_t dma_addr;
|
||||
unsigned char ctrl;
|
||||
void *buf;
|
||||
|
||||
@@ -103,8 +104,8 @@ static void sdhci_prepare_dma(struct sdhci_host *host, struct mmc_data *data,
|
||||
mmc_get_dma_dir(data));
|
||||
|
||||
if (host->flags & USE_SDMA) {
|
||||
- sdhci_writel(host, phys_to_bus((ulong)host->start_addr),
|
||||
- SDHCI_DMA_ADDRESS);
|
||||
+ dma_addr = dev_phys_to_bus(mmc_to_dev(host->mmc), host->start_addr);
|
||||
+ sdhci_writel(host, dma_addr, SDHCI_DMA_ADDRESS);
|
||||
}
|
||||
#if CONFIG_IS_ENABLED(MMC_SDHCI_ADMA)
|
||||
else if (host->flags & (USE_ADMA | USE_ADMA64)) {
|
||||
@@ -162,8 +163,9 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data)
|
||||
start_addr &=
|
||||
~(SDHCI_DEFAULT_BOUNDARY_SIZE - 1);
|
||||
start_addr += SDHCI_DEFAULT_BOUNDARY_SIZE;
|
||||
- sdhci_writel(host, phys_to_bus((ulong)start_addr),
|
||||
- SDHCI_DMA_ADDRESS);
|
||||
+ start_addr = dev_phys_to_bus(mmc_to_dev(host->mmc),
|
||||
+ start_addr);
|
||||
+ sdhci_writel(host, start_addr, SDHCI_DMA_ADDRESS);
|
||||
}
|
||||
}
|
||||
if (timeout-- > 0)
|
||||
diff --git a/include/mmc.h b/include/mmc.h
|
||||
index 1d377e0281..c12c7a0b5c 100644
|
||||
--- a/include/mmc.h
|
||||
+++ b/include/mmc.h
|
||||
@@ -736,6 +736,12 @@ struct mmc {
|
||||
u8 hs400_tuning;
|
||||
};
|
||||
|
||||
+#if CONFIG_IS_ENABLED(DM_MMC)
|
||||
+#define mmc_to_dev(_mmc) _mmc->dev
|
||||
+#else
|
||||
+#define mmc_to_dev(_mmc) NULL
|
||||
+#endif
|
||||
+
|
||||
struct mmc_hwpart_conf {
|
||||
struct {
|
||||
uint enh_start; /* in 512-byte sectors */
|
@ -1,53 +0,0 @@
|
||||
From 27d0b40ed0c1f997635ee216cfe199081fb5112e Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:30 +0100
|
||||
Subject: [PATCH] configs: rpi4: Enable DM_DMA across all RPi4 configurations
|
||||
|
||||
The DM_DMA option is needed in order to translate physical address into
|
||||
bus addresses on a per-device basis.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
configs/rpi_4_32b_defconfig | 1 +
|
||||
configs/rpi_4_defconfig | 1 +
|
||||
configs/rpi_arm64_defconfig | 1 +
|
||||
3 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig
|
||||
index 5ddd838fd5..0a5d3ff8cd 100644
|
||||
--- a/configs/rpi_4_32b_defconfig
|
||||
+++ b/configs/rpi_4_32b_defconfig
|
||||
@@ -22,6 +22,7 @@ CONFIG_OF_BOARD=y
|
||||
CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
+CONFIG_DM_DMA=y
|
||||
CONFIG_DFU_MMC=y
|
||||
CONFIG_DM_KEYBOARD=y
|
||||
CONFIG_DM_MMC=y
|
||||
diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig
|
||||
index 2590d0a696..b61cdc05f1 100644
|
||||
--- a/configs/rpi_4_defconfig
|
||||
+++ b/configs/rpi_4_defconfig
|
||||
@@ -22,6 +22,7 @@ CONFIG_OF_BOARD=y
|
||||
CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
+CONFIG_DM_DMA=y
|
||||
CONFIG_DFU_MMC=y
|
||||
CONFIG_DM_KEYBOARD=y
|
||||
CONFIG_DM_MMC=y
|
||||
diff --git a/configs/rpi_arm64_defconfig b/configs/rpi_arm64_defconfig
|
||||
index 2639219a1a..4125a1feba 100644
|
||||
--- a/configs/rpi_arm64_defconfig
|
||||
+++ b/configs/rpi_arm64_defconfig
|
||||
@@ -20,6 +20,7 @@ CONFIG_CMD_FS_UUID=y
|
||||
CONFIG_OF_BOARD=y
|
||||
CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
+CONFIG_DM_DMA=y
|
||||
CONFIG_DM_KEYBOARD=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
@ -1,28 +0,0 @@
|
||||
From c324f9b25039bb271365363f1c4959fcd245797d Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 12 Jan 2021 13:55:31 +0100
|
||||
Subject: [PATCH] video: arm: rpi: Add brcm,bcm2711-hdmi0 compatible
|
||||
|
||||
The 'brcm,bcm2711-hdmi0' compatible string is used on RPi4 instead of
|
||||
'brcm,bcm2835-hdmi' since the IP core was upgraded (now called VC6
|
||||
instead of VC4). This has no functional change as far as u-boot driver
|
||||
is concerned. So simply add the compatible string.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Tested-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
drivers/video/bcm2835.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c
|
||||
index 0888cb0019..51941c4f53 100644
|
||||
--- a/drivers/video/bcm2835.c
|
||||
+++ b/drivers/video/bcm2835.c
|
||||
@@ -52,6 +52,7 @@ static int bcm2835_video_probe(struct udevice *dev)
|
||||
|
||||
static const struct udevice_id bcm2835_video_ids[] = {
|
||||
{ .compatible = "brcm,bcm2835-hdmi" },
|
||||
+ { .compatible = "brcm,bcm2711-hdmi0" },
|
||||
{ .compatible = "brcm,bcm2708-fb" },
|
||||
{ }
|
||||
};
|
@ -1,27 +0,0 @@
|
||||
From 38b6c858e17884d5f4ccfb1a65ce1d5f6819188e Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Thu, 14 Jan 2021 16:49:00 +0100
|
||||
Subject: [PATCH] usb: xhci-pci: Add DM_FLAG_OS_PREPARE flag
|
||||
|
||||
The PCIe bus the controller is connected to might need to be removed
|
||||
prior the handover. Make sure xhci-pci is also removed so as to avoid
|
||||
unexpected timeouts or hangs.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
---
|
||||
drivers/usb/host/xhci-pci.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
|
||||
index 9fb6d2f763..19f8fb4458 100644
|
||||
--- a/drivers/usb/host/xhci-pci.c
|
||||
+++ b/drivers/usb/host/xhci-pci.c
|
||||
@@ -61,7 +61,7 @@ U_BOOT_DRIVER(xhci_pci) = {
|
||||
.ops = &xhci_usb_ops,
|
||||
.platdata_auto_alloc_size = sizeof(struct usb_platdata),
|
||||
.priv_auto_alloc_size = sizeof(struct xhci_ctrl),
|
||||
- .flags = DM_FLAG_ALLOC_PRIV_DMA,
|
||||
+ .flags = DM_FLAG_OS_PREPARE | DM_FLAG_ALLOC_PRIV_DMA,
|
||||
};
|
||||
|
||||
static struct pci_device_id xhci_pci_supported[] = {
|
@ -1,55 +0,0 @@
|
||||
From 9b76a8d285bac34d64d8c544931625bcaa83dfaa Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Thu, 14 Jan 2021 16:49:01 +0100
|
||||
Subject: [PATCH] pci: brcmstb: Cleanup controller state before handover
|
||||
|
||||
Make sure we handover the PCIe controller in a clean state. Some of the
|
||||
devices hanging from the PCIe bus might need to be properly reset
|
||||
through #PERST in order for Linux to be able to initialize them.
|
||||
|
||||
This is specially important in order to properly initialize Raspberry Pi
|
||||
4 B and 400's USB chip.
|
||||
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
---
|
||||
drivers/pci/pcie_brcmstb.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
diff --git a/drivers/pci/pcie_brcmstb.c b/drivers/pci/pcie_brcmstb.c
|
||||
index f6e8ad0d0a..c87a5dce4d 100644
|
||||
--- a/drivers/pci/pcie_brcmstb.c
|
||||
+++ b/drivers/pci/pcie_brcmstb.c
|
||||
@@ -577,6 +577,24 @@ static int brcm_pcie_probe(struct udevice *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int brcm_pcie_remove(struct udevice *dev)
|
||||
+{
|
||||
+ struct brcm_pcie *pcie = dev_get_priv(dev);
|
||||
+ void __iomem *base = pcie->base;
|
||||
+
|
||||
+ /* Assert fundamental reset */
|
||||
+ setbits_le32(base + PCIE_RGR1_SW_INIT_1, RGR1_SW_INIT_1_PERST_MASK);
|
||||
+
|
||||
+ /* Turn off SerDes */
|
||||
+ setbits_le32(base + PCIE_MISC_HARD_PCIE_HARD_DEBUG,
|
||||
+ PCIE_HARD_DEBUG_SERDES_IDDQ_MASK);
|
||||
+
|
||||
+ /* Shutdown bridge */
|
||||
+ setbits_le32(base + PCIE_RGR1_SW_INIT_1, RGR1_SW_INIT_1_INIT_MASK);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int brcm_pcie_ofdata_to_platdata(struct udevice *dev)
|
||||
{
|
||||
struct brcm_pcie *pcie = dev_get_priv(dev);
|
||||
@@ -616,6 +634,8 @@ U_BOOT_DRIVER(pcie_brcm_base) = {
|
||||
.ops = &brcm_pcie_ops,
|
||||
.of_match = brcm_pcie_ids,
|
||||
.probe = brcm_pcie_probe,
|
||||
+ .remove = brcm_pcie_remove,
|
||||
.ofdata_to_platdata = brcm_pcie_ofdata_to_platdata,
|
||||
.priv_auto_alloc_size = sizeof(struct brcm_pcie),
|
||||
+ .flags = DM_FLAG_OS_PREPARE,
|
||||
};
|
@ -1,31 +0,0 @@
|
||||
From f3d0d5e548431be08036b4671d750f73a1a258d4 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Wed, 27 Jan 2021 10:42:30 +0100
|
||||
Subject: [PATCH] fs: btrfs: Select SHA256 in Kconfig
|
||||
|
||||
Since commit 565a4147d17a ("fs: btrfs: Add more checksum algorithms")
|
||||
btrfs uses the sha256 checksum algorithm. But Kconfig lacks to select
|
||||
it. This leads to compilation errors:
|
||||
fs/built-in.o: In function `hash_sha256':
|
||||
fs/btrfs/crypto/hash.c:25: undefined reference to `sha256_starts'
|
||||
fs/btrfs/crypto/hash.c:26: undefined reference to `sha256_update'
|
||||
fs/btrfs/crypto/hash.c:27: undefined reference to `sha256_finish'
|
||||
|
||||
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
Reviewed-by: Qu Wenruo <wqu@suse.com>
|
||||
---
|
||||
fs/btrfs/Kconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/fs/btrfs/Kconfig b/fs/btrfs/Kconfig
|
||||
index f302b1fbef..2a32f42ad1 100644
|
||||
--- a/fs/btrfs/Kconfig
|
||||
+++ b/fs/btrfs/Kconfig
|
||||
@@ -4,6 +4,7 @@ config FS_BTRFS
|
||||
select LZO
|
||||
select ZSTD
|
||||
select RBTREE
|
||||
+ select SHA256
|
||||
help
|
||||
This provides a single-device read-only BTRFS support. BTRFS is a
|
||||
next-generation Linux file system based on the copy-on-write
|
@ -1,148 +0,0 @@
|
||||
From 3ed82e218b5aabdc5956c5ad4a70d609034a6a2d Mon Sep 17 00:00:00 2001
|
||||
From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Date: Sat, 16 Jan 2021 17:28:04 +0200
|
||||
Subject: [PATCH] efi_loader: Avoid emitting efi_var_buf to .GOT
|
||||
|
||||
Atish reports that on RISC-V, accessing the EFI variables causes
|
||||
a kernel panic. An objdump of the file verifies that, since the
|
||||
global pointer for efi_var_buf ends up in .GOT section which is
|
||||
not mapped in virtual address space for Linux.
|
||||
|
||||
<snip of efi_var_mem_find>
|
||||
|
||||
0000000000000084 <efi_var_mem_find>:
|
||||
84: 715d addi sp,sp,-80
|
||||
|
||||
* objdump -dr
|
||||
0000000000000086 <.LCFI2>:
|
||||
86: e0a2 sd s0,64(sp)
|
||||
88: fc26 sd s1,56(sp)
|
||||
8a: e486 sd ra,72(sp)
|
||||
8c: f84a sd s2,48(sp)
|
||||
8e: f44e sd s3,40(sp)
|
||||
90: f052 sd s4,32(sp)
|
||||
92: ec56 sd s5,24(sp)
|
||||
94: 00000497 auipc s1,0x0
|
||||
94: R_RISCV_GOT_HI20 efi_var_buf
|
||||
98: 0004b483 ld s1,0(s1) # 94 <.LCFI2+0xe>
|
||||
98: R_RISCV_PCREL_LO12_I .L0
|
||||
98: R_RISCV_RELAX *ABS*
|
||||
|
||||
* objdump -t
|
||||
0000000000000084 g F .text.efi_runtime 00000000000000b8 efi_var_mem_find
|
||||
|
||||
With the patch applied:
|
||||
|
||||
* objdump -dr
|
||||
0000000000000086 <.LCFI2>:
|
||||
86: e0a2 sd s0,64(sp)
|
||||
88: fc26 sd s1,56(sp)
|
||||
8a: e486 sd ra,72(sp)
|
||||
8c: f84a sd s2,48(sp)
|
||||
8e: f44e sd s3,40(sp)
|
||||
90: f052 sd s4,32(sp)
|
||||
92: ec56 sd s5,24(sp)
|
||||
94: 00000497 auipc s1,0x0
|
||||
94: R_RISCV_PCREL_HI20 .LANCHOR0
|
||||
94: R_RISCV_RELAX *ABS*
|
||||
98: 00048493 mv s1,s1
|
||||
98: R_RISCV_PCREL_LO12_I .L0
|
||||
98: R_RISCV_RELAX *ABS*
|
||||
|
||||
* objdump -t
|
||||
0000000000000008 l O .data.efi_runtime 0000000000000008 efi_var_buf
|
||||
|
||||
On arm64 this works, because there's no .GOT entries for this
|
||||
and everything is converted to relative references.
|
||||
|
||||
* objdump -dr (identical pre-post patch, only the new function shows up)
|
||||
00000000000000b4 <efi_var_mem_find>:
|
||||
b4: aa0003ee mov x14, x0
|
||||
b8: 9000000a adrp x10, 0 <efi_var_mem_compare>
|
||||
b8: R_AARCH64_ADR_PREL_PG_HI21 .data.efi_runtime
|
||||
bc: 91000140 add x0, x10, #0x0
|
||||
bc: R_AARCH64_ADD_ABS_LO12_NC .data.efi_runtime
|
||||
c0: aa0103ed mov x13, x1
|
||||
c4: 79400021 ldrh w1, [x1]
|
||||
c8: aa0203eb mov x11, x2
|
||||
cc: f9400400 ldr x0, [x0, #8]
|
||||
d0: b940100c ldr w12, [x0, #16]
|
||||
d4: 8b0c000c add x12, x0, x12
|
||||
|
||||
So let's switch efi_var_buf to static and create a helper function for
|
||||
anyone that needs to update it.
|
||||
|
||||
Fixes: e01aed47d6a0 ("efi_loader: Enable run-time variable support for tee based variables")
|
||||
Reported-by: Atish Patra <atishp@atishpatra.org>
|
||||
Tested-by: Atish Patra <atish.patra@wdc.com>
|
||||
Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
||||
(cherry picked from commit 53e54bf50d285597c1553cdf2bd0e646fcd4dd60)
|
||||
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
---
|
||||
include/efi_variable.h | 11 +++++++++++
|
||||
lib/efi_loader/efi_var_mem.c | 13 ++++++++++++-
|
||||
lib/efi_loader/efi_variable_tee.c | 2 +-
|
||||
3 files changed, 24 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/efi_variable.h b/include/efi_variable.h
|
||||
index bf5076233e..4623a64142 100644
|
||||
--- a/include/efi_variable.h
|
||||
+++ b/include/efi_variable.h
|
||||
@@ -306,4 +306,15 @@ efi_status_t __efi_runtime EFIAPI
|
||||
efi_get_next_variable_name_runtime(efi_uintn_t *variable_name_size,
|
||||
u16 *variable_name, efi_guid_t *guid);
|
||||
|
||||
+/**
|
||||
+ * efi_var_buf_update() - udpate memory buffer for variables
|
||||
+ *
|
||||
+ * @var_buf: source buffer
|
||||
+ *
|
||||
+ * This function copies to the memory buffer for UEFI variables. Call this
|
||||
+ * function in ExitBootServices() if memory backed variables are only used
|
||||
+ * at runtime to fill the buffer.
|
||||
+ */
|
||||
+void efi_var_buf_update(struct efi_var_file *var_buf);
|
||||
+
|
||||
#endif
|
||||
diff --git a/lib/efi_loader/efi_var_mem.c b/lib/efi_loader/efi_var_mem.c
|
||||
index d155f25f60..3d335a8274 100644
|
||||
--- a/lib/efi_loader/efi_var_mem.c
|
||||
+++ b/lib/efi_loader/efi_var_mem.c
|
||||
@@ -10,7 +10,13 @@
|
||||
#include <efi_variable.h>
|
||||
#include <u-boot/crc.h>
|
||||
|
||||
-struct efi_var_file __efi_runtime_data *efi_var_buf;
|
||||
+/*
|
||||
+ * The variables efi_var_file and efi_var_entry must be static to avoid
|
||||
+ * referencing them via the global offset table (section .got). The GOT
|
||||
+ * is neither mapped as EfiRuntimeServicesData nor do we support its
|
||||
+ * relocation during SetVirtualAddressMap().
|
||||
+ */
|
||||
+static struct efi_var_file __efi_runtime_data *efi_var_buf;
|
||||
static struct efi_var_entry __efi_runtime_data *efi_current_var;
|
||||
|
||||
/**
|
||||
@@ -339,3 +345,8 @@ efi_get_next_variable_name_mem(efi_uintn_t *variable_name_size,
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
+
|
||||
+void efi_var_buf_update(struct efi_var_file *var_buf)
|
||||
+{
|
||||
+ memcpy(efi_var_buf, var_buf, EFI_VAR_BUF_SIZE);
|
||||
+}
|
||||
diff --git a/lib/efi_loader/efi_variable_tee.c b/lib/efi_loader/efi_variable_tee.c
|
||||
index b8808fdeca..51920bcb51 100644
|
||||
--- a/lib/efi_loader/efi_variable_tee.c
|
||||
+++ b/lib/efi_loader/efi_variable_tee.c
|
||||
@@ -702,7 +702,7 @@ void efi_variables_boot_exit_notify(void)
|
||||
if (ret != EFI_SUCCESS)
|
||||
log_err("Can't populate EFI variables. No runtime variables will be available\n");
|
||||
else
|
||||
- memcpy(efi_var_buf, var_buf, len);
|
||||
+ efi_var_buf_update(var_buf);
|
||||
free(var_buf);
|
||||
|
||||
/* Update runtime service table */
|
@ -1,23 +0,0 @@
|
||||
From b35caa4e303fa4ad75fe55e803c5f7414b301d78 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Tue, 16 Feb 2021 20:54:07 +0100
|
||||
Subject: [PATCH] configs: BPI-R2: Disable EFI Grub workaround
|
||||
|
||||
The EFI Grub workaround on BananaPi R2 slows down the boot process to
|
||||
the point, that the watchdog will trigger a reboot before the kernel can
|
||||
reset it. Fix this by disabeling the workaround.
|
||||
|
||||
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
---
|
||||
configs/mt7623n_bpir2_defconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/configs/mt7623n_bpir2_defconfig b/configs/mt7623n_bpir2_defconfig
|
||||
index d36ff560cf..fb20cb1832 100644
|
||||
--- a/configs/mt7623n_bpir2_defconfig
|
||||
+++ b/configs/mt7623n_bpir2_defconfig
|
||||
@@ -53,3 +53,4 @@ CONFIG_TIMER=y
|
||||
CONFIG_MTK_TIMER=y
|
||||
CONFIG_WDT_MTK=y
|
||||
CONFIG_LZMA=y
|
||||
+# CONFIG_EFI_GRUB_ARM32_WORKAROUND is not set
|
@ -1,23 +0,0 @@
|
||||
From 989046a0aac8e7cb3db18e3cbc8a1aac82b82079 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Tue, 16 Feb 2021 20:54:08 +0100
|
||||
Subject: [PATCH] configs: RPi2: Disable EFI Grub workaround
|
||||
|
||||
The EFI Grub workaround isn't needed with Grub version 2.04 or higher.
|
||||
This version was published over a year ago, so disable the workaround
|
||||
to reduce boot time.
|
||||
|
||||
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
---
|
||||
configs/rpi_2_defconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/configs/rpi_2_defconfig b/configs/rpi_2_defconfig
|
||||
index e546c3e7be..219c61b1f5 100644
|
||||
--- a/configs/rpi_2_defconfig
|
||||
+++ b/configs/rpi_2_defconfig
|
||||
@@ -42,3 +42,4 @@ CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_CONSOLE_SCROLL_LINES=10
|
||||
CONFIG_PHYS_TO_BUS=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
+# CONFIG_EFI_GRUB_ARM32_WORKAROUND is not set
|
@ -1,28 +0,0 @@
|
||||
From 62b45b6d77924c396a59caac252169ccf7ef525a Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <mbrugger@suse.com>
|
||||
Date: Wed, 17 Mar 2021 12:43:03 +0100
|
||||
Subject: [PATCH] smbios: Fix table whit no string is present
|
||||
|
||||
When no string is present a table has to end with two \0 bytes.
|
||||
Take this into account. This is a downstream fix.
|
||||
|
||||
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
||||
---
|
||||
lib/smbios.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/lib/smbios.c b/lib/smbios.c
|
||||
index 485a812c77..c68d19e12b 100644
|
||||
--- a/lib/smbios.c
|
||||
+++ b/lib/smbios.c
|
||||
@@ -105,6 +105,10 @@ static int smbios_string_table_len(char *start)
|
||||
len += i;
|
||||
}
|
||||
|
||||
+ /* A table without a string has to end with \0\0 */
|
||||
+ if (len == 0)
|
||||
+ return 2;
|
||||
+
|
||||
return len + 1;
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b407e1510a74e863b8b5cb42a24625344f0e0c2fc7582d8c866bd899367d0454
|
||||
size 16375990
|
Binary file not shown.
3
u-boot-2021.04.tar.bz2
Normal file
3
u-boot-2021.04.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0d438b1bb5cceb57a18ea2de4a0d51f7be5b05b98717df05938636e0aadfe11a
|
||||
size 16673334
|
BIN
u-boot-2021.04.tar.bz2.sig
Normal file
BIN
u-boot-2021.04.tar.bz2.sig
Normal file
Binary file not shown.
@ -1,3 +1,52 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Apr 6 08:00:08 UTC 2021 - Guillaume GARDET <guillaume.gardet@opensuse.org>
|
||||
|
||||
- mx53loco now uses u-boot-dtb.imx instead of u-boot.imx
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Apr 6 07:22:01 UTC 2021 - Guillaume GARDET <guillaume.gardet@opensuse.org>
|
||||
|
||||
- Update to 2021.04
|
||||
- Patch queue updated from https://github.com/openSUSE/u-boot.git tumbleweed-2021.04
|
||||
* Patches dropped:
|
||||
0006-boo-1123170-Remove-ubifs-support-fr.patch
|
||||
0007-boo-1144161-Remove-nand-mtd-spi-dfu.patch
|
||||
0008-Kconfig-add-btrfs-to-distro-boot.patch
|
||||
0009-configs-Re-sync-with-CONFIG_DISTRO_.patch
|
||||
0010-configs-am335x_evm-disable-BTRFS.patch
|
||||
0011-sunxi-dts-OrangePi-Zero-Add-SPI-ali.patch
|
||||
0012-sunxi-dts-OrangePi-Zero-Enable-SPI-.patch
|
||||
0013-sunxi-Enable-SPI-support-on-Orange-.patch
|
||||
0014-Disable-CONFIG_CMD_BTRFS-in-xilinx_.patch
|
||||
0015-rpi-Add-identifier-for-the-new-RPi4.patch
|
||||
0016-rpi-Add-identifier-for-the-new-CM4.patch
|
||||
0017-pci-pcie-brcmstb-Fix-inbound-window.patch
|
||||
0018-dm-Introduce-xxx_get_dma_range.patch
|
||||
0019-dm-test-Add-test-case-for-dev_get_d.patch
|
||||
0020-dm-Introduce-DMA-constraints-into-t.patch
|
||||
0021-dm-test-Add-test-case-for-dev-dma_o.patch
|
||||
0022-dm-Introduce-dev_phys_to_bus-dev_bu.patch
|
||||
0023-dm-test-Add-test-case-for-dev_phys_.patch
|
||||
0024-xhci-translate-virtual-addresses-in.patch
|
||||
0025-mmc-Introduce-mmc_phys_to_bus-mmc_b.patch
|
||||
0026-configs-rpi4-Enable-DM_DMA-across-a.patch
|
||||
0027-video-arm-rpi-Add-brcm-bcm2711-hdmi.patch
|
||||
0028-usb-xhci-pci-Add-DM_FLAG_OS_PREPARE.patch
|
||||
0029-pci-brcmstb-Cleanup-controller-stat.patch
|
||||
0030-fs-btrfs-Select-SHA256-in-Kconfig.patch
|
||||
0031-efi_loader-Avoid-emitting-efi_var_b.patch
|
||||
0032-configs-BPI-R2-Disable-EFI-Grub-wor.patch
|
||||
0033-configs-RPi2-Disable-EFI-Grub-worka.patch
|
||||
0034-smbios-Fix-table-whit-no-string-is-.patch
|
||||
* Patches added:
|
||||
0006-Kconfig-add-btrfs-to-distro-boot.patch
|
||||
0007-configs-Re-sync-with-CONFIG_DISTRO_.patch
|
||||
0008-sunxi-dts-OrangePi-Zero-Add-SPI-ali.patch
|
||||
0009-sunxi-dts-OrangePi-Zero-Enable-SPI-.patch
|
||||
0010-sunxi-Enable-SPI-support-on-Orange-.patch
|
||||
0011-Disable-CONFIG_CMD_BTRFS-in-xilinx_.patch
|
||||
0012-smbios-Fix-table-when-no-string-is-.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Mar 17 11:46:02 UTC 2021 - Matthias Brugger <mbrugger@suse.com>
|
||||
|
||||
|
46
u-boot.spec
46
u-boot.spec
@ -118,11 +118,7 @@
|
||||
%define is_armv7 1
|
||||
%define binext .img
|
||||
%endif
|
||||
%if "%target" == "mx53loco"
|
||||
%define is_armv7 1
|
||||
%define binext .imx
|
||||
%endif
|
||||
%if "%target" == "mx6qsabrelite"
|
||||
%if "%target" == "mx53loco" || "%target" == "mx6qsabrelite"
|
||||
%define is_armv7 1
|
||||
%define binext -dtb.imx
|
||||
%endif
|
||||
@ -176,7 +172,7 @@
|
||||
%define is_ppc 1
|
||||
%endif
|
||||
# archive_version differs from version for RC version only
|
||||
%define archive_version 2021.01
|
||||
%define archive_version 2021.04
|
||||
%if "%{target}" == ""
|
||||
ExclusiveArch: do_not_build
|
||||
%else
|
||||
@ -212,7 +208,7 @@ ExclusiveArch: do_not_build
|
||||
%else
|
||||
%bcond_with uboot_atf
|
||||
%endif
|
||||
Version: 2021.01
|
||||
Version: 2021.04
|
||||
Release: 0
|
||||
Summary: The U-Boot firmware for the %target platform
|
||||
License: GPL-2.0-only
|
||||
@ -229,35 +225,13 @@ Patch0002: 0002-Revert-Revert-omap3-Use-raw-SPL-by-.patch
|
||||
Patch0003: 0003-rpi-Use-firmware-provided-device-tr.patch
|
||||
Patch0004: 0004-Temp-workaround-for-Chromebook-snow.patch
|
||||
Patch0005: 0005-tools-zynqmpbif-Add-support-for-loa.patch
|
||||
Patch0006: 0006-boo-1123170-Remove-ubifs-support-fr.patch
|
||||
Patch0007: 0007-boo-1144161-Remove-nand-mtd-spi-dfu.patch
|
||||
Patch0008: 0008-Kconfig-add-btrfs-to-distro-boot.patch
|
||||
Patch0009: 0009-configs-Re-sync-with-CONFIG_DISTRO_.patch
|
||||
Patch0010: 0010-configs-am335x_evm-disable-BTRFS.patch
|
||||
Patch0011: 0011-sunxi-dts-OrangePi-Zero-Add-SPI-ali.patch
|
||||
Patch0012: 0012-sunxi-dts-OrangePi-Zero-Enable-SPI-.patch
|
||||
Patch0013: 0013-sunxi-Enable-SPI-support-on-Orange-.patch
|
||||
Patch0014: 0014-Disable-CONFIG_CMD_BTRFS-in-xilinx_.patch
|
||||
Patch0015: 0015-rpi-Add-identifier-for-the-new-RPi4.patch
|
||||
Patch0016: 0016-rpi-Add-identifier-for-the-new-CM4.patch
|
||||
Patch0017: 0017-pci-pcie-brcmstb-Fix-inbound-window.patch
|
||||
Patch0018: 0018-dm-Introduce-xxx_get_dma_range.patch
|
||||
Patch0019: 0019-dm-test-Add-test-case-for-dev_get_d.patch
|
||||
Patch0020: 0020-dm-Introduce-DMA-constraints-into-t.patch
|
||||
Patch0021: 0021-dm-test-Add-test-case-for-dev-dma_o.patch
|
||||
Patch0022: 0022-dm-Introduce-dev_phys_to_bus-dev_bu.patch
|
||||
Patch0023: 0023-dm-test-Add-test-case-for-dev_phys_.patch
|
||||
Patch0024: 0024-xhci-translate-virtual-addresses-in.patch
|
||||
Patch0025: 0025-mmc-Introduce-mmc_phys_to_bus-mmc_b.patch
|
||||
Patch0026: 0026-configs-rpi4-Enable-DM_DMA-across-a.patch
|
||||
Patch0027: 0027-video-arm-rpi-Add-brcm-bcm2711-hdmi.patch
|
||||
Patch0028: 0028-usb-xhci-pci-Add-DM_FLAG_OS_PREPARE.patch
|
||||
Patch0029: 0029-pci-brcmstb-Cleanup-controller-stat.patch
|
||||
Patch0030: 0030-fs-btrfs-Select-SHA256-in-Kconfig.patch
|
||||
Patch0031: 0031-efi_loader-Avoid-emitting-efi_var_b.patch
|
||||
Patch0032: 0032-configs-BPI-R2-Disable-EFI-Grub-wor.patch
|
||||
Patch0033: 0033-configs-RPi2-Disable-EFI-Grub-worka.patch
|
||||
Patch0034: 0034-smbios-Fix-table-whit-no-string-is-.patch
|
||||
Patch0006: 0006-Kconfig-add-btrfs-to-distro-boot.patch
|
||||
Patch0007: 0007-configs-Re-sync-with-CONFIG_DISTRO_.patch
|
||||
Patch0008: 0008-sunxi-dts-OrangePi-Zero-Add-SPI-ali.patch
|
||||
Patch0009: 0009-sunxi-dts-OrangePi-Zero-Enable-SPI-.patch
|
||||
Patch0010: 0010-sunxi-Enable-SPI-support-on-Orange-.patch
|
||||
Patch0011: 0011-Disable-CONFIG_CMD_BTRFS-in-xilinx_.patch
|
||||
Patch0012: 0012-smbios-Fix-table-when-no-string-is-.patch
|
||||
# Patches: end
|
||||
BuildRequires: bc
|
||||
BuildRequires: bison
|
||||
|
@ -13,8 +13,8 @@ set -e
|
||||
|
||||
GIT_TREE=https://github.com/openSUSE/u-boot.git
|
||||
GIT_LOCAL_TREE=~/src/opensuse/u-boot
|
||||
GIT_BRANCH=tumbleweed-2021.01
|
||||
GIT_UPSTREAM_TAG=v2021.01
|
||||
GIT_BRANCH=tumbleweed-2021.04
|
||||
GIT_UPSTREAM_TAG=v2021.04
|
||||
GIT_DIR=`mktemp -d -p /dev/shm`
|
||||
CMP_DIR=`mktemp -d -p /dev/shm`
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user