|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 0/5] xen/arm: Add GICv3 support
On Wed, Jul 16, 2014 at 7:02 PM, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> On Wed, 2014-07-16 at 13:38 +0100, Ian Campbell wrote:
>> On Wed, 2014-07-16 at 17:17 +0530, Vijay Kilari wrote:
>> > On Wed, Jul 16, 2014 at 4:05 PM, Ian Campbell <Ian.Campbell@xxxxxxxxxx>
>> > wrote:
>> > > On Fri, 2014-07-11 at 18:21 +0530, vijay.kilari@xxxxxxxxx wrote:
>> > >> Add GICv3 support for arm64 platform.
>> > >
>> > > I get lots of:
>> > > {standard input}:1476: Error: unknown or missing system register name at
>> > > operand 1 -- `msr ICH_VMCR_EL2,x1'
>> > >
>> > > I'm using:
>> > > $ aarch64-linux-gnu-gcc --version
>> > > aarch64-linux-gnu-gcc (crosstool-NG linaro-1.13.1-4.8-2014.04 - Linaro
>> > > GCC 4.8-2014.04) 4.8.3 20140401 (prerelease)
>> > >
>> > > Do you have a pointer to a toolchain which can build this stuff?
>> >
>> > I am using our internal toolchain based on GCC version 4.7
>>
>> OK. We really ought to find some publicly available toolchain before
>> accepting this code. Or else we need to make gic v3 functionality depend
>> on the toolstack, which would suck.
>>
>> I'm going to see if the Linaro 4.9 gcc will do it.
>
> Sadly not.
>
> Mark Rutland pointed me to the workaround which Linux uses:
> https://git.kernel.org/cgit/linux/kernel/git/maz/arm-platforms.git/tree/include/linux/irqchip/arm-gic-v3.h?h=gicv3/base&id=1545387f2ca2e51f5ccd3ed764348ee41e15c02f#n143
>
> Which AFAICT works with at least Linaro's gcc 4.8 and 4.9. So I think
> we'll have to go down this route.
>
> Please could you make sure that this series compiles with the gcc from
> either http://releases.linaro.org/14.04/components/toolchain/binaries
> or
> http://releases.linaro.org/14.06/components/toolchain/binaries
>
> Presumably this will mostly be a case of adding the defines to
> xen/include/asm-arm/sysregs.h.
After adding assembler aliases to GIC sysregs similar to Mark's workaround,
I observed that existing READ_SYSREG{32,64} and WRITE_SYSREG{32,64}
macros does not replace the assembler aliases. Instead register names are kept
as it is.
However {READ,WRITE}_SYSREG macros works because these macros
are again replaced with {READ,WRITE}_SYSREG64 macro. So pre-processor
will replace the sys register name with assembler alias when replacing
{READ,WRITE}_SYSREG macro with {READ,WRITE}_SYSREG64 macro
I propose to change existing READ_SYSREG{32,64} and WRITE_SYSREG{32,64}
macros
+#define __stringyfy(x) #x
/* Access to system registers */
#define READ_SYSREG32(name) ({ \
uint32_t _r; \
- asm volatile("mrs %0, "#name : "=r" (_r)); \
+ asm volatile("mrs %0, "__stringyfy(name) : "=r" (_r)); \
_r; })
#define WRITE_SYSREG32(v, name) do { \
uint32_t _r = v; \
- asm volatile("msr "#name", %0" : : "r" (_r)); \
+ asm volatile("msr "__stringyfy(name)", %0" : : "r" (_r)); \
} while (0)
#define WRITE_SYSREG64(v, name) do { \
uint64_t _r = v; \
- asm volatile("msr "#name", %0" : : "r" (_r)); \
+ asm volatile("msr "__stringyfy(name)", %0" : : "r" (_r)); \
} while (0)
#define READ_SYSREG64(name) ({ \
uint64_t _r; \
- asm volatile("mrs %0, "#name : "=r" (_r)); \
+ asm volatile("mrs %0, "__stringyfy(name) : "=r" (_r)); \
_r; })
May be __stringyfy macro can be added to separate header
file similar to kernel?
Regards
Vijay
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |