On Fri, 20 Jan 2023 at 21:37, Diogo Ivo <diogo.ivo@xxxxxxxxxxxxxxxxxx> wrote: > > On Wed, Jan 18, 2023 at 11:28:49AM +1000, Ben Skeggs wrote: > > On Mon, 16 Jan 2023 at 22:27, Diogo Ivo <diogo.ivo@xxxxxxxxxxxxxxxxxx> wrote: > > > On Mon, Jan 16, 2023 at 07:45:05AM +1000, David Airlie wrote: > > > > As a quick check can you try changing > > > > > > > > drivers/gpu/drm/nouveau/nvkm/core/firmware.c:nvkm_firmware_mem_target > > > > from NVKM_MEM_TARGET_HOST to NVKM_MEM_TARGET_NCOH ? > > > In addition to Dave's change, can you try changing the > > nvkm_falcon_load_dmem() call in gm20b_pmu_init() to: > > > > nvkm_falcon_pio_wr(falcon, (u8 *)&args, 0, 0, DMEM, addr_args, > > sizeof(args), 0, false); > > Hello! > > Chiming in just to say that with this change I see the same as Nicolas > except that the init message size is 255 instead of 0: > > [ 2.196934] nouveau 57000000.gpu: pmu: unexpected init message size 255 vs 42 I've attached an entirely untested patch (to go on top of the other hacks/fixes so far), that will hopefully get us a little further. Would be great if you guys could test it out for me. Thanks, Ben.
diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c b/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c index 393ade9f7e6c..b7da3ab44c27 100644 --- a/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c @@ -48,6 +48,16 @@ gm200_flcn_pio_dmem_rd(struct nvkm_falcon *falcon, u8 port, const u8 *img, int l img += 4; len -= 4; } + + /* Sigh. Tegra PMU FW's init message... */ + if (len) { + u32 data = nvkm_falcon_rd32(falcon, 0x1c4 + (port * 8)); + + while (len--) { + *(u8 *)img++ = data & 0xff; + data >>= 8; + } + } } static void @@ -64,6 +74,8 @@ gm200_flcn_pio_dmem_wr(struct nvkm_falcon *falcon, u8 port, const u8 *img, int l img += 4; len -= 4; } + + WARN_ON(len); } static void @@ -74,7 +86,7 @@ gm200_flcn_pio_dmem_wr_init(struct nvkm_falcon *falcon, u8 port, bool sec, u32 d const struct nvkm_falcon_func_pio gm200_flcn_dmem_pio = { - .min = 4, + .min = 1, .max = 0x100, .wr_init = gm200_flcn_pio_dmem_wr_init, .wr = gm200_flcn_pio_dmem_wr,