On 03/19/2017 06:23 AM, Ilia Mirkin wrote:
The NV4A (aka NV44A) is an oddity in the family. It only comes in AGP and PCI varieties, rather than a core PCIE chip with a bridge for AGP/PCI as necessary. As a result, it appears that the MMU is also non-functional. For AGP cards, the vast majority of the NV4A lineup, this worked out since we force AGP cards to use the nv04 mmu. However for PCI variants, this did not work.
Switching to the NV04 MMU makes it work like a charm. Thanks to mwk for the suggestion. This should be a no-op for NV4A AGP boards, as they were using it already.
This is probably fine for NV4A in that case (more below).
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70388 Signed-off-by: Ilia Mirkin imirkin@alum.mit.edu Cc: stable@vger.kernel.org
OK, so I'm not 100% sure about my claims, but I don't have the necessary hardware to test it out. Right now, AGP nv41+ boards are getting the nv04 mmu, while PCI nv41+ boards are getting the PCIE one. Perhaps this works for them, however such boards are rare, and I don't have one. Perhaps all PCI boards should be routed to the nv04 mmu, not just the NV4A ones.
I wonder if it wouldn't be useful to also change the checks in nv41/nv44 implementations to be "if (device->type != NVKM_DEVICE_PCIE ..." too?
Ben.
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 273562d..0fc41db 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -714,7 +714,7 @@ nv4a_chipset = { .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new,
- .mmu = nv44_mmu_new,
- .mmu = nv04_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new,