boot: Remove legacy extension board support

Remove the legacy extension board implementation now that all boards
have been converted to use the new UCLASS-based framework. This
eliminates lines of legacy code while preserving functionality
through the modern driver model approach.

Update the bootstd tests, due to the removal of extension hunter.

Signed-off-by: Kory Maincent (TI.com) <kory.maincent@bootlin.com>
This commit is contained in:
Kory Maincent (TI.com)
2025-10-30 17:45:09 +01:00
committed by Tom Rini
parent 6f5b839d5e
commit 2d12958ee7
19 changed files with 59 additions and 256 deletions

View File

@@ -1188,7 +1188,6 @@ S: Maintained
F: board/sunxi/chip.c F: board/sunxi/chip.c
F: board/ti/common/cape_detect.c F: board/ti/common/cape_detect.c
F: boot/extension-uclass.c F: boot/extension-uclass.c
F: boot/extension.c
F: cmd/extension_board.c F: cmd/extension_board.c
F: include/extension_board.h F: include/extension_board.h

View File

@@ -215,7 +215,7 @@ config SANDBOX
select SYSRESET_CMD_POWEROFF if CMD_POWEROFF select SYSRESET_CMD_POWEROFF if CMD_POWEROFF
select SYS_CACHE_SHIFT_4 select SYS_CACHE_SHIFT_4
select IRQ select IRQ
select SUPPORT_DM_EXTENSION_SCAN if CMDLINE select SUPPORT_EXTENSION_SCAN if CMDLINE
select SUPPORT_ACPI select SUPPORT_ACPI
imply BITREVERSE imply BITREVERSE
select BLOBLIST select BLOBLIST

View File

@@ -359,14 +359,14 @@ config TARGET_IMX8MM_CL_IOT_GATE
select IMX8MM select IMX8MM
select SUPPORT_SPL select SUPPORT_SPL
select IMX8M_LPDDR4 select IMX8M_LPDDR4
select SUPPORT_DM_EXTENSION_SCAN select SUPPORT_EXTENSION_SCAN
config TARGET_IMX8MM_CL_IOT_GATE_OPTEE config TARGET_IMX8MM_CL_IOT_GATE_OPTEE
bool "CompuLab iot-gate-imx8 with optee support" bool "CompuLab iot-gate-imx8 with optee support"
select IMX8MM select IMX8MM
select SUPPORT_SPL select SUPPORT_SPL
select IMX8M_LPDDR4 select IMX8M_LPDDR4
select SUPPORT_DM_EXTENSION_SCAN select SUPPORT_EXTENSION_SCAN
config TARGET_IMX8MP_RSB3720A1_4G config TARGET_IMX8MP_RSB3720A1_4G
bool "Support i.MX8MP RSB3720A1 4G" bool "Support i.MX8MP RSB3720A1 4G"

View File

@@ -15,7 +15,7 @@ config TARGET_AM335X_EVM
select DM_GPIO select DM_GPIO
select DM_SERIAL select DM_SERIAL
select TI_I2C_BOARD_DETECT select TI_I2C_BOARD_DETECT
select SUPPORT_DM_EXTENSION_SCAN select SUPPORT_EXTENSION_SCAN
imply CMD_DM imply CMD_DM
imply SPL_DM imply SPL_DM
imply SPL_DM_SEQ_ALIAS imply SPL_DM_SEQ_ALIAS

View File

@@ -38,7 +38,7 @@ config TARGET_AM57XX_EVM
select CMD_DDR3 select CMD_DDR3
select DRA7XX select DRA7XX
select TI_I2C_BOARD_DETECT select TI_I2C_BOARD_DETECT
select SUPPORT_DM_EXTENSION_SCAN select SUPPORT_EXTENSION_SCAN
imply DM_THERMAL imply DM_THERMAL
imply SCSI imply SCSI
imply SPL_THERMAL imply SPL_THERMAL

View File

@@ -1223,7 +1223,7 @@ config BLUETOOTH_DT_DEVICE_FIXUP
config CHIP_DIP_SCAN config CHIP_DIP_SCAN
bool "Enable DIPs detection for CHIP board" bool "Enable DIPs detection for CHIP board"
select SUPPORT_DM_EXTENSION_SCAN select SUPPORT_EXTENSION_SCAN
select W1 select W1
select W1_GPIO select W1_GPIO
select W1_EEPROM select W1_EEPROM

View File

@@ -110,7 +110,7 @@ int ft_board_setup(void *fdt, struct bd_info *bd)
return fdt_add_mem_rsv(fdt, 0x00d02000, 0x4000); return fdt_add_mem_rsv(fdt, 0x00d02000, 0x4000);
} }
#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) && \ #if CONFIG_IS_ENABLED(SUPPORT_EXTENSION_SCAN) && \
!CONFIG_IS_ENABLED(XPL_BUILD) !CONFIG_IS_ENABLED(XPL_BUILD)
static int sandbox_extension_board_scan(struct udevice *dev, static int sandbox_extension_board_scan(struct udevice *dev,
struct alist *extension_list) struct alist *extension_list)

View File

@@ -20,7 +20,7 @@ config CAPE_EEPROM_BUS_NUM
int "Cape EEPROM's I2C bus address" int "Cape EEPROM's I2C bus address"
range 0 8 range 0 8
default 2 default 2
depends on SUPPORT_DM_EXTENSION_SCAN depends on SUPPORT_EXTENSION_SCAN
config TI_COMMON_CMD_OPTIONS config TI_COMMON_CMD_OPTIONS
bool "Enable cmd options on TI platforms" bool "Enable cmd options on TI platforms"

View File

@@ -2,6 +2,6 @@
# Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/ # Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/
obj-${CONFIG_TI_I2C_BOARD_DETECT} += board_detect.o obj-${CONFIG_TI_I2C_BOARD_DETECT} += board_detect.o
obj-${CONFIG_$(PHASE_)SUPPORT_DM_EXTENSION_SCAN} += cape_detect.o obj-${CONFIG_$(PHASE_)SUPPORT_EXTENSION_SCAN} += cape_detect.o
obj-${CONFIG_OF_LIBFDT} += fdt_ops.o obj-${CONFIG_OF_LIBFDT} += fdt_ops.o
obj-${CONFIG_ARCH_K3} += k3-ddr.o obj-${CONFIG_ARCH_K3} += k3-ddr.o

View File

@@ -1910,10 +1910,6 @@ config SUPPORT_EXTENSION_SCAN
select OF_LIBFDT_OVERLAY select OF_LIBFDT_OVERLAY
bool bool
config SUPPORT_DM_EXTENSION_SCAN
select OF_LIBFDT_OVERLAY
bool
config USE_BOOTARGS config USE_BOOTARGS
bool "Enable boot arguments" bool "Enable boot arguments"
help help

View File

@@ -9,8 +9,7 @@ obj-$(CONFIG_BOOT_RETRY) += bootretry.o
obj-$(CONFIG_CMD_BOOTM) += bootm.o bootm_os.o obj-$(CONFIG_CMD_BOOTM) += bootm.o bootm_os.o
obj-$(CONFIG_CMD_BOOTZ) += bootm.o bootm_os.o obj-$(CONFIG_CMD_BOOTZ) += bootm.o bootm_os.o
obj-$(CONFIG_CMD_BOOTI) += bootm.o bootm_os.o obj-$(CONFIG_CMD_BOOTI) += bootm.o bootm_os.o
obj-$(CONFIG_SUPPORT_EXTENSION_SCAN) += extension.o obj-$(CONFIG_SUPPORT_EXTENSION_SCAN) += extension-uclass.o
obj-$(CONFIG_SUPPORT_DM_EXTENSION_SCAN) += extension-uclass.o
obj-$(CONFIG_PXE_UTILS) += pxe_utils.o obj-$(CONFIG_PXE_UTILS) += pxe_utils.o

View File

