Browse Source

drm/nouveau/gr/gf100-: abstract fetching rop count

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Ben Skeggs 9 years ago
parent
commit
64cb5a31f4

+ 10 - 2
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c

@@ -702,6 +702,13 @@ gf100_gr_pack_mmio[] = {
  * PGRAPH engine/subdev functions
  * PGRAPH engine/subdev functions
  ******************************************************************************/
  ******************************************************************************/
 
 
+int
+gf100_gr_rops(struct gf100_gr *gr)
+{
+	struct nvkm_device *device = gr->base.engine.subdev.device;
+	return (nvkm_rd32(device, 0x409604) & 0x001f0000) >> 16;
+}
+
 void
 void
 gf100_gr_zbc_init(struct gf100_gr *gr)
 gf100_gr_zbc_init(struct gf100_gr *gr)
 {
 {
@@ -1633,8 +1640,8 @@ gf100_gr_oneinit(struct nvkm_gr *base)
 		nvkm_wo32(gr->unk4188b8, i, 0x00000010);
 		nvkm_wo32(gr->unk4188b8, i, 0x00000010);
 	nvkm_done(gr->unk4188b8);
 	nvkm_done(gr->unk4188b8);
 
 
-	gr->rop_nr = (nvkm_rd32(device, 0x409604) & 0x001f0000) >> 16;
-	gr->gpc_nr =  nvkm_rd32(device, 0x409604) & 0x0000001f;
+	gr->rop_nr = gr->func->rops(gr);
+	gr->gpc_nr = nvkm_rd32(device, 0x409604) & 0x0000001f;
 	for (i = 0; i < gr->gpc_nr; i++) {
 	for (i = 0; i < gr->gpc_nr; i++) {
 		gr->tpc_nr[i]  = nvkm_rd32(device, GPC_UNIT(i, 0x2608));
 		gr->tpc_nr[i]  = nvkm_rd32(device, GPC_UNIT(i, 0x2608));
 		gr->tpc_total += gr->tpc_nr[i];
 		gr->tpc_total += gr->tpc_nr[i];
@@ -1946,6 +1953,7 @@ gf100_gr = {
 	.mmio = gf100_gr_pack_mmio,
 	.mmio = gf100_gr_pack_mmio,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.grctx = &gf100_grctx,
 	.grctx = &gf100_grctx,
 	.sclass = {
 	.sclass = {
 		{ -1, -1, FERMI_TWOD_A },
 		{ -1, -1, FERMI_TWOD_A },

+ 2 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h

@@ -129,12 +129,14 @@ struct gf100_gr_func {
 	struct {
 	struct {
 		struct gf100_gr_ucode *ucode;
 		struct gf100_gr_ucode *ucode;
 	} gpccs;
 	} gpccs;
+	int (*rops)(struct gf100_gr *);
 	int ppc_nr;
 	int ppc_nr;
 	const struct gf100_grctx_func *grctx;
 	const struct gf100_grctx_func *grctx;
 	struct nvkm_sclass sclass[];
 	struct nvkm_sclass sclass[];
 };
 };
 
 
 int gf100_gr_init(struct gf100_gr *);
 int gf100_gr_init(struct gf100_gr *);
+int gf100_gr_rops(struct gf100_gr *);
 
 
 int gk104_gr_init(struct gf100_gr *);
 int gk104_gr_init(struct gf100_gr *);
 
 

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.c

@@ -118,6 +118,7 @@ gf104_gr = {
 	.mmio = gf104_gr_pack_mmio,
 	.mmio = gf104_gr_pack_mmio,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.grctx = &gf104_grctx,
 	.grctx = &gf104_grctx,
 	.sclass = {
 	.sclass = {
 		{ -1, -1, FERMI_TWOD_A },
 		{ -1, -1, FERMI_TWOD_A },

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c

@@ -109,6 +109,7 @@ gf108_gr = {
 	.mmio = gf108_gr_pack_mmio,
 	.mmio = gf108_gr_pack_mmio,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.grctx = &gf108_grctx,
 	.grctx = &gf108_grctx,
 	.sclass = {
 	.sclass = {
 		{ -1, -1, FERMI_TWOD_A },
 		{ -1, -1, FERMI_TWOD_A },

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c

@@ -90,6 +90,7 @@ gf110_gr = {
 	.mmio = gf110_gr_pack_mmio,
 	.mmio = gf110_gr_pack_mmio,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.grctx = &gf110_grctx,
 	.grctx = &gf110_grctx,
 	.sclass = {
 	.sclass = {
 		{ -1, -1, FERMI_TWOD_A },
 		{ -1, -1, FERMI_TWOD_A },

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.c

@@ -126,6 +126,7 @@ gf117_gr = {
 	.mmio = gf117_gr_pack_mmio,
 	.mmio = gf117_gr_pack_mmio,
 	.fecs.ucode = &gf117_gr_fecs_ucode,
 	.fecs.ucode = &gf117_gr_fecs_ucode,
 	.gpccs.ucode = &gf117_gr_gpccs_ucode,
 	.gpccs.ucode = &gf117_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 1,
 	.ppc_nr = 1,
 	.grctx = &gf117_grctx,
 	.grctx = &gf117_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.c

@@ -181,6 +181,7 @@ gf119_gr = {
 	.mmio = gf119_gr_pack_mmio,
 	.mmio = gf119_gr_pack_mmio,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.fecs.ucode = &gf100_gr_fecs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
 	.gpccs.ucode = &gf100_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.grctx = &gf119_grctx,
 	.grctx = &gf119_grctx,
 	.sclass = {
 	.sclass = {
 		{ -1, -1, FERMI_TWOD_A },
 		{ -1, -1, FERMI_TWOD_A },

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c

@@ -312,6 +312,7 @@ gk104_gr = {
 	.mmio = gk104_gr_pack_mmio,
 	.mmio = gk104_gr_pack_mmio,
 	.fecs.ucode = &gk104_gr_fecs_ucode,
 	.fecs.ucode = &gk104_gr_fecs_ucode,
 	.gpccs.ucode = &gk104_gr_gpccs_ucode,
 	.gpccs.ucode = &gk104_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 1,
 	.ppc_nr = 1,
 	.grctx = &gk104_grctx,
 	.grctx = &gk104_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c

@@ -186,6 +186,7 @@ gk110_gr = {
 	.mmio = gk110_gr_pack_mmio,
 	.mmio = gk110_gr_pack_mmio,
 	.fecs.ucode = &gk110_gr_fecs_ucode,
 	.fecs.ucode = &gk110_gr_fecs_ucode,
 	.gpccs.ucode = &gk110_gr_gpccs_ucode,
 	.gpccs.ucode = &gk110_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 2,
 	.ppc_nr = 2,
 	.grctx = &gk110_grctx,
 	.grctx = &gk110_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c

@@ -106,6 +106,7 @@ gk110b_gr = {
 	.mmio = gk110b_gr_pack_mmio,
 	.mmio = gk110b_gr_pack_mmio,
 	.fecs.ucode = &gk110_gr_fecs_ucode,
 	.fecs.ucode = &gk110_gr_fecs_ucode,
 	.gpccs.ucode = &gk110_gr_gpccs_ucode,
 	.gpccs.ucode = &gk110_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 2,
 	.ppc_nr = 2,
 	.grctx = &gk110b_grctx,
 	.grctx = &gk110b_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c

@@ -165,6 +165,7 @@ gk208_gr = {
 	.mmio = gk208_gr_pack_mmio,
 	.mmio = gk208_gr_pack_mmio,
 	.fecs.ucode = &gk208_gr_fecs_ucode,
 	.fecs.ucode = &gk208_gr_fecs_ucode,
 	.gpccs.ucode = &gk208_gr_gpccs_ucode,
 	.gpccs.ucode = &gk208_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 1,
 	.ppc_nr = 1,
 	.grctx = &gk208_grctx,
 	.grctx = &gk208_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c

@@ -313,6 +313,7 @@ static const struct gf100_gr_func
 gk20a_gr = {
 gk20a_gr = {
 	.init = gk20a_gr_init,
 	.init = gk20a_gr_init,
 	.set_hww_esr_report_mask = gk20a_gr_set_hww_esr_report_mask,
 	.set_hww_esr_report_mask = gk20a_gr_set_hww_esr_report_mask,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 1,
 	.ppc_nr = 1,
 	.grctx = &gk20a_grctx,
 	.grctx = &gk20a_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c

@@ -441,6 +441,7 @@ gm107_gr = {
 	.mmio = gm107_gr_pack_mmio,
 	.mmio = gm107_gr_pack_mmio,
 	.fecs.ucode = &gm107_gr_fecs_ucode,
 	.fecs.ucode = &gm107_gr_fecs_ucode,
 	.gpccs.ucode = &gm107_gr_gpccs_ucode,
 	.gpccs.ucode = &gm107_gr_gpccs_ucode,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 2,
 	.ppc_nr = 2,
 	.grctx = &gm107_grctx,
 	.grctx = &gm107_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c

@@ -189,6 +189,7 @@ gm200_gr_new_(const struct gf100_gr_func *func, struct nvkm_device *device,
 static const struct gf100_gr_func
 static const struct gf100_gr_func
 gm200_gr = {
 gm200_gr = {
 	.init = gm200_gr_init,
 	.init = gm200_gr_init,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 2,
 	.ppc_nr = 2,
 	.grctx = &gm200_grctx,
 	.grctx = &gm200_grctx,
 	.sclass = {
 	.sclass = {

+ 1 - 0
drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.c

@@ -67,6 +67,7 @@ gm20b_gr = {
 	.init = gk20a_gr_init,
 	.init = gk20a_gr_init,
 	.init_gpc_mmu = gm20b_gr_init_gpc_mmu,
 	.init_gpc_mmu = gm20b_gr_init_gpc_mmu,
 	.set_hww_esr_report_mask = gm20b_gr_set_hww_esr_report_mask,
 	.set_hww_esr_report_mask = gm20b_gr_set_hww_esr_report_mask,
+	.rops = gf100_gr_rops,
 	.ppc_nr = 1,
 	.ppc_nr = 1,
 	.grctx = &gm20b_grctx,
 	.grctx = &gm20b_grctx,
 	.sclass = {
 	.sclass = {