Skip to content

Commit 3d8d35b

Browse files
committed
Merge tag 'drm-msm-fixes-2025-10-29' of https://gitlab.freedesktop.org/drm/msm into drm-fixes
Fixes for v6.18-rc4 CI - Disable broken sanity job GEM - Fix vm_bind prealloc error path - Fix dma-buf import free - Fix last-fence update - Reject MAP_NULL if PRR is unsupported - Ensure vm is created in VM_BIND ioctl GPU - GMU fw parsing fix DPU: - Fixed mode_valid callback - Fixed planes on DPU 1.x devices. Signed-off-by: Simona Vetter <simona.vetter@ffwll.ch> From: Rob Clark <rob.clark@oss.qualcomm.com> Link: https://patch.msgid.link/CACSVV03kUm1ms7FBg0m9U4ZcyickSWbnayAWqYqs0XH4UjWf+A@mail.gmail.com
2 parents 3a9f6bd + f5d0795 commit 3d8d35b

File tree

15 files changed

+59
-43
lines changed

15 files changed

+59
-43
lines changed

drivers/gpu/drm/ci/gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ sanity:
280280
GIT_STRATEGY: none
281281
script:
282282
# ci-fairy check-commits --junit-xml=check-commits.xml
283-
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request.xml
283+
# - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request.xml
284284
- |
285285
set -eu
286286
image_tags=(

drivers/gpu/drm/msm/adreno/a6xx_gmu.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,9 @@ static bool fw_block_mem(struct a6xx_gmu_bo *bo, const struct block_header *blk)
780780
return true;
781781
}
782782