@@ -14,7 +14,7 @@
#include <dm/lists.h> #include <dm/lists.h>
#include <dm/uclass.h> #include <dm/uclass.h>
struct alist *dm_extension_get_list(void) struct alist *extension_get_list(void)
{ {
struct udevice *dev; struct udevice *dev;
@@ -24,7 +24,7 @@ struct alist *dm_extension_get_list(void)
return dev_get_priv(dev); return dev_get_priv(dev);
} }
int dm_extension_probe(struct udevice *dev) int extension_probe(struct udevice *dev)
{ {
struct alist *extension_list = dev_get_priv(dev); struct alist *extension_list = dev_get_priv(dev);
@@ -32,7 +32,7 @@ int dm_extension_probe(struct udevice *dev)
return 0; return 0;
} }
int dm_extension_remove(struct udevice *dev) int extension_remove(struct udevice *dev)
{ {
struct alist *extension_list = dev_get_priv(dev); struct alist *extension_list = dev_get_priv(dev);
@@ -40,9 +40,9 @@ int dm_extension_remove(struct udevice *dev)
return 0; return 0;
} }
int dm_extension_scan(void) int extension_scan(void)
{ {
struct alist *extension_list = dm_extension_get_list(); struct alist *extension_list = extension_get_list();
const struct extension_ops *ops; const struct extension_ops *ops;
struct udevice *dev; struct udevice *dev;
int ret; int ret;
@@ -109,9 +109,9 @@ static int _extension_apply(const struct extension *extension)
return ret; return ret;
} }
int dm_extension_apply(int extension_num) int extension_apply(int extension_num)
{ {
struct alist *extension_list = dm_extension_get_list(); struct alist *extension_list = extension_get_list();
const struct extension *extension; const struct extension *extension;
if (!extension_list) if (!extension_list)
@@ -127,9 +127,9 @@ int dm_extension_apply(int extension_num)
return _extension_apply(extension); return _extension_apply(extension);
} }
int dm_extension_apply_all(void) int extension_apply_all(void)
{ {
struct alist *extension_list = dm_extension_get_list(); struct alist *extension_list = extension_get_list();
const struct extension *extension; const struct extension *extension;
int ret; int ret;

View File

@@ -1,99 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2025 Köry Maincent <kory.maincent@bootlin.com>
*/
#include <bootdev.h>
#include <command.h>
#include <env.h>
#include <extension_board.h>
#include <fdt_support.h>
#include <malloc.h>
#include <mapmem.h>
LIST_HEAD(extension_list);
int extension_apply(struct extension *extension)
{
ulong extrasize, overlay_addr;
struct fdt_header *blob;
char *overlay_cmd;
if (!working_fdt) {
printf("No FDT memory address configured. Please configure\n"
"the FDT address via \"fdt addr <address>\" command.\n");
return CMD_RET_FAILURE;
}
overlay_cmd = env_get("extension_overlay_cmd");
if (!overlay_cmd) {
printf("Environment extension_overlay_cmd is missing\n");
return CMD_RET_FAILURE;
}
overlay_addr = env_get_hex("extension_overlay_addr", 0);
if (!overlay_addr) {
printf("Environment extension_overlay_addr is missing\n");
return CMD_RET_FAILURE;
}
env_set("extension_overlay_name", extension->overlay);
if (run_command(overlay_cmd, 0) != 0)
return CMD_RET_FAILURE;
extrasize = env_get_hex("filesize", 0);
if (!extrasize)
return CMD_RET_FAILURE;
fdt_shrink_to_minimum(working_fdt, extrasize);
blob = map_sysmem(overlay_addr, 0);
if (!fdt_valid(&blob))
return CMD_RET_FAILURE;
/* apply method prints messages on error */
if (fdt_overlay_apply_verbose(working_fdt, blob))
return CMD_RET_FAILURE;
return CMD_RET_SUCCESS;
}
int extension_scan(bool show)
{
struct extension *extension, *next;
int extension_num;
list_for_each_entry_safe(extension, next, &extension_list, list) {
list_del(&extension->list);
free(extension);
}
extension_num = extension_board_scan(&extension_list);
if (show && extension_num >= 0)
printf("Found %d extension board(s).\n", extension_num);
/* either the number of extensions, or -ve for error */
return extension_num;
}
static int extension_bootdev_hunt(struct bootdev_hunter *info, bool show)
{
int ret;
ret = env_set_hex("extension_overlay_addr",
env_get_hex("fdtoverlay_addr_r", 0));
if (ret)
return log_msg_ret("env", ret);
ret = extension_scan(show);
if (ret < 0)
return log_msg_ret("ext", ret);
return 0;
}
/* extensions should have a uclass - for now we use UCLASS_SIMPLE_BUS uclass */
BOOTDEV_HUNTER(extension_bootdev_hunter) = {
.prio = BOOTDEVP_1_PRE_SCAN,
.uclass = UCLASS_SIMPLE_BUS,
.hunt = extension_bootdev_hunt,
};

View File

@@ -548,7 +548,7 @@ config CMD_FDT
config CMD_EXTENSION config CMD_EXTENSION
bool "Extension board management command" bool "Extension board management command"
select CMD_FDT select CMD_FDT
depends on SUPPORT_EXTENSION_SCAN || SUPPORT_DM_EXTENSION_SCAN depends on SUPPORT_EXTENSION_SCAN
help help
Enables the "extension" command, which allows to detect Enables the "extension" command, which allows to detect
extension boards connected to the system, and apply extension boards connected to the system, and apply

View File

@@ -12,41 +12,23 @@
static int do_extension_list(struct cmd_tbl *cmdtp, int flag, static int do_extension_list(struct cmd_tbl *cmdtp, int flag,
int argc, char *const argv[]) int argc, char *const argv[])
{ {
#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) struct alist *extension_list;
struct alist *dm_extension_list;
#endif
struct extension *extension; struct extension *extension;
int i = 0; int i = 0;
#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) extension_list = extension_get_list();
dm_extension_list = dm_extension_get_list(); if (!alist_get_ptr(extension_list, 0)) {
if (!alist_get_ptr(dm_extension_list, 0)) {
printf("No extension registered - Please run \"extension scan\"\n"); printf("No extension registered - Please run \"extension scan\"\n");
return CMD_RET_SUCCESS; return CMD_RET_SUCCESS;
} }
alist_for_each(extension, dm_extension_list) { alist_for_each(extension, extension_list) {
printf("Extension %d: %s\n", i++, extension->name); printf("Extension %d: %s\n", i++, extension->name);
printf("\tManufacturer: \t\t%s\n", extension->owner); printf("\tManufacturer: \t\t%s\n", extension->owner);
printf("\tVersion: \t\t%s\n", extension->version); printf("\tVersion: \t\t%s\n", extension->version);
printf("\tDevicetree overlay: \t%s\n", extension->overlay); printf("\tDevicetree overlay: \t%s\n", extension->overlay);
printf("\tOther information: \t%s\n", extension->other); printf("\tOther information: \t%s\n", extension->other);
} }
#else
if (list_empty(&extension_list)) {
printf("No extension registered - Please run \"extension scan\"\n");
return CMD_RET_SUCCESS;
}
list_for_each_entry(extension, &extension_list, list) {
printf("Extension %d: %s\n", i++, extension->name);
printf("\tManufacturer: \t\t%s\n", extension->owner);
printf("\tVersion: \t\t%s\n", extension->version);
printf("\tDevicetree overlay: \t%s\n", extension->overlay);
printf("\tOther information: \t%s\n", extension->other);
}
#endif
return CMD_RET_SUCCESS; return CMD_RET_SUCCESS;
} }
@@ -55,69 +37,31 @@ static int do_extension_scan(struct cmd_tbl *cmdtp, int flag,
{ {
int extension_num; int extension_num;
#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) extension_num = extension_scan();
extension_num = dm_extension_scan();
if (extension_num == -ENODEV) if (extension_num == -ENODEV)
extension_num = 0; extension_num = 0;
else if (extension_num < 0) else if (extension_num < 0)
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
printf("Found %d extension board(s).\n", extension_num); printf("Found %d extension board(s).\n", extension_num);
#else
extension_num = extension_scan(true);
if (extension_num < 0 && extension_num != -ENODEV)
return CMD_RET_FAILURE;
#endif
return CMD_RET_SUCCESS; return CMD_RET_SUCCESS;
} }
static int do_extension_apply(struct cmd_tbl *cmdtp, int flag, static int do_extension_apply(struct cmd_tbl *cmdtp, int flag,
int argc, char *const argv[]) int argc, char *const argv[])
{ {
#if !CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) int extension_id;
struct extension *extension = NULL;
struct list_head *entry;
int i = 0;
#endif
int extension_id, ret;
if (argc < 2) if (argc < 2)
return CMD_RET_USAGE; return CMD_RET_USAGE;
if (strcmp(argv[1], "all") == 0) { if (strcmp(argv[1], "all") == 0) {
ret = CMD_RET_FAILURE; if (extension_apply_all())
#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN)
if (dm_extension_apply_all())
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
#else
list_for_each_entry(extension, &extension_list, list) {
ret = extension_apply(extension);
if (ret != CMD_RET_SUCCESS)
break;
}
#endif
} else { } else {
extension_id = simple_strtol(argv[1], NULL, 10); extension_id = simple_strtol(argv[1], NULL, 10);
#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) if (extension_apply(extension_id))
if (dm_extension_apply(extension_id))
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
#else
list_for_each(entry, &extension_list) {
if (i == extension_id) {
extension = list_entry(entry, struct extension, list);
break;
}
i++;
}
if (!extension) {
printf("Wrong extension number\n");
return CMD_RET_FAILURE;
}
ret = extension_apply(extension);
#endif
} }
return CMD_RET_SUCCESS; return CMD_RET_SUCCESS;

View File

@@ -15,50 +15,49 @@
extern struct list_head extension_list; extern struct list_head extension_list;
/** /**
* dm_extension_get_list - Get the extension list * extension_get_list - Get the extension list
* Return: The extension alist pointer, or NULL if no such list exists. * Return: The extension alist pointer, or NULL if no such list exists.
* *
* The caller must not free the list. * The caller must not free the list.
*/ */
struct alist *dm_extension_get_list(void); struct alist *extension_get_list(void);
/** /**
* dm_extension_probe - Probe extension device * extension_probe - Probe extension device
* @dev: Extension device that needs to be probed * @dev: Extension device that needs to be probed
* Return: Zero on success, negative on failure. * Return: Zero on success, negative on failure.
*/ */
int dm_extension_probe(struct udevice *dev); int extension_probe(struct udevice *dev);
/** /**
* dm_extension_remove - Remove extension device * extension_remove - Remove extension device
* @dev: Extension device that needs to be removed * @dev: Extension device that needs to be removed
* Return: Zero on success, negative on failure. * Return: Zero on success, negative on failure.
*/ */
int dm_extension_remove(struct udevice *dev); int extension_remove(struct udevice *dev);
/** /**
* dm_extension_scan - Scan extension boards available. * extension_scan - Scan extension boards available.
* Return: Zero on success, negative on failure. * Return: Zero on success, negative on failure.
*/ */
int dm_extension_scan(void); int extension_scan(void);
/** /**
* dm_extension_apply - Apply extension board overlay to the devicetree * extension_apply - Apply extension board overlay to the devicetree
* @extension_num: Extension number to be applied * @extension_num: Extension number to be applied
* Return: Zero on success, negative on failure. * Return: Zero on success, negative on failure.
*/ */
int dm_extension_apply(int extension_num); int extension_apply(int extension_num);
/** /**
* dm_extension_apply_all - Apply all extension board overlays to the * extension_apply_all - Apply all extension board overlays to the
* devicetree * devicetree
* Return: Zero on success, negative on failure. * Return: Zero on success, negative on failure.
*/ */
int dm_extension_apply_all(void); int extension_apply_all(void);
/** /**
* extension - Description fields of an extension board * extension - Description fields of an extension board
* @list: List head
* @name: Name of the extension * @name: Name of the extension
* @owner: Owner of the extension * @owner: Owner of the extension
* @version: Version of the extension * @version: Version of the extension
@@ -66,7 +65,6 @@ int dm_extension_apply_all(void);
* @other: Other information of this extension * @other: Other information of this extension
*/ */
struct extension { struct extension {
struct list_head list;
char name[32]; char name[32];
char owner[32]; char owner[32];
char version[32]; char version[32];
@@ -92,38 +90,12 @@ struct extension_ops {
U_BOOT_DRIVER(_name) = { \ U_BOOT_DRIVER(_name) = { \
.name = #_name, \ .name = #_name, \
.id = UCLASS_EXTENSION, \ .id = UCLASS_EXTENSION, \
.probe = dm_extension_probe, \ .probe = extension_probe, \
.remove = dm_extension_remove, \ .remove = extension_remove, \
.ops = &(struct extension_ops) { \ .ops = &(struct extension_ops) { \
.scan = _scan_func, \ .scan = _scan_func, \
}, \ }, \
.priv_auto = sizeof(struct alist), \ .priv_auto = sizeof(struct alist), \
} }
/**
* extension_board_scan - Add system-specific function to scan extension board.
* @param extension_list List of extension board information to update.
* Return: the number of extension.
*
* This function is called if CONFIG_CMD_EXTENSION is defined.
* Needs to fill the list extension_list with elements.
* Each element need to be allocated to an extension structure.
*
*/
int extension_board_scan(struct list_head *extension_list);
/**
* extension_apply - Apply extension board overlay to the devicetree
* @extension: Extension to be applied
* Return: Zero on success, negative on failure.
*/
int extension_apply(struct extension *extension);
/**
* extension_scan - Scan extension boards available.
* @show: Flag to enable verbose log
* Return: Zero on success, negative on failure.
*/
int extension_scan(bool show);
#endif /* __EXTENSION_SUPPORT_H */ #endif /* __EXTENSION_SUPPORT_H */

View File

@@ -380,7 +380,6 @@ static int bootdev_test_hunter(struct unit_test_state *uts)
ut_assert_nextline("Prio Used Uclass Hunter"); ut_assert_nextline("Prio Used Uclass Hunter");
ut_assert_nextlinen("----"); ut_assert_nextlinen("----");
ut_assert_nextline(" 6 ethernet eth_bootdev"); ut_assert_nextline(" 6 ethernet eth_bootdev");
ut_assert_nextline(" 1 simple_bus (none)");
ut_assert_nextline(" 5 ide ide_bootdev"); ut_assert_nextline(" 5 ide ide_bootdev");
ut_assert_nextline(" 2 mmc mmc_bootdev"); ut_assert_nextline(" 2 mmc mmc_bootdev");
ut_assert_nextline(" 4 nvme nvme_bootdev"); ut_assert_nextline(" 4 nvme nvme_bootdev");
@@ -389,15 +388,15 @@ static int bootdev_test_hunter(struct unit_test_state *uts)
ut_assert_nextline(" 4 spi_flash sf_bootdev"); ut_assert_nextline(" 4 spi_flash sf_bootdev");
ut_assert_nextline(" 5 usb usb_bootdev"); ut_assert_nextline(" 5 usb usb_bootdev");
ut_assert_nextline(" 4 virtio virtio_bootdev"); ut_assert_nextline(" 4 virtio virtio_bootdev");
ut_assert_nextline("(total hunters: 10)"); ut_assert_nextline("(total hunters: 9)");
ut_assert_console_end(); ut_assert_console_end();
ut_assertok(bootdev_hunt("usb1", false)); ut_assertok(bootdev_hunt("usb1", false));
ut_assert_skip_to_line("Bus usb@1: 5 USB Device(s) found"); ut_assert_skip_to_line("Bus usb@1: 5 USB Device(s) found");
ut_assert_console_end(); ut_assert_console_end();
/* USB is 7th in the list, so bit 8 */ /* USB is 8th in the list, so bit 7 */
ut_asserteq(BIT(8), std->hunters_used); ut_asserteq(BIT(7), std->hunters_used);
return 0; return 0;
} }
@@ -418,7 +417,7 @@ static int bootdev_test_cmd_hunt(struct unit_test_state *uts)
ut_assert_nextline("Prio Used Uclass Hunter"); ut_assert_nextline("Prio Used Uclass Hunter");
ut_assert_nextlinen("----"); ut_assert_nextlinen("----");
ut_assert_nextline(" 6 ethernet eth_bootdev"); ut_assert_nextline(" 6 ethernet eth_bootdev");
ut_assert_skip_to_line("(total hunters: 10)"); ut_assert_skip_to_line("(total hunters: 9)");
ut_assert_console_end(); ut_assert_console_end();
/* Use the MMC hunter and see that it updates */ /* Use the MMC hunter and see that it updates */
@@ -426,7 +425,7 @@ static int bootdev_test_cmd_hunt(struct unit_test_state *uts)
ut_assertok(run_command("bootdev hunt -l", 0)); ut_assertok(run_command("bootdev hunt -l", 0));
ut_assert_skip_to_line(" 5 ide ide_bootdev"); ut_assert_skip_to_line(" 5 ide ide_bootdev");
ut_assert_nextline(" 2 * mmc mmc_bootdev"); ut_assert_nextline(" 2 * mmc mmc_bootdev");
ut_assert_skip_to_line("(total hunters: 10)"); ut_assert_skip_to_line("(total hunters: 9)");
ut_assert_console_end(); ut_assert_console_end();
/* Scan all hunters */ /* Scan all hunters */
@@ -436,8 +435,6 @@ static int bootdev_test_cmd_hunt(struct unit_test_state *uts)
ut_assert_nextline("Hunting with: ethernet"); ut_assert_nextline("Hunting with: ethernet");
/* This is the extension feature which has no uclass at present */ /* This is the extension feature which has no uclass at present */
ut_assert_nextline("Hunting with: simple_bus");
ut_assert_nextline("Found 2 extension board(s).");
ut_assert_nextline("Hunting with: ide"); ut_assert_nextline("Hunting with: ide");
/* mmc hunter has already been used so should not run again */ /* mmc hunter has already been used so should not run again */
@@ -457,7 +454,6 @@ static int bootdev_test_cmd_hunt(struct unit_test_state *uts)
ut_assert_nextlinen("Prio"); ut_assert_nextlinen("Prio");
ut_assert_nextlinen("----"); ut_assert_nextlinen("----");
ut_assert_nextline(" 6 * ethernet eth_bootdev"); ut_assert_nextline(" 6 * ethernet eth_bootdev");
ut_assert_nextline(" 1 * simple_bus (none)");
ut_assert_nextline(" 5 * ide ide_bootdev"); ut_assert_nextline(" 5 * ide ide_bootdev");
ut_assert_nextline(" 2 * mmc mmc_bootdev"); ut_assert_nextline(" 2 * mmc mmc_bootdev");
ut_assert_nextline(" 4 * nvme nvme_bootdev"); ut_assert_nextline(" 4 * nvme nvme_bootdev");
@@ -466,7 +462,7 @@ static int bootdev_test_cmd_hunt(struct unit_test_state *uts)
ut_assert_nextline(" 4 * spi_flash sf_bootdev"); ut_assert_nextline(" 4 * spi_flash sf_bootdev");
ut_assert_nextline(" 5 * usb usb_bootdev"); ut_assert_nextline(" 5 * usb usb_bootdev");
ut_assert_nextline(" 4 * virtio virtio_bootdev"); ut_assert_nextline(" 4 * virtio virtio_bootdev");
ut_assert_nextline("(total hunters: 10)"); ut_assert_nextline("(total hunters: 9)");
ut_assert_console_end(); ut_assert_console_end();
ut_asserteq(GENMASK(MAX_HUNTER, 0), std->hunters_used); ut_asserteq(GENMASK(MAX_HUNTER, 0), std->hunters_used);
@@ -490,7 +486,7 @@ static int bootdev_test_hunt_scan(struct unit_test_state *uts)
ut_assertok(bootflow_scan_first(NULL, NULL, &iter, ut_assertok(bootflow_scan_first(NULL, NULL, &iter,
BOOTFLOWIF_SHOW | BOOTFLOWIF_HUNT | BOOTFLOWIF_SHOW | BOOTFLOWIF_HUNT |
BOOTFLOWIF_SKIP_GLOBAL, &bflow)); BOOTFLOWIF_SKIP_GLOBAL, &bflow));
ut_asserteq(BIT(MMC_HUNTER) | BIT(1), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER), std->hunters_used);
return 0; return 0;
} }
@@ -650,8 +646,8 @@ static int bootdev_test_next_label(struct unit_test_state *uts)
ut_asserteq_str("scsi.id0lun0.bootdev", dev->name); ut_asserteq_str("scsi.id0lun0.bootdev", dev->name);
ut_asserteq(BOOTFLOW_METHF_SINGLE_UCLASS, mflags); ut_asserteq(BOOTFLOW_METHF_SINGLE_UCLASS, mflags);
/* SCSI is 7th in the list, so bit 6 */ /* SCSI is 6th in the list, so bit 5 */
ut_asserteq(BIT(MMC_HUNTER) | BIT(6), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER) | BIT(5), std->hunters_used);
ut_assertok(bootdev_next_label(&iter, &dev, &mflags)); ut_assertok(bootdev_next_label(&iter, &dev, &mflags));
ut_assert_console_end(); ut_assert_console_end();
@@ -661,7 +657,7 @@ static int bootdev_test_next_label(struct unit_test_state *uts)
mflags); mflags);
/* dhcp: Ethernet is first so bit 0 */ /* dhcp: Ethernet is first so bit 0 */
ut_asserteq(BIT(MMC_HUNTER) | BIT(6) | BIT(0), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER) | BIT(5) | BIT(0), std->hunters_used);
ut_assertok(bootdev_next_label(&iter, &dev, &mflags)); ut_assertok(bootdev_next_label(&iter, &dev, &mflags));
ut_assert_console_end(); ut_assert_console_end();
@@ -671,7 +667,7 @@ static int bootdev_test_next_label(struct unit_test_state *uts)
mflags); mflags);
/* pxe: Ethernet is first so bit 0 */ /* pxe: Ethernet is first so bit 0 */
ut_asserteq(BIT(MMC_HUNTER) | BIT(6) | BIT(0), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER) | BIT(5) | BIT(0), std->hunters_used);
mflags = 123; mflags = 123;
ut_asserteq(-ENODEV, bootdev_next_label(&iter, &dev, &mflags)); ut_asserteq(-ENODEV, bootdev_next_label(&iter, &dev, &mflags));
@@ -679,7 +675,7 @@ static int bootdev_test_next_label(struct unit_test_state *uts)
ut_assert_console_end(); ut_assert_console_end();
/* no change */ /* no change */
ut_asserteq(BIT(MMC_HUNTER) | BIT(6) | BIT(0), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER) | BIT(5) | BIT(0), std->hunters_used);
return 0; return 0;
} }
@@ -724,12 +720,10 @@ static int bootdev_test_next_prio(struct unit_test_state *uts)
ut_assertok(bootdev_next_prio(&iter, &dev)); ut_assertok(bootdev_next_prio(&iter, &dev));
ut_asserteq_str("mmc2.bootdev", dev->name); ut_asserteq_str("mmc2.bootdev", dev->name);
ut_assert_nextline("Hunting with: simple_bus");
ut_assert_nextline("Found 2 extension board(s).");
ut_assert_nextline("Hunting with: mmc"); ut_assert_nextline("Hunting with: mmc");
ut_assert_console_end(); ut_assert_console_end();
ut_asserteq(BIT(MMC_HUNTER) | BIT(1), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER), std->hunters_used);
ut_assertok(bootdev_next_prio(&iter, &dev)); ut_assertok(bootdev_next_prio(&iter, &dev));
ut_asserteq_str("mmc1.bootdev", dev->name); ut_asserteq_str("mmc1.bootdev", dev->name);

