[PATCH] arm64: io: permit offset addressing
Will Deacon
will at kernel.org
Tue Jan 30 03:56:42 PST 2024
On Wed, Jan 24, 2024 at 11:12:59AM +0000, Mark Rutland wrote:
> diff --git a/arch/arm64/include/asm/io.h b/arch/arm64/include/asm/io.h
> index 3b694511b98f8..8d825522c55c8 100644
> --- a/arch/arm64/include/asm/io.h
> +++ b/arch/arm64/include/asm/io.h
> @@ -24,25 +24,29 @@
> #define __raw_writeb __raw_writeb
> static __always_inline void __raw_writeb(u8 val, volatile void __iomem *addr)
> {
> - asm volatile("strb %w0, [%1]" : : "rZ" (val), "r" (addr));
> + volatile u8 __iomem *ptr = addr;
> + asm volatile("strb %w0, %1" : : "rZ" (val), "Qo" (*ptr));
> }
>
> #define __raw_writew __raw_writew
> static __always_inline void __raw_writew(u16 val, volatile void __iomem *addr)
> {
> - asm volatile("strh %w0, [%1]" : : "rZ" (val), "r" (addr));
> + volatile u16 __iomem *ptr = addr;
> + asm volatile("strh %w0, %1" : : "rZ" (val), "Qo" (*ptr));
> }
>
> #define __raw_writel __raw_writel
> static __always_inline void __raw_writel(u32 val, volatile void __iomem *addr)
> {
> - asm volatile("str %w0, [%1]" : : "rZ" (val), "r" (addr));
> + volatile u32 __iomem *ptr = addr;
> + asm volatile("str %w0, %1" : : "rZ" (val), "Qo" (*ptr));
> }
>
> #define __raw_writeq __raw_writeq
> static __always_inline void __raw_writeq(u64 val, volatile void __iomem *addr)
> {
> - asm volatile("str %x0, [%1]" : : "rZ" (val), "r" (addr));
> + volatile u64 __iomem *ptr = addr;
> + asm volatile("str %x0, %1" : : "rZ" (val), "Qo" (*ptr));
> }
>
> #define __raw_readb __raw_readb
> --
> 2.30.2
Acked-by: Will Deacon <will at kernel.org>
Will
More information about the linux-arm-kernel
mailing list