783+
#define NEXT_BLK(blk) \
784+
((const struct block_header *)((const char *)(blk) + sizeof(*(blk)) + (blk)->size))
785+
783786
static int a6xx_gmu_fw_load(struct a6xx_gmu *gmu)
784787
{
785788
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
@@ -811,7 +814,7 @@ static int a6xx_gmu_fw_load(struct a6xx_gmu *gmu)
811814

812815
for (blk = (const struct block_header *) fw_image->data;
813816
(const u8*) blk < fw_image->data + fw_image->size;
814-
blk = (const struct block_header *) &blk->data[blk->size >> 2]) {
817+
blk = NEXT_BLK(blk)) {
815818
if (blk->size == 0)
816819
continue;
817820

drivers/gpu/drm/msm/adreno/adreno_gpu.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -348,13 +348,6 @@ int adreno_fault_handler(struct msm_gpu *gpu, unsigned long iova, int flags,
348348
return 0;
349349
}
350350

351-
static bool
352-
adreno_smmu_has_prr(struct msm_gpu *gpu)
353-
{
354-
struct adreno_smmu_priv *adreno_smmu = dev_get_drvdata(&gpu->pdev->dev);
355-
return adreno_smmu && adreno_smmu->set_prr_addr;
356-
}
357-
358351
int adreno_get_param(struct msm_gpu *gpu, struct msm_context *ctx,
359352
uint32_t param, uint64_t *value, uint32_t *len)
360353
{

drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,9 @@ static enum drm_mode_status dpu_crtc_mode_valid(struct drm_crtc *crtc,
15451545
adjusted_mode_clk = dpu_core_perf_adjusted_mode_clk(mode->clock,
15461546
dpu_kms->perf.perf_cfg);
15471547

1548+
if (dpu_kms->catalog->caps->has_3d_merge)
1549+
adjusted_mode_clk /= 2;
1550+
15481551
/*
15491552
* The given mode, adjusted for the perf clock factor, should not exceed
15501553
* the max core clock rate

drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,8 @@ static const u32 wb2_formats_rgb_yuv[] = {
267267
.base = 0x200, .len = 0xa0,}, \
268268
.csc_blk = {.name = "csc", \
269269
.base = 0x320, .len = 0x100,}, \
270-
.format_list = plane_formats_yuv, \
271-
.num_formats = ARRAY_SIZE(plane_formats_yuv), \
270+
.format_list = plane_formats, \
271+
.num_formats = ARRAY_SIZE(plane_formats), \
272272
.rotation_cfg = NULL, \
273273
}
274274

drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -500,13 +500,15 @@ static void _dpu_plane_setup_pixel_ext(struct dpu_hw_scaler3_cfg *scale_cfg,
500500
int i;
501501

502502
for (i = 0; i < DPU_MAX_PLANES; i++) {
503+
uint32_t w = src_w, h = src_h;
504+
503505
if (i == DPU_SSPP_COMP_1_2 || i == DPU_SSPP_COMP_2) {
504-
src_w /= chroma_subsmpl_h;
505-
src_h /= chroma_subsmpl_v;
506+
w /= chroma_subsmpl_h;
507+
h /= chroma_subsmpl_v;
506508
}
507509

508-
pixel_ext->num_ext_pxls_top[i] = src_h;
509-
pixel_ext->num_ext_pxls_left[i] = src_w;
510+
pixel_ext->num_ext_pxls_top[i] = h;
511+
pixel_ext->num_ext_pxls_left[i] = w;
510512
}
511513
}
512514

@@ -740,7 +742,7 @@ static int dpu_plane_atomic_check_pipe(struct dpu_plane *pdpu,
740742
* We already have verified scaling against platform limitations.
741743
* Now check if the SSPP supports scaling at all.
742744
*/
743-
if (!sblk->scaler_blk.len &&
745+
if (!(sblk->scaler_blk.len && pipe->sspp->ops.setup_scaler) &&
744746
((drm_rect_width(&new_plane_state->src) >> 16 !=
745747
drm_rect_width(&new_plane_state->dst)) ||
746748
(drm_rect_height(&new_plane_state->src) >> 16 !=
@@ -1278,7 +1280,7 @@ int dpu_assign_plane_resources(struct dpu_global_state *global_state,
12781280
state, plane_state,
12791281
prev_adjacent_plane_state);
12801282
if (ret)
1281-
break;
1283+
return ret;
12821284

12831285
prev_adjacent_plane_state = plane_state;
12841286
}

drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ struct dpu_hw_sspp *dpu_rm_reserve_sspp(struct dpu_rm *rm,
842842

843843
if (!reqs->scale && !reqs->yuv)
844844
hw_sspp = dpu_rm_try_sspp(rm, global_state, crtc, reqs, SSPP_TYPE_DMA);
845-
if (!hw_sspp && reqs->scale)
845+
if (!hw_sspp && !reqs->yuv)
846846
hw_sspp = dpu_rm_try_sspp(rm, global_state, crtc, reqs, SSPP_TYPE_RGB);
847847
if (!hw_sspp)
848848
hw_sspp = dpu_rm_try_sspp(rm, global_state, crtc, reqs, SSPP_TYPE_VIG);

drivers/gpu/drm/msm/disp/dpu1/dpu_writeback.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ static int dpu_wb_conn_atomic_check(struct drm_connector *connector,
7272
DPU_ERROR("invalid fb w=%d, maxlinewidth=%u\n",
7373
fb->width, dpu_wb_conn->maxlinewidth);
7474
return -EINVAL;
75+
} else if (fb->modifier != DRM_FORMAT_MOD_LINEAR) {
76+
DPU_ERROR("unsupported fb modifier:%#llx\n", fb->modifier);
77+
return -EINVAL;
7578
}
7679

7780
return drm_atomic_helper_check_wb_connector_state(conn_state->connector, conn_state->state);

drivers/gpu/drm/msm/dsi/phy/dsi_phy.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ struct msm_dsi_phy {
109109
struct msm_dsi_dphy_timing timing;
110110
const struct msm_dsi_phy_cfg *cfg;
111111
void *tuning_cfg;
112-
void *pll_data;
113112

114113
enum msm_dsi_phy_usecase usecase;
115114
bool regulator_ldo_mode;

drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -426,11 +426,8 @@ static void dsi_pll_enable_pll_bias(struct dsi_pll_7nm *pll)
426426
u32 data;
427427

428428
spin_lock_irqsave(&pll->pll_enable_lock, flags);
429-
if (pll->pll_enable_cnt++) {
430-
spin_unlock_irqrestore(&pll->pll_enable_lock, flags);
431-
WARN_ON(pll->pll_enable_cnt == INT_MAX);
432-
return;
433-
}
429+
pll->pll_enable_cnt++;
430+
WARN_ON(pll->pll_enable_cnt == INT_MAX);
434431

435432
data = readl(pll->phy->base + REG_DSI_7nm_PHY_CMN_CTRL_0);
436433
data |= DSI_7nm_PHY_CMN_CTRL_0_PLL_SHUTDOWNB;
@@ -876,7 +873,6 @@ static int dsi_pll_7nm_init(struct msm_dsi_phy *phy)
876873
spin_lock_init(&pll_7nm->pll_enable_lock);
877874

878875
pll_7nm->phy = phy;
879-
phy->pll_data = pll_7nm;
880876

881877
ret = pll_7nm_register(pll_7nm, phy->provided_clocks->hws);
882878
if (ret) {
@@ -965,10 +961,8 @@ static int dsi_7nm_phy_enable(struct msm_dsi_phy *phy,
965961
u32 const delay_us = 5;
966962
u32 const timeout_us = 1000;
967963
struct msm_dsi_dphy_timing *timing = &phy->timing;
968-
struct dsi_pll_7nm *pll = phy->pll_data;
969964
void __iomem *base = phy->base;
970965
bool less_than_1500_mhz;
971-
unsigned long flags;
972966
u32 vreg_ctrl_0, vreg_ctrl_1, lane_ctrl0;
973967
u32 glbl_pemph_ctrl_0;
974968
u32 glbl_str_swi_cal_sel_ctrl, glbl_hstx_str_ctrl_0;
@@ -1090,13 +1084,10 @@ static int dsi_7nm_phy_enable(struct msm_dsi_phy *phy,
10901084
glbl_rescode_bot_ctrl = 0x3c;
10911085
}
10921086

1093-
spin_lock_irqsave(&pll->pll_enable_lock, flags);
1094-
pll->pll_enable_cnt = 1;
10951087
/* de-assert digital and pll power down */
10961088
data = DSI_7nm_PHY_CMN_CTRL_0_DIGTOP_PWRDN_B |
10971089
DSI_7nm_PHY_CMN_CTRL_0_PLL_SHUTDOWNB;
10981090
writel(data, base + REG_DSI_7nm_PHY_CMN_CTRL_0);
1099-
spin_unlock_irqrestore(&pll->pll_enable_lock, flags);
11001091

11011092
/* Assert PLL core reset */
11021093
writel(0x00, base + REG_DSI_7nm_PHY_CMN_PLL_CNTRL);
@@ -1209,9 +1200,7 @@ static bool dsi_7nm_set_continuous_clock(struct msm_dsi_phy *phy, bool enable)
12091200

12101201
static void dsi_7nm_phy_disable(struct msm_dsi_phy *phy)
12111202
{
1212-
struct dsi_pll_7nm *pll = phy->pll_data;
12131203
void __iomem *base = phy->base;
1214-
unsigned long flags;
12151204
u32 data;
12161205

12171206
DBG("");
@@ -1238,11 +1227,8 @@ static void dsi_7nm_phy_disable(struct msm_dsi_phy *phy)
12381227
writel(data, base + REG_DSI_7nm_PHY_CMN_CTRL_0);
12391228
writel(0, base + REG_DSI_7nm_PHY_CMN_LANE_CTRL0);
12401229

1241-
spin_lock_irqsave(&pll->pll_enable_lock, flags);
1242-
pll->pll_enable_cnt = 0;
12431230
/* Turn off all PHY blocks */
12441231
writel(0x00, base + REG_DSI_7nm_PHY_CMN_CTRL_0);
1245-
spin_unlock_irqrestore(&pll->pll_enable_lock, flags);
12461232

12471233
/* make sure phy is turned off */
12481234
wmb();

0 commit comments

Comments
 (0)