summaryrefslogtreecommitdiff
path: root/boot
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-01-17 10:48:03 -0700
committerTom Rini <trini@konsulko.com>2023-01-23 18:11:41 -0500
commit0c1f4a9fb13a54780f550d6e5bc4cd37a58f879e (patch)
tree0195ba57f94d4fca102bf5677d494f2727aa9fe6 /boot
parent081bdc52c158dd3a4f73910cde3d7e70a5932d56 (diff)
bootstd: Add a SPI flash bootdev
Add a bootdev for SPI flash so that these devices can be used with standard boot. It only supports loading a script. Add a special case for the label, since we want to use "spi", not "spi_flash". Enable the new bootdev on sandbox. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'boot')
-rw-r--r--boot/bootdev-uclass.c10
-rw-r--r--boot/bootflow.c12
2 files changed, 20 insertions, 2 deletions
diff --git a/boot/bootdev-uclass.c b/boot/bootdev-uclass.c
index f43307d006..dd9ec668e1 100644
--- a/boot/bootdev-uclass.c
+++ b/boot/bootdev-uclass.c
@@ -375,8 +375,14 @@ static int label_to_uclass(const char *label, int *seqp)
log_debug("find %s: seq=%d, id=%d/%s\n", label, seq, id,
uclass_get_name(id));
if (id == UCLASS_INVALID) {
- log_warning("Unknown uclass '%s' in label\n", label);
- return -EINVAL;
+ /* try some special cases */
+ if (IS_ENABLED(CONFIG_BOOTDEV_SPI_FLASH) &&
+ !strncmp("spi", label, len)) {
+ id = UCLASS_SPI_FLASH;
+ } else {
+ log_warning("Unknown uclass '%s' in label\n", label);
+ return -EINVAL;
+ }
}
if (id == UCLASS_USB)
id = UCLASS_MASS_STORAGE;
diff --git a/boot/bootflow.c b/boot/bootflow.c
index 52cc2f9d54..d2dbc9d445 100644
--- a/boot/bootflow.c
+++ b/boot/bootflow.c
@@ -440,6 +440,18 @@ int bootflow_iter_check_blk(const struct bootflow_iter *iter)
return -ENOTSUPP;
}
+int bootflow_iter_check_sf(const struct bootflow_iter *iter)
+{
+ const struct udevice *media = dev_get_parent(iter->dev);
+ enum uclass_id id = device_get_uclass_id(media);
+
+ log_debug("uclass %d: %s\n", id, uclass_get_name(id));
+ if (id == UCLASS_SPI_FLASH)
+ return 0;
+
+ return -ENOTSUPP;
+}
+
int bootflow_iter_check_net(const struct bootflow_iter *iter)
{
const struct udevice *media = dev_get_parent(iter->dev);