[Nouveau] [PATCH 3/3] drm/nouveau/pci: SOR crossbar quirk for 10b0:1b81
Danilo Krummrich
danilokrummrich at dk-develop.de
Mon Feb 5 11:14:47 UTC 2018
On 2018-02-05 03:47, Ben Skeggs wrote:
> On Mon, Feb 5, 2018 at 12:19 PM, Danilo Krummrich
> <danilokrummrich at dk-develop.de> wrote:
>> On 2018-02-05 02:39, Ben Skeggs wrote:
>>>
>>> On 5 February 2018 at 11:37, Ben Skeggs <skeggsb at gmail.com> wrote:
>>>>
>>>> On 5 February 2018 at 11:22, Danilo Krummrich
>>>> <danilokrummrich at dk-develop.de> wrote:
>>>>>
>>>>> On Gainward GTX 1070 routing any other SOR than SOR-1 to macro link
>>>>> 'G' (outp index 7) causes failures:
>>>>>
>>>>> [ 6.712111] nouveau 0000:01:00.0: bus: MMIO read of 00000000
>>>>> FAULT at
>>>>> 61c880 [ IBUS ]
>>>>> [ 6.724888] nouveau 0000:01:00.0: disp: intr24 80000000
>>>>> [ 8.716668] nouveau 0000:01:00.0: DRM: base-0: timeout
>>>>> [ 10.716679] nouveau 0000:01:00.0: DRM: base-1: timeout
>>>>> [ 63.511862] nouveau 0000:01:00.0: DRM: EVO timeout
>>>>>
>>>>> As I'm not able to spot an issue in the driver, I suppose it's
>>>>> firmware related.
>>>>
>>>> Are you able to mail me /dev/dri/card0/vbios.rom from that, please?
>>>> I'd like to look into this some more and be 100% certain this is
>>>> indeed a quirk, and not some subtle driver bug.
>>>
>>> Err.. /sys/kernel/debug/dri/0/vbios.rom rather ;)
>>>
>> Sure, that makes sense definitely, as I have checked
>> gm200_sor_route_set and
>> gm200_sor_route_get only to conform to the statements in this mail
>> thread:
>> https://lists.freedesktop.org/archives/nouveau/2014-December/019408.html
>>
>> BTW, I can reproduce the problem with a two monitor setup only, as (of
>> course) having one
>> monitor only at the physical port macro link 'G' is attached to makes
>> to
>> vbios pick the
>> working SOR. Therefore the physical port macro link 'G' is attached to
>> must
>> not be picked
>> as primary monitor.
> Thanks for that. I've only had a quick look so far, but I'm going to
> guess the is a driver bug already. The DCB specifies two different
> outputs on pad macro 1 (which, would be SOR1 if identity-mapped) that
First of all, sorry for confusing with the macro link numeration.
Of course, I am talking about pad macro 1, link 2 (which is also called
macro link D). I was wrongly looking at outp->index.
I will send an updated patch series correcting this, just in case.
> can apparently be used together. If used at the same time though,
> they both can't be driven by the same SOR, and would need routing.
I agree that there's definitely the need of routing here. Anyway, it
can still be it's just buggy in a way that only macro link D cannot be
routed to a different SOR than SOR-1. Probably you know better, if such
a case can be possible.
> I guess it'd be interesting to see if NVIDIA can manage to drive those
> two outputs together, which would be a big hint as to whether the
> board is buggy, or we are. I'm going to guess the latter ;)
>
I tested that - even nouveau is able to drive macro link C and D
together.
Macro link C corresponds to connector 3 (which is HDMI) and macro link D
corresponds to connector 4 (which is DP). And it actually works because
VBIOS
serves macro link D as primary OR and routes SOR-1 to it already.
Nouveau picks (of course) SOR-0 for macro link C then.
BTW, any other combination works well, as long as macro link D (if used)
is
not routed to another SOR than SOR-1. E.g. macro link A on SOR-2 and
macro
link E on either SOR-0 or SOR-3.
>>
>> Also, may I ask you a related question: I was a bit confused why
>> 'link' is
>> completely unused
>> in nvkm_outp_init_route() after gm200_sor_route_get() returns. Is this
>> just
>> obsolete or
>> intended to use in the future somehow?
> I suspect it's a left-over from an earlier revision of that code, or
> perhaps I intended to validate it against what we discovered? Not
> sure now!
>
> Thanks,
> Ben.
>
>>
>> Thanks,
>> Danilo
>>
>>>>
>>>> Thanks,
>>>> Ben.
>>>>
>>>>>
>>>>> Therefore to work around this issue skip crossbar routing for this
>>>>> particular macro link and instead use identity mapping.
>>>>>
>>>>> Signed-off-by: Danilo Krummrich <danilokrummrich at dk-develop.de>
>>>>> ---
>>>>> drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c | 9 ++++++++-
>>>>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
>>>>> b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
>>>>> index d2f9664afcf4..29de270f2232 100644
>>>>> --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
>>>>> +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
>>>>> @@ -797,6 +797,13 @@ nvkm_device_pci_10de_139b[] = {
>>>>> {}
>>>>> };
>>>>>
>>>>> +static const struct nvkm_device_pci_vendor
>>>>> +nvkm_device_pci_10de_1b81[] = {
>>>>> + /* Gainward GTX 1070 8192 MB */
>>>>> + { 0x10b0, 0x1b81, "GeForce GTX 1070",{ .outp_links_skip =
>>>>> BIT(7)
>>>>> } },
>>>>> + {}
>>>>> +};
>>>>> +
>>>>> static const struct nvkm_device_pci_device
>>>>> nvkm_device_pci_10de[] = {
>>>>> { 0x0020, "RIVA TNT" },
>>>>> @@ -1556,7 +1563,7 @@ nvkm_device_pci_10de[] = {
>>>>> { 0x1b06, "GeForce GTX 1080 TI" },
>>>>> { 0x1bb7, "Quadro P6000" },
>>>>> { 0x1b80, "GeForce GTX 1080" },
>>>>> - { 0x1b81, "GeForce GTX 1070" },
>>>>> + { 0x1b81, "GeForce GTX 1070", nvkm_device_pci_10de_1b81 },
>>>>> { 0x1b82, "GeForce GTX 1070 TI" },
>>>>> { 0x1b84, "GeForce GTX 1060 3GB" },
>>>>> { 0x1b87, "P104-100" },
>>>>> --
>>>>> 2.14.1
>>>>>
>>>>> _______________________________________________
>>>>> Nouveau mailing list
>>>>> Nouveau at lists.freedesktop.org
>>>>> https://lists.freedesktop.org/mailman/listinfo/nouveau
>>>
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the Nouveau
mailing list