From: Federico Fuga <fuga@studiofuga.com>
To: Mattijs Korpershoek <mkorpershoek@baylibre.com>,
Tom Rini <trini@konsulko.com>,
Federico Fuga <fuga@studiofuga.com>,
Maxime Ripard <maxime@cerno.tech>,
u-boot@lists.denx.de
Subject: [PATCH] Fix fastboot handling of partitions when no slots are, supported
Date: Fri, 24 Jan 2025 11:49:56 +0100 [thread overview]
Message-ID: <a70b19e6-4436-4fcf-bebd-b6877b66779e@studiofuga.com> (raw)
[-- Attachment #1.1.1: Type: text/plain, Size: 3207 bytes --]
The fastboot module has a bug that prevents some command to work
properly on devices that haven't an Android-like partition scheme, that
is, just one spl and one kernel partition, instead of the redundant
scheme with _a and _b slots.
This is the schema of our NAND storage (board is based on an AllWinner
A33 sunxi chip):
=> mtdparts
device nand0 <1c03000.nand>, # parts = 4
#: name size net size offset mask_flags
0: spl 0x00020000 0x00020000 0x00000000 0
1: uboot 0x00100000 0x00100000 0x00020000 0
2: kernel 0x00400000 0x00400000 0x00120000 0
3: ubi 0x07ae0000 0x079e0000 (!) 0x00520000 0
active partition: nand0,0 - (spl) 0x00020000 @ 0x00000000
This happens when we try to erase the spl partition using fastboot:
$ fastboot erase spl
Erasing 'spl_a' FAILED (remote: 'invalid NAND device')
fastboot: error: Command failed
The error occurs because getvars fails to handle the error returned by
nand layer when a partition cannot be found.
Indeed, getvar_get_part_info returns what is returned by
fastboot_nand_get_part_info (0 on success, 1 on failure) but it should
return -ENODEV or -EINVAL instead. Since the cause of failure is not
returned by the nand function, I decided to return -EINVAL to make it
simple.
Signed-off-by: Federico Fuga <fuga@studiofuga.com>
---
drivers/fastboot/fb_getvar.c | 5 ++++-
drivers/fastboot/fb_nand.c | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/fastboot/fb_getvar.c b/drivers/fastboot/fb_getvar.c
index 93cbd598e0..f5d8b03301 100644
--- a/drivers/fastboot/fb_getvar.c
+++ b/drivers/fastboot/fb_getvar.c
@@ -121,8 +121,11 @@ static int getvar_get_part_info(const char
*part_name, char *response,
*size = disk_part.size * disk_part.blksz;
} else if (IS_ENABLED(CONFIG_FASTBOOT_FLASH_NAND)) {
r = fastboot_nand_get_part_info(part_name, &part_info, response);
- if (r >= 0 && size)
+ if (r == 0 && size) {
*size = part_info->size;
+ } else {
+ r = -EINVAL;
+ }
} else {
fastboot_fail("this storage is not supported in bootloader",
response);
r = -ENODEV;
diff --git a/drivers/fastboot/fb_nand.c b/drivers/fastboot/fb_nand.c
index 5a55144479..3ee0f40ea8 100644
--- a/drivers/fastboot/fb_nand.c
+++ b/drivers/fastboot/fb_nand.c
@@ -141,7 +141,7 @@ static lbaint_t fb_nand_sparse_reserve(struct
sparse_storage *info,
*
* @part_name: Named device to lookup
* @part_info: Pointer to returned part_info pointer
- * @response: Pointer to fastboot response buffer
+ * @response: 0 on success, 1 otherwise
*/
int fastboot_nand_get_part_info(const char *part_name,
struct part_info **part_info, char *response)
--
2.48.1
[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 2489 bytes --]
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 665 bytes --]
next reply other threads:[~2025-01-24 13:02 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-24 10:49 Federico Fuga [this message]
2025-01-27 9:39 ` [PATCH] Fix fastboot handling of partitions when no slots are, supported Federico Fuga
2025-01-28 8:44 ` Mattijs Korpershoek
2025-01-28 9:07 ` Federico Fuga
-- strict thread matches above, loose matches on Subject: below --
2025-01-28 9:09 [PATCH] Fix fastboot handling of partitions when no slots are supported Federico Fuga
2025-01-28 11:18 Federico Fuga via B4 Relay
2025-01-30 13:49 ` Mattijs Korpershoek
2025-01-30 15:03 ` Federico Fuga
2025-01-31 7:26 ` Mattijs Korpershoek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a70b19e6-4436-4fcf-bebd-b6877b66779e@studiofuga.com \
--to=fuga@studiofuga.com \
--cc=maxime@cerno.tech \
--cc=mkorpershoek@baylibre.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox