[U-Boot] blk: Rework guard around part_init call

Message ID 1544016218-32640-1-git-send-email-trini@konsulko.com
State Accepted
Delegated to: Tom Rini
Headers show
Series
  • [U-Boot] blk: Rework guard around part_init call
Related show

Commit Message

Tom Rini Dec. 5, 2018, 1:23 p.m.
The function part_init() will only be built when we have both
CONFIG_PARTITIONS and CONFIG_HAVE_BLOCK_DEVICE set.  Protect the call to
this function with both of these tests now.

Cc: Simon Glass <sjg@chromium.org>
Cc: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: York Sun <york.sun@nxp.com>
Cc: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
Cc: Mingkai Hu <mingkai.hu@nxp.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Marek Behún <marek.behun@nic.cz>
Cc: Vanessa Maegima <vanessa.maegima@nxp.com>
Cc: Eugen Hristev <eugen.hristev@microchip.com>
Cc: Adam Ford <aford173@gmail.com>
Cc: Jagan Teki <jagan@amarulasolutions.com>
Cc: Tom Warren <twarren@nvidia.com>
Cc: Stephen Warren <swarren@nvidia.com>
Cc: Vitaly Andrianov <vitalya@ti.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
---
Changes in v2:
- rockchip: evb-rk3036 and kylin-rk3036 are both targets that do not use
  CONFIG_SPL_FRAMEWORK but also do not fall into the legacy PowerPC SPL
  case.  In order to avoid fail to builds on these platforms they must
  now turn off CONFIG_SPL_BLK, which they weren't using before, it was
  being discarded at link time.
- Re-work common/spl/Kconfig and then various Makefiles to slightly
  clear up the logic of when we do and don't need both disk/part.o and
  drivers/block/blk-uclass.o.  This is in fact not the greatest but it's
  all I could come up with to cover all the cases we have today.
- Because of the above, add a note to the CONFIG_BLK migration to note
  that once we are complete there we need to revisit the symbols I used
  above as once that migration is done we should be able to rely on just
  BLK and maybe PARTITIONS.
- Actually build-test the world and confirm the overall results are
  fairly sane.  This results in pushing a few platforms that are using
  SPL and DM into using SPL_BLK now.
- This also results in a number of 64bit rockchip, nxp and zynqmp
  platforms that have been enabling CONFIG_SPL_DOS_PARTITION /
  CONFIG_SPL_ISO_PARTITION now linking it.
- On the 32bit ARM side, some Marvell, i.MX, ateml, TI, Tegra, zynq and
  rockchip platforms do the same.

The full build log can be seen at:
https://gist.github.com/trini/e3e73afec629bbda2625102120c2a9db
---
 common/spl/Kconfig             | 3 +++
 configs/evb-rk3036_defconfig   | 1 +
 configs/kylin-rk3036_defconfig | 1 +
 doc/driver-model/MIGRATION.txt | 4 +++-
 drivers/Makefile               | 3 +--
 drivers/block/Makefile         | 2 ++
 drivers/block/blk-uclass.c     | 2 +-
 scripts/Makefile.spl           | 4 +++-
 8 files changed, 15 insertions(+), 5 deletions(-)

Comments

Simon Glass Dec. 5, 2018, 1:55 p.m. | #1
On Wed, 5 Dec 2018 at 06:23, Tom Rini <trini@konsulko.com> wrote:
>
> The function part_init() will only be built when we have both
> CONFIG_PARTITIONS and CONFIG_HAVE_BLOCK_DEVICE set.  Protect the call to
> this function with both of these tests now.
>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
> Cc: Michal Simek <michal.simek@xilinx.com>
> Cc: York Sun <york.sun@nxp.com>
> Cc: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
> Cc: Mingkai Hu <mingkai.hu@nxp.com>
> Cc: Stefan Roese <sr@denx.de>
> Cc: Marek Behún <marek.behun@nic.cz>
> Cc: Vanessa Maegima <vanessa.maegima@nxp.com>
> Cc: Eugen Hristev <eugen.hristev@microchip.com>
> Cc: Adam Ford <aford173@gmail.com>
> Cc: Jagan Teki <jagan@amarulasolutions.com>
> Cc: Tom Warren <twarren@nvidia.com>
> Cc: Stephen Warren <swarren@nvidia.com>
> Cc: Vitaly Andrianov <vitalya@ti.com>
> Signed-off-by: Tom Rini <trini@konsulko.com>
> ---
> Changes in v2:
> - rockchip: evb-rk3036 and kylin-rk3036 are both targets that do not use
>   CONFIG_SPL_FRAMEWORK but also do not fall into the legacy PowerPC SPL
>   case.  In order to avoid fail to builds on these platforms they must
>   now turn off CONFIG_SPL_BLK, which they weren't using before, it was
>   being discarded at link time.
> - Re-work common/spl/Kconfig and then various Makefiles to slightly
>   clear up the logic of when we do and don't need both disk/part.o and
>   drivers/block/blk-uclass.o.  This is in fact not the greatest but it's
>   all I could come up with to cover all the cases we have today.
> - Because of the above, add a note to the CONFIG_BLK migration to note
>   that once we are complete there we need to revisit the symbols I used
>   above as once that migration is done we should be able to rely on just
>   BLK and maybe PARTITIONS.

