All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ardb@kernel.org>
To: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: "Russell King" <linux@armlinux.org.uk>,
	"Nicolas Pitre" <nico@fluxnic.net>,
	"Marek Szyprowski" <m.szyprowski@samsung.com>,
	"Dmitry Osipenko" <digetx@gmail.com>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Eric Miao" <eric.miao@nvidia.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Lukasz Stelmach" <l.stelmach@samsung.com>,
	"Stephen Boyd" <sboyd@kernel.org>,
	"Chris Brandt" <chris.brandt@renesas.com>,
	"Linux ARM" <linux-arm-kernel@lists.infradead.org>,
	Linux-Renesas <linux-renesas-soc@vger.kernel.org>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v10 1/3] ARM: uncompress: Add be32tocpu macro
Date: Thu, 3 Dec 2020 13:49:49 +0100	[thread overview]
Message-ID: <CAMj1kXEKdRGQXFh9qMgrWcZnoW5s8Bj5TaKqStU=w1qJ-Nu9zA@mail.gmail.com> (raw)
In-Reply-To: <20201203121916.2870975-2-geert+renesas@glider.be>

Hallo Geert,

On Thu, 3 Dec 2020 at 13:19, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>
> DTB stores all values as 32-bit big-endian integers.
> Add a macro to convert such values to native CPU endianness, to reduce
> duplication.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v10:
>   - New.
> ---
>  arch/arm/boot/compressed/head.S | 26 ++++++++++++--------------
>  1 file changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
> index 835ce64f1674c9a2..aabdc544c03aafdc 100644
> --- a/arch/arm/boot/compressed/head.S
> +++ b/arch/arm/boot/compressed/head.S
> @@ -165,6 +165,16 @@
>                 orr     \res, \res, \tmp1, lsl #24
>                 .endm
>
> +               .macro  be32tocpu, val, tmp
> +#ifndef __ARMEB__
> +               /* convert to little endian */
> +               eor     \tmp, \val, \val, ror #16
> +               bic     \tmp, \tmp, #0x00ff0000
> +               mov     \val, \val, ror #8
> +               eor     \val, \val, \tmp, lsr #8
> +#endif
> +               .endm
> +

Thanks for cleaning this up.

This patch is fine as is.

Reviewed-by: Ard Biesheuvel <ardb@kernel.org>

However, I would like to note that, since we are touching this code,
we might do it properly. (Given the v10, feel free to ignore or defer
to a later time)

- put this into asm/assembler.h so other .S files can use it
- use rev instructions when supported
- factor out the difference between xx_to cpu and bswap

I.e.,

.macro bswap32, val, tmp
.if  __LINUX_ARM_ARCH__ >= 6
rev \val, \val
.else
eor     \tmp, \val, \val, ror #16
bic     \tmp, \tmp, #0x00ff0000
mov     \val, \val, ror #8
eor     \val, \val, \tmp, lsr #8
.endif
.endm

.macro  be32tocpu, val, tmp
#ifndef __ARMEB__
bswap32 \val, \tmp
#endif
.endm

.macro  le32tocpu, val, tmp
#ifdef __ARMEB__
bswap32 \val, \tmp
#endif
.endm

This would allow us to reuse this macro in
arch/arm/crypto/aes-cipher-core.S, and replace the __rev macro it
defines.


