From: Andre Przywara <andre.przywara@arm.com>
To: Icenowy Zheng <icenowy@aosc.io>
Cc: Simon Glass <sjg@chromium.org>,
Jagan Teki <jagan@amarulasolutions.com>,
Samuel Holland <samuel@sholland.org>,
Tom Rini <trini@konsulko.com>,
u-boot@lists.denx.de, linux-sunxi@lists.linux.dev
Subject: Re: [PATCH v2 2/4] mkimage: sunxi_egon: refactor for multi-architecture support
Date: Sun, 20 Jun 2021 23:39:47 +0100 [thread overview]
Message-ID: <20210620233947.09bb6433@slackpad.fritz.box> (raw)
In-Reply-To: <20210619092006.646929-1-icenowy@aosc.io>
On Sat, 19 Jun 2021 17:20:04 +0800
Icenowy Zheng <icenowy@aosc.io> wrote:
> Refactor some functions in mkimage sunxi_egon type, in order to prepare
> for adding support for more CPU architectures (e.g. RISC-V). In
> addition, compatibility for operation w/o specified architecture is
> kept, in this case the architecture is assumed as ARM.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Looks alright:
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
One thing you might want to improve (just when you respin anyway):
> ---
> Changes in v2:
> - Merged fixes in the next patch in v1 (patch rebase issue).
>
> tools/sunxi_egon.c | 63 ++++++++++++++++++++++++++++++++++++++++------
> 1 file changed, 56 insertions(+), 7 deletions(-)
>
> diff --git a/tools/sunxi_egon.c b/tools/sunxi_egon.c
> index a5299eb6a1..062c9bc151 100644
> --- a/tools/sunxi_egon.c
> +++ b/tools/sunxi_egon.c
> @@ -16,7 +16,25 @@
>
> static int egon_check_params(struct image_tool_params *params)
> {
> - /* We just need a binary image file. */
> + int arch;
> +
> + /* Assume ARM when no architecture specified for compatibility */
> + if (params->Aflag)
> + arch = params->arch;
> + else
> + arch = IH_ARCH_ARM;
This code snippet will be used three times in this file, so you might
want to factor this out.
Cheers,
Andre
> +
> + /*
> + * Check whether the architecture is supported.
> + */
> + switch (arch) {
> + case IH_ARCH_ARM:
> + break;
> + default:
> + return EXIT_FAILURE;
> + }
> +
> + /* We need a binary image file. */
> return !params->dflag;
> }
>
> @@ -25,10 +43,26 @@ static int egon_verify_header(unsigned char *ptr, int image_size,
> {
> const struct boot_file_head *header = (void *)ptr;
> uint32_t length;
> + int arch;
>
> - /* First 4 bytes must be an ARM branch instruction. */
> - if ((le32_to_cpu(header->b_instruction) & 0xff000000) != 0xea000000)
> - return EXIT_FAILURE;
> + /* Assume ARM when no architecture specified for compatibility */
> + if (params->Aflag)
> + arch = params->arch;
> + else
> + arch = IH_ARCH_ARM;
> +
> + /*
> + * First 4 bytes must be a branch instruction of the corresponding
> + * architecture.
> + */
> + switch (arch) {
> + case IH_ARCH_ARM:
> + if ((le32_to_cpu(header->b_instruction) & 0xff000000) != 0xea000000)
> + return EXIT_FAILURE;
> + break;
> + default:
> + return EXIT_FAILURE; /* Unknown architecture */
> + }
>
> if (memcmp(header->magic, BOOT0_MAGIC, sizeof(header->magic)))
> return EXIT_FAILURE;
> @@ -76,10 +110,25 @@ static void egon_set_header(void *buf, struct stat *sbuf, int infd,
> uint32_t *buf32 = buf;
> uint32_t checksum = 0, value;
> int i;
> + int arch;
>
> - /* Generate an ARM branch instruction to jump over the header. */
> - value = 0xea000000 | (sizeof(struct boot_file_head) / 4 - 2);
> - header->b_instruction = cpu_to_le32(value);
> + /* Assume ARM when no architecture specified for compatibility */
> + if (params->Aflag)
> + arch = params->arch;
> + else
> + arch = IH_ARCH_ARM;
> +
> + /*
> + * Different architectures need different first instruction to
> + * branch to the body.
> + */
> + switch (arch) {
> + case IH_ARCH_ARM:
> + /* Generate an ARM branch instruction to jump over the header. */
> + value = 0xea000000 | (sizeof(struct boot_file_head) / 4 - 2);
> + header->b_instruction = cpu_to_le32(value);
> + break;
> + }
>
> memcpy(header->magic, BOOT0_MAGIC, sizeof(header->magic));
> header->check_sum = cpu_to_le32(BROM_STAMP_VALUE);
next prev parent reply other threads:[~2021-06-20 22:40 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-19 9:18 [PATCH v2 0/4] mkimage: sunxi_egon: add riscv support Icenowy Zheng
2021-06-19 9:18 ` [PATCH v2 1/4] mkimage: add a flag to describe whether -A is specified Icenowy Zheng
2021-06-26 18:31 ` Simon Glass
2021-06-26 23:57 ` Icenowy Zheng
2021-06-27 19:32 ` Simon Glass
2021-06-27 22:17 ` Icenowy Zheng
2021-06-27 23:42 ` Tom Rini
2021-06-27 23:50 ` Simon Glass
2021-06-27 23:48 ` Simon Glass
2021-06-19 9:20 ` [PATCH v2 2/4] mkimage: sunxi_egon: refactor for multi-architecture support Icenowy Zheng
2021-06-20 22:39 ` Andre Przywara [this message]
2021-06-19 9:20 ` [PATCH v2 3/4] mkimage: sunxi_egon: add support for riscv Icenowy Zheng
2021-06-20 22:40 ` Andre Przywara
2021-06-19 9:21 ` [PATCH v2 4/4] sunxi: specify architecture when generating SPL boot image Icenowy Zheng
2021-06-20 22:40 ` Andre Przywara
2021-08-22 1:15 ` [PATCH v2 0/4] mkimage: sunxi_egon: add riscv support Samuel Holland
2022-04-05 22:41 ` Andre Przywara
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=20210620233947.09bb6433@slackpad.fritz.box \
--to=andre.przywara@arm.com \
--cc=icenowy@aosc.io \
--cc=jagan@amarulasolutions.com \
--cc=linux-sunxi@lists.linux.dev \
--cc=samuel@sholland.org \
--cc=sjg@chromium.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.