Indeed.

> - Actually build-test the world and confirm the overall results are
>   fairly sane.  This results in pushing a few platforms that are using
>   SPL and DM into using SPL_BLK now.
> - This also results in a number of 64bit rockchip, nxp and zynqmp
>   platforms that have been enabling CONFIG_SPL_DOS_PARTITION /
>   CONFIG_SPL_ISO_PARTITION now linking it.
> - On the 32bit ARM side, some Marvell, i.MX, ateml, TI, Tegra, zynq and
>   rockchip platforms do the same.
>
> The full build log can be seen at:
> https://gist.github.com/trini/e3e73afec629bbda2625102120c2a9db
> ---
>  common/spl/Kconfig             | 3 +++
>  configs/evb-rk3036_defconfig   | 1 +
>  configs/kylin-rk3036_defconfig | 1 +
>  doc/driver-model/MIGRATION.txt | 4 +++-
>  drivers/Makefile               | 3 +--
>  drivers/block/Makefile         | 2 ++
>  drivers/block/blk-uclass.c     | 2 +-
>  scripts/Makefile.spl           | 4 +++-
>  8 files changed, 15 insertions(+), 5 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
Tom Rini Dec. 13, 2018, 12:47 a.m. | #2
On Wed, Dec 05, 2018 at 08:23:38AM -0500, Tom Rini wrote:

> The function part_init() will only be built when we have both
> CONFIG_PARTITIONS and CONFIG_HAVE_BLOCK_DEVICE set.  Protect the call to
> this function with both of these tests now.
> 
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
> Cc: Michal Simek <michal.simek@xilinx.com>
> Cc: York Sun <york.sun@nxp.com>
> Cc: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
> Cc: Mingkai Hu <mingkai.hu@nxp.com>
> Cc: Stefan Roese <sr@denx.de>
> Cc: Marek Behún <marek.behun@nic.cz>
> Cc: Vanessa Maegima <vanessa.maegima@nxp.com>
> Cc: Eugen Hristev <eugen.hristev@microchip.com>
> Cc: Adam Ford <aford173@gmail.com>
> Cc: Jagan Teki <jagan@amarulasolutions.com>
> Cc: Tom Warren <twarren@nvidia.com>
> Cc: Stephen Warren <swarren@nvidia.com>
> Cc: Vitaly Andrianov <vitalya@ti.com>
> Signed-off-by: Tom Rini <trini@konsulko.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

Patch

diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index 0ddbffc7d1c6..cab7220c9ace 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -449,6 +449,7 @@  config SPL_LIBCOMMON_SUPPORT
 
 config SPL_LIBDISK_SUPPORT
 	bool "Support disk partitions"
