[OpenBIOS] [RFC 2/3] ppc64: Switch to 64-bit cell size

Alexander Graf agraf at suse.de
Sat May 28 14:14:57 CEST 2011


On 28.05.2011, at 14:03, Andreas Färber wrote:

> Am 28.05.2011 um 13:50 schrieb Alexander Graf:
> 
>> On 28.05.2011, at 13:48, Andreas Färber wrote:
>> 
>>> Am 28.05.2011 um 13:42 schrieb Alexander Graf:
>>> 
>>>> On 28.05.2011, at 13:37, Andreas Färber wrote:
>>>> 
>>>>> To avoid some of the cell size vs. pointer size issues,
>>>>> use 64-bit cells on ppc64. Suggested by Segher.
>>>>> 
>>>>> This involves handling lack of 128-bit type and compiling
>>>>> 64-bit libgcc parts, copied from sparc64.
>>>>> 
>>>>> Hopefully fixes compilation on 64-bit host, too.
>>>> 
>>>> I thought ppc64 OpenFirmware uses 32bit cells?
>>> 
>>> That's what I thought, too... but Segher said otherwise in January, and Tarl said the internal cell size (that I'm trying to change here) were different from the guest-visible 32-bit cell size. Through the use of prog_arg_t the CIF is supposed to remain 32-bit.
>> 
>> Oh, too quick in replying :). You're changing the "cell" type which is used all over the place with sizeof() to figure out the cell size of guest visible (device tree) fields. I don't see how it could not be guest exposed.
> 
> So you're saying...? Do you oppose Segher? Or do you see a better way of doing this? :)
> Blue and Kenneth were having compilation issues due to pointer size != cell size, and I hoped this might solve the iso9660 issue (which it doesn't, unless I have missed some change).

I'm saying that changing sizeof(cell) will change the device tree:

drivers/escc.c:escc_add_channel

[...]
    cell props[2];
[...]
    props[0] = IO_ESCC_OFFSET + offset * 0x20;
    props[1] = 0x00000020;
    set_property(dnode, "reg", (char *)&props, 2 * sizeof(cell));

So while the guest expects reg to be 2 32-bit numbers, it suddenly gets 4 32-bit numbers that don't make sense. IIUC to the guest, any DT property is nothing more than a stream of bytes.


Alex




More information about the OpenBIOS mailing list