Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1cd916a authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nvc0: kill off a couple more magics



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 8e91182b
Loading
Loading
Loading
Loading
+1 −13
Original line number Original line Diff line number Diff line
@@ -334,8 +334,6 @@ nvc0_graph_create(struct drm_device *dev)
	case 0xc0:
	case 0xc0:
		if (priv->tp_total == 11) { /* 465, 3/4/4/0, 4 */
		if (priv->tp_total == 11) { /* 465, 3/4/4/0, 4 */
			priv->magic_not_rop_nr = 0x07;
			priv->magic_not_rop_nr = 0x07;
			priv->magic419bd0      = 0x0a360000;
			priv->magic419be4      = 0x04c33a54;
			/* filled values up to tp_total, the rest 0 */
			/* filled values up to tp_total, the rest 0 */
			priv->magicgpc980[0]   = 0x22111000;
			priv->magicgpc980[0]   = 0x22111000;
			priv->magicgpc980[1]   = 0x00000233;
			priv->magicgpc980[1]   = 0x00000233;
@@ -345,8 +343,6 @@ nvc0_graph_create(struct drm_device *dev)
		} else
		} else
		if (priv->tp_total == 14) { /* 470, 3/3/4/4, 5 */
		if (priv->tp_total == 14) { /* 470, 3/3/4/4, 5 */
			priv->magic_not_rop_nr = 0x05;
			priv->magic_not_rop_nr = 0x05;
			priv->magic419bd0      = 0x043c0000;
			priv->magic419be4      = 0x09041208;
			priv->magicgpc980[0]   = 0x11110000;
			priv->magicgpc980[0]   = 0x11110000;
			priv->magicgpc980[1]   = 0x00233222;
			priv->magicgpc980[1]   = 0x00233222;
			priv->magicgpc980[2]   = 0x00000000;
			priv->magicgpc980[2]   = 0x00000000;
@@ -355,8 +351,6 @@ nvc0_graph_create(struct drm_device *dev)
		} else
		} else
		if (priv->tp_total == 15) { /* 480, 3/4/4/4, 6 */
		if (priv->tp_total == 15) { /* 480, 3/4/4/4, 6 */
			priv->magic_not_rop_nr = 0x06;
			priv->magic_not_rop_nr = 0x06;
			priv->magic419bd0      = 0x023e0000;
			priv->magic419be4      = 0x10414104;
			priv->magicgpc980[0]   = 0x11110000;
			priv->magicgpc980[0]   = 0x11110000;
			priv->magicgpc980[1]   = 0x03332222;
			priv->magicgpc980[1]   = 0x03332222;
			priv->magicgpc980[2]   = 0x00000000;
			priv->magicgpc980[2]   = 0x00000000;
@@ -366,8 +360,6 @@ nvc0_graph_create(struct drm_device *dev)
		break;
		break;
	case 0xc3: /* 450, 4/0/0/0, 2 */
	case 0xc3: /* 450, 4/0/0/0, 2 */
		priv->magic_not_rop_nr = 0x03;
		priv->magic_not_rop_nr = 0x03;
		priv->magic419bd0      = 0x00500000;
		priv->magic419be4      = 0x00000000;
		priv->magicgpc980[0]   = 0x00003210;
		priv->magicgpc980[0]   = 0x00003210;
		priv->magicgpc980[1]   = 0x00000000;
		priv->magicgpc980[1]   = 0x00000000;
		priv->magicgpc980[2]   = 0x00000000;
		priv->magicgpc980[2]   = 0x00000000;
@@ -376,8 +368,6 @@ nvc0_graph_create(struct drm_device *dev)
		break;
		break;
	case 0xc4: /* 460, 3/4/0/0, 4 */
	case 0xc4: /* 460, 3/4/0/0, 4 */
		priv->magic_not_rop_nr = 0x01;
		priv->magic_not_rop_nr = 0x01;
		priv->magic419bd0      = 0x045c0000;
		priv->magic419be4      = 0x09041208;
		priv->magicgpc980[0]   = 0x02321100;
		priv->magicgpc980[0]   = 0x02321100;
		priv->magicgpc980[1]   = 0x00000000;
		priv->magicgpc980[1]   = 0x00000000;
		priv->magicgpc980[2]   = 0x00000000;
		priv->magicgpc980[2]   = 0x00000000;
@@ -386,14 +376,12 @@ nvc0_graph_create(struct drm_device *dev)
		break;
		break;
	}
	}


	if (!priv->magic419bd0) {
	if (!priv->magic_not_rop_nr) {
		NV_ERROR(dev, "PGRAPH: unknown config: %d/%d/%d/%d, %d\n",
		NV_ERROR(dev, "PGRAPH: unknown config: %d/%d/%d/%d, %d\n",
			 priv->tp_nr[0], priv->tp_nr[1], priv->tp_nr[2],
			 priv->tp_nr[0], priv->tp_nr[1], priv->tp_nr[2],
			 priv->tp_nr[3], priv->rop_nr);
			 priv->tp_nr[3], priv->rop_nr);
		/* use 0xc3's values... */
		/* use 0xc3's values... */
		priv->magic_not_rop_nr = 0x03;
		priv->magic_not_rop_nr = 0x03;
		priv->magic419bd0      = 0x00500000;
		priv->magic419be4      = 0x00000000;
		priv->magicgpc980[0]   = 0x00003210;
		priv->magicgpc980[0]   = 0x00003210;
		priv->magicgpc980[1]   = 0x00000000;
		priv->magicgpc980[1]   = 0x00000000;
		priv->magicgpc980[2]   = 0x00000000;
		priv->magicgpc980[2]   = 0x00000000;
+0 −2
Original line number Original line Diff line number Diff line
@@ -46,8 +46,6 @@ struct nvc0_graph_priv {
	struct nouveau_gpuobj *unk4188b8;
	struct nouveau_gpuobj *unk4188b8;


	u8  magic_not_rop_nr;
	u8  magic_not_rop_nr;
	u32 magic419bd0;
	u32 magic419be4;
	u32 magicgpc980[4];
	u32 magicgpc980[4];
	u32 magicgpc918;
	u32 magicgpc918;
};
};
+20 −4
Original line number Original line Diff line number Diff line
@@ -1875,9 +1875,11 @@ nvc0_grctx_generate(struct nouveau_channel *chan)
	}
	}


	if (1) {
	if (1) {
		u32 data[6] = {};
		u32 data[6] = {}, data2[2] = {};
		u8 tpnr[GPC_MAX];
		u8 tpnr[GPC_MAX];
		u8 shift, ntpcv;


		/* calculate first set of magics */
		memcpy(tpnr, priv->tp_nr, sizeof(priv->tp_nr));
		memcpy(tpnr, priv->tp_nr, sizeof(priv->tp_nr));


		for (tp = 0; tp < priv->tp_total; tp++) {
		for (tp = 0; tp < priv->tp_total; tp++) {
@@ -1892,6 +1894,20 @@ nvc0_grctx_generate(struct nouveau_channel *chan)
		for (; tp < 32; tp++)
		for (; tp < 32; tp++)
			data[tp / 6] |= 7 << ((tp % 6) * 5);
			data[tp / 6] |= 7 << ((tp % 6) * 5);


		/* and the second... */
		shift = 0;
		ntpcv = priv->tp_total;
		while (!(ntpcv & (1 << 4))) {
			ntpcv <<= 1;
			shift++;
		}

		data2[0]  = (ntpcv << 16);
		data2[0] |= (shift << 21);
		data2[0] |= (((1 << (0 + 5)) % ntpcv) << 24);
		for (i = 1; i < 7; i++)
			data2[1] |= ((1 << (i + 5)) % ntpcv) << ((i - 1) * 5);

		// GPC_BROADCAST
		// GPC_BROADCAST
		nv_wr32(dev, 0x418bb8, (priv->tp_total << 8) |
		nv_wr32(dev, 0x418bb8, (priv->tp_total << 8) |
					priv->magic_not_rop_nr);
					priv->magic_not_rop_nr);
@@ -1901,8 +1917,8 @@ nvc0_grctx_generate(struct nouveau_channel *chan)
		// GPC_BROADCAST.TP_BROADCAST
		// GPC_BROADCAST.TP_BROADCAST
		nv_wr32(dev, 0x419bd0, (priv->tp_total << 8) |
		nv_wr32(dev, 0x419bd0, (priv->tp_total << 8) |
				       priv->magic_not_rop_nr |
				       priv->magic_not_rop_nr |
					priv->magic419bd0);
				       data2[0]);
		nv_wr32(dev, 0x419be4, priv->magic419be4);
		nv_wr32(dev, 0x419be4, data2[1]);
		for (i = 0; i < 6; i++)
		for (i = 0; i < 6; i++)
			nv_wr32(dev, 0x419b00 + (i * 4), data[i]);
			nv_wr32(dev, 0x419b00 + (i * 4), data[i]);