+	select PARTITIONS
 	help
 	  Enable support for disk partitions within SPL. 'Disk' is something
 	  of a misnomer as it includes non-spinning media such as flash (as
@@ -480,6 +481,7 @@  config SPL_DM_MAILBOX
 config SPL_MMC_SUPPORT
 	bool "Support MMC"
 	depends on MMC
+	select HAVE_BLOCK_DEVICE
 	help
 	  Enable support for MMC (Multimedia Card) within SPL. This enables
 	  the MMC protocol implementation and allows any enabled drivers to
@@ -754,6 +756,7 @@  config SPL_THERMAL
 
 config SPL_USB_HOST_SUPPORT
 	bool "Support USB host drivers"
+	select HAVE_BLOCK_DEVICE
 	help
 	  Enable access to USB (Universal Serial Bus) host devices so that
 	  SPL can load U-Boot from a connected USB peripheral, such as a USB
diff --git a/configs/evb-rk3036_defconfig b/configs/evb-rk3036_defconfig
index 787d6f95c1bb..439e69138636 100644
--- a/configs/evb-rk3036_defconfig
+++ b/configs/evb-rk3036_defconfig
@@ -32,6 +32,7 @@  CONFIG_SPL_PARTITION_UUIDS=y
 CONFIG_DEFAULT_DEVICE_TREE="rk3036-sdk"
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
+# CONFIG_SPL_BLK is not set
 CONFIG_CLK=y
 CONFIG_FASTBOOT_FLASH=y
 CONFIG_FASTBOOT_FLASH_MMC_DEV=0
diff --git a/configs/kylin-rk3036_defconfig b/configs/kylin-rk3036_defconfig
index eb305e02aaa5..765003095ca1 100644
--- a/configs/kylin-rk3036_defconfig
+++ b/configs/kylin-rk3036_defconfig
@@ -30,6 +30,7 @@  CONFIG_DEFAULT_DEVICE_TREE="rk3036-sdk"
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
+# CONFIG_SPL_BLK is not set
 CONFIG_CLK=y
 CONFIG_FASTBOOT_FLASH=y
 CONFIG_FASTBOOT_FLASH_MMC_DEV=0
diff --git a/doc/driver-model/MIGRATION.txt b/doc/driver-model/MIGRATION.txt
index 6b691338b4e7..dce4aa3e1dc9 100644
--- a/doc/driver-model/MIGRATION.txt
+++ b/doc/driver-model/MIGRATION.txt
@@ -44,7 +44,9 @@  Deadline: 2019.07
 In concert with maintainers migrating their block device usage to the
 appropriate DM driver, CONFIG_BLK needs to be set as well.  The final deadline
 here coincides with the final deadline for migration of the various block
-subsystems.
+subsystems.  At this point we will be able to audit and correct the logic in
+Kconfig around using CONFIG_PARTITIONS and CONFIG_HAVE_BLOCK_DEVICE and make
+use of CONFIG_BLK / CONFIG_SPL_BLK as needed.
 
 CONFIG_DM_SPI
 CONFIG_DM_SPI_FLASH
diff --git a/drivers/Makefile b/drivers/Makefile
index 55de10926ef4..388d93a069e4 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -53,8 +53,7 @@  obj-$(CONFIG_SPL_WATCHDOG_SUPPORT) += watchdog/
 obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += usb/host/
 obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
 obj-$(CONFIG_SPL_SATA_SUPPORT) += ata/ scsi/
-obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += block/
-obj-$(CONFIG_SPL_MMC_SUPPORT) += block/
+obj-$(CONFIG_HAVE_BLOCK_DEVICE) += block/
 obj-$(CONFIG_SPL_FPGA_SUPPORT) += fpga/
 obj-$(CONFIG_SPL_THERMAL) += thermal/
 
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index 055d42f7d4af..3feb0aa997df 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -9,6 +9,8 @@  ifndef CONFIG_$(SPL_)BLK
 obj-y += blk_legacy.o
 endif
 
+ifndef CONFIG_SPL_BUILD
 obj-$(CONFIG_IDE) += ide.o
+endif
 obj-$(CONFIG_SANDBOX) += sandbox.o
 obj-$(CONFIG_$(SPL_TPL_)BLOCK_CACHE) += blkcache.o
diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
index 65a766e586d6..baaf431e5e0c 100644
--- a/drivers/block/blk-uclass.c
+++ b/drivers/block/blk-uclass.c
@@ -639,7 +639,7 @@  int blk_unbind_all(int if_type)
 
 static int blk_post_probe(struct udevice *dev)
 {
-#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
+#if defined(CONFIG_PARTITIONS) && defined(CONFIG_HAVE_BLOCK_DEVICE)
 	struct blk_desc *desc = dev_get_uclass_platdata(dev);
 
 	part_init(desc);
diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index 22bd8f7c279e..2ef19bf005c9 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -81,9 +81,11 @@  libs-$(CONFIG_TPL_LIBGENERIC_SUPPORT) += lib/
 else
 libs-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/ cmd/ env/
 libs-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/
+ifdef CONFIG_SPL_FRAMEWORK
+libs-$(CONFIG_PARTITIONS) += disk/
+endif
 endif
 
-libs-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/
 libs-y += drivers/
 libs-$(CONFIG_SPL_USB_GADGET_SUPPORT) += drivers/usb/dwc3/
 libs-y += dts/