[PATCH v2] ARM: asm: add readq/writeq methods

Måns Rullgård mans at mansr.com
Sat Dec 7 16:41:39 EST 2013


Peter Maydell <peter.maydell at linaro.org> writes:

> On 7 December 2013 16:05, Matthias Mann <M.Mann at arkona-technologies.de> wrote:
>> Add readq/writeq methods for 32 bit ARM to allow transfering 64 bit words over
>> PCIe as a single transfer.
>
>> +#if __LINUX_ARM_ARCH__ >= 5
>> +static inline u64 __raw_readq(const volatile void __iomem *addr)
>> +{
>> +       u64 val;
>> +#if __LITTLE_ENDIAN
>> +       asm volatile("ldrd %Q1, %R1, %0"
>> +                    : "+Q" (*(volatile u64 __force *)addr),
>> +                      "=r" (val));
>> +#else
>> +       asm volatile("ldrd %R1, %Q1, %0"
>> +                    : "+Q" (*(volatile u64 __force *)addr),
>> +                      "=r" (val));
>> +#endif
>> +       return val;
>> +}
>
> Given that ldrd/strd accesses are only a single 64 bit access
> on CPUs with LPAE (on non-LPAE CPUs they may be
> implemented as just a pair of 32 bit accesses) should the
> condition be stricter than just __LINUX_ARM_ARCH__ >= 5 ?

What do actual CPUs, e.g. the A9, do?

-- 
Måns Rullgård
mans at mansr.com



More information about the linux-arm-kernel mailing list