Hijacking CPU_FTR_VSX for BGQ QPX
Jimi Xenidis
jimix at pobox.com
Thu Dec 6 02:44:22 EST 2012
Sorry for the pause, lots of other things getting done... questions below.
On Nov 9, 2012, at 10:33 PM, Michael Neuling <mikey at neuling.org> wrote:
> Benjamin Herrenschmidt <benh at kernel.crashing.org> wrote:
>
>> On Fri, 2012-11-09 at 11:43 -0600, Jimi Xenidis wrote:
>>> The CPU_FTR_* values are pretty tight (a few bits left) yes I need to save and restore the QPX registers.
>>> There are 32 QPX registers, each 32 bytes in size, it is otherwise managed by the FPSCR and MSR[FP]
>>>
>>> I was thinking that I could hijack the VSX, since there is no plan to add it to embedded yet.
>>> I could be explicit or create an alieas fo the same bit, but the basic effect (after increasing the save area size) would be something like the diff below.
>>> Thoughts?
>>
>> Don't. Use a different bit, we can always split the mask again if
>> needed, move more bits to mmu_features etc...
Ok
>>
>>> -#ifdef CONFIG_VSX
>>> +#if defined (CONFIG_VSX) && defined(CONFIG_BGQ)
>>> +# error "This code depends on CONFIG_VSX and CONFIG_BGQ being exclusive
>>> +#elif defined (CONFIG_VSX)
>>> +# define _REST_32VSRS(n,c,base) REST_32VSRS(n,c,base)
>>> +# define _SAVE_32VSRS(n,c,base) SAVE_32VSRS(n,c,base)
>>> +#elif defined(CONFIG_BGQ)
>>
>> Make a CONFIG_PPC_QPX or something like that specifically for the QPX
>> stuff that you can then "select" from CONFIG_PPC_BGQ (don't do just
>> CONFIG_BGQ).
ack
>>
>> And don't just "hijack" stuff like that, it should be a runtime option,
>> so add a new set etc... it should be possible to build a kernel that
>> boots on a BGQ or a hypothetical BookE chip with VSX.
ack
>
> Yeah both bluegene and VSX are designed for HPC, so it's not completely
> crazy that someone would put them together.
Not sure that is possible, since they both "include" FPU state, which is why hijacking the the FPU routines is so delicious.
-jx
>
> Also, we need to fix the CPU FTR issue. With PPR (Haren's stuff) and
> POWER8 we are going to blow CPU FTRs pretty soon anyway. This just adds
> to that.
>
> Mikey
>
>>
>>> +# define _REST_32VSRS(n,c,base) REST_32QRS(n,c,base)
>>> +# define _SAVE_32VSRS(n,c,base) SAVE_32QRS(n,c,base)
>>> +#endif
>>> +
>>> +#if defined (CONFIG_VSX) || defined(CONFIG_BGQ)
>>> #define REST_32FPVSRS(n,c,base) \
>>> BEGIN_FTR_SECTION \
>>> b 2f; \
>>> END_FTR_SECTION_IFSET(CPU_FTR_VSX); \
>>> REST_32FPRS(n,base); \
>>> b 3f; \
>>> -2: REST_32VSRS(n,c,base); \
>>> +2: _REST_32VSRS(n,c,base); \
>>> 3:
>>>
>>> #define SAVE_32FPVSRS(n,c,base) \
>>> @@ -41,7 +51,7 @@ BEGIN_FTR_SECTION \
>>> END_FTR_SECTION_IFSET(CPU_FTR_VSX); \
>>> SAVE_32FPRS(n,base); \
>>> b 3f; \
>>> -2: SAVE_32VSRS(n,c,base); \
>>> +2: _SAVE_32VSRS(n,c,base); \
>>> 3:
>>> #else
>>> #define REST_32FPVSRS(n,b,base) REST_32FPRS(n, base)
>>
>> Cheers,
>> Ben.
>>
>>
More information about the Linuxppc-dev
mailing list