@@ -101,15 +101,26 @@ gv100_disp_exception(struct nv50_disp *disp, int chid)
101
101
u32 stat = nvkm_rd32 (device , 0x611020 + (chid * 12 ));
102
102
u32 type = (stat & 0x00007000 ) >> 12 ;
103
103
u32 mthd = (stat & 0x00000fff ) << 2 ;
104
- u32 data = nvkm_rd32 (device , 0x611024 + (chid * 12 ));
105
- u32 code = nvkm_rd32 (device , 0x611028 + (chid * 12 ));
106
104
const struct nvkm_enum * reason =
107
105
nvkm_enum_find (nv50_disp_intr_error_type , type );
108
106
109
- nvkm_error (subdev , "chid %d stat %08x reason %d [%s] mthd %04x "
110
- "data %08x code %08x\n" ,
111
- chid , stat , type , reason ? reason -> name : "" ,
112
- mthd , data , code );
107
+ /*TODO: Suspect 33->41 are for WRBK channel exceptions, but we
108
+ * don't support those currently.
109
+ *
110
+ * CORE+WIN CHIDs map directly to the FE_EXCEPT() slots.
111
+ */
112
+ if (chid <= 32 ) {
113
+ u32 data = nvkm_rd32 (device , 0x611024 + (chid * 12 ));
114
+ u32 code = nvkm_rd32 (device , 0x611028 + (chid * 12 ));
115
+ nvkm_error (subdev , "chid %d stat %08x reason %d [%s] "
116
+ "mthd %04x data %08x code %08x\n" ,
117
+ chid , stat , type , reason ? reason -> name : "" ,
118
+ mthd , data , code );
119
+ } else {
120
+ nvkm_error (subdev , "chid %d stat %08x reason %d [%s] "
121
+ "mthd %04x\n" ,
122
+ chid , stat , type , reason ? reason -> name : "" , mthd );
123
+ }
113
124
114
125
if (chid < ARRAY_SIZE (disp -> chan ) && disp -> chan [chid ]) {
115
126
switch (mthd ) {
0 commit comments