From: Akhil P Oommen <akhilpo@oss.qualcomm.com>
To: Rob Clark <robin.clark@oss.qualcomm.com>,
Sean Paul <sean@poorly.run>,
Konrad Dybcio <konradybcio@kernel.org>,
Dmitry Baryshkov <lumag@kernel.org>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Jessica Zhang <jesszhan0024@gmail.com>,
Marijn Suijten <marijn.suijten@somainline.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Neil Armstrong <neil.armstrong@linaro.org>,
Ulf Hansson <ulfh@kernel.org>
Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org,
Akisaira <akisaira@outlook.com>,
Vladyslav Tymoshchuk <tvlad744@gmail.com>,
Val Packett <val@packett.cool>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
Akhil P Oommen <akhilpo@oss.qualcomm.com>,
Haitao Xu <haitao.xu@oss.qualcomm.com>
Subject: [PATCH v2 8/8] drm/msm: Consolidate msm_gpu_probe into msm_drv_probe
Date: Fri, 30 Oct 2026 22:39:29 +0530 [thread overview]
Message-ID: <20261030-gmu-sync-state-fix-v2-8-89d3082d97af@oss.qualcomm.com> (raw)
In-Reply-To: <20261030-gmu-sync-state-fix-v2-0-89d3082d97af@oss.qualcomm.com>
From: Haitao Xu <haitao.xu@oss.qualcomm.com>
msm_gpu_probe() duplicates the setup already done by msm_drv_probe():
allocating msm_drm_private, setting the DMA mask, scanning for GPU
components, and registering a component master.
Reduce msm_gpu_probe() to delegate to msm_drv_probe(dev, NULL, NULL) and
drop the now-unused msm_gpu_drm_{bind,unbind,ops} helpers. Extend
msm_drm_bind() to select msm_gpu_driver when kms_init is NULL, and relax
the add_gpu_components() guard in msm_drv_probe() to always run for
GPU-only callers.
Signed-off-by: Haitao Xu <haitao.xu@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 2 +-
drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 3 +-
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 3 +-
drivers/gpu/drm/msm/msm_drv.c | 61 +++++++++-----------------------
drivers/gpu/drm/msm/msm_drv.h | 1 +
5 files changed, 22 insertions(+), 48 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index c044d3c9737a..4e5ba85317f6 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1423,7 +1423,7 @@ static int dpu_dev_probe(struct platform_device *pdev)
if (ret)
return ret;
- return msm_drv_probe(&pdev->dev, dpu_kms_init, &dpu_kms->base);
+ return msm_drv_probe(&pdev->dev, NULL, dpu_kms_init, &dpu_kms->base);
}
static void dpu_dev_remove(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
index c299fef1a400..ad08a040982f 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
@@ -553,7 +553,8 @@ static int mdp4_probe(struct platform_device *pdev)
if (IS_ERR(mdp4_kms->lut_clk))
return dev_err_probe(dev, PTR_ERR(mdp4_kms->lut_clk), "failed to get lut_clk\n");
- return msm_drv_probe(&pdev->dev, mdp4_kms_init, &mdp4_kms->base.base);
+ return msm_drv_probe(&pdev->dev, NULL, mdp4_kms_init,
+ &mdp4_kms->base.base);
}
static void mdp4_remove(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 40b4415c0fba..067e23fb9649 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -858,7 +858,8 @@ static int mdp5_dev_probe(struct platform_device *pdev)
mdp5_kms->base.base.irq = irq;
- return msm_drv_probe(&pdev->dev, mdp5_kms_init, &mdp5_kms->base.base);
+ return msm_drv_probe(&pdev->dev, NULL, mdp5_kms_init,
+ &mdp5_kms->base.base);
}
static void mdp5_dev_remove(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index c3b6a5f8f54e..9eb5d182eaed 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1129,10 +1129,17 @@ static int add_gpu_components(struct device *dev,
static int msm_drm_bind(struct device *dev)
{
- return msm_drm_init(dev,
- msm_separate_gpu_kms_components() ?
- &msm_kms_driver :
- &msm_driver);
+ struct msm_drm_private *priv = msm_drm_get_priv(dev);
+ const struct drm_driver *drv;
+
+ if (!priv->kms_init)
+ drv = &msm_gpu_driver;
+ else if (msm_separate_gpu_kms_components())
+ drv = &msm_kms_driver;
+ else
+ drv = &msm_driver;
+
+ return msm_drm_init(dev, drv);
}
static void msm_drm_unbind(struct device *dev)
@@ -1146,6 +1153,7 @@ const struct component_master_ops msm_drm_ops = {
};
int msm_drv_probe(struct device *master_dev,
+ struct device_node *gpu_np,
int (*kms_init)(struct drm_device *dev),
struct msm_kms *kms)
{
@@ -1169,8 +1177,8 @@ int msm_drv_probe(struct device *master_dev,
return ret;
}
- if (!msm_separate_gpu_kms_components()) {
- ret = add_gpu_components(master_dev, NULL, &match);
+ if (!kms_init || !msm_separate_gpu_kms_components()) {
+ ret = add_gpu_components(master_dev, gpu_np, &match);
if (ret)
return ret;
}
@@ -1189,51 +1197,14 @@ int msm_drv_probe(struct device *master_dev,
return 0;
}
-static int msm_gpu_drm_bind(struct device *dev)
-{
- return msm_drm_init(dev, &msm_gpu_driver);
-}
-
-static void msm_gpu_drm_unbind(struct device *dev)
-{
- msm_drm_uninit(dev);
-}
-
-static const struct component_master_ops msm_gpu_drm_ops = {
- .bind = msm_gpu_drm_bind,
- .unbind = msm_gpu_drm_unbind,
-};
-
int msm_gpu_probe(struct platform_device *pdev)
{
- struct msm_drm_private *priv;
- struct component_match *match = NULL;
- int ret;
-
- priv = devres_alloc(msm_drm_priv_release, sizeof(*priv), GFP_KERNEL);
- if (!priv)
- return -ENOMEM;
-
- devres_add(&pdev->dev, priv);
-
- /* on all devices that I am aware of, iommu's which can map
- * any address the cpu can see are used:
- */
- ret = dma_set_mask_and_coherent(&pdev->dev, ~0);
- if (ret)
- return ret;
-
- ret = add_gpu_components(&pdev->dev, pdev->dev.of_node, &match);
- if (ret)
- return ret;
-
- return component_master_add_with_match(&pdev->dev, &msm_gpu_drm_ops,
- match);
+ return msm_drv_probe(&pdev->dev, pdev->dev.of_node, NULL, NULL);
}
void msm_gpu_remove(struct platform_device *pdev)
{
- component_master_del(&pdev->dev, &msm_gpu_drm_ops);
+ component_master_del(&pdev->dev, &msm_drm_ops);
}
static int __init msm_drm_register(void)
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e70fd617f1e0..b65702ac0140 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -532,6 +532,7 @@ void msm_kms_pm_complete(struct device *dev);
int msm_gpu_probe(struct platform_device *pdev);
void msm_gpu_remove(struct platform_device *pdev);
int msm_drv_probe(struct device *dev,
+ struct device_node *gpu_np,
int (*kms_init)(struct drm_device *dev),
struct msm_kms *kms);
void msm_kms_shutdown(struct platform_device *pdev);
--
2.55.0
prev parent reply other threads:[~2026-10-30 17:10 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-30 17:09 [PATCH v2 0/8] drm/msm: Attach a driver to GMU Akhil P Oommen
2026-10-30 17:09 ` [PATCH v2 1/8] drm/msm/adreno: Fix invalid drvdata typecast in adreno_remove() Akhil P Oommen
2026-11-02 11:32 ` Konrad Dybcio
2026-10-30 17:09 ` [PATCH v2 2/8] drm/msm/adreno/a6xx: Mark cxpd device_link as stateless Akhil P Oommen
2026-11-02 11:33 ` Konrad Dybcio
2026-10-30 17:09 ` [PATCH v2 3/8] drm/msm: Keep DRM private data separate from GPU drvdata Akhil P Oommen
2026-11-02 11:37 ` Konrad Dybcio
2026-10-30 17:09 ` [PATCH v2 4/8] drm/msm/adreno: Simplify adreno_probe() Akhil P Oommen
2026-11-02 11:40 ` Konrad Dybcio
2026-10-30 17:09 ` [PATCH v2 5/8] drm/msm: Always use component model for standalone GPU Akhil P Oommen
2026-10-30 17:09 ` [PATCH v2 6/8] drm/msm: Attach a driver to the GMU Akhil P Oommen
2026-11-02 11:45 ` Konrad Dybcio
2026-10-30 17:09 ` [PATCH v2 7/8] drm/msm: Remove dead gpu_ops parameter from msm_drm_init/uninit Akhil P Oommen
2026-10-30 17:09 ` Akhil P Oommen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261030-gmu-sync-state-fix-v2-8-89d3082d97af@oss.qualcomm.com \
--to=akhilpo@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=akisaira@outlook.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=haitao.xu@oss.qualcomm.com \
--cc=jesszhan0024@gmail.com \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=neil.armstrong@linaro.org \
--cc=robin.clark@oss.qualcomm.com \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
--cc=tvlad744@gmail.com \
--cc=ulfh@kernel.org \
--cc=val@packett.cool \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®