Commit 90741096 authored by Ben Skeggs's avatar Ben Skeggs Committed by Lyude Paul
Browse files

drm/nouveau/acr/gm20b: regression fixes



Missed some Tegra-specific quirks when reworking ACR to support Ampere.

Fixes: 2541626c ("drm/nouveau/acr: use common falcon HS FW code for ACR FWs")
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Tested-by: default avatarDiogo Ivo <diogo.ivo@tecnico.ulisboa.pt>
Tested-by: default avatarNicolas Chauvet <kwizart@gmail.com>
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230130223715.1831509-3-bskeggs@redhat.com
parent b4806009
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -151,6 +151,9 @@ nvkm_firmware_mem_page(struct nvkm_memory *memory)
static enum nvkm_memory_target
nvkm_firmware_mem_target(struct nvkm_memory *memory)
{
	if (nvkm_firmware_mem(memory)->device->func->tegra)
		return NVKM_MEM_TARGET_NCOH;

	return NVKM_MEM_TARGET_HOST;
}

+13 −1
Original line number Diff line number Diff line
@@ -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,
+1 −1
Original line number Diff line number Diff line
@@ -225,7 +225,7 @@ gm20b_pmu_init(struct nvkm_pmu *pmu)

	pmu->initmsg_received = false;

	nvkm_falcon_load_dmem(falcon, &args, addr_args, sizeof(args), 0);
	nvkm_falcon_pio_wr(falcon, (u8 *)&args, 0, 0, DMEM, addr_args, sizeof(args), 0, false);
	nvkm_falcon_start(falcon);
	return 0;
}