You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
drm/gf100-/gr: implement the proper SetShaderExceptions method
We have another version of it implemented in SW, however, that version isn't serialised with normal PGRAPH operation and can possibly clobber the enables for another context. This is the same method that's implemented by the NVIDIA binary driver. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -27,8 +27,8 @@ static struct nouveau_oclass
|
||||
gk20a_graph_sclass[] = {
|
||||
{ 0x902d, &nouveau_object_ofuncs },
|
||||
{ 0xa040, &nouveau_object_ofuncs },
|
||||
{ KEPLER_C, &nvc0_fermi_ofuncs },
|
||||
{ 0xa0c0, &nouveau_object_ofuncs },
|
||||
{ KEPLER_C, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ KEPLER_COMPUTE_A, &nouveau_object_ofuncs, nvc0_graph_90c0_omthds },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -36,8 +36,8 @@ static struct nouveau_oclass
|
||||
gm107_graph_sclass[] = {
|
||||
{ 0x902d, &nouveau_object_ofuncs },
|
||||
{ 0xa140, &nouveau_object_ofuncs },
|
||||
{ MAXWELL_A, &nvc0_fermi_ofuncs },
|
||||
{ 0xb0c0, &nouveau_object_ofuncs },
|
||||
{ MAXWELL_A, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ MAXWELL_COMPUTE_A, &nouveau_object_ofuncs, nvc0_graph_90c0_omthds },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -214,12 +214,38 @@ nvc0_fermi_ofuncs = {
|
||||
.mthd = nvc0_fermi_mthd,
|
||||
};
|
||||
|
||||
static int
|
||||
nvc0_graph_set_shader_exceptions(struct nouveau_object *object, u32 mthd,
|
||||
void *pdata, u32 size)
|
||||
{
|
||||
struct nvc0_graph_priv *priv = (void *)nv_engine(object);
|
||||
if (size >= sizeof(u32)) {
|
||||
u32 data = *(u32 *)pdata ? 0xffffffff : 0x00000000;
|
||||
nv_wr32(priv, 0x419e44, data);
|
||||
nv_wr32(priv, 0x419e4c, data);
|
||||
return 0;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
struct nouveau_omthds
|
||||
nvc0_graph_9097_omthds[] = {
|
||||
{ 0x1528, 0x1528, nvc0_graph_set_shader_exceptions },
|
||||
{}
|
||||
};
|
||||
|
||||
struct nouveau_omthds
|
||||
nvc0_graph_90c0_omthds[] = {
|
||||
{ 0x1528, 0x1528, nvc0_graph_set_shader_exceptions },
|
||||
{}
|
||||
};
|
||||
|
||||
struct nouveau_oclass
|
||||
nvc0_graph_sclass[] = {
|
||||
{ 0x902d, &nouveau_object_ofuncs },
|
||||
{ 0x9039, &nouveau_object_ofuncs },
|
||||
{ FERMI_A, &nvc0_fermi_ofuncs },
|
||||
{ 0x90c0, &nouveau_object_ofuncs },
|
||||
{ FERMI_A, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ FERMI_COMPUTE_A, &nouveau_object_ofuncs, nvc0_graph_90c0_omthds },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -150,6 +150,8 @@ int nvf0_graph_fini(struct nouveau_object *, bool);
|
||||
extern struct nouveau_ofuncs nvc0_fermi_ofuncs;
|
||||
|
||||
extern struct nouveau_oclass nvc0_graph_sclass[];
|
||||
extern struct nouveau_omthds nvc0_graph_9097_omthds[];
|
||||
extern struct nouveau_omthds nvc0_graph_90c0_omthds[];
|
||||
extern struct nouveau_oclass nvc8_graph_sclass[];
|
||||
extern struct nouveau_oclass nvf0_graph_sclass[];
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@ static struct nouveau_oclass
|
||||
nvc1_graph_sclass[] = {
|
||||
{ 0x902d, &nouveau_object_ofuncs },
|
||||
{ 0x9039, &nouveau_object_ofuncs },
|
||||
{ FERMI_A, &nvc0_fermi_ofuncs },
|
||||
{ FERMI_B, &nvc0_fermi_ofuncs },
|
||||
{ 0x90c0, &nouveau_object_ofuncs },
|
||||
{ FERMI_A, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ FERMI_B, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ FERMI_COMPUTE_A, &nouveau_object_ofuncs, nvc0_graph_90c0_omthds },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -33,10 +33,10 @@ struct nouveau_oclass
|
||||
nvc8_graph_sclass[] = {
|
||||
{ 0x902d, &nouveau_object_ofuncs },
|
||||
{ 0x9039, &nouveau_object_ofuncs },
|
||||
{ FERMI_A, &nvc0_fermi_ofuncs },
|
||||
{ FERMI_B, &nvc0_fermi_ofuncs },
|
||||
{ FERMI_C, &nvc0_fermi_ofuncs },
|
||||
{ 0x90c0, &nouveau_object_ofuncs },
|
||||
{ FERMI_A, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ FERMI_B, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ FERMI_C, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ FERMI_COMPUTE_A, &nouveau_object_ofuncs, nvc0_graph_90c0_omthds },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -35,8 +35,8 @@ static struct nouveau_oclass
|
||||
nve4_graph_sclass[] = {
|
||||
{ 0x902d, &nouveau_object_ofuncs },
|
||||
{ 0xa040, &nouveau_object_ofuncs },
|
||||
{ KEPLER_A, &nvc0_fermi_ofuncs },
|
||||
{ 0xa0c0, &nouveau_object_ofuncs },
|
||||
{ KEPLER_A, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ KEPLER_COMPUTE_A, &nouveau_object_ofuncs, nvc0_graph_90c0_omthds },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ struct nouveau_oclass
|
||||
nvf0_graph_sclass[] = {
|
||||
{ 0x902d, &nouveau_object_ofuncs },
|
||||
{ 0xa140, &nouveau_object_ofuncs },
|
||||
{ KEPLER_B, &nvc0_fermi_ofuncs },
|
||||
{ 0xa1c0, &nouveau_object_ofuncs },
|
||||
{ KEPLER_B, &nvc0_fermi_ofuncs, nvc0_graph_9097_omthds },
|
||||
{ KEPLER_COMPUTE_B, &nouveau_object_ofuncs, nvc0_graph_90c0_omthds },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user