diff options
| author | David Lechner <[email protected]> | 2026-03-26 17:59:27 -0500 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2026-04-08 11:07:07 -0600 |
| commit | 83223d4f86980f09fdf341b64f69e03313cac14b (patch) | |
| tree | a975d792accdfdeb6a0378ada6f9f3ff31fc4dad /env | |
| parent | b382cd0973521a5197a097d4e190f47aadb79757 (diff) | |
env: scsi: add CONFIG_ENV_SCSI_HW_PARTITION
Add CONFIG_ENV_SCSI_HW_PARTITION and supporting code to allow loading
the environment directly from a SCSI device without a partition table.
Some platforms store the environment directly on the SCSI device without
a way to look it up by partition UUID.
Signed-off-by: David Lechner <[email protected]>
Diffstat (limited to 'env')
| -rw-r--r-- | env/Kconfig | 11 | ||||
| -rw-r--r-- | env/scsi.c | 22 |
2 files changed, 29 insertions, 4 deletions
diff --git a/env/Kconfig b/env/Kconfig index 5824f762870..ffaf16c581c 100644 --- a/env/Kconfig +++ b/env/Kconfig @@ -762,6 +762,17 @@ config ENV_MMC_USE_DT The 2 defines CONFIG_ENV_OFFSET, CONFIG_ENV_OFFSET_REDUND are not used as fallback. +config ENV_SCSI_HW_PARTITION + string "SCSI hardware partition number" + depends on ENV_IS_IN_SCSI + default 0 + help + SCSI hardware partition device number on the platform where the + environment is stored. Note that this is not related to any software + defined partition table but instead if we are in the user area, which is + partition 0 or the first boot partition, which is 1 or some other defined + partition. + config ENV_SCSI_PART_UUID string "SCSI partition UUID for saving environment" depends on ENV_IS_IN_SCSI diff --git a/env/scsi.c b/env/scsi.c index 1787dcca92a..f4986353da5 100644 --- a/env/scsi.c +++ b/env/scsi.c @@ -41,8 +41,14 @@ static inline struct env_scsi_info *env_scsi_get_part(void) is_scsi_scanned = true; } - if (scsi_get_blk_by_uuid(CONFIG_ENV_SCSI_PART_UUID, &ep->blk, &ep->part)) - return NULL; + if (CONFIG_ENV_SCSI_PART_UUID[0] == '\0') { + if (blk_get_device_part_str("scsi", CONFIG_ENV_SCSI_HW_PARTITION, + &ep->blk, &ep->part, true)) + return NULL; + } else { + if (scsi_get_blk_by_uuid(CONFIG_ENV_SCSI_PART_UUID, &ep->blk, &ep->part)) + return NULL; + } ep->count = CONFIG_ENV_SIZE / ep->part.blksz; @@ -89,12 +95,20 @@ static int env_scsi_load(void) int ret; if (!ep) { - env_set_default(CONFIG_ENV_SCSI_PART_UUID " partition not found", 0); + if (CONFIG_ENV_SCSI_PART_UUID[0] == '\0') + env_set_default("SCSI partition " CONFIG_ENV_SCSI_HW_PARTITION " not found", 0); + else + env_set_default(CONFIG_ENV_SCSI_PART_UUID " partition not found", 0); + return -ENOENT; } if (blk_dread(ep->blk, ep->part.start, ep->count, &envbuf) != ep->count) { - env_set_default(CONFIG_ENV_SCSI_PART_UUID " partition read failed", 0); + if (CONFIG_ENV_SCSI_PART_UUID[0] == '\0') + env_set_default("SCSI partition " CONFIG_ENV_SCSI_HW_PARTITION " read failed", 0); + else + env_set_default(CONFIG_ENV_SCSI_PART_UUID " partition read failed", 0); + return -EIO; } |
