mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-23 09:56:00 +00:00
Merge branch 'linux-4.11' of git://github.com/skeggsb/linux into drm-fixes
GP107 modesetting support (just recognising the chipset, no other changes until 4.12) a couple of regression fixes, one of them a rather serious double-free issue that appeared in 4.10. * 'linux-4.11' of git://github.com/skeggsb/linux: drm/nouveau: initial support (display-only) for GP107 drm/nouveau/kms/nv50: fix double dma_fence_put() when destroying plane state drm/nouveau/kms/nv50: fix setting of HeadSetRasterVertBlankDmi method drm/nouveau/mmu/nv4a: use nv04 mmu rather than the nv44 one drm/nouveau/mpeg: mthd returns true on success now
This commit is contained in:
commit
2ca62d8a60
@ -995,7 +995,6 @@ nv50_wndw_atomic_destroy_state(struct drm_plane *plane,
|
|||||||
{
|
{
|
||||||
struct nv50_wndw_atom *asyw = nv50_wndw_atom(state);
|
struct nv50_wndw_atom *asyw = nv50_wndw_atom(state);
|
||||||
__drm_atomic_helper_plane_destroy_state(&asyw->state);
|
__drm_atomic_helper_plane_destroy_state(&asyw->state);
|
||||||
dma_fence_put(asyw->state.fence);
|
|
||||||
kfree(asyw);
|
kfree(asyw);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1007,7 +1006,6 @@ nv50_wndw_atomic_duplicate_state(struct drm_plane *plane)
|
|||||||
if (!(asyw = kmalloc(sizeof(*asyw), GFP_KERNEL)))
|
if (!(asyw = kmalloc(sizeof(*asyw), GFP_KERNEL)))
|
||||||
return NULL;
|
return NULL;
|
||||||
__drm_atomic_helper_plane_duplicate_state(plane, &asyw->state);
|
__drm_atomic_helper_plane_duplicate_state(plane, &asyw->state);
|
||||||
asyw->state.fence = NULL;
|
|
||||||
asyw->interval = 1;
|
asyw->interval = 1;
|
||||||
asyw->sema = armw->sema;
|
asyw->sema = armw->sema;
|
||||||
asyw->ntfy = armw->ntfy;
|
asyw->ntfy = armw->ntfy;
|
||||||
@ -2036,6 +2034,7 @@ nv50_head_atomic_check_mode(struct nv50_head *head, struct nv50_head_atom *asyh)
|
|||||||
u32 vbackp = (mode->vtotal - mode->vsync_end) * vscan / ilace;
|
u32 vbackp = (mode->vtotal - mode->vsync_end) * vscan / ilace;
|
||||||
u32 hfrontp = mode->hsync_start - mode->hdisplay;
|
u32 hfrontp = mode->hsync_start - mode->hdisplay;
|
||||||
u32 vfrontp = (mode->vsync_start - mode->vdisplay) * vscan / ilace;
|
u32 vfrontp = (mode->vsync_start - mode->vdisplay) * vscan / ilace;
|
||||||
|
u32 blankus;
|
||||||
struct nv50_head_mode *m = &asyh->mode;
|
struct nv50_head_mode *m = &asyh->mode;
|
||||||
|
|
||||||
m->h.active = mode->htotal;
|
m->h.active = mode->htotal;
|
||||||
@ -2049,9 +2048,10 @@ nv50_head_atomic_check_mode(struct nv50_head *head, struct nv50_head_atom *asyh)
|
|||||||
m->v.blanks = m->v.active - vfrontp - 1;
|
m->v.blanks = m->v.active - vfrontp - 1;
|
||||||
|
|
||||||
/*XXX: Safe underestimate, even "0" works */
|
/*XXX: Safe underestimate, even "0" works */
|
||||||
m->v.blankus = (m->v.active - mode->vdisplay - 2) * m->h.active;
|
blankus = (m->v.active - mode->vdisplay - 2) * m->h.active;
|
||||||
m->v.blankus *= 1000;
|
blankus *= 1000;
|
||||||
m->v.blankus /= mode->clock;
|
blankus /= mode->clock;
|
||||||
|
m->v.blankus = blankus;
|
||||||
|
|
||||||
if (mode->flags & DRM_MODE_FLAG_INTERLACE) {
|
if (mode->flags & DRM_MODE_FLAG_INTERLACE) {
|
||||||
m->v.blank2e = m->v.active + m->v.synce + vbackp;
|
m->v.blank2e = m->v.active + m->v.synce + vbackp;
|
||||||
|
@ -714,7 +714,7 @@ nv4a_chipset = {
|
|||||||
.i2c = nv04_i2c_new,
|
.i2c = nv04_i2c_new,
|
||||||
.imem = nv40_instmem_new,
|
.imem = nv40_instmem_new,
|
||||||
.mc = nv44_mc_new,
|
.mc = nv44_mc_new,
|
||||||
.mmu = nv44_mmu_new,
|
.mmu = nv04_mmu_new,
|
||||||
.pci = nv40_pci_new,
|
.pci = nv40_pci_new,
|
||||||
.therm = nv40_therm_new,
|
.therm = nv40_therm_new,
|
||||||
.timer = nv41_timer_new,
|
.timer = nv41_timer_new,
|
||||||
@ -2271,6 +2271,35 @@ nv136_chipset = {
|
|||||||
.fifo = gp100_fifo_new,
|
.fifo = gp100_fifo_new,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct nvkm_device_chip
|
||||||
|
nv137_chipset = {
|
||||||
|
.name = "GP107",
|
||||||
|
.bar = gf100_bar_new,
|
||||||
|
.bios = nvkm_bios_new,
|
||||||
|
.bus = gf100_bus_new,
|
||||||
|
.devinit = gm200_devinit_new,
|
||||||
|
.fb = gp102_fb_new,
|
||||||
|
.fuse = gm107_fuse_new,
|
||||||
|
.gpio = gk104_gpio_new,
|
||||||
|
.i2c = gm200_i2c_new,
|
||||||
|
.ibus = gm200_ibus_new,
|
||||||
|
.imem = nv50_instmem_new,
|
||||||
|
.ltc = gp100_ltc_new,
|
||||||
|
.mc = gp100_mc_new,
|
||||||
|
.mmu = gf100_mmu_new,
|
||||||
|
.pci = gp100_pci_new,
|
||||||
|
.pmu = gp102_pmu_new,
|
||||||
|
.timer = gk20a_timer_new,
|
||||||
|
.top = gk104_top_new,
|
||||||
|
.ce[0] = gp102_ce_new,
|
||||||
|
.ce[1] = gp102_ce_new,
|
||||||
|
.ce[2] = gp102_ce_new,
|
||||||
|
.ce[3] = gp102_ce_new,
|
||||||
|
.disp = gp102_disp_new,
|
||||||
|
.dma = gf119_dma_new,
|
||||||
|
.fifo = gp100_fifo_new,
|
||||||
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size,
|
nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size,
|
||||||
struct nvkm_notify *notify)
|
struct nvkm_notify *notify)
|
||||||
@ -2708,6 +2737,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
|||||||
case 0x132: device->chip = &nv132_chipset; break;
|
case 0x132: device->chip = &nv132_chipset; break;
|
||||||
case 0x134: device->chip = &nv134_chipset; break;
|
case 0x134: device->chip = &nv134_chipset; break;
|
||||||
case 0x136: device->chip = &nv136_chipset; break;
|
case 0x136: device->chip = &nv136_chipset; break;
|
||||||
|
case 0x137: device->chip = &nv137_chipset; break;
|
||||||
default:
|
default:
|
||||||
nvdev_error(device, "unknown chipset (%08x)\n", boot0);
|
nvdev_error(device, "unknown chipset (%08x)\n", boot0);
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -198,7 +198,7 @@ nv31_mpeg_intr(struct nvkm_engine *engine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == 0x00000010) {
|
if (type == 0x00000010) {
|
||||||
if (!nv31_mpeg_mthd(mpeg, mthd, data))
|
if (nv31_mpeg_mthd(mpeg, mthd, data))
|
||||||
show &= ~0x01000000;
|
show &= ~0x01000000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ nv44_mpeg_intr(struct nvkm_engine *engine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == 0x00000010) {
|
if (type == 0x00000010) {
|
||||||
if (!nv44_mpeg_mthd(subdev->device, mthd, data))
|
if (nv44_mpeg_mthd(subdev->device, mthd, data))
|
||||||
show &= ~0x01000000;
|
show &= ~0x01000000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user