Skip to content

Commit 8f598d1

Browse files
committed
Merge branch 'linux-5.10' of git://github.com/skeggsb/linux into drm-fixes
- atomic modesetting regression fix - ttm pre-nv50 fix - connector NULL ptr deref fix Signed-off-by: Dave Airlie <[email protected]> From: Ben Skeggs <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/CACAvsv5D9p78MNN0OxVeRZxN8LDqcadJEGUEFCgWJQ6+_rjPuw@mail.gmail.com
2 parents 41f3ed2 + 5c6fb4b commit 8f598d1

File tree

3 files changed

+24
-22
lines changed

3 files changed

+24
-22
lines changed

drivers/gpu/drm/nouveau/dispnv50/disp.c

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ nv50_outp_get_old_connector(struct nouveau_encoder *outp,
455455
* DAC
456456
*****************************************************************************/
457457
static void
458-
nv50_dac_disable(struct drm_encoder *encoder)
458+
nv50_dac_disable(struct drm_encoder *encoder, struct drm_atomic_state *state)
459459
{
460460
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
461461
struct nv50_core *core = nv50_disp(encoder->dev)->core;
@@ -467,7 +467,7 @@ nv50_dac_disable(struct drm_encoder *encoder)
467467
}
468468

469469
static void
470-
nv50_dac_enable(struct drm_encoder *encoder)
470+
nv50_dac_enable(struct drm_encoder *encoder, struct drm_atomic_state *state)
471471
{
472472
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
473473
struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
@@ -525,8 +525,8 @@ nv50_dac_detect(struct drm_encoder *encoder, struct drm_connector *connector)
525525
static const struct drm_encoder_helper_funcs
526526
nv50_dac_help = {
527527
.atomic_check = nv50_outp_atomic_check,
528-
.enable = nv50_dac_enable,
529-
.disable = nv50_dac_disable,
528+
.atomic_enable = nv50_dac_enable,
529+
.atomic_disable = nv50_dac_disable,
530530
.detect = nv50_dac_detect
531531
};
532532

@@ -1055,7 +1055,7 @@ nv50_dp_bpc_to_depth(unsigned int bpc)
10551055
}
10561056

10571057
static void
1058-
nv50_msto_enable(struct drm_encoder *encoder)
1058+
nv50_msto_enable(struct drm_encoder *encoder, struct drm_atomic_state *state)
10591059
{
10601060
struct nv50_head *head = nv50_head(encoder->crtc);
10611061
struct nv50_head_atom *armh = nv50_head_atom(head->base.base.state);
@@ -1101,7 +1101,7 @@ nv50_msto_enable(struct drm_encoder *encoder)
11011101
}
11021102

11031103
static void
1104-
nv50_msto_disable(struct drm_encoder *encoder)
1104+
nv50_msto_disable(struct drm_encoder *encoder, struct drm_atomic_state *state)
11051105
{
11061106
struct nv50_msto *msto = nv50_msto(encoder);
11071107
struct nv50_mstc *mstc = msto->mstc;
@@ -1118,8 +1118,8 @@ nv50_msto_disable(struct drm_encoder *encoder)
11181118

11191119
static const struct drm_encoder_helper_funcs
11201120
nv50_msto_help = {
1121-
.disable = nv50_msto_disable,
1122-
.enable = nv50_msto_enable,
1121+
.atomic_disable = nv50_msto_disable,
1122+
.atomic_enable = nv50_msto_enable,
11231123
.atomic_check = nv50_msto_atomic_check,
11241124
};
11251125

@@ -1645,8 +1645,7 @@ nv50_sor_disable(struct drm_encoder *encoder,
16451645
}
16461646

16471647
static void
1648-
nv50_sor_enable(struct drm_encoder *encoder,
1649-
struct drm_atomic_state *state)
1648+
nv50_sor_enable(struct drm_encoder *encoder, struct drm_atomic_state *state)
16501649
{
16511650
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
16521651
struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
@@ -1873,7 +1872,7 @@ nv50_pior_atomic_check(struct drm_encoder *encoder,
18731872
}
18741873

18751874
static void
1876-
nv50_pior_disable(struct drm_encoder *encoder)
1875+
nv50_pior_disable(struct drm_encoder *encoder, struct drm_atomic_state *state)
18771876
{
18781877
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
18791878
struct nv50_core *core = nv50_disp(encoder->dev)->core;
@@ -1885,7 +1884,7 @@ nv50_pior_disable(struct drm_encoder *encoder)
18851884
}
18861885

18871886
static void
1888-
nv50_pior_enable(struct drm_encoder *encoder)
1887+
nv50_pior_enable(struct drm_encoder *encoder, struct drm_atomic_state *state)
18891888
{
18901889
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
18911890
struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
@@ -1921,14 +1920,14 @@ nv50_pior_enable(struct drm_encoder *encoder)
19211920
}
19221921

19231922
core->func->pior->ctrl(core, nv_encoder->or, ctrl, asyh);
1924-
nv_encoder->crtc = encoder->crtc;
1923+
nv_encoder->crtc = &nv_crtc->base;
19251924
}
19261925

19271926
static const struct drm_encoder_helper_funcs
19281927
nv50_pior_help = {
19291928
.atomic_check = nv50_pior_atomic_check,
1930-
.enable = nv50_pior_enable,
1931-
.disable = nv50_pior_disable,
1929+
.atomic_enable = nv50_pior_enable,
1930+
.atomic_disable = nv50_pior_disable,
19321931
};
19331932

19341933
static void

drivers/gpu/drm/nouveau/nouveau_bo.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,14 +350,13 @@ set_placement_list(struct nouveau_drm *drm, struct ttm_place *pl, unsigned *n,
350350

351351
if (domain & NOUVEAU_GEM_DOMAIN_VRAM) {
352352
struct nvif_mmu *mmu = &drm->client.mmu;
353-
const u8 type = mmu->type[drm->ttm.type_vram].type;
354353

355354
pl[*n].mem_type = TTM_PL_VRAM;
356355
pl[*n].flags = flags & ~TTM_PL_FLAG_CACHED;
357356

358357
/* Some BARs do not support being ioremapped WC */
359358
if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA &&
360-
type & NVIF_MEM_UNCACHED)
359+
mmu->type[drm->ttm.type_vram].type & NVIF_MEM_UNCACHED)
361360
pl[*n].flags &= ~TTM_PL_FLAG_WC;
362361

363362
(*n)++;

drivers/gpu/drm/nouveau/nouveau_connector.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -532,11 +532,13 @@ static void
532532
nouveau_connector_set_edid(struct nouveau_connector *nv_connector,
533533
struct edid *edid)
534534
{
535-
struct edid *old_edid = nv_connector->edid;
535+
if (nv_connector->edid != edid) {
536+
struct edid *old_edid = nv_connector->edid;
536537

537-
drm_connector_update_edid_property(&nv_connector->base, edid);
538-
kfree(old_edid);
539-
nv_connector->edid = edid;
538+
drm_connector_update_edid_property(&nv_connector->base, edid);
539+
kfree(old_edid);
540+
nv_connector->edid = edid;
541+
}
540542
}
541543

542544
static enum drm_connector_status
@@ -669,8 +671,10 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)
669671
/* Try retrieving EDID via DDC */
670672
if (!drm->vbios.fp_no_ddc) {
671673
status = nouveau_connector_detect(connector, force);
672-
if (status == connector_status_connected)
674+
if (status == connector_status_connected) {
675+
edid = nv_connector->edid;
673676
goto out;
677+
}
674678
}
675679

676680
/* On some laptops (Sony, i'm looking at you) there appears to

0 commit comments

Comments
 (0)