From 818651c2f165965bdfbf93f407e01fb9a9e4b4e8 Mon Sep 17 00:00:00 2001 From: Steve Cohen Date: Thu, 6 Feb 2020 16:02:25 -0500 Subject: [PATCH] disp: msm: sde: use sde_dt_props object to parse dspp dts Use the new helpers for parsing DSPP device nodes entries. Change-Id: I620ba80cac90f34faa1f853f00cf856370ae387c Signed-off-by: Steve Cohen --- msm/sde/sde_hw_catalog.c | 129 +++++++++++++-------------------------- 1 file changed, 44 insertions(+), 85 deletions(-) diff --git a/msm/sde/sde_hw_catalog.c b/msm/sde/sde_hw_catalog.c index 241d0bde5ae1..b47c39d54cfc 100644 --- a/msm/sde/sde_hw_catalog.c +++ b/msm/sde/sde_hw_catalog.c @@ -2470,102 +2470,58 @@ end: static int sde_dspp_parse_dt(struct device_node *np, struct sde_mdss_cfg *sde_cfg) { - int rc, prop_count[DSPP_PROP_MAX], i; - int ad_prop_count[AD_PROP_MAX]; - int ltm_prop_count[LTM_PROP_MAX]; - bool prop_exists[DSPP_PROP_MAX], ad_prop_exists[AD_PROP_MAX]; - bool ltm_prop_exists[LTM_PROP_MAX]; - bool blocks_prop_exists[DSPP_BLOCKS_PROP_MAX]; - struct sde_prop_value *ad_prop_value = NULL, *ltm_prop_value = NULL; - int blocks_prop_count[DSPP_BLOCKS_PROP_MAX]; - struct sde_prop_value *prop_value = NULL, *blocks_prop_value = NULL; + int rc = 0, i; u32 off_count, ad_off_count, ltm_off_count; + struct sde_dt_props *props, *ad_props, *ltm_props; + struct sde_dt_props *blocks_props = NULL; struct sde_dspp_cfg *dspp; struct sde_dspp_sub_blks *sblk; struct device_node *snp = NULL; if (!sde_cfg) { SDE_ERROR("invalid argument\n"); - rc = -EINVAL; - goto end; + return -EINVAL; } - prop_value = kzalloc(DSPP_PROP_MAX * - sizeof(struct sde_prop_value), GFP_KERNEL); - if (!prop_value) { - rc = -ENOMEM; - goto end; - } - - rc = _validate_dt_entry(np, dspp_prop, ARRAY_SIZE(dspp_prop), - prop_count, &off_count); - if (rc) - goto end; + props = sde_get_dt_props(np, DSPP_PROP_MAX, dspp_prop, + ARRAY_SIZE(dspp_prop), &off_count); + if (IS_ERR_OR_NULL(props)) + return PTR_ERR(props); sde_cfg->dspp_count = off_count; - rc = _read_dt_entry(np, dspp_prop, ARRAY_SIZE(dspp_prop), prop_count, - prop_exists, prop_value); - if (rc) - goto end; - /* Parse AD dtsi entries */ - ad_prop_value = kcalloc(AD_PROP_MAX, - sizeof(struct sde_prop_value), GFP_KERNEL); - if (!ad_prop_value) { - rc = -ENOMEM; - goto end; + ad_props = sde_get_dt_props(np, AD_PROP_MAX, ad_prop, + ARRAY_SIZE(ad_prop), &ad_off_count); + if (IS_ERR_OR_NULL(ad_props)) { + rc = PTR_ERR(ad_props); + goto put_props; } - rc = _validate_dt_entry(np, ad_prop, ARRAY_SIZE(ad_prop), - ad_prop_count, &ad_off_count); - if (rc) - goto end; - rc = _read_dt_entry(np, ad_prop, ARRAY_SIZE(ad_prop), ad_prop_count, - ad_prop_exists, ad_prop_value); - if (rc) - goto end; /* Parse LTM dtsi entries */ - ltm_prop_value = kcalloc(LTM_PROP_MAX, - sizeof(struct sde_prop_value), GFP_KERNEL); - if (!ltm_prop_value) { - rc = -ENOMEM; - goto end; + ltm_props = sde_get_dt_props(np, LTM_PROP_MAX, ltm_prop, + ARRAY_SIZE(ltm_prop), <m_off_count); + if (IS_ERR_OR_NULL(ltm_props)) { + rc = PTR_ERR(ltm_props); + goto put_ad_props; } - rc = _validate_dt_entry(np, ltm_prop, ARRAY_SIZE(ltm_prop), - ltm_prop_count, <m_off_count); - if (rc) - goto end; - rc = _read_dt_entry(np, ltm_prop, ARRAY_SIZE(ltm_prop), ltm_prop_count, - ltm_prop_exists, ltm_prop_value); - if (rc) - goto end; /* get DSPP feature dt properties if they exist */ snp = of_get_child_by_name(np, dspp_prop[DSPP_BLOCKS].prop_name); if (snp) { - blocks_prop_value = kzalloc(DSPP_BLOCKS_PROP_MAX * - MAX_SDE_HW_BLK * sizeof(struct sde_prop_value), - GFP_KERNEL); - if (!blocks_prop_value) { - rc = -ENOMEM; - goto end; + blocks_props = sde_get_dt_props(snp, DSPP_BLOCKS_PROP_MAX, + dspp_blocks_prop, ARRAY_SIZE(dspp_blocks_prop), + NULL); + if (IS_ERR_OR_NULL(blocks_props)) { + rc = PTR_ERR(blocks_props); + goto put_ltm_props; } - rc = _validate_dt_entry(snp, dspp_blocks_prop, - ARRAY_SIZE(dspp_blocks_prop), blocks_prop_count, NULL); - if (rc) - goto end; - rc = _read_dt_entry(snp, dspp_blocks_prop, - ARRAY_SIZE(dspp_blocks_prop), blocks_prop_count, - blocks_prop_exists, blocks_prop_value); - if (rc) - goto end; } for (i = 0; i < off_count; i++) { dspp = sde_cfg->dspp + i; - dspp->base = PROP_VALUE_ACCESS(prop_value, DSPP_OFF, i); - dspp->len = PROP_VALUE_ACCESS(prop_value, DSPP_SIZE, 0); + dspp->base = PROP_VALUE_ACCESS(props->values, DSPP_OFF, i); + dspp->len = PROP_VALUE_ACCESS(props->values, DSPP_SIZE, 0); dspp->id = DSPP_0 + i; snprintf(dspp->name, SDE_HW_BLK_NAME_LEN, "dspp_%u", dspp->id - DSPP_0); @@ -2578,17 +2534,18 @@ static int sde_dspp_parse_dt(struct device_node *np, } dspp->sblk = sblk; - if (blocks_prop_value) + if (blocks_props) _sde_dspp_setup_blocks(sde_cfg, dspp, sblk, - blocks_prop_exists, blocks_prop_value); + blocks_props->exists, + blocks_props->values); sblk->ad.id = SDE_DSPP_AD; sde_cfg->ad_count = ad_off_count; - if (ad_prop_value && (i < ad_off_count) && - ad_prop_exists[AD_OFF]) { - sblk->ad.base = PROP_VALUE_ACCESS(ad_prop_value, + if (ad_props && (i < ad_off_count) && + ad_props->exists[AD_OFF]) { + sblk->ad.base = PROP_VALUE_ACCESS(ad_props->values, AD_OFF, i); - sblk->ad.version = PROP_VALUE_ACCESS(ad_prop_value, + sblk->ad.version = PROP_VALUE_ACCESS(ad_props->values, AD_VERSION, 0); set_bit(SDE_DSPP_AD, &dspp->features); rc = _add_to_irq_offset_list(sde_cfg, @@ -2600,11 +2557,11 @@ static int sde_dspp_parse_dt(struct device_node *np, sblk->ltm.id = SDE_DSPP_LTM; sde_cfg->ltm_count = ltm_off_count; - if (ltm_prop_value && (i < ltm_off_count) && - ltm_prop_exists[LTM_OFF]) { - sblk->ltm.base = PROP_VALUE_ACCESS(ltm_prop_value, + if (ltm_props && (i < ltm_off_count) && + ltm_props->exists[LTM_OFF]) { + sblk->ltm.base = PROP_VALUE_ACCESS(ltm_props->values, LTM_OFF, i); - sblk->ltm.version = PROP_VALUE_ACCESS(ltm_prop_value, + sblk->ltm.version = PROP_VALUE_ACCESS(ltm_props->values, LTM_VERSION, 0); set_bit(SDE_DSPP_LTM, &dspp->features); rc = _add_to_irq_offset_list(sde_cfg, @@ -2617,10 +2574,13 @@ static int sde_dspp_parse_dt(struct device_node *np, } end: - kfree(prop_value); - kfree(ad_prop_value); - kfree(ltm_prop_value); - kfree(blocks_prop_value); + sde_put_dt_props(blocks_props); +put_ltm_props: + sde_put_dt_props(ltm_props); +put_ad_props: + sde_put_dt_props(ad_props); +put_props: + sde_put_dt_props(props); return rc; } @@ -2728,7 +2688,6 @@ static int sde_ds_parse_dt(struct device_node *np, set_bit(SDE_SSPP_SCALER_QSEED3, &ds->features); else if (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3LITE) set_bit(SDE_SSPP_SCALER_QSEED3LITE, &ds->features); - } end: