Skip to content

Commit 24f67d8

Browse files
committed
Merge tag 'drm-fixes-2021-10-01' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Daniel Vetter: "Dave is out on a long w/e, should be back next week. Nothing nefarious, just a bunch of driver fixes: amdgpu, i915, tegra, and one exynos driver fix" * tag 'drm-fixes-2021-10-01' of git://anongit.freedesktop.org/drm/drm: drm/amdgpu: force exit gfxoff on sdma resume for rmb s0ix drm/amdgpu: check tiling flags when creating FB on GFX8- drm/amd/display: Pass PCI deviceid into DC drm/amd/display: initialize backlight_ramping_override to false drm/amdgpu: correct initial cp_hqd_quantum for gfx9 drm/amd/display: Fix Display Flicker on embedded panels drm/amdgpu: fix gart.bo pin_count leak drm/i915: Remove warning from the rps worker drm/i915/request: fix early tracepoints drm/i915/guc, docs: Fix pdfdocs build error by removing nested grid gpu: host1x: Plug potential memory leak gpu/host1x: fence: Make spinlock static drm/tegra: uapi: Fix wrong mapping end address in case of disabled IOMMU drm/tegra: dc: Remove unused variables drm/exynos: Make use of the helper function devm_platform_ioremap_resource() drm/i915/gvt: fix the usage of ww lock in gvt scheduler.
2 parents 89e5035 + 78ea814 commit 24f67d8

25 files changed

+81
-77
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_display.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,28 @@ static int convert_tiling_flags_to_modifier(struct amdgpu_framebuffer *afb)
837837
return 0;
838838
}
839839

840+
/* Mirrors the is_displayable check in radeonsi's gfx6_compute_surface */
841+
static int check_tiling_flags_gfx6(struct amdgpu_framebuffer *afb)
842+
{
843+
u64 micro_tile_mode;
844+
845+
/* Zero swizzle mode means linear */
846+
if (AMDGPU_TILING_GET(afb->tiling_flags, SWIZZLE_MODE) == 0)
847+
return 0;
848+
849+
micro_tile_mode = AMDGPU_TILING_GET(afb->tiling_flags, MICRO_TILE_MODE);
850+
switch (micro_tile_mode) {
851+
case 0: /* DISPLAY */
852+
case 3: /* RENDER */
853+
return 0;
854+
default:
855+
drm_dbg_kms(afb->base.dev,
856+
"Micro tile mode %llu not supported for scanout\n",
857+
micro_tile_mode);
858+
return -EINVAL;
859+
}
860+
}
861+
840862
static void get_block_dimensions(unsigned int block_log2, unsigned int cpp,
841863
unsigned int *width, unsigned int *height)
842864
{
@@ -1103,6 +1125,7 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev,
11031125
const struct drm_mode_fb_cmd2 *mode_cmd,
11041126
struct drm_gem_object *obj)
11051127
{
1128+
struct amdgpu_device *adev = drm_to_adev(dev);
11061129
int ret, i;
11071130

11081131
/*
@@ -1122,6 +1145,14 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev,
11221145
if (ret)
11231146
return ret;
11241147

1148+
if (!dev->mode_config.allow_fb_modifiers) {
1149+
drm_WARN_ONCE(dev, adev->family >= AMDGPU_FAMILY_AI,
1150+
"GFX9+ requires FB check based on format modifier\n");
1151+
ret = check_tiling_flags_gfx6(rfb);
1152+
if (ret)
1153+
return ret;
1154+
}
1155+
11251156
if (dev->mode_config.allow_fb_modifiers &&
11261157
!(rfb->base.flags & DRM_MODE_FB_MODIFIERS)) {
11271158
ret = convert_tiling_flags_to_modifier(rfb);

drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3599,7 +3599,7 @@ static int gfx_v9_0_mqd_init(struct amdgpu_ring *ring)
35993599

36003600
/* set static priority for a queue/ring */
36013601
gfx_v9_0_mqd_set_priority(ring, mqd);
3602-
mqd->cp_hqd_quantum = RREG32(mmCP_HQD_QUANTUM);
3602+
mqd->cp_hqd_quantum = RREG32_SOC15(GC, 0, mmCP_HQD_QUANTUM);
36033603

36043604
/* map_queues packet doesn't need activate the queue,
36053605
* so only kiq need set this field.

drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,8 @@ static int gmc_v10_0_hw_fini(void *handle)
10981098
{
10991099
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
11001100

1101+
gmc_v10_0_gart_disable(adev);
1102+
11011103
if (amdgpu_sriov_vf(adev)) {
11021104
/* full access mode, so don't touch any GMC register */
11031105
DRM_DEBUG("For SRIOV client, shouldn't do anything.\n");
@@ -1106,7 +1108,6 @@ static int gmc_v10_0_hw_fini(void *handle)
11061108

11071109
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
11081110
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
1109-
gmc_v10_0_gart_disable(adev);
11101111

11111112
return 0;
11121113
}

drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1794,6 +1794,8 @@ static int gmc_v9_0_hw_fini(void *handle)
17941794
{
17951795
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
17961796

1797+
gmc_v9_0_gart_disable(adev);
1798+
17971799
if (amdgpu_sriov_vf(adev)) {
17981800
/* full access mode, so don't touch any GMC register */
17991801
DRM_DEBUG("For SRIOV client, shouldn't do anything.\n");
@@ -1802,7 +1804,6 @@ static int gmc_v9_0_hw_fini(void *handle)
18021804

18031805
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
18041806
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
1805-
gmc_v9_0_gart_disable(adev);
18061807

18071808
return 0;
18081809
}

drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,12 @@ static int sdma_v5_2_start(struct amdgpu_device *adev)
868868
msleep(1000);
869869
}
870870

871+
/* TODO: check whether can submit a doorbell request to raise
872+
* a doorbell fence to exit gfxoff.
873+
*/
874+
if (adev->in_s0ix)
875+
amdgpu_gfx_off_ctrl(adev, false);
876+
871877
sdma_v5_2_soft_reset(adev);
872878
/* unhalt the MEs */
873879
sdma_v5_2_enable(adev, true);
@@ -876,6 +882,8 @@ static int sdma_v5_2_start(struct amdgpu_device *adev)
876882

877883
/* start the gfx rings and rlc compute queues */
878884
r = sdma_v5_2_gfx_resume(adev);
885+
if (adev->in_s0ix)
886+
amdgpu_gfx_off_ctrl(adev, true);
879887
if (r)
880888
return r;
881889
r = sdma_v5_2_rlc_resume(adev);

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,7 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
11151115

11161116
init_data.asic_id.pci_revision_id = adev->pdev->revision;
11171117
init_data.asic_id.hw_internal_rev = adev->external_rev_id;
1118+
init_data.asic_id.chip_id = adev->pdev->device;
11181119

11191120
init_data.asic_id.vram_width = adev->gmc.vram_width;
11201121
/* TODO: initialize init_data.asic_id.vram_type here!!!! */
@@ -1719,6 +1720,7 @@ static int dm_late_init(void *handle)
17191720
linear_lut[i] = 0xFFFF * i / 15;
17201721

17211722
params.set = 0;
1723+
params.backlight_ramping_override = false;
17221724
params.backlight_ramping_start = 0xCCCC;
17231725
params.backlight_ramping_reduction = 0xCCCCCCCC;
17241726
params.backlight_lut_array_size = 16;

drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,14 +1826,13 @@ bool perform_link_training_with_retries(
18261826
if (panel_mode == DP_PANEL_MODE_EDP) {
18271827
struct cp_psp *cp_psp = &stream->ctx->cp_psp;
18281828

1829-
if (cp_psp && cp_psp->funcs.enable_assr) {
1830-
if (!cp_psp->funcs.enable_assr(cp_psp->handle, link)) {
1831-
/* since eDP implies ASSR on, change panel
1832-
* mode to disable ASSR
1833-
*/
1834-
panel_mode = DP_PANEL_MODE_DEFAULT;
1835-
}
1836-
}
1829+
if (cp_psp && cp_psp->funcs.enable_assr)
1830+
/* ASSR is bound to fail with unsigned PSP
1831+
* verstage used during devlopment phase.
1832+
* Report and continue with eDP panel mode to
1833+
* perform eDP link training with right settings
1834+
*/
1835+
cp_psp->funcs.enable_assr(cp_psp->handle, link);
18371836
}
18381837
#endif
18391838

drivers/gpu/drm/exynos/exynos5433_drm_decon.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,6 @@ static int exynos5433_decon_probe(struct platform_device *pdev)
793793
{
794794
struct device *dev = &pdev->dev;
795795
struct decon_context *ctx;
796-
struct resource *res;
797796
int ret;
798797
int i;
799798

@@ -818,8 +817,7 @@ static int exynos5433_decon_probe(struct platform_device *pdev)
818817
ctx->clks[i] = clk;
819818
}
820819

821-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
822-
ctx->addr = devm_ioremap_resource(dev, res);
820+
ctx->addr = devm_platform_ioremap_resource(pdev, 0);
823821
if (IS_ERR(ctx->addr))
824822
return PTR_ERR(ctx->addr);
825823

drivers/gpu/drm/exynos/exynos_drm_dsi.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,7 +1738,6 @@ static const struct component_ops exynos_dsi_component_ops = {
17381738
static int exynos_dsi_probe(struct platform_device *pdev)
17391739
{
17401740
struct device *dev = &pdev->dev;
1741-
struct resource *res;
17421741
struct exynos_dsi *dsi;
17431742
int ret, i;
17441743

@@ -1789,8 +1788,7 @@ static int exynos_dsi_probe(struct platform_device *pdev)
17891788
}
17901789
}
17911790

1792-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1793-
dsi->reg_base = devm_ioremap_resource(dev, res);
1791+
dsi->reg_base = devm_platform_ioremap_resource(pdev, 0);
17941792
if (IS_ERR(dsi->reg_base))
17951793
return PTR_ERR(dsi->reg_base);
17961794

drivers/gpu/drm/exynos/exynos_drm_fimc.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ struct fimc_scaler {
8585
/*
8686
* A structure of fimc context.
8787
*
88-
* @regs_res: register resources.
8988
* @regs: memory mapped io registers.
9089
* @lock: locking of operations.
9190
* @clocks: fimc clocks.
@@ -103,7 +102,6 @@ struct fimc_context {
103102
struct exynos_drm_ipp_formats *formats;
104103
unsigned int num_formats;
105104

106-
struct resource *regs_res;
107105
void __iomem *regs;
108106
spinlock_t lock;
109107
struct clk *clocks[FIMC_CLKS_MAX];
@@ -1327,8 +1325,7 @@ static int fimc_probe(struct platform_device *pdev)
13271325
ctx->num_formats = num_formats;
13281326

13291327
/* resource memory */
1330-
ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1331-
ctx->regs = devm_ioremap_resource(dev, ctx->regs_res);
1328+
ctx->regs = devm_platform_ioremap_resource(pdev, 0);
13321329
if (IS_ERR(ctx->regs))
13331330
return PTR_ERR(ctx->regs);
13341331

0 commit comments

Comments
 (0)