Skip to content

Commit

Permalink
drm/gf100-/gr: implement the proper SetShaderExceptions method
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ben Skeggs committed Aug 9, 2014
1 parent e887377 commit d6bd380
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 17 deletions.
4 changes: 2 additions & 2 deletions drivers/gpu/drm/nouveau/core/engine/graph/gk20a.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
{}
};

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/nouveau/core/engine/graph/gm107.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
{}
};

Expand Down
30 changes: 28 additions & 2 deletions drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
{}
};

Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/nouveau/core/engine/graph/nvc0.h
Original file line number Diff line number Diff line change
Expand Up @@ -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[];

Expand Down
6 changes: 3 additions & 3 deletions drivers/gpu/drm/nouveau/core/engine/graph/nvc1.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
{}
};

Expand Down
8 changes: 4 additions & 4 deletions drivers/gpu/drm/nouveau/core/engine/graph/nvc8.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
{}
};

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/nouveau/core/engine/graph/nve4.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
{}
};

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/nouveau/core/engine/graph/nvf0.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
{}
};

Expand Down
8 changes: 8 additions & 0 deletions drivers/gpu/drm/nouveau/nvif/class.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,14 @@

#define MAXWELL_A 0x0000b097

#define FERMI_COMPUTE_A 0x000090c0
#define FERMI_COMPUTE_B 0x000091c0

#define KEPLER_COMPUTE_A 0x0000a0c0
#define KEPLER_COMPUTE_B 0x0000a1c0

#define MAXWELL_COMPUTE_A 0x0000b0c0


/*******************************************************************************
* client
Expand Down

0 comments on commit d6bd380

Please sign in to comment.