Message ID | 20250109-b4-sm8750-display-v1-10-b3f15faf4c97@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drm/msm: Add support for SM8750 | expand |
On Thu, Jan 09, 2025 at 02:08:37PM +0100, Krzysztof Kozlowski wrote: > Add support for the Qualcomm SM8750 platform. > > Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > drivers/gpu/drm/msm/msm_mdss.c | 33 +++++++++++++++++++++++++++++++++ > drivers/gpu/drm/msm/msm_mdss.h | 1 + > 2 files changed, 34 insertions(+) > > diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c > index dcb49fd30402b80edd2cb5971f95a78eaad6081f..3f00eb6de3a9d2bee7637c6f516efff78b7d872b 100644 > --- a/drivers/gpu/drm/msm/msm_mdss.c > +++ b/drivers/gpu/drm/msm/msm_mdss.c > @@ -222,6 +222,24 @@ static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss *msm_mdss) > } > } > > +static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss) > +{ > + const struct msm_mdss_data *data = msm_mdss->mdss_data; > + u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | > + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit); > + > + if (data->ubwc_bank_spread) > + value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; > + > + if (data->macrotile_mode) > + value |= MDSS_UBWC_STATIC_MACROTILE_MODE; > + > + writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC); > + > + writel_relaxed(4, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); > + writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); Nit: this probably can be folded into the msm_mdss_setup_ubwc_dec_40(), but I would not require it. Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > +} > + > #define MDSS_HW_MAJ_MIN \ > (MDSS_HW_VERSION_MAJOR__MASK | MDSS_HW_VERSION_MINOR__MASK) >
On 09/01/2025 23:39, Dmitry Baryshkov wrote: > On Thu, Jan 09, 2025 at 02:08:37PM +0100, Krzysztof Kozlowski wrote: >> Add support for the Qualcomm SM8750 platform. >> >> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> >> --- >> drivers/gpu/drm/msm/msm_mdss.c | 33 +++++++++++++++++++++++++++++++++ >> drivers/gpu/drm/msm/msm_mdss.h | 1 + >> 2 files changed, 34 insertions(+) >> >> diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c >> index dcb49fd30402b80edd2cb5971f95a78eaad6081f..3f00eb6de3a9d2bee7637c6f516efff78b7d872b 100644 >> --- a/drivers/gpu/drm/msm/msm_mdss.c >> +++ b/drivers/gpu/drm/msm/msm_mdss.c >> @@ -222,6 +222,24 @@ static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss *msm_mdss) >> } >> } >> >> +static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss) >> +{ >> + const struct msm_mdss_data *data = msm_mdss->mdss_data; >> + u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | >> + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit); >> + >> + if (data->ubwc_bank_spread) >> + value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; >> + >> + if (data->macrotile_mode) >> + value |= MDSS_UBWC_STATIC_MACROTILE_MODE; >> + >> + writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC); >> + >> + writel_relaxed(4, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); >> + writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); > > Nit: this probably can be folded into the msm_mdss_setup_ubwc_dec_40(), > but I would not require it. > > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> That was my initial try, but the resulting code was getting big with all the if-then. Best regards, Krzysztof
diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c index dcb49fd30402b80edd2cb5971f95a78eaad6081f..3f00eb6de3a9d2bee7637c6f516efff78b7d872b 100644 --- a/drivers/gpu/drm/msm/msm_mdss.c +++ b/drivers/gpu/drm/msm/msm_mdss.c @@ -222,6 +222,24 @@ static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss *msm_mdss) } } +static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss) +{ + const struct msm_mdss_data *data = msm_mdss->mdss_data; + u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit); + + if (data->ubwc_bank_spread) + value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; + + if (data->macrotile_mode) + value |= MDSS_UBWC_STATIC_MACROTILE_MODE; + + writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC); + + writel_relaxed(4, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); + writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); +} + #define MDSS_HW_MAJ_MIN \ (MDSS_HW_VERSION_MAJOR__MASK | MDSS_HW_VERSION_MINOR__MASK) @@ -339,6 +357,9 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss) case UBWC_4_3: msm_mdss_setup_ubwc_dec_40(msm_mdss); break; + case UBWC_5_0: + msm_mdss_setup_ubwc_dec_50(msm_mdss); + break; default: dev_err(msm_mdss->dev, "Unsupported UBWC decoder version %x\n", msm_mdss->mdss_data->ubwc_dec_version); @@ -722,6 +743,17 @@ static const struct msm_mdss_data sm8550_data = { .reg_bus_bw = 57000, }; +static const struct msm_mdss_data sm8750_data = { + .ubwc_enc_version = UBWC_5_0, + .ubwc_dec_version = UBWC_5_0, + .ubwc_swizzle = 6, + .ubwc_bank_spread = true, + /* TODO: highest_bank_bit = 2 for LP_DDR4 */ + .highest_bank_bit = 3, + .macrotile_mode = true, + .reg_bus_bw = 57000, +}; + static const struct msm_mdss_data x1e80100_data = { .ubwc_enc_version = UBWC_4_0, .ubwc_dec_version = UBWC_4_3, @@ -756,6 +788,7 @@ static const struct of_device_id mdss_dt_match[] = { { .compatible = "qcom,sm8450-mdss", .data = &sm8350_data }, { .compatible = "qcom,sm8550-mdss", .data = &sm8550_data }, { .compatible = "qcom,sm8650-mdss", .data = &sm8550_data}, + { .compatible = "qcom,sm8750-mdss", .data = &sm8750_data}, { .compatible = "qcom,x1e80100-mdss", .data = &x1e80100_data}, {} }; diff --git a/drivers/gpu/drm/msm/msm_mdss.h b/drivers/gpu/drm/msm/msm_mdss.h index 14dc53704314558841ee1fe08d93309fd2233812..dd0160c6ba1a297cea5b87cd8b03895b2aa08213 100644 --- a/drivers/gpu/drm/msm/msm_mdss.h +++ b/drivers/gpu/drm/msm/msm_mdss.h @@ -22,6 +22,7 @@ struct msm_mdss_data { #define UBWC_3_0 0x30000000 #define UBWC_4_0 0x40000000 #define UBWC_4_3 0x40030000 +#define UBWC_5_0 0x50000000 const struct msm_mdss_data *msm_mdss_get_mdss_data(struct device *dev);
Add support for the Qualcomm SM8750 platform. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- drivers/gpu/drm/msm/msm_mdss.c | 33 +++++++++++++++++++++++++++++++++ drivers/gpu/drm/msm/msm_mdss.h | 1 + 2 files changed, 34 insertions(+)