View File

@@ -799,7 +799,7 @@ static int bootflow_cmd_hunt_single(struct unit_test_state *uts)
ut_assert_console_end(); ut_assert_console_end();
/* check that the hunter was used */ /* check that the hunter was used */
ut_asserteq(BIT(MMC_HUNTER) | BIT(1), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER), std->hunters_used);
return 0; return 0;
} }
@@ -821,14 +821,12 @@ static int bootflow_cmd_hunt_label(struct unit_test_state *uts)
ut_assertok(run_command("bootflow scan -l mmc", 0)); ut_assertok(run_command("bootflow scan -l mmc", 0));
/* check that the hunter was used */ /* check that the hunter was used */
ut_asserteq(BIT(MMC_HUNTER) | BIT(1), std->hunters_used); ut_asserteq(BIT(MMC_HUNTER), std->hunters_used);
/* check that we got the mmc1 bootflow */ /* check that we got the mmc1 bootflow */
ut_assert_nextline("Scanning for bootflows with label 'mmc'"); ut_assert_nextline("Scanning for bootflows with label 'mmc'");
ut_assert_nextlinen("Seq"); ut_assert_nextlinen("Seq");
ut_assert_nextlinen("---"); ut_assert_nextlinen("---");
ut_assert_nextline("Hunting with: simple_bus");
ut_assert_nextline("Found 2 extension board(s).");
ut_assert_nextline("Hunting with: mmc"); ut_assert_nextline("Hunting with: mmc");
ut_assert_nextline("Scanning bootdev 'mmc2.bootdev':"); ut_assert_nextline("Scanning bootdev 'mmc2.bootdev':");
ut_assert_nextline("Scanning bootdev 'mmc1.bootdev':"); ut_assert_nextline("Scanning bootdev 'mmc1.bootdev':");

View File

@@ -21,8 +21,8 @@
#define TEST_VERNUM 0x00010002 #define TEST_VERNUM 0x00010002
enum { enum {
MAX_HUNTER = 9, MAX_HUNTER = 8,
MMC_HUNTER = 3, /* ID of MMC hunter */ MMC_HUNTER = 2, /* ID of MMC hunter */
}; };
struct unit_test_state; struct unit_test_state;