2828
2929#define MIN_IB_BW 400000000UL /* Min ib vote 400MB */
3030
31+ #define DEFAULT_REG_BW 153600 /* Used in mdss fbdev driver */
32+
3133struct msm_mdss {
3234 struct device * dev ;
3335
@@ -42,13 +44,15 @@ struct msm_mdss {
4244 const struct msm_mdss_data * mdss_data ;
4345 struct icc_path * mdp_path [2 ];
4446 u32 num_mdp_paths ;
47+ struct icc_path * reg_bus_path ;
4548};
4649
4750static int msm_mdss_parse_data_bus_icc_path (struct device * dev ,
4851 struct msm_mdss * msm_mdss )
4952{
5053 struct icc_path * path0 ;
5154 struct icc_path * path1 ;
55+ struct icc_path * reg_bus_path ;
5256
5357 path0 = devm_of_icc_get (dev , "mdp0-mem" );
5458 if (IS_ERR_OR_NULL (path0 ))
@@ -63,6 +67,10 @@ static int msm_mdss_parse_data_bus_icc_path(struct device *dev,
6367 msm_mdss -> num_mdp_paths ++ ;
6468 }
6569
70+ reg_bus_path = of_icc_get (dev , "cpu-cfg" );
71+ if (!IS_ERR_OR_NULL (reg_bus_path ))
72+ msm_mdss -> reg_bus_path = reg_bus_path ;
73+
6674 return 0 ;
6775}
6876
@@ -229,6 +237,13 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss)
229237 for (i = 0 ; i < msm_mdss -> num_mdp_paths ; i ++ )
230238 icc_set_bw (msm_mdss -> mdp_path [i ], 0 , Bps_to_icc (MIN_IB_BW ));
231239
240+ if (msm_mdss -> mdss_data && msm_mdss -> mdss_data -> reg_bus_bw )
241+ icc_set_bw (msm_mdss -> reg_bus_path , 0 ,
242+ msm_mdss -> mdss_data -> reg_bus_bw );
243+ else
244+ icc_set_bw (msm_mdss -> reg_bus_path , 0 ,
245+ DEFAULT_REG_BW );
246+
232247 ret = clk_bulk_prepare_enable (msm_mdss -> num_clocks , msm_mdss -> clocks );
233248 if (ret ) {
234249 dev_err (msm_mdss -> dev , "clock enable failed, ret:%d\n" , ret );
@@ -286,6 +301,9 @@ static int msm_mdss_disable(struct msm_mdss *msm_mdss)
286301 for (i = 0 ; i < msm_mdss -> num_mdp_paths ; i ++ )
287302 icc_set_bw (msm_mdss -> mdp_path [i ], 0 , 0 );
288303
304+ if (msm_mdss -> reg_bus_path )
305+ icc_set_bw (msm_mdss -> reg_bus_path , 0 , 0 );
306+
289307 return 0 ;
290308}
291309
@@ -372,6 +390,8 @@ static struct msm_mdss *msm_mdss_init(struct platform_device *pdev, bool is_mdp5
372390 if (!msm_mdss )
373391 return ERR_PTR (- ENOMEM );
374392
393+ msm_mdss -> mdss_data = of_device_get_match_data (& pdev -> dev );
394+
375395 msm_mdss -> mmio = devm_platform_ioremap_resource_byname (pdev , is_mdp5 ? "mdss_phys" : "mdss" );
376396 if (IS_ERR (msm_mdss -> mmio ))
377397 return ERR_CAST (msm_mdss -> mmio );
@@ -462,8 +482,6 @@ static int mdss_probe(struct platform_device *pdev)
462482 if (IS_ERR (mdss ))
463483 return PTR_ERR (mdss );
464484
465- mdss -> mdss_data = of_device_get_match_data (& pdev -> dev );
466-
467485 platform_set_drvdata (pdev , mdss );
468486
469487 /*
@@ -495,18 +513,21 @@ static const struct msm_mdss_data msm8998_data = {
495513 .ubwc_enc_version = UBWC_1_0 ,
496514 .ubwc_dec_version = UBWC_1_0 ,
497515 .highest_bank_bit = 2 ,
516+ .reg_bus_bw = 76800 ,
498517};
499518
500519static const struct msm_mdss_data qcm2290_data = {
501520 /* no UBWC */
502521 .highest_bank_bit = 0x2 ,
522+ .reg_bus_bw = 76800 ,
503523};
504524
505525static const struct msm_mdss_data sc7180_data = {
506526 .ubwc_enc_version = UBWC_2_0 ,
507527 .ubwc_dec_version = UBWC_2_0 ,
508528 .ubwc_static = 0x1e ,
509529 .highest_bank_bit = 0x3 ,
530+ .reg_bus_bw = 76800 ,
510531};
511532
512533static const struct msm_mdss_data sc7280_data = {
@@ -516,13 +537,15 @@ static const struct msm_mdss_data sc7280_data = {
516537 .ubwc_static = 1 ,
517538 .highest_bank_bit = 1 ,
518539 .macrotile_mode = 1 ,
540+ .reg_bus_bw = 74000 ,
519541};
520542
521543static const struct msm_mdss_data sc8180x_data = {
522544 .ubwc_enc_version = UBWC_3_0 ,
523545 .ubwc_dec_version = UBWC_3_0 ,
524546 .highest_bank_bit = 3 ,
525547 .macrotile_mode = 1 ,
548+ .reg_bus_bw = 76800 ,
526549};
527550
528551static const struct msm_mdss_data sc8280xp_data = {
@@ -532,6 +555,7 @@ static const struct msm_mdss_data sc8280xp_data = {
532555 .ubwc_static = 1 ,
533556 .highest_bank_bit = 3 ,
534557 .macrotile_mode = 1 ,
558+ .reg_bus_bw = 76800 ,
535559};
536560
537561static const struct msm_mdss_data sdm670_data = {
@@ -544,6 +568,7 @@ static const struct msm_mdss_data sdm845_data = {
544568 .ubwc_enc_version = UBWC_2_0 ,
545569 .ubwc_dec_version = UBWC_2_0 ,
546570 .highest_bank_bit = 2 ,
571+ .reg_bus_bw = 76800 ,
547572};
548573
549574static const struct msm_mdss_data sm6350_data = {
@@ -552,12 +577,14 @@ static const struct msm_mdss_data sm6350_data = {
552577 .ubwc_swizzle = 6 ,
553578 .ubwc_static = 0x1e ,
554579 .highest_bank_bit = 1 ,
580+ .reg_bus_bw = 76800 ,
555581};
556582
557583static const struct msm_mdss_data sm8150_data = {
558584 .ubwc_enc_version = UBWC_3_0 ,
559585 .ubwc_dec_version = UBWC_3_0 ,
560586 .highest_bank_bit = 2 ,
587+ .reg_bus_bw = 76800 ,
561588};
562589
563590static const struct msm_mdss_data sm6115_data = {
@@ -566,6 +593,7 @@ static const struct msm_mdss_data sm6115_data = {
566593 .ubwc_swizzle = 7 ,
567594 .ubwc_static = 0x11f ,
568595 .highest_bank_bit = 0x1 ,
596+ .reg_bus_bw = 76800 ,
569597};
570598
571599static const struct msm_mdss_data sm6125_data = {
@@ -583,6 +611,18 @@ static const struct msm_mdss_data sm8250_data = {
583611 /* TODO: highest_bank_bit = 2 for LP_DDR4 */
584612 .highest_bank_bit = 3 ,
585613 .macrotile_mode = 1 ,
614+ .reg_bus_bw = 76800 ,
615+ };
616+
617+ static const struct msm_mdss_data sm8350_data = {
618+ .ubwc_enc_version = UBWC_4_0 ,
619+ .ubwc_dec_version = UBWC_4_0 ,
620+ .ubwc_swizzle = 6 ,
621+ .ubwc_static = 1 ,
622+ /* TODO: highest_bank_bit = 2 for LP_DDR4 */
623+ .highest_bank_bit = 3 ,
624+ .macrotile_mode = 1 ,
625+ .reg_bus_bw = 74000 ,
586626};
587627
588628static const struct msm_mdss_data sm8550_data = {
@@ -593,6 +633,7 @@ static const struct msm_mdss_data sm8550_data = {
593633 /* TODO: highest_bank_bit = 2 for LP_DDR4 */
594634 .highest_bank_bit = 3 ,
595635 .macrotile_mode = 1 ,
636+ .reg_bus_bw = 57000 ,
596637};
597638static const struct of_device_id mdss_dt_match [] = {
598639 { .compatible = "qcom,mdss" },
@@ -610,8 +651,8 @@ static const struct of_device_id mdss_dt_match[] = {
610651 { .compatible = "qcom,sm6375-mdss" , .data = & sm6350_data },
611652 { .compatible = "qcom,sm8150-mdss" , .data = & sm8150_data },
612653 { .compatible = "qcom,sm8250-mdss" , .data = & sm8250_data },
613- { .compatible = "qcom,sm8350-mdss" , .data = & sm8250_data },
614- { .compatible = "qcom,sm8450-mdss" , .data = & sm8250_data },
654+ { .compatible = "qcom,sm8350-mdss" , .data = & sm8350_data },
655+ { .compatible = "qcom,sm8450-mdss" , .data = & sm8350_data },
615656 { .compatible = "qcom,sm8550-mdss" , .data = & sm8550_data },
616657 { .compatible = "qcom,sm8650-mdss" , .data = & sm8550_data },
617658 {}
0 commit comments