Loading drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.h +2 −2 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ struct nvkm_connector_impl { #ifndef MSG #define MSG(l,f,a...) do { \ struct nvkm_connector *_conn = (void *)conn; \ nv_##l(_conn, "%02x:%02x%02x: "f, _conn->index, \ nvkm_##l(&nvkm_disp(_conn)->engine.subdev, "%02x:%02x%02x: "f, _conn->index, \ _conn->info.location, _conn->info.type, ##a); \ } while(0) #define DBG(f,a...) MSG(debug, f, ##a) Loading drivers/gpu/drm/nouveau/nvkm/engine/disp/dacnv50.c +3 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,8 @@ nv50_dac_power(NV50_DISP_MTHD_V1) int nv50_dac_sense(NV50_DISP_MTHD_V1) { struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; union { struct nv50_disp_dac_load_v0 v0; } *args = data; Loading Loading @@ -104,7 +105,7 @@ nv50_dac_sense(NV50_DISP_MTHD_V1) break; ); nv_debug(disp, "DAC%d sense: 0x%08x\n", outp->or, loadval); nvkm_debug(subdev, "DAC%d sense: %08x\n", outp->or, loadval); if (!(loadval & 0x80000000)) return -ETIMEDOUT; Loading drivers/gpu/drm/nouveau/nvkm/engine/disp/gf110.c +42 −32 Original line number Diff line number Diff line Loading @@ -95,7 +95,8 @@ gf110_disp_dmac_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; int ret; Loading @@ -119,7 +120,7 @@ gf110_disp_dmac_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x80000000)) break; ) < 0) { nv_error(dmac, "init: 0x%08x\n", nvkm_error(subdev, "ch %d init: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); return -EBUSY; } Loading @@ -132,7 +133,8 @@ gf110_disp_dmac_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; /* deactivate channel */ Loading @@ -142,7 +144,7 @@ gf110_disp_dmac_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x001e0000)) break; ) < 0) { nv_error(dmac, "fini: 0x%08x\n", nvkm_error(subdev, "ch %d fini: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); if (suspend) return -EBUSY; Loading Loading @@ -304,7 +306,8 @@ gf110_disp_core_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int ret; ret = nv50_disp_chan_init(&mast->base); Loading @@ -327,7 +330,8 @@ gf110_disp_core_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610490) & 0x80000000)) break; ) < 0) { nv_error(mast, "init: 0x%08x\n", nvkm_rd32(device, 0x610490)); nvkm_error(subdev, "core init: %08x\n", nvkm_rd32(device, 0x610490)); return -EBUSY; } Loading @@ -339,7 +343,8 @@ gf110_disp_core_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; /* deactivate channel */ nvkm_mask(device, 0x610490, 0x00000010, 0x00000000); Loading @@ -348,7 +353,8 @@ gf110_disp_core_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610490) & 0x001e0000)) break; ) < 0) { nv_error(mast, "fini: 0x%08x\n", nvkm_rd32(device, 0x610490)); nvkm_error(subdev, "core fini: %08x\n", nvkm_rd32(device, 0x610490)); if (suspend) return -EBUSY; } Loading Loading @@ -559,7 +565,8 @@ gf110_disp_pioc_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; int ret; Loading @@ -577,7 +584,7 @@ gf110_disp_pioc_init(struct nvkm_object *object) if ((tmp & 0x00030000) == 0x00010000) break; ) < 0) { nv_error(pioc, "init: 0x%08x\n", nvkm_error(subdev, "ch %d init: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); return -EBUSY; } Loading @@ -590,7 +597,8 @@ gf110_disp_pioc_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; nvkm_mask(device, 0x610490 + (chid * 0x10), 0x00000001, 0x00000000); Loading @@ -598,7 +606,7 @@ gf110_disp_pioc_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x00030000)) break; ) < 0) { nv_error(pioc, "timeout: 0x%08x\n", nvkm_error(subdev, "ch %d fini: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); if (suspend) return -EBUSY; Loading Loading @@ -824,7 +832,8 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, u32 *data, u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_outp *info) { struct nvkm_bios *bios = nvkm_bios(disp); struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_bios *bios = subdev->device->bios; struct nvkm_output *outp; u16 mask, type; Loading @@ -841,7 +850,7 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, case 0x00000800: type = DCB_OUTPUT_DP; mask = 1; break; case 0x00000900: type = DCB_OUTPUT_DP; mask = 2; break; default: nv_error(disp, "unknown SOR mc 0x%08x\n", ctrl); nvkm_error(subdev, "unknown SOR mc %08x\n", ctrl); return NULL; } } Loading Loading @@ -1136,14 +1145,15 @@ gf110_disp_intr_supervisor(struct work_struct *work) struct nv50_disp *disp = container_of(work, struct nv50_disp, supervisor); struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 mask[4]; int head; nv_debug(disp, "supervisor %d\n", ffs(disp->super)); nvkm_debug(subdev, "supervisor %d\n", ffs(disp->super)); for (head = 0; head < disp->head.nr; head++) { mask[head] = nvkm_rd32(device, 0x6101d4 + (head * 0x800)); nv_debug(disp, "head %d: 0x%08x\n", head, mask[head]); nvkm_debug(subdev, "head %d: %08x\n", head, mask[head]); } if (disp->super & 0x00000001) { Loading @@ -1151,7 +1161,7 @@ gf110_disp_intr_supervisor(struct work_struct *work) for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 1.0 - head %d\n", head); nvkm_debug(subdev, "supervisor 1.0 - head %d\n", head); gf110_disp_intr_unk1_0(disp, head); } } else Loading @@ -1159,19 +1169,19 @@ gf110_disp_intr_supervisor(struct work_struct *work) for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 2.0 - head %d\n", head); nvkm_debug(subdev, "supervisor 2.0 - head %d\n", head); gf110_disp_intr_unk2_0(disp, head); } for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00010000)) continue; nv_debug(disp, "supervisor 2.1 - head %d\n", head); nvkm_debug(subdev, "supervisor 2.1 - head %d\n", head); gf110_disp_intr_unk2_1(disp, head); } for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 2.2 - head %d\n", head); nvkm_debug(subdev, "supervisor 2.2 - head %d\n", head); gf110_disp_intr_unk2_2(disp, head); } } else Loading @@ -1179,7 +1189,7 @@ gf110_disp_intr_supervisor(struct work_struct *work) for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 3.0 - head %d\n", head); nvkm_debug(subdev, "supervisor 3.0 - head %d\n", head); gf110_disp_intr_unk4_0(disp, head); } } Loading @@ -1193,13 +1203,13 @@ static void gf110_disp_intr_error(struct nv50_disp *disp, int chid) { const struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 mthd = nvkm_rd32(device, 0x6101f0 + (chid * 12)); u32 data = nvkm_rd32(device, 0x6101f4 + (chid * 12)); u32 unkn = nvkm_rd32(device, 0x6101f8 + (chid * 12)); nv_error(disp, "chid %d mthd 0x%04x data 0x%08x " "0x%08x 0x%08x\n", nvkm_error(subdev, "chid %d mthd %04x data %08x %08x %08x\n", chid, (mthd & 0x0000ffc), data, mthd, unkn); if (chid == 0) { Loading Loading @@ -1241,7 +1251,7 @@ void gf110_disp_intr(struct nvkm_subdev *subdev) { struct nv50_disp *disp = (void *)subdev; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_device *device = subdev->device; u32 intr = nvkm_rd32(device, 0x610088); int i; Loading Loading @@ -1273,7 +1283,7 @@ gf110_disp_intr(struct nvkm_subdev *subdev) } if (stat) { nv_info(disp, "unknown intr24 0x%08x\n", stat); nvkm_warn(subdev, "intr24 %08x\n", stat); nvkm_wr32(device, 0x6100ac, stat); } Loading drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.c +1 −1 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ nv04_disp_intr(struct nvkm_subdev *subdev) nv_device(disp)->chipset <= 0x40) { pvideo = nvkm_rd32(device, 0x8100); if (pvideo & ~0x11) nv_info(disp, "PVIDEO intr: %08x\n", pvideo); nvkm_info(subdev, "PVIDEO intr: %08x\n", pvideo); nvkm_wr32(device, 0x8100, pvideo); } } Loading drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c +51 −42 Original line number Diff line number Diff line Loading @@ -259,7 +259,8 @@ nv50_disp_dmac_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; int ret; Loading @@ -283,7 +284,7 @@ nv50_disp_dmac_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x80000000)) break; ) < 0) { nv_error(dmac, "init timeout, 0x%08x\n", nvkm_error(subdev, "ch %d init timeout, %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); return -EBUSY; } Loading @@ -296,7 +297,8 @@ nv50_disp_dmac_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; /* deactivate channel */ Loading @@ -306,7 +308,7 @@ nv50_disp_dmac_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x001e0000)) break; ) < 0) { nv_error(dmac, "fini timeout, 0x%08x\n", nvkm_error(subdev, "ch %d fini timeout, %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); if (suspend) return -EBUSY; Loading @@ -326,8 +328,8 @@ static void nv50_disp_mthd_list(struct nv50_disp *disp, int debug, u32 base, int c, const struct nv50_disp_mthd_list *list, int inst) { struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_object *object = nv_object(disp); struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int i; for (i = 0; list->data[i].mthd; i++) { Loading @@ -339,11 +341,12 @@ nv50_disp_mthd_list(struct nv50_disp *disp, int debug, u32 base, int c, char mods[16]; if (prev != next) snprintf(mods, sizeof(mods), "-> 0x%08x", next); snprintf(mods, sizeof(mods), "-> %08x", next); else snprintf(mods, sizeof(mods), "%13c", ' '); nv_printk_(object, debug, "\t0x%04x: 0x%08x %s%s%s\n", nvkm_printk_(subdev, debug, info, "\t%04x: %08x %s%s%s\n", mthd, prev, mods, name ? " // " : "", name ? name : ""); } Loading @@ -357,6 +360,7 @@ nv50_disp_mthd_chan(struct nv50_disp *disp, int debug, int head, struct nvkm_object *object = nv_object(disp); const struct nv50_disp_impl *impl = (void *)object->oclass; const struct nv50_disp_mthd_list *list; struct nvkm_subdev *subdev = &disp->base.engine.subdev; int i, j; if (debug > nv_subdev(disp)->debug) Loading @@ -381,7 +385,7 @@ nv50_disp_mthd_chan(struct nv50_disp *disp, int debug, int head, sname = sname_; } nv_printk_(object, debug, "%s%s:\n", cname, sname); nvkm_printk_(subdev, debug, info, "%s%s:\n", cname, sname); nv50_disp_mthd_list(disp, debug, base, impl->mthd.prev, list, j); } Loading Loading @@ -528,7 +532,8 @@ nv50_disp_core_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int ret; ret = nv50_disp_chan_init(&mast->base); Loading Loading @@ -557,7 +562,8 @@ nv50_disp_core_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610200) & 0x80000000)) break; ) < 0) { nv_error(mast, "init: 0x%08x\n", nvkm_rd32(device, 0x610200)); nvkm_error(subdev, "core init: %08x\n", nvkm_rd32(device, 0x610200)); return -EBUSY; } Loading @@ -569,7 +575,8 @@ nv50_disp_core_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; /* deactivate channel */ nvkm_mask(device, 0x610200, 0x00000010, 0x00000000); Loading @@ -578,7 +585,8 @@ nv50_disp_core_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610200) & 0x001e0000)) break; ) < 0) { nv_error(mast, "fini: 0x%08x\n", nvkm_rd32(device, 0x610200)); nvkm_error(subdev, "core fini: %08x\n", nvkm_rd32(device, 0x610200)); if (suspend) return -EBUSY; } Loading Loading @@ -822,7 +830,8 @@ nv50_disp_pioc_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; int ret; Loading @@ -835,7 +844,7 @@ nv50_disp_pioc_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x00030000)) break; ) < 0) { nv_error(pioc, "timeout0: 0x%08x\n", nvkm_error(subdev, "ch %d timeout0: %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); return -EBUSY; } Loading @@ -846,7 +855,7 @@ nv50_disp_pioc_init(struct nvkm_object *object) if ((tmp & 0x00030000) == 0x00010000) break; ) < 0) { nv_error(pioc, "timeout1: 0x%08x\n", nvkm_error(subdev, "ch %d timeout1: %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); return -EBUSY; } Loading @@ -859,7 +868,8 @@ nv50_disp_pioc_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; nvkm_mask(device, 0x610200 + (chid * 0x10), 0x00000001, 0x00000000); Loading @@ -867,7 +877,7 @@ nv50_disp_pioc_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x00030000)) break; ) < 0) { nv_error(pioc, "timeout: 0x%08x\n", nvkm_error(subdev, "ch %d timeout: %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); if (suspend) return -EBUSY; Loading Loading @@ -1362,25 +1372,21 @@ static void nv50_disp_intr_error(struct nv50_disp *disp, int chid) { struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 data = nvkm_rd32(device, 0x610084 + (chid * 0x08)); u32 addr = nvkm_rd32(device, 0x610080 + (chid * 0x08)); u32 code = (addr & 0x00ff0000) >> 16; u32 type = (addr & 0x00007000) >> 12; u32 mthd = (addr & 0x00000ffc); const struct nvkm_enum *ec, *et; char ecunk[6], etunk[6]; et = nvkm_enum_find(nv50_disp_intr_error_type, type); if (!et) snprintf(etunk, sizeof(etunk), "UNK%02X", type); ec = nvkm_enum_find(nv50_disp_intr_error_code, code); if (!ec) snprintf(ecunk, sizeof(ecunk), "UNK%02X", code); nv_error(disp, "%s [%s] chid %d mthd 0x%04x data 0x%08x\n", et ? et->name : etunk, ec ? ec->name : ecunk, nvkm_error(subdev, "ERROR %d [%s] %02x [%s] chid %d mthd %04x data %08x\n", type, et ? et->name : "", code, ec ? ec->name : "", chid, mthd, data); if (chid == 0) { Loading Loading @@ -1423,7 +1429,8 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, u32 *data, u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_outp *info) { struct nvkm_bios *bios = nvkm_bios(disp); struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_bios *bios = subdev->device->bios; struct nvkm_output *outp; u16 mask, type; Loading @@ -1440,7 +1447,7 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, case 0x00000800: type = DCB_OUTPUT_DP; mask = 1; break; case 0x00000900: type = DCB_OUTPUT_DP; mask = 2; break; default: nv_error(disp, "unknown SOR mc 0x%08x\n", ctrl); nvkm_error(subdev, "unknown SOR mc %08x\n", ctrl); return NULL; } or -= 4; Loading @@ -1451,7 +1458,7 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, switch (ctrl & 0x00000f00) { case 0x00000000: type |= disp->pior.type[or]; break; default: nv_error(disp, "unknown PIOR mc 0x%08x\n", ctrl); nvkm_error(subdev, "unknown PIOR mc %08x\n", ctrl); return NULL; } } Loading Loading @@ -1676,7 +1683,8 @@ static void nv50_disp_intr_unk20_2_dp(struct nv50_disp *disp, int head, struct dcb_output *outp, u32 pclk) { struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; const int link = !(outp->sorconf.link & 1); const int or = ffs(outp->or) - 1; const u32 soff = ( or * 0x800); Loading Loading @@ -1775,7 +1783,7 @@ nv50_disp_intr_unk20_2_dp(struct nv50_disp *disp, int head, } if (!bestTU) { nv_error(disp, "unable to find suitable dp config\n"); nvkm_error(subdev, "unable to find suitable dp config\n"); return; } Loading Loading @@ -1922,11 +1930,12 @@ nv50_disp_intr_supervisor(struct work_struct *work) struct nv50_disp *disp = container_of(work, struct nv50_disp, supervisor); struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 super = nvkm_rd32(device, 0x610030); int head; nv_debug(disp, "supervisor 0x%08x 0x%08x\n", disp->super, super); nvkm_debug(subdev, "supervisor %08x %08x\n", disp->super, super); if (disp->super & 0x00000010) { nv50_disp_mthd_chan(disp, NV_DBG_DEBUG, 0, impl->mthd.core); Loading Loading
drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.h +2 −2 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ struct nvkm_connector_impl { #ifndef MSG #define MSG(l,f,a...) do { \ struct nvkm_connector *_conn = (void *)conn; \ nv_##l(_conn, "%02x:%02x%02x: "f, _conn->index, \ nvkm_##l(&nvkm_disp(_conn)->engine.subdev, "%02x:%02x%02x: "f, _conn->index, \ _conn->info.location, _conn->info.type, ##a); \ } while(0) #define DBG(f,a...) MSG(debug, f, ##a) Loading
drivers/gpu/drm/nouveau/nvkm/engine/disp/dacnv50.c +3 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,8 @@ nv50_dac_power(NV50_DISP_MTHD_V1) int nv50_dac_sense(NV50_DISP_MTHD_V1) { struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; union { struct nv50_disp_dac_load_v0 v0; } *args = data; Loading Loading @@ -104,7 +105,7 @@ nv50_dac_sense(NV50_DISP_MTHD_V1) break; ); nv_debug(disp, "DAC%d sense: 0x%08x\n", outp->or, loadval); nvkm_debug(subdev, "DAC%d sense: %08x\n", outp->or, loadval); if (!(loadval & 0x80000000)) return -ETIMEDOUT; Loading
drivers/gpu/drm/nouveau/nvkm/engine/disp/gf110.c +42 −32 Original line number Diff line number Diff line Loading @@ -95,7 +95,8 @@ gf110_disp_dmac_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; int ret; Loading @@ -119,7 +120,7 @@ gf110_disp_dmac_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x80000000)) break; ) < 0) { nv_error(dmac, "init: 0x%08x\n", nvkm_error(subdev, "ch %d init: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); return -EBUSY; } Loading @@ -132,7 +133,8 @@ gf110_disp_dmac_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; /* deactivate channel */ Loading @@ -142,7 +144,7 @@ gf110_disp_dmac_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x001e0000)) break; ) < 0) { nv_error(dmac, "fini: 0x%08x\n", nvkm_error(subdev, "ch %d fini: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); if (suspend) return -EBUSY; Loading Loading @@ -304,7 +306,8 @@ gf110_disp_core_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int ret; ret = nv50_disp_chan_init(&mast->base); Loading @@ -327,7 +330,8 @@ gf110_disp_core_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610490) & 0x80000000)) break; ) < 0) { nv_error(mast, "init: 0x%08x\n", nvkm_rd32(device, 0x610490)); nvkm_error(subdev, "core init: %08x\n", nvkm_rd32(device, 0x610490)); return -EBUSY; } Loading @@ -339,7 +343,8 @@ gf110_disp_core_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; /* deactivate channel */ nvkm_mask(device, 0x610490, 0x00000010, 0x00000000); Loading @@ -348,7 +353,8 @@ gf110_disp_core_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610490) & 0x001e0000)) break; ) < 0) { nv_error(mast, "fini: 0x%08x\n", nvkm_rd32(device, 0x610490)); nvkm_error(subdev, "core fini: %08x\n", nvkm_rd32(device, 0x610490)); if (suspend) return -EBUSY; } Loading Loading @@ -559,7 +565,8 @@ gf110_disp_pioc_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; int ret; Loading @@ -577,7 +584,7 @@ gf110_disp_pioc_init(struct nvkm_object *object) if ((tmp & 0x00030000) == 0x00010000) break; ) < 0) { nv_error(pioc, "init: 0x%08x\n", nvkm_error(subdev, "ch %d init: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); return -EBUSY; } Loading @@ -590,7 +597,8 @@ gf110_disp_pioc_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; nvkm_mask(device, 0x610490 + (chid * 0x10), 0x00000001, 0x00000000); Loading @@ -598,7 +606,7 @@ gf110_disp_pioc_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x00030000)) break; ) < 0) { nv_error(pioc, "timeout: 0x%08x\n", nvkm_error(subdev, "ch %d fini: %08x\n", chid, nvkm_rd32(device, 0x610490 + (chid * 0x10))); if (suspend) return -EBUSY; Loading Loading @@ -824,7 +832,8 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, u32 *data, u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_outp *info) { struct nvkm_bios *bios = nvkm_bios(disp); struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_bios *bios = subdev->device->bios; struct nvkm_output *outp; u16 mask, type; Loading @@ -841,7 +850,7 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, case 0x00000800: type = DCB_OUTPUT_DP; mask = 1; break; case 0x00000900: type = DCB_OUTPUT_DP; mask = 2; break; default: nv_error(disp, "unknown SOR mc 0x%08x\n", ctrl); nvkm_error(subdev, "unknown SOR mc %08x\n", ctrl); return NULL; } } Loading Loading @@ -1136,14 +1145,15 @@ gf110_disp_intr_supervisor(struct work_struct *work) struct nv50_disp *disp = container_of(work, struct nv50_disp, supervisor); struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 mask[4]; int head; nv_debug(disp, "supervisor %d\n", ffs(disp->super)); nvkm_debug(subdev, "supervisor %d\n", ffs(disp->super)); for (head = 0; head < disp->head.nr; head++) { mask[head] = nvkm_rd32(device, 0x6101d4 + (head * 0x800)); nv_debug(disp, "head %d: 0x%08x\n", head, mask[head]); nvkm_debug(subdev, "head %d: %08x\n", head, mask[head]); } if (disp->super & 0x00000001) { Loading @@ -1151,7 +1161,7 @@ gf110_disp_intr_supervisor(struct work_struct *work) for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 1.0 - head %d\n", head); nvkm_debug(subdev, "supervisor 1.0 - head %d\n", head); gf110_disp_intr_unk1_0(disp, head); } } else Loading @@ -1159,19 +1169,19 @@ gf110_disp_intr_supervisor(struct work_struct *work) for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 2.0 - head %d\n", head); nvkm_debug(subdev, "supervisor 2.0 - head %d\n", head); gf110_disp_intr_unk2_0(disp, head); } for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00010000)) continue; nv_debug(disp, "supervisor 2.1 - head %d\n", head); nvkm_debug(subdev, "supervisor 2.1 - head %d\n", head); gf110_disp_intr_unk2_1(disp, head); } for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 2.2 - head %d\n", head); nvkm_debug(subdev, "supervisor 2.2 - head %d\n", head); gf110_disp_intr_unk2_2(disp, head); } } else Loading @@ -1179,7 +1189,7 @@ gf110_disp_intr_supervisor(struct work_struct *work) for (head = 0; head < disp->head.nr; head++) { if (!(mask[head] & 0x00001000)) continue; nv_debug(disp, "supervisor 3.0 - head %d\n", head); nvkm_debug(subdev, "supervisor 3.0 - head %d\n", head); gf110_disp_intr_unk4_0(disp, head); } } Loading @@ -1193,13 +1203,13 @@ static void gf110_disp_intr_error(struct nv50_disp *disp, int chid) { const struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 mthd = nvkm_rd32(device, 0x6101f0 + (chid * 12)); u32 data = nvkm_rd32(device, 0x6101f4 + (chid * 12)); u32 unkn = nvkm_rd32(device, 0x6101f8 + (chid * 12)); nv_error(disp, "chid %d mthd 0x%04x data 0x%08x " "0x%08x 0x%08x\n", nvkm_error(subdev, "chid %d mthd %04x data %08x %08x %08x\n", chid, (mthd & 0x0000ffc), data, mthd, unkn); if (chid == 0) { Loading Loading @@ -1241,7 +1251,7 @@ void gf110_disp_intr(struct nvkm_subdev *subdev) { struct nv50_disp *disp = (void *)subdev; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_device *device = subdev->device; u32 intr = nvkm_rd32(device, 0x610088); int i; Loading Loading @@ -1273,7 +1283,7 @@ gf110_disp_intr(struct nvkm_subdev *subdev) } if (stat) { nv_info(disp, "unknown intr24 0x%08x\n", stat); nvkm_warn(subdev, "intr24 %08x\n", stat); nvkm_wr32(device, 0x6100ac, stat); } Loading
drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.c +1 −1 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ nv04_disp_intr(struct nvkm_subdev *subdev) nv_device(disp)->chipset <= 0x40) { pvideo = nvkm_rd32(device, 0x8100); if (pvideo & ~0x11) nv_info(disp, "PVIDEO intr: %08x\n", pvideo); nvkm_info(subdev, "PVIDEO intr: %08x\n", pvideo); nvkm_wr32(device, 0x8100, pvideo); } } Loading
drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c +51 −42 Original line number Diff line number Diff line Loading @@ -259,7 +259,8 @@ nv50_disp_dmac_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; int ret; Loading @@ -283,7 +284,7 @@ nv50_disp_dmac_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x80000000)) break; ) < 0) { nv_error(dmac, "init timeout, 0x%08x\n", nvkm_error(subdev, "ch %d init timeout, %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); return -EBUSY; } Loading @@ -296,7 +297,8 @@ nv50_disp_dmac_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *dmac = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = dmac->base.chid; /* deactivate channel */ Loading @@ -306,7 +308,7 @@ nv50_disp_dmac_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x001e0000)) break; ) < 0) { nv_error(dmac, "fini timeout, 0x%08x\n", nvkm_error(subdev, "ch %d fini timeout, %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); if (suspend) return -EBUSY; Loading @@ -326,8 +328,8 @@ static void nv50_disp_mthd_list(struct nv50_disp *disp, int debug, u32 base, int c, const struct nv50_disp_mthd_list *list, int inst) { struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_object *object = nv_object(disp); struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int i; for (i = 0; list->data[i].mthd; i++) { Loading @@ -339,11 +341,12 @@ nv50_disp_mthd_list(struct nv50_disp *disp, int debug, u32 base, int c, char mods[16]; if (prev != next) snprintf(mods, sizeof(mods), "-> 0x%08x", next); snprintf(mods, sizeof(mods), "-> %08x", next); else snprintf(mods, sizeof(mods), "%13c", ' '); nv_printk_(object, debug, "\t0x%04x: 0x%08x %s%s%s\n", nvkm_printk_(subdev, debug, info, "\t%04x: %08x %s%s%s\n", mthd, prev, mods, name ? " // " : "", name ? name : ""); } Loading @@ -357,6 +360,7 @@ nv50_disp_mthd_chan(struct nv50_disp *disp, int debug, int head, struct nvkm_object *object = nv_object(disp); const struct nv50_disp_impl *impl = (void *)object->oclass; const struct nv50_disp_mthd_list *list; struct nvkm_subdev *subdev = &disp->base.engine.subdev; int i, j; if (debug > nv_subdev(disp)->debug) Loading @@ -381,7 +385,7 @@ nv50_disp_mthd_chan(struct nv50_disp *disp, int debug, int head, sname = sname_; } nv_printk_(object, debug, "%s%s:\n", cname, sname); nvkm_printk_(subdev, debug, info, "%s%s:\n", cname, sname); nv50_disp_mthd_list(disp, debug, base, impl->mthd.prev, list, j); } Loading Loading @@ -528,7 +532,8 @@ nv50_disp_core_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int ret; ret = nv50_disp_chan_init(&mast->base); Loading Loading @@ -557,7 +562,8 @@ nv50_disp_core_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610200) & 0x80000000)) break; ) < 0) { nv_error(mast, "init: 0x%08x\n", nvkm_rd32(device, 0x610200)); nvkm_error(subdev, "core init: %08x\n", nvkm_rd32(device, 0x610200)); return -EBUSY; } Loading @@ -569,7 +575,8 @@ nv50_disp_core_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_dmac *mast = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; /* deactivate channel */ nvkm_mask(device, 0x610200, 0x00000010, 0x00000000); Loading @@ -578,7 +585,8 @@ nv50_disp_core_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610200) & 0x001e0000)) break; ) < 0) { nv_error(mast, "fini: 0x%08x\n", nvkm_rd32(device, 0x610200)); nvkm_error(subdev, "core fini: %08x\n", nvkm_rd32(device, 0x610200)); if (suspend) return -EBUSY; } Loading Loading @@ -822,7 +830,8 @@ nv50_disp_pioc_init(struct nvkm_object *object) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; int ret; Loading @@ -835,7 +844,7 @@ nv50_disp_pioc_init(struct nvkm_object *object) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x00030000)) break; ) < 0) { nv_error(pioc, "timeout0: 0x%08x\n", nvkm_error(subdev, "ch %d timeout0: %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); return -EBUSY; } Loading @@ -846,7 +855,7 @@ nv50_disp_pioc_init(struct nvkm_object *object) if ((tmp & 0x00030000) == 0x00010000) break; ) < 0) { nv_error(pioc, "timeout1: 0x%08x\n", nvkm_error(subdev, "ch %d timeout1: %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); return -EBUSY; } Loading @@ -859,7 +868,8 @@ nv50_disp_pioc_fini(struct nvkm_object *object, bool suspend) { struct nv50_disp *disp = (void *)object->engine; struct nv50_disp_pioc *pioc = (void *)object; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; int chid = pioc->base.chid; nvkm_mask(device, 0x610200 + (chid * 0x10), 0x00000001, 0x00000000); Loading @@ -867,7 +877,7 @@ nv50_disp_pioc_fini(struct nvkm_object *object, bool suspend) if (!(nvkm_rd32(device, 0x610200 + (chid * 0x10)) & 0x00030000)) break; ) < 0) { nv_error(pioc, "timeout: 0x%08x\n", nvkm_error(subdev, "ch %d timeout: %08x\n", chid, nvkm_rd32(device, 0x610200 + (chid * 0x10))); if (suspend) return -EBUSY; Loading Loading @@ -1362,25 +1372,21 @@ static void nv50_disp_intr_error(struct nv50_disp *disp, int chid) { struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 data = nvkm_rd32(device, 0x610084 + (chid * 0x08)); u32 addr = nvkm_rd32(device, 0x610080 + (chid * 0x08)); u32 code = (addr & 0x00ff0000) >> 16; u32 type = (addr & 0x00007000) >> 12; u32 mthd = (addr & 0x00000ffc); const struct nvkm_enum *ec, *et; char ecunk[6], etunk[6]; et = nvkm_enum_find(nv50_disp_intr_error_type, type); if (!et) snprintf(etunk, sizeof(etunk), "UNK%02X", type); ec = nvkm_enum_find(nv50_disp_intr_error_code, code); if (!ec) snprintf(ecunk, sizeof(ecunk), "UNK%02X", code); nv_error(disp, "%s [%s] chid %d mthd 0x%04x data 0x%08x\n", et ? et->name : etunk, ec ? ec->name : ecunk, nvkm_error(subdev, "ERROR %d [%s] %02x [%s] chid %d mthd %04x data %08x\n", type, et ? et->name : "", code, ec ? ec->name : "", chid, mthd, data); if (chid == 0) { Loading Loading @@ -1423,7 +1429,8 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, u32 *data, u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_outp *info) { struct nvkm_bios *bios = nvkm_bios(disp); struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_bios *bios = subdev->device->bios; struct nvkm_output *outp; u16 mask, type; Loading @@ -1440,7 +1447,7 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, case 0x00000800: type = DCB_OUTPUT_DP; mask = 1; break; case 0x00000900: type = DCB_OUTPUT_DP; mask = 2; break; default: nv_error(disp, "unknown SOR mc 0x%08x\n", ctrl); nvkm_error(subdev, "unknown SOR mc %08x\n", ctrl); return NULL; } or -= 4; Loading @@ -1451,7 +1458,7 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl, switch (ctrl & 0x00000f00) { case 0x00000000: type |= disp->pior.type[or]; break; default: nv_error(disp, "unknown PIOR mc 0x%08x\n", ctrl); nvkm_error(subdev, "unknown PIOR mc %08x\n", ctrl); return NULL; } } Loading Loading @@ -1676,7 +1683,8 @@ static void nv50_disp_intr_unk20_2_dp(struct nv50_disp *disp, int head, struct dcb_output *outp, u32 pclk) { struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; const int link = !(outp->sorconf.link & 1); const int or = ffs(outp->or) - 1; const u32 soff = ( or * 0x800); Loading Loading @@ -1775,7 +1783,7 @@ nv50_disp_intr_unk20_2_dp(struct nv50_disp *disp, int head, } if (!bestTU) { nv_error(disp, "unable to find suitable dp config\n"); nvkm_error(subdev, "unable to find suitable dp config\n"); return; } Loading Loading @@ -1922,11 +1930,12 @@ nv50_disp_intr_supervisor(struct work_struct *work) struct nv50_disp *disp = container_of(work, struct nv50_disp, supervisor); struct nv50_disp_impl *impl = (void *)nv_object(disp)->oclass; struct nvkm_device *device = disp->base.engine.subdev.device; struct nvkm_subdev *subdev = &disp->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 super = nvkm_rd32(device, 0x610030); int head; nv_debug(disp, "supervisor 0x%08x 0x%08x\n", disp->super, super); nvkm_debug(subdev, "supervisor %08x %08x\n", disp->super, super); if (disp->super & 0x00000010) { nv50_disp_mthd_chan(disp, NV_DBG_DEBUG, 0, impl->mthd.core); Loading