* [PATCH RFC 0/6] Attempt to bring up display on Milos SoC
@ 2025-12-19 16:41 Luca Weiss
2025-12-19 16:41 ` [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos Luca Weiss
` (6 more replies)
0 siblings, 7 replies; 17+ messages in thread
From: Luca Weiss @ 2025-12-19 16:41 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree, Luca Weiss
Hi all,
This is a very WIP RFC series that attempts to add display support for
Milos, in particular on The Fairphone (Gen. 6) using the SM7635.
I have excluded sending panel driver and dt-bindings to reduce the patch
count, since they should not be relevant for now.
The data in the patches is mostly derived from the downstream msm-6.1
kernel for this SoC, named "volcano" downstream.
https://gerrit-public.fairphone.software/plugins/gitiles/platform/vendor/qcom/proprietary/display-devicetree/+/refs/heads/odm/rc/target/15/fp6/display/volcano-sde-common.dtsi
While I'm fairly sure a good chunk of the data is correct (marked "OK"),
there's still many unknowns (marked "TODO" or similar) that you can
see in the patches.
Unfortunately it doesn't work yet, with the screen staying dark and
these errors appearing in dmesg repeatedly.
[ 6.541696] [drm:dpu_encoder_frame_done_timeout:2727] [dpu error]enc33 frame done timeout
[ 6.587091] [drm:_dpu_encoder_phys_cmd_wait_for_idle] *ERROR* id:33 pp:2 kickoff timeout 0 cnt 1 koff_cnt 1
[ 6.587387] [drm:dpu_encoder_phys_cmd_prepare_for_kickoff] *ERROR* failed wait_for_idle: id:33 ret:-110 pp:2
[ 6.589509] [drm:dpu_encoder_helper_hw_reset:1763] [dpu error]enc33 ctl 1 reset failure
[ 6.637482] [drm:dpu_encoder_frame_done_timeout:2727] [dpu error]enc33 frame done timeout
[ 6.680077] [drm:dpu_encoder_phys_cmd_wait_for_commit_done] *ERROR* failed wait_for_idle: id:33 ret:-110 intf:1
[ 6.680356] [drm:dpu_kms_wait_for_commit_done:525] [dpu error]wait for commit done returned -110
[ 6.684517] [drm:dpu_encoder_helper_hw_reset:1763] [dpu error]enc33 ctl 1 reset failure
[ 6.729507] [drm:dpu_encoder_frame_done_timeout:2727] [dpu error]enc33 frame done timeout
The panel is the BOE BJ631JHM-T71-D900 with a Novatek NT37705 driver IC,
running in command mode (not video mode).
The vsync/TE pin should be configured correctly:
~ # cat /sys/kernel/debug/pinctrl/f100000.pinctrl/pinmux-pins | grep GPIO_129
pin 129 (GPIO_129): device ae94000.dsi.0 function mdp_vsync group gpio129
A full dmesg can be found at https://public.lucaweiss.eu/tmp/milos-mdss-log-2025-12-19.txt
Schematics of the device are also available if somebody wants to take a
look, starting on page 109:
https://www.fairphone.com/wp-content/uploads/2025/08/Fairphone-Gen.-6_-Information-on-how-to-repair-dispose-of-and-recycle-EN-NL-FR-DE.pdf
Please let me know if you have any ideas what could be wrong and how to
fix it. Thanks!
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
---
Luca Weiss (6):
soc: qcom: ubwc: Add config for Milos
drm/msm/dsi: add support for DSI-PHY on Milos
drm/msm: mdss: Add Milos support
drm/msm/dpu: Add Milos support
arm64: dts: qcom: milos: Add MDSS
arm64: dts: qcom: milos-fairphone-fp6: Enable panel
arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts | 71 +++++-
arch/arm64/boot/dts/qcom/milos.dtsi | 211 ++++++++++++++-
.../gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h | 284 +++++++++++++++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 22 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 2 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy.h | 1 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c | 24 ++
drivers/gpu/drm/msm/msm_mdss.c | 5 +
drivers/soc/qcom/ubwc_config.c | 12 +
11 files changed, 627 insertions(+), 7 deletions(-)
---
base-commit: 167013d059d5c4a09d49068408044c7a65a26cee
change-id: 20251219-milos-mdss-fa0763693775
Best regards,
--
Luca Weiss <luca.weiss@fairphone.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
@ 2025-12-19 16:41 ` Luca Weiss
2025-12-20 16:43 ` Dmitry Baryshkov
2025-12-22 9:00 ` Konrad Dybcio
2025-12-19 16:41 ` [PATCH RFC 2/6] drm/msm/dsi: add support for DSI-PHY on Milos Luca Weiss
` (5 subsequent siblings)
6 siblings, 2 replies; 17+ messages in thread
From: Luca Weiss @ 2025-12-19 16:41 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree, Luca Weiss
Describe the Universal Bandwidth Compression (UBWC) configuration
for the Milos SoC.
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
---
drivers/soc/qcom/ubwc_config.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/soc/qcom/ubwc_config.c b/drivers/soc/qcom/ubwc_config.c
index 15d373bff231..790e67c7db3e 100644
--- a/drivers/soc/qcom/ubwc_config.c
+++ b/drivers/soc/qcom/ubwc_config.c
@@ -16,6 +16,17 @@ static const struct qcom_ubwc_cfg_data no_ubwc_data = {
/* no UBWC, no HBB */
};
+static const struct qcom_ubwc_cfg_data milos_data = {
+ .ubwc_enc_version = UBWC_4_0,
+ .ubwc_dec_version = UBWC_4_0,
+ .ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
+ UBWC_SWIZZLE_ENABLE_LVL3,
+ .ubwc_bank_spread = true,
+ /* TODO: highest_bank_bit = 14 for LP_DDR4 */
+ .highest_bank_bit = 15,
+ .macrotile_mode = true,
+};
+
static const struct qcom_ubwc_cfg_data msm8937_data = {
.ubwc_enc_version = UBWC_1_0,
.ubwc_dec_version = UBWC_1_0,
@@ -223,6 +234,7 @@ static const struct of_device_id qcom_ubwc_configs[] __maybe_unused = {
{ .compatible = "qcom,apq8026", .data = &no_ubwc_data },
{ .compatible = "qcom,apq8074", .data = &no_ubwc_data },
{ .compatible = "qcom,apq8096", .data = &msm8998_data },
+ { .compatible = "qcom,milos", .data = &milos_data },
{ .compatible = "qcom,msm8226", .data = &no_ubwc_data },
{ .compatible = "qcom,msm8916", .data = &no_ubwc_data },
{ .compatible = "qcom,msm8917", .data = &no_ubwc_data },
--
2.52.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH RFC 2/6] drm/msm/dsi: add support for DSI-PHY on Milos
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
2025-12-19 16:41 ` [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos Luca Weiss
@ 2025-12-19 16:41 ` Luca Weiss
2025-12-20 16:50 ` Dmitry Baryshkov
2025-12-19 16:41 ` [PATCH RFC 3/6] drm/msm: mdss: Add Milos support Luca Weiss
` (4 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Luca Weiss @ 2025-12-19 16:41 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree, Luca Weiss
Add DSI PHY support for the Milos platform.
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
---
drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 2 ++
drivers/gpu/drm/msm/dsi/phy/dsi_phy.h | 1 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c | 24 ++++++++++++++++++++++++
3 files changed, 27 insertions(+)
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
index 4ea681130dba..0ac5029d3eb4 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
@@ -571,6 +571,8 @@ static const struct of_device_id dsi_phy_dt_match[] = {
.data = &dsi_phy_5nm_8350_cfgs },
{ .compatible = "qcom,sm8450-dsi-phy-5nm",
.data = &dsi_phy_5nm_8450_cfgs },
+ { .compatible = "qcom,milos-dsi-phy-4nm",
+ .data = &dsi_phy_4nm_milos_cfgs },
{ .compatible = "qcom,sm8550-dsi-phy-4nm",
.data = &dsi_phy_4nm_8550_cfgs },
{ .compatible = "qcom,sm8650-dsi-phy-4nm",
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
index 3cbf08231492..011bee593199 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
@@ -61,6 +61,7 @@ extern const struct msm_dsi_phy_cfg dsi_phy_5nm_8350_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_5nm_8450_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_5nm_8775p_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_5nm_sar2130p_cfgs;
+extern const struct msm_dsi_phy_cfg dsi_phy_4nm_milos_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_4nm_8550_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_4nm_8650_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_3nm_8750_cfgs;
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
index c5e1d2016bcc..6ca45e5c2cc0 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
@@ -1436,6 +1436,30 @@ const struct msm_dsi_phy_cfg dsi_phy_5nm_sar2130p_cfgs = {
.quirks = DSI_PHY_7NM_QUIRK_V5_2,
};
+const struct msm_dsi_phy_cfg dsi_phy_4nm_milos_cfgs = {
+ .has_phy_lane = true,
+ .regulator_data = dsi_phy_7nm_98000uA_regulators,
+ .num_regulators = ARRAY_SIZE(dsi_phy_7nm_98000uA_regulators),
+ .ops = {
+ .enable = dsi_7nm_phy_enable,
+ .disable = dsi_7nm_phy_disable,
+ .pll_init = dsi_pll_7nm_init,
+ .save_pll_state = dsi_7nm_pll_save_state,
+ .restore_pll_state = dsi_7nm_pll_restore_state,
+ .set_continuous_clock = dsi_7nm_set_continuous_clock,
+ },
+ // FIXME not sure about these rate values
+ .min_pll_rate = 600000000UL,
+#ifdef CONFIG_64BIT
+ .max_pll_rate = 5000000000UL,
+#else
+ .max_pll_rate = ULONG_MAX,
+#endif
+ .io_start = { 0xae95000 },
+ .num_dsi_phy = 1,
+ .quirks = DSI_PHY_7NM_QUIRK_V5_2,
+};
+
const struct msm_dsi_phy_cfg dsi_phy_4nm_8550_cfgs = {
.has_phy_lane = true,
.regulator_data = dsi_phy_7nm_98400uA_regulators,
--
2.52.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH RFC 3/6] drm/msm: mdss: Add Milos support
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
2025-12-19 16:41 ` [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos Luca Weiss
2025-12-19 16:41 ` [PATCH RFC 2/6] drm/msm/dsi: add support for DSI-PHY on Milos Luca Weiss
@ 2025-12-19 16:41 ` Luca Weiss
2025-12-20 16:52 ` Dmitry Baryshkov
2025-12-19 16:41 ` [PATCH RFC 4/6] drm/msm/dpu: " Luca Weiss
` (3 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Luca Weiss @ 2025-12-19 16:41 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree, Luca Weiss
Add support for MDSS on Milos.
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
---
drivers/gpu/drm/msm/msm_mdss.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
index 2d0e3e784c04..aa63c079d730 100644
--- a/drivers/gpu/drm/msm/msm_mdss.c
+++ b/drivers/gpu/drm/msm/msm_mdss.c
@@ -535,6 +535,10 @@ static void mdss_remove(struct platform_device *pdev)
msm_mdss_destroy(mdss);
}
+static const struct msm_mdss_data data_14k = {
+ .reg_bus_bw = 14000,
+};
+
static const struct msm_mdss_data data_57k = {
.reg_bus_bw = 57000,
};
@@ -553,6 +557,7 @@ static const struct msm_mdss_data data_153k6 = {
static const struct of_device_id mdss_dt_match[] = {
{ .compatible = "qcom,mdss", .data = &data_153k6 },
+ { .compatible = "qcom,milos-mdss", .data = &data_14k },
{ .compatible = "qcom,msm8998-mdss", .data = &data_76k8 },
{ .compatible = "qcom,qcm2290-mdss", .data = &data_76k8 },
{ .compatible = "qcom,sa8775p-mdss", .data = &data_74k },
--
2.52.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH RFC 4/6] drm/msm/dpu: Add Milos support
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
` (2 preceding siblings ...)
2025-12-19 16:41 ` [PATCH RFC 3/6] drm/msm: mdss: Add Milos support Luca Weiss
@ 2025-12-19 16:41 ` Luca Weiss
2025-12-20 17:02 ` Dmitry Baryshkov
2025-12-19 16:41 ` [PATCH RFC 5/6] arm64: dts: qcom: milos: Add MDSS Luca Weiss
` (2 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Luca Weiss @ 2025-12-19 16:41 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree, Luca Weiss
Add definitions for the display hardware used on the Qualcomm Milos
platform.
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
---
.../gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h | 284 +++++++++++++++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 22 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
4 files changed, 308 insertions(+)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h
new file mode 100644
index 000000000000..75deec923897
--- /dev/null
+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h
@@ -0,0 +1,284 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022. Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2015-2018, 2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2025, Luca Weiss <luca.weiss@fairphone.com>
+ */
+
+#ifndef _DPU_10_2_MILOS_H
+#define _DPU_10_2_MILOS_H
+
+static const struct dpu_caps milos_dpu_caps = {
+ .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, // OK
+ .max_mixer_blendstages = 0x7, // OK
+ .has_src_split = true, // OK
+ .has_dim_layer = true, // OK
+ .has_idle_pc = true, // OK?
+ .has_3d_merge = true, // OK?
+ .max_linewidth = 8192, // OK
+ .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, // OK
+};
+
+static const struct dpu_mdp_cfg milos_mdp = {
+ .name = "top_0",
+ .base = 0, .len = 0x494, // TODO? maybe qcom,sde-len = <0x488>;
+ .clk_ctrls = {
+ [DPU_CLK_CTRL_REG_DMA] = { .reg_off = 0x2bc, .bit_off = 20 }, // OK
+ },
+};
+
+static const struct dpu_ctl_cfg milos_ctl[] = { // number of ctl is okay, base probably also
+ {
+ .name = "ctl_0", .id = CTL_0,
+ .base = 0x15000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), // FIXME?
+ }, {
+ .name = "ctl_1", .id = CTL_1,
+ .base = 0x16000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
+ }, {
+ .name = "ctl_2", .id = CTL_2,
+ .base = 0x17000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
+ }, {
+ .name = "ctl_3", .id = CTL_3,
+ .base = 0x18000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
+ },
+};
+
+static const struct dpu_sspp_cfg milos_sspp[] = {
+ {
+ .name = "sspp_0", .id = SSPP_VIG0, // OK
+ .base = 0x4000, .len = 0x344, // OK
+ .features = VIG_SDM845_MASK_SDMA, // TODO?
+ .sblk = &dpu_vig_sblk_qseed3_3_3, // TODO?
+ .xin_id = 0, // OK
+ .type = SSPP_TYPE_VIG, // OK
+ }, {
+ .name = "sspp_8", .id = SSPP_DMA0, // FIXME name?
+ .base = 0x24000, .len = 0x344,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 1, // OK
+ .type = SSPP_TYPE_DMA, // OK
+ }, {
+ .name = "sspp_9", .id = SSPP_DMA1,
+ .base = 0x26000, .len = 0x344,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 5, // OK
+ .type = SSPP_TYPE_DMA, // OK
+ }, {
+ .name = "sspp_10", .id = SSPP_DMA2,
+ .base = 0x28000, .len = 0x344,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 9, // OK
+ .type = SSPP_TYPE_DMA, // OK
+ },
+};
+
+static const struct dpu_lm_cfg milos_lm[] = {
+ {
+ .name = "lm_0", .id = LM_0, // OK
+ .base = 0x44000, .len = 0x400,// OK
+ .features = MIXER_MSM8998_MASK, // TODO
+ .sblk = &sdm845_lm_sblk, // OK
+ .pingpong = PINGPONG_0, // TODO
+ .dspp = DSPP_0, // TODO
+ }, {
+ .name = "lm_2", .id = LM_2,
+ .base = 0x46000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sdm845_lm_sblk, // OK
+ .lm_pair = LM_3, // OK
+ .pingpong = PINGPONG_2,
+ //.dspp = DSPP_2, // FIXME?
+ }, {
+ .name = "lm_3", .id = LM_3,
+ .base = 0x47000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sdm845_lm_sblk, // OK
+ .lm_pair = LM_2, // OK
+ .pingpong = PINGPONG_3,
+ //.dspp = DSPP_3, // FIXME?
+ },
+};
+
+static const struct dpu_dspp_cfg milos_dspp[] = {
+ {
+ .name = "dspp_0", .id = DSPP_0, // OK
+ .base = 0x54000, .len = 0x1800, // OK
+ .sblk = &sdm845_dspp_sblk, // TODO
+ },
+};
+
+static const struct dpu_pingpong_cfg milos_pp[] = {
+ {
+ .name = "pingpong_0", .id = PINGPONG_0, // OK
+ .base = 0x69000, .len = 0, // OK
+ .sblk = &sc7280_pp_sblk, // OK
+ .merge_3d = MERGE_3D_0, // OK
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), // TODO
+ }, {
+ .name = "pingpong_2", .id = PINGPONG_2, // TODO
+ .base = 0x6b000, .len = 0, // OK
+ .sblk = &sc7280_pp_sblk, // OK
+ .merge_3d = MERGE_3D_1, // OK
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
+ }, {
+ .name = "pingpong_3", .id = PINGPONG_3,
+ .base = 0x6c000, .len = 0, // OK
+ .sblk = &sc7280_pp_sblk, // OK
+ .merge_3d = MERGE_3D_1, // OK
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
+ }, {
+ .name = "pingpong_cwb_0", .id = PINGPONG_CWB_0,
+ .base = 0x66000, .len = 0, // OK
+ .sblk = &sc7280_pp_sblk, // OK
+ },
+};
+
+static const struct dpu_merge_3d_cfg milos_merge_3d[] = {
+ {
+ .name = "merge_3d_1", .id = MERGE_3D_1, // TODO
+ .base = 0x4f000, .len = 0x8,
+ },
+};
+
+/*
+ * NOTE: Each display compression engine (DCE) contains dual hard
+ * slice DSC encoders so both share same base address but with
+ * its own different sub block address.
+ */
+static const struct dpu_dsc_cfg milos_dsc[] = {
+ {
+ .name = "dce_0_0", .id = DSC_0, // OK
+ .base = 0x80000, .len = 0x6, // OK
+ .features = BIT(DPU_DSC_NATIVE_42x_EN), // TODO
+ .sblk = &dsc_sblk_0, // TODO
+ }, {
+ .name = "dce_0_1", .id = DSC_1, // OK
+ .base = 0x80000, .len = 0x6, // OK
+ .features = BIT(DPU_DSC_NATIVE_42x_EN), // TODO
+ .sblk = &dsc_sblk_1, // TODO
+ },
+};
+
+static const struct dpu_wb_cfg milos_wb[] = {
+ {
+ .name = "wb_2", .id = WB_2, // TODO
+ .base = 0x65000, .len = 0x2c8, // OK
+ .features = WB_SDM845_MASK, // TODO
+ .format_list = wb2_formats_rgb_yuv, // TODO
+ .num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv), // TODO
+ .xin_id = 6, // OK
+ .vbif_idx = VBIF_RT, // TODO
+ .maxlinewidth = 4096, // OK
+ .intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 4), // TODO
+ },
+};
+
+static const struct dpu_cwb_cfg milos_cwb[] = {
+ {
+ .name = "cwb_0", .id = CWB_0,
+ .base = 0x66200, .len = 0x8,
+ },
+};
+
+static const struct dpu_intf_cfg milos_intf[] = {
+ {
+ .name = "intf_0", .id = INTF_0, // OK
+ .base = 0x34000, .len = 0x280, // OK size=0x300?
+ .type = INTF_DP, // OK
+ .controller_id = MSM_DP_CONTROLLER_0, // OK?
+ .prog_fetch_lines_worst_case = 24, // TODO
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 24), // TODO
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 25), // TODO
+ }, {
+ .name = "intf_1", .id = INTF_1, // OK
+ .base = 0x35000, .len = 0x300, // OK size=0x300?
+ .type = INTF_DSI, // OK
+ .controller_id = MSM_DSI_CONTROLLER_0, // OK?
+ .prog_fetch_lines_worst_case = 24, // TODO
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 26), // TODO
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 27), // TODO
+ .intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF1_TEAR_INTR, 2), // TODO
+ }, {
+ .name = "intf_3", .id = INTF_3, // TODO?
+ .base = 0x37000, .len = 0x280, // OK size=0x300?
+ .type = INTF_DP, // OK
+ .controller_id = MSM_DP_CONTROLLER_1, // FIXME, only one DP controller?
+ .prog_fetch_lines_worst_case = 24, // TODO
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 30), // TODO
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 31), // TODO
+ },
+};
+
+static const struct dpu_perf_cfg milos_perf_data = {
+ .max_bw_low = 7100000,
+ .max_bw_high = 9800000,
+ .min_core_ib = 2500000,
+ .min_llcc_ib = 0,
+ .min_dram_ib = 1600000,
+ .min_prefill_lines = 35, // TODO
+ /* FIXME: lut tables */
+ .danger_lut_tbl = {0x3ffff, 0x3ffff, 0x0}, // TODO
+ .safe_lut_tbl = {0xfe00, 0xfe00, 0xffff}, // TODO
+ .qos_lut_tbl = { // TODO
+ {.nentry = ARRAY_SIZE(sc7180_qos_linear),
+ .entries = sc7180_qos_linear
+ },
+ {.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
+ .entries = sc7180_qos_macrotile
+ },
+ {.nentry = ARRAY_SIZE(sc7180_qos_nrt),
+ .entries = sc7180_qos_nrt
+ },
+ /* TODO: macrotile-qseed is different from macrotile */
+ },
+ .cdp_cfg = { // TODO
+ {.rd_enable = 1, .wr_enable = 1},
+ {.rd_enable = 1, .wr_enable = 0}
+ },
+ .clk_inefficiency_factor = 105, // TODO
+ .bw_inefficiency_factor = 120, // TODO
+};
+
+static const struct dpu_mdss_version milos_mdss_ver = {
+ .core_major_ver = 10,
+ .core_minor_ver = 2,
+};
+
+const struct dpu_mdss_cfg dpu_milos_cfg = {
+ .mdss_ver = &milos_mdss_ver,
+ .caps = &milos_dpu_caps,
+ .mdp = &milos_mdp,
+ .cdm = &dpu_cdm_5_x,
+ .ctl_count = ARRAY_SIZE(milos_ctl),
+ .ctl = milos_ctl,
+ .sspp_count = ARRAY_SIZE(milos_sspp),
+ .sspp = milos_sspp,
+ .mixer_count = ARRAY_SIZE(milos_lm),
+ .mixer = milos_lm,
+ .dspp_count = ARRAY_SIZE(milos_dspp),
+ .dspp = milos_dspp,
+ .pingpong_count = ARRAY_SIZE(milos_pp),
+ .pingpong = milos_pp,
+ .dsc_count = ARRAY_SIZE(milos_dsc),
+ .dsc = milos_dsc,
+ .merge_3d_count = ARRAY_SIZE(milos_merge_3d),
+ .merge_3d = milos_merge_3d,
+ .wb_count = ARRAY_SIZE(milos_wb),
+ .wb = milos_wb,
+ .cwb_count = ARRAY_SIZE(milos_cwb),
+ .cwb = milos_cwb,
+ .intf_count = ARRAY_SIZE(milos_intf),
+ .intf = milos_intf,
+ .vbif_count = ARRAY_SIZE(milos_vbif),
+ .vbif = milos_vbif,
+ .perf = &milos_perf_data,
+};
+
+#endif
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index 9f8d1bba9139..4d5b57d6295f 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -555,6 +555,26 @@ static const struct dpu_vbif_cfg sdm845_vbif[] = {
},
};
+static const struct dpu_vbif_cfg milos_vbif[] = {
+ {
+ .name = "vbif_rt", .id = VBIF_RT, // OK
+ .base = 0, .len = 0x1074, // OK
+ .features = BIT(DPU_VBIF_QOS_REMAP), // TODO
+ .xin_halt_timeout = 0x4000, // TODO
+ .qos_rp_remap_size = 0x40, // TODO
+ .qos_rt_tbl = { // TODO
+ .npriority_lvl = ARRAY_SIZE(sm8650_rt_pri_lvl),
+ .priority_lvl = sm8650_rt_pri_lvl,
+ },
+ .qos_nrt_tbl = { // TODO
+ .npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
+ .priority_lvl = sdm845_nrt_pri_lvl,
+ },
+ .memtype_count = 16, // OK
+ .memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, // OK?
+ },
+};
+
static const struct dpu_vbif_cfg sm8550_vbif[] = {
{
.name = "vbif_rt", .id = VBIF_RT,
@@ -725,4 +745,6 @@ static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
#include "catalog/dpu_9_2_x1e80100.h"
#include "catalog/dpu_10_0_sm8650.h"
+#include "catalog/dpu_10_2_milos.h"
+
#include "catalog/dpu_12_0_sm8750.h"
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index f0768f54e9b3..1f6b14f1c4d6 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -749,6 +749,7 @@ struct dpu_mdss_cfg {
const struct dpu_format_extended *vig_formats;
};
+extern const struct dpu_mdss_cfg dpu_milos_cfg;
extern const struct dpu_mdss_cfg dpu_msm8917_cfg;
extern const struct dpu_mdss_cfg dpu_msm8937_cfg;
extern const struct dpu_mdss_cfg dpu_msm8953_cfg;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 4e5a8ecd31f7..7afd7dc7a0b4 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1505,6 +1505,7 @@ static const struct dev_pm_ops dpu_pm_ops = {
};
static const struct of_device_id dpu_dt_match[] = {
+ { .compatible = "qcom,milos-dpu", .data = &dpu_milos_cfg, },
{ .compatible = "qcom,msm8917-mdp5", .data = &dpu_msm8917_cfg, },
{ .compatible = "qcom,msm8937-mdp5", .data = &dpu_msm8937_cfg, },
{ .compatible = "qcom,msm8953-mdp5", .data = &dpu_msm8953_cfg, },
--
2.52.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH RFC 5/6] arm64: dts: qcom: milos: Add MDSS
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
` (3 preceding siblings ...)
2025-12-19 16:41 ` [PATCH RFC 4/6] drm/msm/dpu: " Luca Weiss
@ 2025-12-19 16:41 ` Luca Weiss
2025-12-22 9:18 ` Konrad Dybcio
2025-12-19 16:41 ` [PATCH RFC 6/6] arm64: dts: qcom: milos-fairphone-fp6: Enable panel Luca Weiss
2025-12-20 17:05 ` [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Dmitry Baryshkov
6 siblings, 1 reply; 17+ messages in thread
From: Luca Weiss @ 2025-12-19 16:41 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree, Luca Weiss
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
---
arch/arm64/boot/dts/qcom/milos.dtsi | 211 +++++++++++++++++++++++++++++++++++-
1 file changed, 209 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/milos.dtsi b/arch/arm64/boot/dts/qcom/milos.dtsi
index 0756cf5fb888..2477f0d97278 100644
--- a/arch/arm64/boot/dts/qcom/milos.dtsi
+++ b/arch/arm64/boot/dts/qcom/milos.dtsi
@@ -3,6 +3,7 @@
* Copyright (c) 2025, Luca Weiss <luca.weiss@fairphone.com>
*/
+#include <dt-bindings/clock/qcom,dsi-phy-28nm.h>
#include <dt-bindings/clock/qcom,milos-camcc.h>
#include <dt-bindings/clock/qcom,milos-dispcc.h>
#include <dt-bindings/clock/qcom,milos-gcc.h>
@@ -1821,6 +1822,212 @@ camcc: clock-controller@adb0000 {
#power-domain-cells = <1>;
};
+ mdss: display-subsystem@ae00000 {
+ compatible = "qcom,milos-mdss";
+ reg = <0x0 0x0ae00000 0x0 0x1000>;
+ reg-names = "mdss";
+
+ interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH 0>;
+
+ clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
+ <&gcc GCC_DISP_HF_AXI_CLK>,
+ <&dispcc DISP_CC_MDSS_MDP_CLK>;
+
+ resets = <&dispcc DISP_CC_MDSS_CORE_BCR>;
+
+ interconnects = <&mmss_noc MASTER_MDP QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
+ &cnoc_main SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
+ interconnect-names = "mdp0-mem",
+ "cpu-cfg";
+
+ power-domains = <&dispcc DISP_CC_MDSS_CORE_GDSC>;
+
+ iommus = <&apps_smmu 0x1c00 0x2>;
+
+ interrupt-controller;
+ #interrupt-cells = <1>;
+
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ status = "disabled";
+
+ mdss_mdp: display-controller@ae01000 {
+ compatible = "qcom,milos-dpu";
+ reg = <0x0 0x0ae01000 0x0 0x8f000>,
+ <0x0 0x0aeb0000 0x0 0x2008>;
+ reg-names = "mdp",
+ "vbif";
+
+ interrupts-extended = <&mdss 0>;
+
+ clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
+ <&dispcc DISP_CC_MDSS_AHB_CLK>,
+ <&dispcc DISP_CC_MDSS_MDP_LUT_CLK>,
+ <&dispcc DISP_CC_MDSS_MDP_CLK>,
+ <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
+ clock-names = "nrt_bus",
+ "iface",
+ "lut",
+ "core",
+ "vsync";
+
+ assigned-clocks = <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ operating-points-v2 = <&mdp_opp_table>;
+
+ power-domains = <&rpmhpd RPMHPD_CX>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ dpu_intf1_out: endpoint {
+ remote-endpoint = <&mdss_dsi0_in>;
+ };
+ };
+ };
+
+ mdp_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-200000000 {
+ opp-hz = /bits/ 64 <200000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-342000000 {
+ opp-hz = /bits/ 64 <342000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ };
+
+ opp-402000000 {
+ opp-hz = /bits/ 64 <402000000>;
+ required-opps = <&rpmhpd_opp_svs_l1>;
+ };
+
+ opp-535000000 {
+ opp-hz = /bits/ 64 <535000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ };
+
+ opp-600000000 {
+ opp-hz = /bits/ 64 <600000000>;
+ required-opps = <&rpmhpd_opp_nom_l1>;
+ };
+
+ opp-630000000 {
+ opp-hz = /bits/ 64 <630000000>;
+ required-opps = <&rpmhpd_opp_turbo>;
+ };
+ };
+ };
+
+ mdss_dsi0: dsi@ae94000 {
+ compatible = "qcom,milos-dsi-ctrl", "qcom,mdss-dsi-ctrl";
+ reg = <0x0 0x0ae94000 0x0 0x400>;
+ reg-names = "dsi_ctrl";
+
+ interrupts-extended = <&mdss 4>;
+
+ clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>,
+ <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>,
+ <&dispcc DISP_CC_MDSS_PCLK0_CLK>,
+ <&dispcc DISP_CC_MDSS_ESC0_CLK>,
+ <&dispcc DISP_CC_MDSS_AHB_CLK>,
+ <&gcc GCC_DISP_HF_AXI_CLK>;
+ clock-names = "byte",
+ "byte_intf",
+ "pixel",
+ "core",
+ "iface",
+ "bus";
+
+ assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>,
+ <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>;
+ assigned-clock-parents = <&mdss_dsi0_phy DSI_BYTE_PLL_CLK>,
+ <&mdss_dsi0_phy DSI_PIXEL_PLL_CLK>;
+
+ operating-points-v2 = <&mdss_dsi_opp_table>;
+
+ power-domains = <&rpmhpd RPMHPD_CX>;
+
+ phys = <&mdss_dsi0_phy>;
+ phy-names = "dsi";
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ mdss_dsi0_in: endpoint {
+ remote-endpoint = <&dpu_intf1_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ mdss_dsi0_out: endpoint {
+ };
+ };
+ };
+
+ mdss_dsi_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-187500000 {
+ opp-hz = /bits/ 64 <187500000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-300000000 {
+ opp-hz = /bits/ 64 <300000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ };
+
+ opp-358000000 {
+ opp-hz = /bits/ 64 <358000000>;
+ required-opps = <&rpmhpd_opp_svs_l1>;
+ };
+ };
+ };
+
+ mdss_dsi0_phy: phy@ae95000 {
+ compatible = "qcom,milos-dsi-phy-4nm";
+ reg = <0x0 0x0ae95000 0x0 0x200>,
+ <0x0 0x0ae95200 0x0 0x280>,
+ <0x0 0x0ae95500 0x0 0x400>;
+ reg-names = "dsi_phy",
+ "dsi_phy_lane",
+ "dsi_pll";
+
+ clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
+ <&rpmhcc RPMH_CXO_CLK>;
+ clock-names = "iface",
+ "ref";
+
+ #clock-cells = <1>;
+ #phy-cells = <0>;
+
+ status = "disabled";
+ };
+ };
+
dispcc: clock-controller@af00000 {
compatible = "qcom,milos-dispcc";
reg = <0x0 0x0af00000 0x0 0x20000>;
@@ -1829,8 +2036,8 @@ dispcc: clock-controller@af00000 {
<&sleep_clk>,
<&gcc GCC_DISP_AHB_CLK>,
<&gcc GCC_DISP_GPLL0_DIV_CLK_SRC>,
- <0>, /* dsi0_phy_pll_out_byteclk */
- <0>, /* dsi0_phy_pll_out_dsiclk */
+ <&mdss_dsi0_phy DSI_BYTE_PLL_CLK>,
+ <&mdss_dsi0_phy DSI_PIXEL_PLL_CLK>,
<0>, /* dp0_phy_pll_link_clk */
<0>; /* dp0_phy_pll_vco_div_clk */
--
2.52.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH RFC 6/6] arm64: dts: qcom: milos-fairphone-fp6: Enable panel
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
` (4 preceding siblings ...)
2025-12-19 16:41 ` [PATCH RFC 5/6] arm64: dts: qcom: milos: Add MDSS Luca Weiss
@ 2025-12-19 16:41 ` Luca Weiss
2025-12-20 17:05 ` [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Dmitry Baryshkov
6 siblings, 0 replies; 17+ messages in thread
From: Luca Weiss @ 2025-12-19 16:41 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree, Luca Weiss
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
---
arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts | 71 ++++++++++++++++++++++--
1 file changed, 66 insertions(+), 5 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts b/arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts
index 92b40ab56c26..8cddab412581 100644
--- a/arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts
+++ b/arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts
@@ -612,11 +612,6 @@ eeprom@51 {
};
};
-&dispcc {
- /* Disable for now so simple-framebuffer continues working */
- status = "disabled";
-};
-
&gcc {
protected-clocks = <GCC_PCIE_1_AUX_CLK>, <GCC_PCIE_1_AUX_CLK_SRC>,
<GCC_PCIE_1_CFG_AHB_CLK>, <GCC_PCIE_1_MSTR_AXI_CLK>,
@@ -725,6 +720,51 @@ &ipa {
status = "okay";
};
+&mdss {
+ status = "okay";
+};
+
+&mdss_dsi0 {
+ vdda-supply = <&vreg_l4b>;
+
+ status = "okay";
+
+ panel@0 {
+ compatible = "boe,bj631jhm-t71-d900";
+ reg = <0>;
+
+ reset-gpios = <&tlmm 12 GPIO_ACTIVE_LOW>;
+
+ vci-supply = <&vreg_l19b>;
+ vddio-supply = <&vreg_l9b>;
+ dvdd-supply = <&vreg_oled_dvdd_1p2>;
+ // avdd-supply = <&pmiv0104_oledb> (VREG_OLEDB): 5V-8V
+ // elvss-supply = <&pmiv0104_elvss> (VREG_ELVSS): -8V-0V
+ // elvdd-supply = <&pmiv0104_elvdd> (VREG_ELVDD - OLEDB): 0-8V
+
+ pinctrl-0 = <&disp_reset_n_active>, <&mdp_vsync>;
+ pinctrl-1 = <&disp_reset_n_suspend>, <&mdp_vsync>;
+ pinctrl-names = "default", "sleep";
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&mdss_dsi0_out>;
+ };
+ };
+ };
+};
+
+&mdss_dsi0_out {
+ data-lanes = <0 1 2 3>;
+ remote-endpoint = <&panel_in>;
+};
+
+&mdss_dsi0_phy {
+ vdds-supply = <&vreg_l2b>;
+
+ status = "okay";
+};
+
&pm8550vs_c {
status = "okay";
};
@@ -883,6 +923,20 @@ &tlmm {
<13 1>, /* NC */
<63 2>; /* WLAN UART */
+ disp_reset_n_active: disp-reset-n-active-state {
+ pins = "gpio12";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ disp_reset_n_suspend: disp-reset-n-suspend-state {
+ pins = "gpio12";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+
ts_active: ts-irq-active-state {
pins = "gpio19";
function = "gpio";
@@ -910,6 +964,13 @@ pm8008_int_default: pm8008-int-default-state {
drive-strength = <2>;
bias-disable;
};
+
+ mdp_vsync: mdp-vsync-state {
+ pins = "gpio129";
+ function = "mdp_vsync";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
};
&uart5 {
--
2.52.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos
2025-12-19 16:41 ` [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos Luca Weiss
@ 2025-12-20 16:43 ` Dmitry Baryshkov
2025-12-22 9:00 ` Konrad Dybcio
1 sibling, 0 replies; 17+ messages in thread
From: Dmitry Baryshkov @ 2025-12-20 16:43 UTC (permalink / raw)
To: Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On Fri, Dec 19, 2025 at 05:41:07PM +0100, Luca Weiss wrote:
> Describe the Universal Bandwidth Compression (UBWC) configuration
> for the Milos SoC.
>
> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
> ---
> drivers/soc/qcom/ubwc_config.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 2/6] drm/msm/dsi: add support for DSI-PHY on Milos
2025-12-19 16:41 ` [PATCH RFC 2/6] drm/msm/dsi: add support for DSI-PHY on Milos Luca Weiss
@ 2025-12-20 16:50 ` Dmitry Baryshkov
0 siblings, 0 replies; 17+ messages in thread
From: Dmitry Baryshkov @ 2025-12-20 16:50 UTC (permalink / raw)
To: Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On Fri, Dec 19, 2025 at 05:41:08PM +0100, Luca Weiss wrote:
> Add DSI PHY support for the Milos platform.
>
> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
> ---
> drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 2 ++
> drivers/gpu/drm/msm/dsi/phy/dsi_phy.h | 1 +
> drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c | 24 ++++++++++++++++++++++++
> 3 files changed, 27 insertions(+)
>
> + // FIXME not sure about these rate values
Seems to match downstream values.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> + .min_pll_rate = 600000000UL,
> +#ifdef CONFIG_64BIT
> + .max_pll_rate = 5000000000UL,
> +#else
> + .max_pll_rate = ULONG_MAX,
> +#endif
> + .io_start = { 0xae95000 },
> + .num_dsi_phy = 1,
> + .quirks = DSI_PHY_7NM_QUIRK_V5_2,
> +};
> +
> const struct msm_dsi_phy_cfg dsi_phy_4nm_8550_cfgs = {
> .has_phy_lane = true,
> .regulator_data = dsi_phy_7nm_98400uA_regulators,
>
> --
> 2.52.0
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 3/6] drm/msm: mdss: Add Milos support
2025-12-19 16:41 ` [PATCH RFC 3/6] drm/msm: mdss: Add Milos support Luca Weiss
@ 2025-12-20 16:52 ` Dmitry Baryshkov
2025-12-22 9:09 ` Konrad Dybcio
0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Baryshkov @ 2025-12-20 16:52 UTC (permalink / raw)
To: Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On Fri, Dec 19, 2025 at 05:41:09PM +0100, Luca Weiss wrote:
> Add support for MDSS on Milos.
>
> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
> ---
> drivers/gpu/drm/msm/msm_mdss.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Though 14000 seems lower than the value for all other platforms.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 4/6] drm/msm/dpu: Add Milos support
2025-12-19 16:41 ` [PATCH RFC 4/6] drm/msm/dpu: " Luca Weiss
@ 2025-12-20 17:02 ` Dmitry Baryshkov
0 siblings, 0 replies; 17+ messages in thread
From: Dmitry Baryshkov @ 2025-12-20 17:02 UTC (permalink / raw)
To: Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On Fri, Dec 19, 2025 at 05:41:10PM +0100, Luca Weiss wrote:
> Add definitions for the display hardware used on the Qualcomm Milos
> platform.
>
> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
> ---
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h | 284 +++++++++++++++++++++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 22 ++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
> 4 files changed, 308 insertions(+)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h
> new file mode 100644
> index 000000000000..75deec923897
> --- /dev/null
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h
> @@ -0,0 +1,284 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (c) 2022. Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2015-2018, 2020 The Linux Foundation. All rights reserved.
> + * Copyright (c) 2025, Luca Weiss <luca.weiss@fairphone.com>
> + */
> +
> +#ifndef _DPU_10_2_MILOS_H
> +#define _DPU_10_2_MILOS_H
> +
> +static const struct dpu_caps milos_dpu_caps = {
> + .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, // OK
> + .max_mixer_blendstages = 0x7, // OK
> + .has_src_split = true, // OK
> + .has_dim_layer = true, // OK
> + .has_idle_pc = true, // OK?
> + .has_3d_merge = true, // OK?
> + .max_linewidth = 8192, // OK
> + .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, // OK
> +};
> +
> +static const struct dpu_mdp_cfg milos_mdp = {
> + .name = "top_0",
> + .base = 0, .len = 0x494, // TODO? maybe qcom,sde-len = <0x488>;
> + .clk_ctrls = {
> + [DPU_CLK_CTRL_REG_DMA] = { .reg_off = 0x2bc, .bit_off = 20 }, // OK
> + },
> +};
> +
> +static const struct dpu_ctl_cfg milos_ctl[] = { // number of ctl is okay, base probably also
> + {
> + .name = "ctl_0", .id = CTL_0,
> + .base = 0x15000, .len = 0x1000,
> + .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), // FIXME?
Why is it questionable?
> + }, {
> + .name = "ctl_1", .id = CTL_1,
> + .base = 0x16000, .len = 0x1000,
> + .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
> + }, {
> + .name = "ctl_2", .id = CTL_2,
> + .base = 0x17000, .len = 0x1000,
> + .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
> + }, {
> + .name = "ctl_3", .id = CTL_3,
> + .base = 0x18000, .len = 0x1000,
> + .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
> + },
> +};
> +
> +static const struct dpu_sspp_cfg milos_sspp[] = {
> + {
> + .name = "sspp_0", .id = SSPP_VIG0, // OK
> + .base = 0x4000, .len = 0x344, // OK
> + .features = VIG_SDM845_MASK_SDMA, // TODO?
> + .sblk = &dpu_vig_sblk_qseed3_3_3, // TODO?
Yes to both.
> + .xin_id = 0, // OK
> + .type = SSPP_TYPE_VIG, // OK
> + }, {
> + .name = "sspp_8", .id = SSPP_DMA0, // FIXME name?
ok
> + .base = 0x24000, .len = 0x344,
> + .features = DMA_SDM845_MASK_SDMA,
> + .sblk = &dpu_dma_sblk,
> + .xin_id = 1, // OK
> + .type = SSPP_TYPE_DMA, // OK
> + }, {
> + .name = "sspp_9", .id = SSPP_DMA1,
> + .base = 0x26000, .len = 0x344,
> + .features = DMA_SDM845_MASK_SDMA,
> + .sblk = &dpu_dma_sblk,
> + .xin_id = 5, // OK
> + .type = SSPP_TYPE_DMA, // OK
> + }, {
> + .name = "sspp_10", .id = SSPP_DMA2,
> + .base = 0x28000, .len = 0x344,
> + .features = DMA_SDM845_MASK_SDMA,
> + .sblk = &dpu_dma_sblk,
> + .xin_id = 9, // OK
> + .type = SSPP_TYPE_DMA, // OK
> + },
> +};
> +
> +static const struct dpu_lm_cfg milos_lm[] = {
> + {
> + .name = "lm_0", .id = LM_0, // OK
> + .base = 0x44000, .len = 0x400,// OK
> + .features = MIXER_MSM8998_MASK, // TODO
> + .sblk = &sdm845_lm_sblk, // OK
> + .pingpong = PINGPONG_0, // TODO
> + .dspp = DSPP_0, // TODO
Yes to both
> + }, {
> + .name = "lm_2", .id = LM_2,
> + .base = 0x46000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sdm845_lm_sblk, // OK
> + .lm_pair = LM_3, // OK
> + .pingpong = PINGPONG_2,
> + //.dspp = DSPP_2, // FIXME?
none
> + }, {
> + .name = "lm_3", .id = LM_3,
> + .base = 0x47000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sdm845_lm_sblk, // OK
> + .lm_pair = LM_2, // OK
> + .pingpong = PINGPONG_3,
> + //.dspp = DSPP_3, // FIXME?
none
> + },
> +};
> +
> +static const struct dpu_dspp_cfg milos_dspp[] = {
> + {
> + .name = "dspp_0", .id = DSPP_0, // OK
> + .base = 0x54000, .len = 0x1800, // OK
> + .sblk = &sdm845_dspp_sblk, // TODO
yes
> + },
> +};
> +
> +static const struct dpu_pingpong_cfg milos_pp[] = {
> + {
> + .name = "pingpong_0", .id = PINGPONG_0, // OK
> + .base = 0x69000, .len = 0, // OK
> + .sblk = &sc7280_pp_sblk, // OK
> + .merge_3d = MERGE_3D_0, // OK
none
> + .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), // TODO
assumingly correct
> + }, {
> + .name = "pingpong_2", .id = PINGPONG_2, // TODO
Yes
> + .base = 0x6b000, .len = 0, // OK
> + .sblk = &sc7280_pp_sblk, // OK
> + .merge_3d = MERGE_3D_1, // OK
> + .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
> + }, {
> + .name = "pingpong_3", .id = PINGPONG_3,
> + .base = 0x6c000, .len = 0, // OK
> + .sblk = &sc7280_pp_sblk, // OK
> + .merge_3d = MERGE_3D_1, // OK
> + .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
> + }, {
> + .name = "pingpong_cwb_0", .id = PINGPONG_CWB_0,
> + .base = 0x66000, .len = 0, // OK
> + .sblk = &sc7280_pp_sblk, // OK
> + },
> +};
> +
> +static const struct dpu_merge_3d_cfg milos_merge_3d[] = {
> + {
> + .name = "merge_3d_1", .id = MERGE_3D_1, // TODO
> + .base = 0x4f000, .len = 0x8,
> + },
> +};
> +
> +/*
> + * NOTE: Each display compression engine (DCE) contains dual hard
> + * slice DSC encoders so both share same base address but with
> + * its own different sub block address.
> + */
> +static const struct dpu_dsc_cfg milos_dsc[] = {
> + {
> + .name = "dce_0_0", .id = DSC_0, // OK
> + .base = 0x80000, .len = 0x6, // OK
> + .features = BIT(DPU_DSC_NATIVE_42x_EN), // TODO
> + .sblk = &dsc_sblk_0, // TODO
Yes
> + }, {
> + .name = "dce_0_1", .id = DSC_1, // OK
> + .base = 0x80000, .len = 0x6, // OK
> + .features = BIT(DPU_DSC_NATIVE_42x_EN), // TODO
> + .sblk = &dsc_sblk_1, // TODO
> + },
> +};
> +
> +static const struct dpu_wb_cfg milos_wb[] = {
> + {
> + .name = "wb_2", .id = WB_2, // TODO
> + .base = 0x65000, .len = 0x2c8, // OK
> + .features = WB_SDM845_MASK, // TODO
> + .format_list = wb2_formats_rgb_yuv, // TODO
> + .num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv), // TODO
> + .xin_id = 6, // OK
> + .vbif_idx = VBIF_RT, // TODO
> + .maxlinewidth = 4096, // OK
> + .intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 4), // TODO
Yes
> + },
> +};
> +
> +static const struct dpu_cwb_cfg milos_cwb[] = {
> + {
> + .name = "cwb_0", .id = CWB_0,
> + .base = 0x66200, .len = 0x8,
> + },
> +};
> +
> +static const struct dpu_intf_cfg milos_intf[] = {
> + {
> + .name = "intf_0", .id = INTF_0, // OK
> + .base = 0x34000, .len = 0x280, // OK size=0x300?
I think, 0x280 is correct
> + .type = INTF_DP, // OK
> + .controller_id = MSM_DP_CONTROLLER_0, // OK?
> + .prog_fetch_lines_worst_case = 24, // TODO
> + .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 24), // TODO
> + .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 25), // TODO
> + }, {
> + .name = "intf_1", .id = INTF_1, // OK
> + .base = 0x35000, .len = 0x300, // OK size=0x300?
> + .type = INTF_DSI, // OK
> + .controller_id = MSM_DSI_CONTROLLER_0, // OK?
> + .prog_fetch_lines_worst_case = 24, // TODO
> + .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 26), // TODO
> + .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 27), // TODO
> + .intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF1_TEAR_INTR, 2), // TODO
> + }, {
> + .name = "intf_3", .id = INTF_3, // TODO?
> + .base = 0x37000, .len = 0x280, // OK size=0x300?
> + .type = INTF_DP, // OK
> + .controller_id = MSM_DP_CONTROLLER_1, // FIXME, only one DP controller?
It should be INTF_NONE / MSM_DP_CONTROLLER_0 for now, it's an MST
counterpart of INTF_0
> + .prog_fetch_lines_worst_case = 24, // TODO
> + .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 30), // TODO
> + .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 31), // TODO
> + },
> +};
> +
> +static const struct dpu_perf_cfg milos_perf_data = {
> + .max_bw_low = 7100000,
> + .max_bw_high = 9800000,
> + .min_core_ib = 2500000,
> + .min_llcc_ib = 0,
> + .min_dram_ib = 1600000,
> + .min_prefill_lines = 35, // TODO
40
> + /* FIXME: lut tables */
> + .danger_lut_tbl = {0x3ffff, 0x3ffff, 0x0}, // TODO
> + .safe_lut_tbl = {0xfe00, 0xfe00, 0xffff}, // TODO
0xff00, 0xfff0, 0xfff
> + .qos_lut_tbl = { // TODO
> + {.nentry = ARRAY_SIZE(sc7180_qos_linear),
> + .entries = sc7180_qos_linear
> + },
> + {.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
> + .entries = sc7180_qos_macrotile
> + },
> + {.nentry = ARRAY_SIZE(sc7180_qos_nrt),
> + .entries = sc7180_qos_nrt
> + },
> + /* TODO: macrotile-qseed is different from macrotile */
> + },
> + .cdp_cfg = { // TODO
> + {.rd_enable = 1, .wr_enable = 1},
> + {.rd_enable = 1, .wr_enable = 0}
> + },
> + .clk_inefficiency_factor = 105, // TODO
> + .bw_inefficiency_factor = 120, // TODO
> +};
> +
> +static const struct dpu_mdss_version milos_mdss_ver = {
> + .core_major_ver = 10,
> + .core_minor_ver = 2,
> +};
> +
> +const struct dpu_mdss_cfg dpu_milos_cfg = {
> + .mdss_ver = &milos_mdss_ver,
> + .caps = &milos_dpu_caps,
> + .mdp = &milos_mdp,
> + .cdm = &dpu_cdm_5_x,
> + .ctl_count = ARRAY_SIZE(milos_ctl),
> + .ctl = milos_ctl,
> + .sspp_count = ARRAY_SIZE(milos_sspp),
> + .sspp = milos_sspp,
> + .mixer_count = ARRAY_SIZE(milos_lm),
> + .mixer = milos_lm,
> + .dspp_count = ARRAY_SIZE(milos_dspp),
> + .dspp = milos_dspp,
> + .pingpong_count = ARRAY_SIZE(milos_pp),
> + .pingpong = milos_pp,
> + .dsc_count = ARRAY_SIZE(milos_dsc),
> + .dsc = milos_dsc,
> + .merge_3d_count = ARRAY_SIZE(milos_merge_3d),
> + .merge_3d = milos_merge_3d,
> + .wb_count = ARRAY_SIZE(milos_wb),
> + .wb = milos_wb,
> + .cwb_count = ARRAY_SIZE(milos_cwb),
> + .cwb = milos_cwb,
> + .intf_count = ARRAY_SIZE(milos_intf),
> + .intf = milos_intf,
> + .vbif_count = ARRAY_SIZE(milos_vbif),
> + .vbif = milos_vbif,
> + .perf = &milos_perf_data,
> +};
> +
> +#endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index 9f8d1bba9139..4d5b57d6295f 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -555,6 +555,26 @@ static const struct dpu_vbif_cfg sdm845_vbif[] = {
> },
> };
>
> +static const struct dpu_vbif_cfg milos_vbif[] = {
> + {
> + .name = "vbif_rt", .id = VBIF_RT, // OK
> + .base = 0, .len = 0x1074, // OK
> + .features = BIT(DPU_VBIF_QOS_REMAP), // TODO
> + .xin_halt_timeout = 0x4000, // TODO
> + .qos_rp_remap_size = 0x40, // TODO
> + .qos_rt_tbl = { // TODO
> + .npriority_lvl = ARRAY_SIZE(sm8650_rt_pri_lvl),
> + .priority_lvl = sm8650_rt_pri_lvl,
> + },
> + .qos_nrt_tbl = { // TODO
> + .npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
> + .priority_lvl = sdm845_nrt_pri_lvl,
> + },
> + .memtype_count = 16, // OK
> + .memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, // OK?
Yep
> + },
> +};
> +
> static const struct dpu_vbif_cfg sm8550_vbif[] = {
> {
> .name = "vbif_rt", .id = VBIF_RT,
> @@ -725,4 +745,6 @@ static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
> #include "catalog/dpu_9_2_x1e80100.h"
>
> #include "catalog/dpu_10_0_sm8650.h"
> +#include "catalog/dpu_10_2_milos.h"
> +
> #include "catalog/dpu_12_0_sm8750.h"
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> index f0768f54e9b3..1f6b14f1c4d6 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -749,6 +749,7 @@ struct dpu_mdss_cfg {
> const struct dpu_format_extended *vig_formats;
> };
>
> +extern const struct dpu_mdss_cfg dpu_milos_cfg;
> extern const struct dpu_mdss_cfg dpu_msm8917_cfg;
> extern const struct dpu_mdss_cfg dpu_msm8937_cfg;
> extern const struct dpu_mdss_cfg dpu_msm8953_cfg;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 4e5a8ecd31f7..7afd7dc7a0b4 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -1505,6 +1505,7 @@ static const struct dev_pm_ops dpu_pm_ops = {
> };
>
> static const struct of_device_id dpu_dt_match[] = {
> + { .compatible = "qcom,milos-dpu", .data = &dpu_milos_cfg, },
> { .compatible = "qcom,msm8917-mdp5", .data = &dpu_msm8917_cfg, },
> { .compatible = "qcom,msm8937-mdp5", .data = &dpu_msm8937_cfg, },
> { .compatible = "qcom,msm8953-mdp5", .data = &dpu_msm8953_cfg, },
>
> --
> 2.52.0
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 0/6] Attempt to bring up display on Milos SoC
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
` (5 preceding siblings ...)
2025-12-19 16:41 ` [PATCH RFC 6/6] arm64: dts: qcom: milos-fairphone-fp6: Enable panel Luca Weiss
@ 2025-12-20 17:05 ` Dmitry Baryshkov
6 siblings, 0 replies; 17+ messages in thread
From: Dmitry Baryshkov @ 2025-12-20 17:05 UTC (permalink / raw)
To: Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On Fri, Dec 19, 2025 at 05:41:06PM +0100, Luca Weiss wrote:
> Hi all,
>
> This is a very WIP RFC series that attempts to add display support for
> Milos, in particular on The Fairphone (Gen. 6) using the SM7635.
>
> I have excluded sending panel driver and dt-bindings to reduce the patch
> count, since they should not be relevant for now.
>
> The data in the patches is mostly derived from the downstream msm-6.1
> kernel for this SoC, named "volcano" downstream.
>
> https://gerrit-public.fairphone.software/plugins/gitiles/platform/vendor/qcom/proprietary/display-devicetree/+/refs/heads/odm/rc/target/15/fp6/display/volcano-sde-common.dtsi
>
> While I'm fairly sure a good chunk of the data is correct (marked "OK"),
> there's still many unknowns (marked "TODO" or similar) that you can
> see in the patches.
>
> Unfortunately it doesn't work yet, with the screen staying dark and
> these errors appearing in dmesg repeatedly.
>
> [ 6.541696] [drm:dpu_encoder_frame_done_timeout:2727] [dpu error]enc33 frame done timeout
> [ 6.587091] [drm:_dpu_encoder_phys_cmd_wait_for_idle] *ERROR* id:33 pp:2 kickoff timeout 0 cnt 1 koff_cnt 1
> [ 6.587387] [drm:dpu_encoder_phys_cmd_prepare_for_kickoff] *ERROR* failed wait_for_idle: id:33 ret:-110 pp:2
> [ 6.589509] [drm:dpu_encoder_helper_hw_reset:1763] [dpu error]enc33 ctl 1 reset failure
> [ 6.637482] [drm:dpu_encoder_frame_done_timeout:2727] [dpu error]enc33 frame done timeout
> [ 6.680077] [drm:dpu_encoder_phys_cmd_wait_for_commit_done] *ERROR* failed wait_for_idle: id:33 ret:-110 intf:1
> [ 6.680356] [drm:dpu_kms_wait_for_commit_done:525] [dpu error]wait for commit done returned -110
> [ 6.684517] [drm:dpu_encoder_helper_hw_reset:1763] [dpu error]enc33 ctl 1 reset failure
> [ 6.729507] [drm:dpu_encoder_frame_done_timeout:2727] [dpu error]enc33 frame done timeout
I guess, that it doesn't fulfill your needs, but I'd start with checking
that WB works (you can read the image back via modetest command and
verify it manually with imagemagick). Then if your platform has DP
support, it might be easier to get it enabled.
For the DSI CMD, I'd suggest checking the clocks and then getting IRQ
traces on the downstream kernel.
>
> The panel is the BOE BJ631JHM-T71-D900 with a Novatek NT37705 driver IC,
> running in command mode (not video mode).
>
> The vsync/TE pin should be configured correctly:
>
> ~ # cat /sys/kernel/debug/pinctrl/f100000.pinctrl/pinmux-pins | grep GPIO_129
> pin 129 (GPIO_129): device ae94000.dsi.0 function mdp_vsync group gpio129
>
> A full dmesg can be found at https://public.lucaweiss.eu/tmp/milos-mdss-log-2025-12-19.txt
>
> Schematics of the device are also available if somebody wants to take a
> look, starting on page 109:
> https://www.fairphone.com/wp-content/uploads/2025/08/Fairphone-Gen.-6_-Information-on-how-to-repair-dispose-of-and-recycle-EN-NL-FR-DE.pdf
>
> Please let me know if you have any ideas what could be wrong and how to
> fix it. Thanks!
>
> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
> ---
> Luca Weiss (6):
> soc: qcom: ubwc: Add config for Milos
> drm/msm/dsi: add support for DSI-PHY on Milos
> drm/msm: mdss: Add Milos support
> drm/msm/dpu: Add Milos support
> arm64: dts: qcom: milos: Add MDSS
> arm64: dts: qcom: milos-fairphone-fp6: Enable panel
>
> arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts | 71 +++++-
> arch/arm64/boot/dts/qcom/milos.dtsi | 211 ++++++++++++++-
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_10_2_milos.h | 284 +++++++++++++++++++++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 22 ++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
> drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 2 +
> drivers/gpu/drm/msm/dsi/phy/dsi_phy.h | 1 +
> drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c | 24 ++
> drivers/gpu/drm/msm/msm_mdss.c | 5 +
> drivers/soc/qcom/ubwc_config.c | 12 +
> 11 files changed, 627 insertions(+), 7 deletions(-)
> ---
> base-commit: 167013d059d5c4a09d49068408044c7a65a26cee
> change-id: 20251219-milos-mdss-fa0763693775
>
> Best regards,
> --
> Luca Weiss <luca.weiss@fairphone.com>
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos
2025-12-19 16:41 ` [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos Luca Weiss
2025-12-20 16:43 ` Dmitry Baryshkov
@ 2025-12-22 9:00 ` Konrad Dybcio
1 sibling, 0 replies; 17+ messages in thread
From: Konrad Dybcio @ 2025-12-22 9:00 UTC (permalink / raw)
To: Luca Weiss, Bjorn Andersson, Konrad Dybcio, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree
On 12/19/25 5:41 PM, Luca Weiss wrote:
> Describe the Universal Bandwidth Compression (UBWC) configuration
> for the Milos SoC.
>
> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 3/6] drm/msm: mdss: Add Milos support
2025-12-20 16:52 ` Dmitry Baryshkov
@ 2025-12-22 9:09 ` Konrad Dybcio
2025-12-22 9:12 ` Dmitry Baryshkov
0 siblings, 1 reply; 17+ messages in thread
From: Konrad Dybcio @ 2025-12-22 9:09 UTC (permalink / raw)
To: Dmitry Baryshkov, Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On 12/20/25 5:52 PM, Dmitry Baryshkov wrote:
> On Fri, Dec 19, 2025 at 05:41:09PM +0100, Luca Weiss wrote:
>> Add support for MDSS on Milos.
>>
>> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
>> ---
>> drivers/gpu/drm/msm/msm_mdss.c | 5 +++++
>> 1 file changed, 5 insertions(+)
>>
>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>
> Though 14000 seems lower than the value for all other platforms.
IIUC it's essentially "nonzero" or "first-level-above-just-nonzero"
The downstream DT also defines a 140_000 and a 310_000 point.. though
the middle one is never(?) used and the latter one is only used during
UEFI handoff and upon the first commit after (runtime) resume
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 3/6] drm/msm: mdss: Add Milos support
2025-12-22 9:09 ` Konrad Dybcio
@ 2025-12-22 9:12 ` Dmitry Baryshkov
2025-12-22 9:19 ` Konrad Dybcio
0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Baryshkov @ 2025-12-22 9:12 UTC (permalink / raw)
To: Konrad Dybcio, Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On 22/12/2025 11:09, Konrad Dybcio wrote:
> On 12/20/25 5:52 PM, Dmitry Baryshkov wrote:
>> On Fri, Dec 19, 2025 at 05:41:09PM +0100, Luca Weiss wrote:
>>> Add support for MDSS on Milos.
>>>
>>> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
>>> ---
>>> drivers/gpu/drm/msm/msm_mdss.c | 5 +++++
>>> 1 file changed, 5 insertions(+)
>>>
>>
>> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>>
>> Though 14000 seems lower than the value for all other platforms.
>
> IIUC it's essentially "nonzero" or "first-level-above-just-nonzero"
>
> The downstream DT also defines a 140_000 and a 310_000 point.. though
> the middle one is never(?) used and the latter one is only used during
> UEFI handoff and upon the first commit after (runtime) resume
If I remember correctly, those are also used for programming the LUTs or
other big tables into the hardware.
>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
>
> Konrad
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 5/6] arm64: dts: qcom: milos: Add MDSS
2025-12-19 16:41 ` [PATCH RFC 5/6] arm64: dts: qcom: milos: Add MDSS Luca Weiss
@ 2025-12-22 9:18 ` Konrad Dybcio
0 siblings, 0 replies; 17+ messages in thread
From: Konrad Dybcio @ 2025-12-22 9:18 UTC (permalink / raw)
To: Luca Weiss, Bjorn Andersson, Konrad Dybcio, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley
Cc: ~postmarketos/upstreaming, phone-devel, linux-arm-msm,
linux-kernel, dri-devel, freedreno, devicetree
On 12/19/25 5:41 PM, Luca Weiss wrote:
> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
> ---
Please include a commit message for the follow-up submission
[...]
> + mdss_mdp: display-controller@ae01000 {
> + compatible = "qcom,milos-dpu";
> + reg = <0x0 0x0ae01000 0x0 0x8f000>,
> + <0x0 0x0aeb0000 0x0 0x2008>;
len=0x3000
[...]
> + mdss_dsi0: dsi@ae94000 {
> + compatible = "qcom,milos-dsi-ctrl", "qcom,mdss-dsi-ctrl";
> + reg = <0x0 0x0ae94000 0x0 0x400>;
len=0x1000
[...]
> + mdss_dsi0_phy: phy@ae95000 {
> + compatible = "qcom,milos-dsi-phy-4nm";
> + reg = <0x0 0x0ae95000 0x0 0x200>,
> + <0x0 0x0ae95200 0x0 0x280>,
0x300
Other things look good!
Konrad
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH RFC 3/6] drm/msm: mdss: Add Milos support
2025-12-22 9:12 ` Dmitry Baryshkov
@ 2025-12-22 9:19 ` Konrad Dybcio
0 siblings, 0 replies; 17+ messages in thread
From: Konrad Dybcio @ 2025-12-22 9:19 UTC (permalink / raw)
To: Dmitry Baryshkov, Luca Weiss
Cc: Bjorn Andersson, Konrad Dybcio, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, ~postmarketos/upstreaming, phone-devel,
linux-arm-msm, linux-kernel, dri-devel, freedreno, devicetree
On 12/22/25 10:12 AM, Dmitry Baryshkov wrote:
> On 22/12/2025 11:09, Konrad Dybcio wrote:
>> On 12/20/25 5:52 PM, Dmitry Baryshkov wrote:
>>> On Fri, Dec 19, 2025 at 05:41:09PM +0100, Luca Weiss wrote:
>>>> Add support for MDSS on Milos.
>>>>
>>>> Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
>>>> ---
>>>> drivers/gpu/drm/msm/msm_mdss.c | 5 +++++
>>>> 1 file changed, 5 insertions(+)
>>>>
>>>
>>> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>>>
>>> Though 14000 seems lower than the value for all other platforms.
>>
>> IIUC it's essentially "nonzero" or "first-level-above-just-nonzero"
>>
>> The downstream DT also defines a 140_000 and a 310_000 point.. though
>> the middle one is never(?) used and the latter one is only used during
>> UEFI handoff and upon the first commit after (runtime) resume
>
> If I remember correctly, those are also used for programming the LUTs or other big tables into the hardware.
FWIW this is an interconnect path for non-DMA accesses so that only
makes sense - huge writes could overwhelm the bus
Konrad
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2025-12-22 9:19 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-19 16:41 [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Luca Weiss
2025-12-19 16:41 ` [PATCH RFC 1/6] soc: qcom: ubwc: Add config for Milos Luca Weiss
2025-12-20 16:43 ` Dmitry Baryshkov
2025-12-22 9:00 ` Konrad Dybcio
2025-12-19 16:41 ` [PATCH RFC 2/6] drm/msm/dsi: add support for DSI-PHY on Milos Luca Weiss
2025-12-20 16:50 ` Dmitry Baryshkov
2025-12-19 16:41 ` [PATCH RFC 3/6] drm/msm: mdss: Add Milos support Luca Weiss
2025-12-20 16:52 ` Dmitry Baryshkov
2025-12-22 9:09 ` Konrad Dybcio
2025-12-22 9:12 ` Dmitry Baryshkov
2025-12-22 9:19 ` Konrad Dybcio
2025-12-19 16:41 ` [PATCH RFC 4/6] drm/msm/dpu: " Luca Weiss
2025-12-20 17:02 ` Dmitry Baryshkov
2025-12-19 16:41 ` [PATCH RFC 5/6] arm64: dts: qcom: milos: Add MDSS Luca Weiss
2025-12-22 9:18 ` Konrad Dybcio
2025-12-19 16:41 ` [PATCH RFC 6/6] arm64: dts: qcom: milos-fairphone-fp6: Enable panel Luca Weiss
2025-12-20 17:05 ` [PATCH RFC 0/6] Attempt to bring up display on Milos SoC Dmitry Baryshkov
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®