drm/nouveau: report channel owner in error messages
Subsystems (3)
PATCH v2 4/4 drm/nouveau: report channel owner in error messages
Signed-off-by Marcin Slusarz <[email protected]>
--- drivers/gpu/drm/nouveau/core/engine/copy/nva3.c | 6 ++-- drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c | 6 ++-- drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c | 6 ++-- drivers/gpu/drm/nouveau/core/engine/fifo/nv04.c | 22 +++++++----- drivers/gpu/drm/nouveau/core/engine/fifo/nv50.c | 3 +- drivers/gpu/drm/nouveau/core/engine/fifo/nv84.c | 3 +- drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c | 42 +++++++++++++++------- drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c | 29 +++++++++++---- drivers/gpu/drm/nouveau/core/engine/graph/nv04.c | 8 +++-- drivers/gpu/drm/nouveau/core/engine/graph/nv10.c | 8 +++-- drivers/gpu/drm/nouveau/core/engine/graph/nv20.c | 7 ++-- drivers/gpu/drm/nouveau/core/engine/graph/nv40.c | 8 +++-- drivers/gpu/drm/nouveau/core/engine/graph/nv50.c | 34 +++++++++--------- drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c | 24 +++++++------ drivers/gpu/drm/nouveau/core/engine/graph/nve0.c | 44 ++++++++++++----------- drivers/gpu/drm/nouveau/core/engine/mpeg/nv31.c | 7 ++-- drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c | 45 ++++++++++++++++++------ drivers/gpu/drm/nouveau/nouveau_chan.c | 3 +- 18 files changed, 198 insertions(+), 107 deletions(-)
drivers/gpu/drm/nouveau/core/engine/copy/nva3.c +4 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/falcon.h> #include <core/class.h> #include <core/enum.h>
@@ -100,8 +101,9 @@ nva3_copy_intr(struct nouveau_subdev *subdev)if (stat &0x00000040 ) {nv_error (falcon,"DISPATCH_ERROR [" );nouveau_enum_print (nva3_copy_isr_error_name, ssta); -pr_cont ("] ch %d [0x%010llx] subc %d mthd 0x%04x data 0x%08x\n" , - chid, inst <<12 , subc, mthd, data); +pr_cont ("] ch %d [0x%010llx %s] subc %d mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), subc, + mthd, data);nv_wo32 (falcon,0x004 ,0x00000040 ); stat &= ~0x00000040 ; }
drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c +4 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/enum.h> #include <core/class.h>
@@ -128,8 +129,9 @@ nv84_crypt_intr(struct nouveau_subdev *subdev)if (stat) {nv_error (priv,"" );nouveau_bitfield_print (nv84_crypt_intr_mask, stat); -pr_cont (" ch %d [0x%010llx] mthd 0x%04x data 0x%08x\n" , - chid, (u64 )inst <<12 , mthd, data); +pr_cont (" ch %d [0x%010llx %s] mthd 0x%04x data 0x%08x\n" , + chid, (u64 )inst <<12 ,nouveau_client_name (engctx), + mthd, data); }nv_wr32 (priv,0x102130 , stat);
drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c +4 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/enum.h> #include <core/class.h>
@@ -102,8 +103,9 @@ nv98_crypt_intr(struct nouveau_subdev *subdev)if (stat &0x00000040 ) {nv_error (priv,"DISPATCH_ERROR [" );nouveau_enum_print (nv98_crypt_isr_error_name, ssta); -pr_cont ("] ch %d [0x%010llx] subc %d mthd 0x%04x data 0x%08x\n" , - chid, (u64 )inst <<12 , subc, mthd, data); +pr_cont ("] ch %d [0x%010llx %s] subc %d mthd 0x%04x data 0x%08x\n" , + chid, (u64 )inst <<12 ,nouveau_client_name (engctx), + subc, mthd, data);nv_wr32 (priv,0x087004 ,0x00000040 ); stat &= ~0x00000040 ; }
drivers/gpu/drm/nouveau/core/engine/fifo/nv04.c +14 -8
@@ -421,9 +421,12 @@ nv04_fifo_cache_error(struct nouveau_device *device, }if (!nv04_fifo_swmthd (priv, chid, mthd, data)) { +const char *client_name = +nouveau_client_name_for_fifo_chid (&priv->base, chid);nv_error (priv, -"CACHE_ERROR - Ch %d/%d Mthd 0x%04x Data 0x%08x\n" , - chid, (mthd >>13 ) &7 , mthd &0x1ffc , data); +"CACHE_ERROR - ch %d [%s] subc %d mthd 0x%04x data 0x%08x\n" , + chid, client_name, (mthd >>13 ) &7 , mthd &0x1ffc , + data); }nv_wr32 (priv,NV04_PFIFO_CACHE1_DMA_PUSH ,0 );
@@ -445,11 +448,14 @@ static void nv04_fifo_dma_pusher(struct nouveau_device *device, struct nv04_fifo_priv *priv, u32 chid) { + const char *client_name;u32 dma_get =nv_rd32 (priv,0x003244 );u32 dma_put =nv_rd32 (priv,0x003240 );u32 push =nv_rd32 (priv,0x003220 );u32 state =nv_rd32 (priv,0x003228 ); + client_name =nouveau_client_name_for_fifo_chid (&priv->base, chid); +if (device->card_type ==NV_50 ) {u32 ho_get =nv_rd32 (priv,0x003328 );u32 ho_put =nv_rd32 (priv,0x003320 );
@@ -457,9 +463,9 @@ nv04_fifo_dma_pusher(struct nouveau_device *device, struct nv04_fifo_priv *priv,u32 ib_put =nv_rd32 (priv,0x003330 );nv_error (priv, -"DMA_PUSHER - Ch %d Get 0x%02x%08x Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x State 0x%08x (err: %s) Push 0x%08x\n" , - chid, ho_get, dma_get, ho_put, dma_put, ib_get, ib_put, - state,nv_dma_state_err (state), push); +"DMA_PUSHER - ch %d [%s] get 0x%02x%08x put 0x%02x%08x ib_get 0x%08x ib_put 0x%08x state 0x%08x (err: %s) push 0x%08x\n" , + chid, client_name, ho_get, dma_get, ho_put, dma_put, + ib_get, ib_put, state,nv_dma_state_err (state), push);/* METHOD_COUNT, in DMA_STATE on earlier chipsets */ nv_wr32 (priv,0x003364 ,0x00000000 );
@@ -471,9 +477,9 @@ nv04_fifo_dma_pusher(struct nouveau_device *device, struct nv04_fifo_priv *priv,nv_wr32 (priv,0x003334 , ib_put); }else {nv_error (priv, -"DMA_PUSHER - Ch %d Get 0x%08x Put 0x%08x State 0x%08x (err: %s) Push 0x%08x\n" , - chid, dma_get, dma_put, state,nv_dma_state_err (state), - push); +"DMA_PUSHER - ch %d [%s] get 0x%08x put 0x%08x state 0x%08x (err: %s) push 0x%08x\n" , + chid, client_name, dma_get, dma_put, state, +nv_dma_state_err (state), push);if (dma_get != dma_put)nv_wr32 (priv,0x003244 , dma_put);
drivers/gpu/drm/nouveau/core/engine/fifo/nv50.c +2 -1
@@ -137,7 +137,8 @@ nv50_fifo_context_detach(struct nouveau_object *parent, bool suspend,/* do the kickoff... */ nv_wr32 (priv,0x0032fc ,nv_gpuobj (base)->addr >>12 );if (!nv_wait_ne (priv,0x0032fc ,0xffffffff ,0xffffffff )) { -nv_error (priv,"channel %d unload timeout\n" , chan->base.chid); +nv_error (priv,"channel %d [%s] unload timeout\n" , + chan->base.chid,nouveau_client_name (chan));if (suspend) ret = -EBUSY ; }
drivers/gpu/drm/nouveau/core/engine/fifo/nv84.c +2 -1
@@ -108,7 +108,8 @@ nv84_fifo_context_detach(struct nouveau_object *parent, bool suspend, done =nv_wait_ne (priv,0x0032fc ,0xffffffff ,0xffffffff );nv_wr32 (priv,0x002520 , save);if (!done) { -nv_error (priv,"channel %d unload timeout\n" , chan->base.chid); +nv_error (priv,"channel %d [%s] unload timeout\n" , + chan->base.chid,nouveau_client_name (chan));if (suspend)return -EBUSY ; }
drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c +29 -13
82 lines not on this page · raw message
drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c +23 -6
@@ -188,7 +188,8 @@ nve0_fifo_context_detach(struct nouveau_object *parent, bool suspend,nv_wr32 (priv,0x002634 , chan->base.chid);if (!nv_wait (priv,0x002634 ,0xffffffff , chan->base.chid)) { -nv_error (priv,"channel %d kick timeout\n" , chan->base.chid); +nv_error (priv,"channel %d [%s] kick timeout\n" , + chan->base.chid,nouveau_client_name (chan));if (suspend)return -EBUSY ; }
@@ -413,12 +414,15 @@ nve0_fifo_isr_vm_fault(struct nve0_fifo_priv *priv, int unit)u32 vahi =nv_rd32 (priv,0x2808 + (unit *0x10 ));u32 stat =nv_rd32 (priv,0x280c + (unit *0x10 ));u32 client = (stat &0x00001f00 ) >>8 ; +const struct nouveau_enum *en; +struct nouveau_engine *engine; +struct nouveau_object *engctx =NULL ;nv_error (priv,"PFIFO: %s fault at 0x%010llx [" , (stat &0x00000080 ) ?"write" :"read" , (u64 )vahi <<32 | valo);nouveau_enum_print (nve0_fifo_fault_reason, stat &0x0000000f );pr_cont ("] from " ); -nouveau_enum_print (nve0_fifo_fault_unit, unit); + en =nouveau_enum_print (nve0_fifo_fault_unit, unit);if (stat &0x00000040 ) {pr_cont ("/" );nouveau_enum_print (nve0_fifo_fault_hubclient, client);
@@ -426,7 +430,18 @@ nve0_fifo_isr_vm_fault(struct nve0_fifo_priv *priv, int unit)pr_cont ("/GPC%d/" , (stat &0x1f000000 ) >>24 );nouveau_enum_print (nve0_fifo_fault_gpcclient, client); } -pr_cont (" on channel 0x%010llx\n" , (u64 )inst <<12 ); + +if (en && en->data2) { + engine =nouveau_engine (priv, en->data2); +if (engine) + engctx =nouveau_engctx_get (engine, inst); + + } + +pr_cont (" on channel 0x%010llx [%s]\n" , (u64 )inst <<12 , +nouveau_client_name (engctx)); + +nouveau_engctx_put (engctx); } static int
@@ -482,9 +497,11 @@ nve0_fifo_isr_subfifo_intr(struct nve0_fifo_priv *priv, int unit)nv_error (priv,"SUBFIFO%d:" , unit);nouveau_bitfield_print (nve0_fifo_subfifo_intr, show);pr_cont ("\n" ); -nv_error (priv,"SUBFIFO%d: ch %d subc %d mthd 0x%04x " -"data 0x%08x\n" , - unit, chid, subc, mthd, data); +nv_error (priv, +"SUBFIFO%d: ch %d [%s] subc %d mthd 0x%04x data 0x%08x\n" , + unit, chid, +nouveau_client_name_for_fifo_chid (&priv->base, chid), + subc, mthd, data); }nv_wr32 (priv,0x0400c0 + (unit *0x2000 ),0x80600008 );
drivers/gpu/drm/nouveau/core/engine/graph/nv04.c +5 -3
@@ -22,6 +22,7 @@* DEALINGS IN THE SOFTWARE. */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/handle.h>
@@ -1304,9 +1305,10 @@ nv04_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv04_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d/%d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, subc, class, mthd, data); +nv_error (priv, +"ch %d [%s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid,nouveau_client_name (chan), subc, class, mthd, + data); }nouveau_namedb_put (handle);
drivers/gpu/drm/nouveau/core/engine/graph/nv10.c +5 -3
@@ -22,6 +22,7 @@* DEALINGS IN THE SOFTWARE. */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/handle.h>
@@ -1200,9 +1201,10 @@ nv10_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv10_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d/%d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, subc, class, mthd, data); +nv_error (priv, +"ch %d [%s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid,nouveau_client_name (chan), subc, class, mthd, + data); }nouveau_namedb_put (handle);
drivers/gpu/drm/nouveau/core/engine/graph/nv20.c +5 -2
@@ -1,3 +1,4 @@ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/engctx.h>
@@ -231,8 +232,10 @@ nv20_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv10_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d/%d class 0x%04x mthd 0x%04x data 0x%08x\n" , - chid, subc, class, mthd, data); +nv_error (priv, +"ch %d [%s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid,nouveau_client_name (engctx), subc, class, mthd, + data); }nouveau_engctx_put (engctx);
drivers/gpu/drm/nouveau/core/engine/graph/nv40.c +5 -3
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/handle.h>
@@ -328,9 +329,10 @@ nv40_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv10_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d [0x%08x] subc %d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, inst <<4 , subc, class, mthd, data); +nv_error (priv, +"ch %d [0x%08x %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<4 ,nouveau_client_name (engctx), subc, + class, mthd, data); }nouveau_engctx_put (engctx);
drivers/gpu/drm/nouveau/core/engine/graph/nv50.c +18 -16
@@ -24,6 +24,7 @@#include <core/os.h> #include <core/class.h> +#include <core/client.h> #include <core/handle.h> #include <core/engctx.h> #include <core/enum.h>
@@ -532,7 +533,7 @@ nv50_priv_tp_trap(struct nv50_graph_priv *priv, int type, u32 ustatus_old,static int nv50_graph_trap_handler (struct nv50_graph_priv *priv,u32 display, -int chid,u64 inst) +int chid,u64 inst,struct nouveau_object *engctx) {u32 status =nv_rd32 (priv,0x400108 );u32 ustatus;
@@ -565,12 +566,11 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,nv_error (priv,"TRAP DISPATCH_FAULT\n" );if (display && (addr &0x80000000 )) { -nv_error (priv,"ch %d [0x%010llx] " -"subc %d class 0x%04x mthd 0x%04x " -"data 0x%08x%08x " -"400808 0x%08x 400848 0x%08x\n" , - chid, inst, subc, class, mthd, datah, - datal, addr, r848); +nv_error (priv, +"ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x%08x 400808 0x%08x 400848 0x%08x\n" , + chid, inst, +nouveau_client_name (engctx), subc, + class, mthd, datah, datal, addr, r848); }else if (display) {nv_error (priv,"no stuck command?\n" );
@@ -591,11 +591,11 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,nv_error (priv,"TRAP DISPATCH_QUERY\n" );if (display && (addr &0x80000000 )) { -nv_error (priv,"ch %d [0x%010llx] " -"subc %d class 0x%04x mthd 0x%04x " -"data 0x%08x 40084c 0x%08x\n" , - chid, inst, subc, class, mthd, - data, addr); +nv_error (priv, +"ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x 40084c 0x%08x\n" , + chid, inst, +nouveau_client_name (engctx), subc, + class, mthd, data, addr); }else if (display) {nv_error (priv,"no stuck command?\n" );
@@ -778,7 +778,8 @@ nv50_graph_intr(struct nouveau_subdev *subdev) }if (stat &0x00200000 ) { -if (!nv50_graph_trap_handler (priv, show, chid, (u64 )inst <<12 )) +if (!nv50_graph_trap_handler (priv, show, chid, (u64 )inst <<12 , + engctx)) show &= ~0x00200000 ; }
@@ -789,9 +790,10 @@ nv50_graph_intr(struct nouveau_subdev *subdev)nv_error (priv,"" );nouveau_bitfield_print (nv50_graph_intr_name, show);pr_cont ("\n" ); -nv_error (priv,"ch %d [0x%010llx] subc %d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, (u64 )inst <<12 , subc, class, mthd, data); +nv_error (priv, +"ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, (u64 )inst <<12 ,nouveau_client_name (engctx), + subc, class, mthd, data); }if (nv_rd32 (priv,0x400824 ) & (1 <<31 ))
drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c +13 -11
@@ -433,10 +433,10 @@ nvc0_graph_intr(struct nouveau_subdev *subdev)if (stat &0x00000010 ) { handle =nouveau_handle_get_class (engctx, class);if (!handle ||nv_call (handle->object, mthd, data)) { -nv_error (priv,"ILLEGAL_MTHD ch %d [0x%010llx] " -"subc %d class 0x%04x mthd 0x%04x " -"data 0x%08x\n" , - chid, inst <<12 , subc, class, mthd, data); +nv_error (priv, +"ILLEGAL_MTHD ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), + subc, class, mthd, data); }nouveau_handle_put (handle);nv_wr32 (priv,0x400100 ,0x00000010 );
@@ -444,9 +444,10 @@ nvc0_graph_intr(struct nouveau_subdev *subdev) }if (stat &0x00000020 ) { -nv_error (priv,"ILLEGAL_CLASS ch %d [0x%010llx] subc %d " -"class 0x%04x mthd 0x%04x data 0x%08x\n" , - chid, inst <<12 , subc, class, mthd, data); +nv_error (priv, +"ILLEGAL_CLASS ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), subc, + class, mthd, data);nv_wr32 (priv,0x400100 ,0x00000020 ); stat &= ~0x00000020 ; }
@@ -454,15 +455,16 @@ nvc0_graph_intr(struct nouveau_subdev *subdev)if (stat &0x00100000 ) {nv_error (priv,"DATA_ERROR [" );nouveau_enum_print (nv50_data_error_names, code); -pr_cont ("] ch %d [0x%010llx] subc %d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, inst <<12 , subc, class, mthd, data); +pr_cont ("] ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), subc, + class, mthd, data);nv_wr32 (priv,0x400100 ,0x00100000 ); stat &= ~0x00100000 ; }if (stat &0x00200000 ) { -nv_error (priv,"TRAP ch %d [0x%010llx]\n" , chid, inst <<12 ); +nv_error (priv,"TRAP ch %d [0x%010llx %s]\n" , chid, inst <<12 , +nouveau_client_name (engctx));nvc0_graph_trap_intr (priv);nv_wr32 (priv,0x400100 ,0x00200000 ); stat &= ~0x00200000 ;
drivers/gpu/drm/nouveau/core/engine/graph/nve0.c +24 -20
97 lines not on this page · raw message
drivers/gpu/drm/nouveau/core/engine/mpeg/nv31.c +5 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/engctx.h>
@@ -231,8 +232,10 @@ nv31_mpeg_intr(struct nouveau_subdev *subdev)nv_wr32 (priv,0x00b230 ,0x00000001 );if (show) { -nv_error (priv,"ch %d [0x%08x] 0x%08x 0x%08x 0x%08x 0x%08x\n" , - chid, inst <<4 , stat, type, mthd, data); +nv_error (priv, +"ch %d [0x%08x %s] 0x%08x 0x%08x 0x%08x 0x%08x\n" , + chid, inst <<4 ,nouveau_client_name (engctx), stat, + type, mthd, data); }nouveau_engctx_put (engctx);
drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c +34 -11
78 lines not on this page · raw message
drivers/gpu/drm/nouveau/nouveau_chan.c +2 -1
@@ -58,7 +58,8 @@ nouveau_channel_idle(struct nouveau_channel *chan) }if (ret) -NV_ERROR (cli,"failed to idle channel 0x%08x\n" , chan->handle); +NV_ERROR (cli,"failed to idle channel 0x%08x [%s]\n" , + chan->handle, cli->base.name);return ret; }
Signature · 1 line
1.7.12
A message that is not in the archive (sent off-list or not yet received): 1355064322-23025-4-git-send-email-marcin.slusarz-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
PATCH v3 4/4 drm/nouveau: report channel owner in error messages
Signed-off-by Marcin Slusarz <[email protected]>
---
v2: finish, fixes after initial review
v3: fix reporting of vm_engine when client already went away
--- drivers/gpu/drm/nouveau/core/engine/copy/nva3.c | 6 ++-- drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c | 6 ++-- drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c | 6 ++-- drivers/gpu/drm/nouveau/core/engine/fifo/nv04.c | 22 +++++++----- drivers/gpu/drm/nouveau/core/engine/fifo/nv50.c | 3 +- drivers/gpu/drm/nouveau/core/engine/fifo/nv84.c | 3 +- drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c | 42 +++++++++++++++------- drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c | 29 +++++++++++---- drivers/gpu/drm/nouveau/core/engine/graph/nv04.c | 8 +++-- drivers/gpu/drm/nouveau/core/engine/graph/nv10.c | 8 +++-- drivers/gpu/drm/nouveau/core/engine/graph/nv20.c | 7 ++-- drivers/gpu/drm/nouveau/core/engine/graph/nv40.c | 8 +++-- drivers/gpu/drm/nouveau/core/engine/graph/nv50.c | 34 +++++++++--------- drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c | 24 +++++++------ drivers/gpu/drm/nouveau/core/engine/graph/nve0.c | 44 ++++++++++++----------- drivers/gpu/drm/nouveau/core/engine/mpeg/nv31.c | 7 ++-- drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c | 46 ++++++++++++++++++------ drivers/gpu/drm/nouveau/nouveau_chan.c | 3 +- 18 files changed, 199 insertions(+), 107 deletions(-)
drivers/gpu/drm/nouveau/core/engine/copy/nva3.c +4 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/falcon.h> #include <core/class.h> #include <core/enum.h>
@@ -100,8 +101,9 @@ nva3_copy_intr(struct nouveau_subdev *subdev)if (stat &0x00000040 ) {nv_error (falcon,"DISPATCH_ERROR [" );nouveau_enum_print (nva3_copy_isr_error_name, ssta); -pr_cont ("] ch %d [0x%010llx] subc %d mthd 0x%04x data 0x%08x\n" , - chid, inst <<12 , subc, mthd, data); +pr_cont ("] ch %d [0x%010llx %s] subc %d mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), subc, + mthd, data);nv_wo32 (falcon,0x004 ,0x00000040 ); stat &= ~0x00000040 ; }
drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c +4 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/enum.h> #include <core/class.h>
@@ -128,8 +129,9 @@ nv84_crypt_intr(struct nouveau_subdev *subdev)if (stat) {nv_error (priv,"" );nouveau_bitfield_print (nv84_crypt_intr_mask, stat); -pr_cont (" ch %d [0x%010llx] mthd 0x%04x data 0x%08x\n" , - chid, (u64 )inst <<12 , mthd, data); +pr_cont (" ch %d [0x%010llx %s] mthd 0x%04x data 0x%08x\n" , + chid, (u64 )inst <<12 ,nouveau_client_name (engctx), + mthd, data); }nv_wr32 (priv,0x102130 , stat);
drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c +4 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/enum.h> #include <core/class.h>
@@ -102,8 +103,9 @@ nv98_crypt_intr(struct nouveau_subdev *subdev)if (stat &0x00000040 ) {nv_error (priv,"DISPATCH_ERROR [" );nouveau_enum_print (nv98_crypt_isr_error_name, ssta); -pr_cont ("] ch %d [0x%010llx] subc %d mthd 0x%04x data 0x%08x\n" , - chid, (u64 )inst <<12 , subc, mthd, data); +pr_cont ("] ch %d [0x%010llx %s] subc %d mthd 0x%04x data 0x%08x\n" , + chid, (u64 )inst <<12 ,nouveau_client_name (engctx), + subc, mthd, data);nv_wr32 (priv,0x087004 ,0x00000040 ); stat &= ~0x00000040 ; }
drivers/gpu/drm/nouveau/core/engine/fifo/nv04.c +14 -8
@@ -421,9 +421,12 @@ nv04_fifo_cache_error(struct nouveau_device *device, }if (!nv04_fifo_swmthd (priv, chid, mthd, data)) { +const char *client_name = +nouveau_client_name_for_fifo_chid (&priv->base, chid);nv_error (priv, -"CACHE_ERROR - Ch %d/%d Mthd 0x%04x Data 0x%08x\n" , - chid, (mthd >>13 ) &7 , mthd &0x1ffc , data); +"CACHE_ERROR - ch %d [%s] subc %d mthd 0x%04x data 0x%08x\n" , + chid, client_name, (mthd >>13 ) &7 , mthd &0x1ffc , + data); }nv_wr32 (priv,NV04_PFIFO_CACHE1_DMA_PUSH ,0 );
@@ -445,11 +448,14 @@ static void nv04_fifo_dma_pusher(struct nouveau_device *device, struct nv04_fifo_priv *priv, u32 chid) { + const char *client_name;u32 dma_get =nv_rd32 (priv,0x003244 );u32 dma_put =nv_rd32 (priv,0x003240 );u32 push =nv_rd32 (priv,0x003220 );u32 state =nv_rd32 (priv,0x003228 ); + client_name =nouveau_client_name_for_fifo_chid (&priv->base, chid); +if (device->card_type ==NV_50 ) {u32 ho_get =nv_rd32 (priv,0x003328 );u32 ho_put =nv_rd32 (priv,0x003320 );
@@ -457,9 +463,9 @@ nv04_fifo_dma_pusher(struct nouveau_device *device, struct nv04_fifo_priv *priv,u32 ib_put =nv_rd32 (priv,0x003330 );nv_error (priv, -"DMA_PUSHER - Ch %d Get 0x%02x%08x Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x State 0x%08x (err: %s) Push 0x%08x\n" , - chid, ho_get, dma_get, ho_put, dma_put, ib_get, ib_put, - state,nv_dma_state_err (state), push); +"DMA_PUSHER - ch %d [%s] get 0x%02x%08x put 0x%02x%08x ib_get 0x%08x ib_put 0x%08x state 0x%08x (err: %s) push 0x%08x\n" , + chid, client_name, ho_get, dma_get, ho_put, dma_put, + ib_get, ib_put, state,nv_dma_state_err (state), push);/* METHOD_COUNT, in DMA_STATE on earlier chipsets */ nv_wr32 (priv,0x003364 ,0x00000000 );
@@ -471,9 +477,9 @@ nv04_fifo_dma_pusher(struct nouveau_device *device, struct nv04_fifo_priv *priv,nv_wr32 (priv,0x003334 , ib_put); }else {nv_error (priv, -"DMA_PUSHER - Ch %d Get 0x%08x Put 0x%08x State 0x%08x (err: %s) Push 0x%08x\n" , - chid, dma_get, dma_put, state,nv_dma_state_err (state), - push); +"DMA_PUSHER - ch %d [%s] get 0x%08x put 0x%08x state 0x%08x (err: %s) push 0x%08x\n" , + chid, client_name, dma_get, dma_put, state, +nv_dma_state_err (state), push);if (dma_get != dma_put)nv_wr32 (priv,0x003244 , dma_put);
drivers/gpu/drm/nouveau/core/engine/fifo/nv50.c +2 -1
@@ -137,7 +137,8 @@ nv50_fifo_context_detach(struct nouveau_object *parent, bool suspend,/* do the kickoff... */ nv_wr32 (priv,0x0032fc ,nv_gpuobj (base)->addr >>12 );if (!nv_wait_ne (priv,0x0032fc ,0xffffffff ,0xffffffff )) { -nv_error (priv,"channel %d unload timeout\n" , chan->base.chid); +nv_error (priv,"channel %d [%s] unload timeout\n" , + chan->base.chid,nouveau_client_name (chan));if (suspend) ret = -EBUSY ; }
drivers/gpu/drm/nouveau/core/engine/fifo/nv84.c +2 -1
@@ -108,7 +108,8 @@ nv84_fifo_context_detach(struct nouveau_object *parent, bool suspend, done =nv_wait_ne (priv,0x0032fc ,0xffffffff ,0xffffffff );nv_wr32 (priv,0x002520 , save);if (!done) { -nv_error (priv,"channel %d unload timeout\n" , chan->base.chid); +nv_error (priv,"channel %d [%s] unload timeout\n" , + chan->base.chid,nouveau_client_name (chan));if (suspend)return -EBUSY ; }
drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c +29 -13
82 lines not on this page · raw message
drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c +23 -6
@@ -188,7 +188,8 @@ nve0_fifo_context_detach(struct nouveau_object *parent, bool suspend,nv_wr32 (priv,0x002634 , chan->base.chid);if (!nv_wait (priv,0x002634 ,0xffffffff , chan->base.chid)) { -nv_error (priv,"channel %d kick timeout\n" , chan->base.chid); +nv_error (priv,"channel %d [%s] kick timeout\n" , + chan->base.chid,nouveau_client_name (chan));if (suspend)return -EBUSY ; }
@@ -413,12 +414,15 @@ nve0_fifo_isr_vm_fault(struct nve0_fifo_priv *priv, int unit)u32 vahi =nv_rd32 (priv,0x2808 + (unit *0x10 ));u32 stat =nv_rd32 (priv,0x280c + (unit *0x10 ));u32 client = (stat &0x00001f00 ) >>8 ; +const struct nouveau_enum *en; +struct nouveau_engine *engine; +struct nouveau_object *engctx =NULL ;nv_error (priv,"PFIFO: %s fault at 0x%010llx [" , (stat &0x00000080 ) ?"write" :"read" , (u64 )vahi <<32 | valo);nouveau_enum_print (nve0_fifo_fault_reason, stat &0x0000000f );pr_cont ("] from " ); -nouveau_enum_print (nve0_fifo_fault_unit, unit); + en =nouveau_enum_print (nve0_fifo_fault_unit, unit);if (stat &0x00000040 ) {pr_cont ("/" );nouveau_enum_print (nve0_fifo_fault_hubclient, client);
@@ -426,7 +430,18 @@ nve0_fifo_isr_vm_fault(struct nve0_fifo_priv *priv, int unit)pr_cont ("/GPC%d/" , (stat &0x1f000000 ) >>24 );nouveau_enum_print (nve0_fifo_fault_gpcclient, client); } -pr_cont (" on channel 0x%010llx\n" , (u64 )inst <<12 ); + +if (en && en->data2) { + engine =nouveau_engine (priv, en->data2); +if (engine) + engctx =nouveau_engctx_get (engine, inst); + + } + +pr_cont (" on channel 0x%010llx [%s]\n" , (u64 )inst <<12 , +nouveau_client_name (engctx)); + +nouveau_engctx_put (engctx); } static int
@@ -482,9 +497,11 @@ nve0_fifo_isr_subfifo_intr(struct nve0_fifo_priv *priv, int unit)nv_error (priv,"SUBFIFO%d:" , unit);nouveau_bitfield_print (nve0_fifo_subfifo_intr, show);pr_cont ("\n" ); -nv_error (priv,"SUBFIFO%d: ch %d subc %d mthd 0x%04x " -"data 0x%08x\n" , - unit, chid, subc, mthd, data); +nv_error (priv, +"SUBFIFO%d: ch %d [%s] subc %d mthd 0x%04x data 0x%08x\n" , + unit, chid, +nouveau_client_name_for_fifo_chid (&priv->base, chid), + subc, mthd, data); }nv_wr32 (priv,0x0400c0 + (unit *0x2000 ),0x80600008 );
drivers/gpu/drm/nouveau/core/engine/graph/nv04.c +5 -3
@@ -22,6 +22,7 @@* DEALINGS IN THE SOFTWARE. */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/handle.h>
@@ -1304,9 +1305,10 @@ nv04_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv04_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d/%d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, subc, class, mthd, data); +nv_error (priv, +"ch %d [%s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid,nouveau_client_name (chan), subc, class, mthd, + data); }nouveau_namedb_put (handle);
drivers/gpu/drm/nouveau/core/engine/graph/nv10.c +5 -3
@@ -22,6 +22,7 @@* DEALINGS IN THE SOFTWARE. */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/handle.h>
@@ -1200,9 +1201,10 @@ nv10_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv10_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d/%d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, subc, class, mthd, data); +nv_error (priv, +"ch %d [%s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid,nouveau_client_name (chan), subc, class, mthd, + data); }nouveau_namedb_put (handle);
drivers/gpu/drm/nouveau/core/engine/graph/nv20.c +5 -2
@@ -1,3 +1,4 @@ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/engctx.h>
@@ -231,8 +232,10 @@ nv20_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv10_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d/%d class 0x%04x mthd 0x%04x data 0x%08x\n" , - chid, subc, class, mthd, data); +nv_error (priv, +"ch %d [%s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid,nouveau_client_name (engctx), subc, class, mthd, + data); }nouveau_engctx_put (engctx);
drivers/gpu/drm/nouveau/core/engine/graph/nv40.c +5 -3
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/handle.h>
@@ -328,9 +329,10 @@ nv40_graph_intr(struct nouveau_subdev *subdev)pr_cont (" nstatus:" );nouveau_bitfield_print (nv10_graph_nstatus, nstatus);pr_cont ("\n" ); -nv_error (priv,"ch %d [0x%08x] subc %d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, inst <<4 , subc, class, mthd, data); +nv_error (priv, +"ch %d [0x%08x %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<4 ,nouveau_client_name (engctx), subc, + class, mthd, data); }nouveau_engctx_put (engctx);
drivers/gpu/drm/nouveau/core/engine/graph/nv50.c +18 -16
@@ -24,6 +24,7 @@#include <core/os.h> #include <core/class.h> +#include <core/client.h> #include <core/handle.h> #include <core/engctx.h> #include <core/enum.h>
@@ -532,7 +533,7 @@ nv50_priv_tp_trap(struct nv50_graph_priv *priv, int type, u32 ustatus_old,static int nv50_graph_trap_handler (struct nv50_graph_priv *priv,u32 display, -int chid,u64 inst) +int chid,u64 inst,struct nouveau_object *engctx) {u32 status =nv_rd32 (priv,0x400108 );u32 ustatus;
@@ -565,12 +566,11 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,nv_error (priv,"TRAP DISPATCH_FAULT\n" );if (display && (addr &0x80000000 )) { -nv_error (priv,"ch %d [0x%010llx] " -"subc %d class 0x%04x mthd 0x%04x " -"data 0x%08x%08x " -"400808 0x%08x 400848 0x%08x\n" , - chid, inst, subc, class, mthd, datah, - datal, addr, r848); +nv_error (priv, +"ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x%08x 400808 0x%08x 400848 0x%08x\n" , + chid, inst, +nouveau_client_name (engctx), subc, + class, mthd, datah, datal, addr, r848); }else if (display) {nv_error (priv,"no stuck command?\n" );
@@ -591,11 +591,11 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,nv_error (priv,"TRAP DISPATCH_QUERY\n" );if (display && (addr &0x80000000 )) { -nv_error (priv,"ch %d [0x%010llx] " -"subc %d class 0x%04x mthd 0x%04x " -"data 0x%08x 40084c 0x%08x\n" , - chid, inst, subc, class, mthd, - data, addr); +nv_error (priv, +"ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x 40084c 0x%08x\n" , + chid, inst, +nouveau_client_name (engctx), subc, + class, mthd, data, addr); }else if (display) {nv_error (priv,"no stuck command?\n" );
@@ -778,7 +778,8 @@ nv50_graph_intr(struct nouveau_subdev *subdev) }if (stat &0x00200000 ) { -if (!nv50_graph_trap_handler (priv, show, chid, (u64 )inst <<12 )) +if (!nv50_graph_trap_handler (priv, show, chid, (u64 )inst <<12 , + engctx)) show &= ~0x00200000 ; }
@@ -789,9 +790,10 @@ nv50_graph_intr(struct nouveau_subdev *subdev)nv_error (priv,"" );nouveau_bitfield_print (nv50_graph_intr_name, show);pr_cont ("\n" ); -nv_error (priv,"ch %d [0x%010llx] subc %d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, (u64 )inst <<12 , subc, class, mthd, data); +nv_error (priv, +"ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, (u64 )inst <<12 ,nouveau_client_name (engctx), + subc, class, mthd, data); }if (nv_rd32 (priv,0x400824 ) & (1 <<31 ))
drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c +13 -11
@@ -433,10 +433,10 @@ nvc0_graph_intr(struct nouveau_subdev *subdev)if (stat &0x00000010 ) { handle =nouveau_handle_get_class (engctx, class);if (!handle ||nv_call (handle->object, mthd, data)) { -nv_error (priv,"ILLEGAL_MTHD ch %d [0x%010llx] " -"subc %d class 0x%04x mthd 0x%04x " -"data 0x%08x\n" , - chid, inst <<12 , subc, class, mthd, data); +nv_error (priv, +"ILLEGAL_MTHD ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), + subc, class, mthd, data); }nouveau_handle_put (handle);nv_wr32 (priv,0x400100 ,0x00000010 );
@@ -444,9 +444,10 @@ nvc0_graph_intr(struct nouveau_subdev *subdev) }if (stat &0x00000020 ) { -nv_error (priv,"ILLEGAL_CLASS ch %d [0x%010llx] subc %d " -"class 0x%04x mthd 0x%04x data 0x%08x\n" , - chid, inst <<12 , subc, class, mthd, data); +nv_error (priv, +"ILLEGAL_CLASS ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), subc, + class, mthd, data);nv_wr32 (priv,0x400100 ,0x00000020 ); stat &= ~0x00000020 ; }
@@ -454,15 +455,16 @@ nvc0_graph_intr(struct nouveau_subdev *subdev)if (stat &0x00100000 ) {nv_error (priv,"DATA_ERROR [" );nouveau_enum_print (nv50_data_error_names, code); -pr_cont ("] ch %d [0x%010llx] subc %d class 0x%04x " -"mthd 0x%04x data 0x%08x\n" , - chid, inst <<12 , subc, class, mthd, data); +pr_cont ("] ch %d [0x%010llx %s] subc %d class 0x%04x mthd 0x%04x data 0x%08x\n" , + chid, inst <<12 ,nouveau_client_name (engctx), subc, + class, mthd, data);nv_wr32 (priv,0x400100 ,0x00100000 ); stat &= ~0x00100000 ; }if (stat &0x00200000 ) { -nv_error (priv,"TRAP ch %d [0x%010llx]\n" , chid, inst <<12 ); +nv_error (priv,"TRAP ch %d [0x%010llx %s]\n" , chid, inst <<12 , +nouveau_client_name (engctx));nvc0_graph_trap_intr (priv);nv_wr32 (priv,0x400100 ,0x00200000 ); stat &= ~0x00200000 ;
drivers/gpu/drm/nouveau/core/engine/graph/nve0.c +24 -20
97 lines not on this page · raw message
drivers/gpu/drm/nouveau/core/engine/mpeg/nv31.c +5 -2
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ +#include <core/client.h> #include <core/os.h> #include <core/class.h> #include <core/engctx.h>
@@ -231,8 +232,10 @@ nv31_mpeg_intr(struct nouveau_subdev *subdev)nv_wr32 (priv,0x00b230 ,0x00000001 );if (show) { -nv_error (priv,"ch %d [0x%08x] 0x%08x 0x%08x 0x%08x 0x%08x\n" , - chid, inst <<4 , stat, type, mthd, data); +nv_error (priv, +"ch %d [0x%08x %s] 0x%08x 0x%08x 0x%08x 0x%08x\n" , + chid, inst <<4 ,nouveau_client_name (engctx), stat, + type, mthd, data); }nouveau_engctx_put (engctx);
drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c +35 -11
79 lines not on this page · raw message
drivers/gpu/drm/nouveau/nouveau_chan.c +2 -1
@@ -58,7 +58,8 @@ nouveau_channel_idle(struct nouveau_channel *chan) }if (ret) -NV_ERROR (cli,"failed to idle channel 0x%08x\n" , chan->handle); +NV_ERROR (cli,"failed to idle channel 0x%08x [%s]\n" , + chan->handle, cli->base.name);return ret; }
Signature · 1 line
1.7.12