Re: [PATCH v2] nouveau: fix OpenFirmware support

From: Ilia Mirkin
Date: Wed Oct 14 2015 - 11:49:11 EST


On Wed, Oct 14, 2015 at 11:20 AM, Laurent Vivier <laurent@xxxxxxxxx> wrote:
>
>
> Le 14/10/2015 16:52, Ilia Mirkin a Ãcrit :
>> On Wed, Oct 14, 2015 at 10:20 AM, Olaf Hering <olaf@xxxxxxxxx> wrote:
>>> On Sun, Oct 11, Laurent Vivier wrote:
>>>
>>>> On PowerMac G5 (and I think on all OpenFirmware platforms), nvbios_pcirTp()
>>>> returns NULL. But in fact the OpenFirmware has given us the size
>>>> we can store in image->size.
>>>
>>>> CC: imirkin@xxxxxxxxxxxx
>>>> Signed-off-by: Laurent Vivier <laurent@xxxxxxxxx>
>>>
>>> Tested-by: Olaf Hering <olaf@xxxxxxxxx>
>>>
>>> Broken since a while already...
>>> https://lists.ozlabs.org/pipermail/linuxppc-dev/2015-March/126737.html
>>
>> FTR, looks like my version is upstream now:
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=25d295882a1adfcdaaad85369289677b87c7c8f0
>>
>> I agree that my of_size thing was a bit of a hack, if you want to redo
>> it by removing of_size/of_read from shadowof.c and copying it in at
>> init time (also a hack, IMHO), I certainly wouldn't object. As before,
>> it's Ben's call though.
>
> It's nice to have a fix upstream.
>
> I'll send a patch to remove the of_size.
>
> Rereading your patch and mine, I think we don't need no_pcir, we can do
> instead:
>
> if (!nvbios_rd16(bios, base + 0x18)) {
> /* no PCIr */
> image.base = 0;
> image.type = 0;
> image.size = bios->size;
> image.last = 1;
> } else {
> if (!shadow_fetch(bios, mthd, offset + 0x1000)) {
>
> ...
> What is you opinion ?

What if we hit on a real VBIOS without a PCIR? Like, say, some NV4, or
who-knows-what. Seems less safe. My way is very explicit and allows OF
some leeway that "regular" methods don't get.

-ilia
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/