>                 .section ".start", "ax"
>  /*
>   * sort out different calling conventions
> @@ -345,13 +355,7 @@ restart:   adr     r0, LC1
>
>                 /* Get the initial DTB size */
>                 ldr     r5, [r6, #4]
> -#ifndef __ARMEB__
> -               /* convert to little endian */
> -               eor     r1, r5, r5, ror #16
> -               bic     r1, r1, #0x00ff0000
> -               mov     r5, r5, ror #8
> -               eor     r5, r5, r1, lsr #8
> -#endif
> +               be32tocpu r5, r1
>                 dbgadtb r6, r5
>                 /* 50% DTB growth should be good enough */
>                 add     r5, r5, r5, lsr #1
> @@ -403,13 +407,7 @@ restart:   adr     r0, LC1
>
>                 /* Get the current DTB size */
>                 ldr     r5, [r6, #4]
> -#ifndef __ARMEB__
> -               /* convert r5 (dtb size) to little endian */
> -               eor     r1, r5, r5, ror #16
> -               bic     r1, r1, #0x00ff0000
> -               mov     r5, r5, ror #8
> -               eor     r5, r5, r1, lsr #8
> -#endif
> +               be32tocpu r5, r1
>
>                 /* preserve 64-bit alignment */
>                 add     r5, r5, #7
> --
> 2.25.1
>

WARNING: multiple messages have this Message-ID (diff)
From: Ard Biesheuvel <ardb@kernel.org>
To: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: "Arnd Bergmann" <arnd@arndb.de>,
	"Nicolas Pitre" <nico@fluxnic.net>,
	"Stephen Boyd" <sboyd@kernel.org>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Lukasz Stelmach" <l.stelmach@samsung.com>,
	"Russell King" <linux@armlinux.org.uk>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
	Linux-Renesas <linux-renesas-soc@vger.kernel.org>,
	"Chris Brandt" <chris.brandt@renesas.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Eric Miao" <eric.miao@nvidia.com>,
	"Dmitry Osipenko" <digetx@gmail.com>,
	"Linux ARM" <linux-arm-kernel@lists.infradead.org>,
	"Marek Szyprowski" <m.szyprowski@samsung.com>
Subject: Re: [PATCH v10 1/3] ARM: uncompress: Add be32tocpu macro
Date: Thu, 3 Dec 2020 13:49:49 +0100	[thread overview]
Message-ID: <CAMj1kXEKdRGQXFh9qMgrWcZnoW5s8Bj5TaKqStU=w1qJ-Nu9zA@mail.gmail.com> (raw)
In-Reply-To: <20201203121916.2870975-2-geert+renesas@glider.be>

Hallo Geert,

On Thu, 3 Dec 2020 at 13:19, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>
> DTB stores all values as 32-bit big-endian integers.
> Add a macro to convert such values to native CPU endianness, to reduce
> duplication.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v10:
>   - New.
> ---
>  arch/arm/boot/compressed/head.S | 26 ++++++++++++--------------
>  1 file changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
> index 835ce64f1674c9a2..aabdc544c03aafdc 100644
> --- a/arch/arm/boot/compressed/head.S
> +++ b/arch/arm/boot/compressed/head.S
> @@ -165,6 +165,16 @@
>                 orr     \res, \res, \tmp1, lsl #24
>                 .endm
>
> +               .macro  be32tocpu, val, tmp
> +#ifndef __ARMEB__
> +               /* convert to little endian */
> +               eor     \tmp, \val, \val, ror #16
> +               bic     \tmp, \tmp, #0x00ff0000
> +               mov     \val, \val, ror #8
> +               eor     \val, \val, \tmp, lsr #8
> +#endif
> +               .endm
> +

Thanks for cleaning this up.

This patch is fine as is.

Reviewed-by: Ard Biesheuvel <ardb@kernel.org>

However, I would like to note that, since we are touching this code,
we might do it properly. (Given the v10, feel free to ignore or defer
to a later time)

- put this into asm/assembler.h so other .S files can use it
- use rev instructions when supported
- factor out the difference between xx_to cpu and bswap

I.e.,

.macro bswap32, val, tmp
.if  __LINUX_ARM_ARCH__ >= 6
rev \val, \val
.else
eor     \tmp, \val, \val, ror #16
bic     \tmp, \tmp, #0x00ff0000
mov     \val, \val, ror #8
eor     \val, \val, \tmp, lsr #8
.endif
.endm

.macro  be32tocpu, val, tmp
#ifndef __ARMEB__
bswap32 \val, \tmp
#endif
.endm

.macro  le32tocpu, val, tmp
#ifdef __ARMEB__
bswap32 \val, \tmp
#endif
.endm

This would allow us to reuse this macro in
arch/arm/crypto/aes-cipher-core.S, and replace the __rev macro it
defines.


>                 .section ".start", "ax"
>  /*
>   * sort out different calling conventions
> @@ -345,13 +355,7 @@ restart:   adr     r0, LC1
>
>                 /* Get the initial DTB size */
>                 ldr     r5, [r6, #4]
> -#ifndef __ARMEB__
> -               /* convert to little endian */
> -               eor     r1, r5, r5, ror #16
> -               bic     r1, r1, #0x00ff0000
> -               mov     r5, r5, ror #8
> -               eor     r5, r5, r1, lsr #8
> -#endif
> +               be32tocpu r5, r1
>                 dbgadtb r6, r5
>                 /* 50% DTB growth should be good enough */
>                 add     r5, r5, r5, lsr #1
> @@ -403,13 +407,7 @@ restart:   adr     r0, LC1
>
>                 /* Get the current DTB size */
>                 ldr     r5, [r6, #4]
> -#ifndef __ARMEB__
> -               /* convert r5 (dtb size) to little endian */
> -               eor     r1, r5, r5, ror #16
> -               bic     r1, r1, #0x00ff0000
> -               mov     r5, r5, ror #8
> -               eor     r5, r5, r1, lsr #8
> -#endif
> +               be32tocpu r5, r1
>
>                 /* preserve 64-bit alignment */
>                 add     r5, r5, #7
> --
> 2.25.1
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-12-03 12:50 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-03 12:19 [PATCH v10 0/3] ARM: uncompress: Validate start of physical memory against passed DTB Geert Uytterhoeven
2020-12-03 12:19 ` Geert Uytterhoeven
2020-12-03 12:19 ` [PATCH v10 1/3] ARM: uncompress: Add be32tocpu macro Geert Uytterhoeven
2020-12-03 12:19   ` Geert Uytterhoeven
2020-12-03 12:49   ` Ard Biesheuvel [this message]
2020-12-03 12:49     ` Ard Biesheuvel
2020-12-04  9:43     ` Geert Uytterhoeven
2020-12-04  9:43       ` Geert Uytterhoeven
2020-12-03 16:26   ` Nicolas Pitre
2020-12-03 16:26     ` Nicolas Pitre
2020-12-03 12:19 ` [PATCH v10 2/3] ARM: uncompress: Add OF_DT_MAGIC macro Geert Uytterhoeven
2020-12-03 12:19   ` Geert Uytterhoeven
2020-12-03 12:50   ` Ard Biesheuvel
2020-12-03 12:50     ` Ard Biesheuvel
2020-12-03 16:27   ` Nicolas Pitre
2020-12-03 16:27     ` Nicolas Pitre
2020-12-04  9:43     ` Geert Uytterhoeven
2020-12-04  9:43       ` Geert Uytterhoeven
2020-12-03 12:19 ` [PATCH v10 3/3] ARM: uncompress: Validate start of physical memory against passed DTB Geert Uytterhoeven
2020-12-03 12:19   ` Geert Uytterhoeven
2020-12-03 13:14   ` Ard Biesheuvel
2020-12-03 13:14     ` Ard Biesheuvel
2020-12-03 14:04   ` Russell King - ARM Linux admin
2020-12-03 14:04     ` Russell King - ARM Linux admin
2020-12-03 14:29     ` Geert Uytterhoeven
2020-12-03 14:29       ` Geert Uytterhoeven
2020-12-03 16:34   ` Nicolas Pitre
2020-12-03 16:34     ` Nicolas Pitre

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='CAMj1kXEKdRGQXFh9qMgrWcZnoW5s8Bj5TaKqStU=w1qJ-Nu9zA@mail.gmail.com' \
    --to=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=chris.brandt@renesas.com \
    --cc=digetx@gmail.com \
    --cc=eric.miao@nvidia.com \
    --cc=geert+renesas@glider.be \
    --cc=l.stelmach@samsung.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=nico@fluxnic.net \
    --cc=sboyd@kernel.org \
    --cc=u.kleine-koenig@pengutronix.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.