Commit b1cd916a authored by Ben Skeggs's avatar Ben Skeggs

drm/nvc0: kill off a couple more magics

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 8e91182b
...@@ -334,8 +334,6 @@ nvc0_graph_create(struct drm_device *dev) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
...@@ -46,8 +46,6 @@ struct nvc0_graph_priv { ...@@ -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;
}; };
......
...@@ -1875,9 +1875,11 @@ nvc0_grctx_generate(struct nouveau_channel *chan) ...@@ -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) ...@@ -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);
...@@ -1900,9 +1916,9 @@ nvc0_grctx_generate(struct nouveau_channel *chan) ...@@ -1900,9 +1916,9 @@ 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]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment