|
@@ -2559,8 +2559,10 @@ static int sde_wb_parse_dt(struct device_node *np, struct sde_mdss_cfg *sde_cfg)
|
|
if (IS_SDE_CTL_REV_100(sde_cfg->ctl_rev))
|
|
if (IS_SDE_CTL_REV_100(sde_cfg->ctl_rev))
|
|
set_bit(SDE_WB_INPUT_CTRL, &wb->features);
|
|
set_bit(SDE_WB_INPUT_CTRL, &wb->features);
|
|
|
|
|
|
- if (SDE_HW_MAJOR(sde_cfg->hw_rev) >= SDE_HW_MAJOR(SDE_HW_VER_900))
|
|
|
|
|
|
+ if (SDE_HW_MAJOR(sde_cfg->hw_rev) >= SDE_HW_MAJOR(SDE_HW_VER_900)) {
|
|
set_bit(SDE_WB_PROG_LINE, &wb->features);
|
|
set_bit(SDE_WB_PROG_LINE, &wb->features);
|
|
|
|
+ set_bit(SDE_WB_SYS_CACHE, &wb->features);
|
|
|
|
+ }
|
|
|
|
|
|
rc = _add_to_irq_offset_list(sde_cfg, SDE_INTR_HWBLK_WB, wb->id, wb->base);
|
|
rc = _add_to_irq_offset_list(sde_cfg, SDE_INTR_HWBLK_WB, wb->id, wb->base);
|
|
|
|
|
|
@@ -3487,36 +3489,57 @@ static int sde_cache_parse_dt(struct device_node *np,
|
|
struct sde_mdss_cfg *sde_cfg)
|
|
struct sde_mdss_cfg *sde_cfg)
|
|
{
|
|
{
|
|
struct llcc_slice_desc *slice;
|
|
struct llcc_slice_desc *slice;
|
|
- struct sde_sc_cfg *sc_cfg = sde_cfg->sc_cfg;
|
|
|
|
struct device_node *llcc_node;
|
|
struct device_node *llcc_node;
|
|
|
|
+ int i;
|
|
|
|
|
|
if (!sde_cfg) {
|
|
if (!sde_cfg) {
|
|
SDE_ERROR("invalid argument\n");
|
|
SDE_ERROR("invalid argument\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- if (!test_bit(SDE_FEATURE_SYSCACHE, sde_cfg->features))
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
llcc_node = of_find_node_by_name(NULL, "cache-controller");
|
|
llcc_node = of_find_node_by_name(NULL, "cache-controller");
|
|
if (!llcc_node) {
|
|
if (!llcc_node) {
|
|
SDE_DEBUG("cache controller missing, will disable img cache\n");
|
|
SDE_DEBUG("cache controller missing, will disable img cache\n");
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
- slice = llcc_slice_getd(LLCC_DISP);
|
|
|
|
- if (IS_ERR_OR_NULL(slice)) {
|
|
|
|
- SDE_ERROR("failed to get system cache %ld\n", PTR_ERR(slice));
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
|
|
+ for (i = 0; i < SDE_SYS_CACHE_MAX; i++) {
|
|
|
|
+ struct sde_sc_cfg *sc_cfg = &sde_cfg->sc_cfg[i];
|
|
|
|
+ u32 usecase_id = 0;
|
|
|
|
|
|
- sc_cfg[SDE_SYS_CACHE_DISP].has_sys_cache = true;
|
|
|
|
- sc_cfg[SDE_SYS_CACHE_DISP].llcc_scid = llcc_get_slice_id(slice);
|
|
|
|
- sc_cfg[SDE_SYS_CACHE_DISP].llcc_slice_size = llcc_get_slice_size(slice);
|
|
|
|
- SDE_DEBUG("img cache scid:%d slice_size:%zu kb\n",
|
|
|
|
- sc_cfg[SDE_SYS_CACHE_DISP].llcc_scid,
|
|
|
|
- sc_cfg[SDE_SYS_CACHE_DISP].llcc_slice_size);
|
|
|
|
- llcc_slice_putd(slice);
|
|
|
|
|
|
+ if (!sc_cfg->has_sys_cache)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ switch (i) {
|
|
|
|
+ case SDE_SYS_CACHE_DISP:
|
|
|
|
+ usecase_id = LLCC_DISP;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case SDE_SYS_CACHE_DISP_WB:
|
|
|
|
+ usecase_id = LLCC_DISP;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ usecase_id = 0;
|
|
|
|
+ SDE_DEBUG("invalid sys cache:%d\n", i);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!usecase_id)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ slice = llcc_slice_getd(usecase_id);
|
|
|
|
+ if (IS_ERR_OR_NULL(slice)) {
|
|
|
|
+ SDE_ERROR("failed to get system cache %ld\n", PTR_ERR(slice));
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sc_cfg->llcc_scid = llcc_get_slice_id(slice);
|
|
|
|
+ sc_cfg->llcc_slice_size = llcc_get_slice_size(slice);
|
|
|
|
+ SDE_DEBUG("img cache:%d usecase_id:%d, scid:%d slice_size:%zu kb\n",
|
|
|
|
+ i, usecase_id, sc_cfg->llcc_scid, sc_cfg->llcc_slice_size);
|
|
|
|
+ llcc_slice_putd(slice);
|
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -5010,7 +5033,7 @@ static int _sde_hardware_pre_caps(struct sde_mdss_cfg *sde_cfg, uint32_t hw_rev)
|
|
set_bit(SDE_FEATURE_DITHER_LUMA_MODE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_DITHER_LUMA_MODE, sde_cfg->features);
|
|
sde_cfg->mdss_hw_block_size = 0x158;
|
|
sde_cfg->mdss_hw_block_size = 0x158;
|
|
set_bit(SDE_FEATURE_TRUSTED_VM, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_TRUSTED_VM, sde_cfg->features);
|
|
- set_bit(SDE_FEATURE_SYSCACHE, sde_cfg->features);
|
|
|
|
|
|
+ sde_cfg->sc_cfg[SDE_SYS_CACHE_DISP].has_sys_cache = true;
|
|
} else if (IS_HOLI_TARGET(hw_rev)) {
|
|
} else if (IS_HOLI_TARGET(hw_rev)) {
|
|
set_bit(SDE_FEATURE_QSYNC, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_QSYNC, sde_cfg->features);
|
|
sde_cfg->perf.min_prefill_lines = 24;
|
|
sde_cfg->perf.min_prefill_lines = 24;
|
|
@@ -5040,7 +5063,7 @@ static int _sde_hardware_pre_caps(struct sde_mdss_cfg *sde_cfg, uint32_t hw_rev)
|
|
set_bit(SDE_FEATURE_VBIF_DISABLE_SHAREABLE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_VBIF_DISABLE_SHAREABLE, sde_cfg->features);
|
|
sde_cfg->mdss_hw_block_size = 0x158;
|
|
sde_cfg->mdss_hw_block_size = 0x158;
|
|
set_bit(SDE_FEATURE_TRUSTED_VM, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_TRUSTED_VM, sde_cfg->features);
|
|
- set_bit(SDE_FEATURE_SYSCACHE, sde_cfg->features);
|
|
|
|
|
|
+ sde_cfg->sc_cfg[SDE_SYS_CACHE_DISP].has_sys_cache = true;
|
|
} else if (IS_WAIPIO_TARGET(hw_rev)) {
|
|
} else if (IS_WAIPIO_TARGET(hw_rev)) {
|
|
sde_cfg->allowed_dsc_reservation_switch = SDE_DP_DSC_RESERVATION_SWITCH;
|
|
sde_cfg->allowed_dsc_reservation_switch = SDE_DP_DSC_RESERVATION_SWITCH;
|
|
set_bit(SDE_FEATURE_DEDICATED_CWB, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_DEDICATED_CWB, sde_cfg->features);
|
|
@@ -5062,7 +5085,7 @@ static int _sde_hardware_pre_caps(struct sde_mdss_cfg *sde_cfg, uint32_t hw_rev)
|
|
set_bit(SDE_FEATURE_VBIF_DISABLE_SHAREABLE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_VBIF_DISABLE_SHAREABLE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_DITHER_LUMA_MODE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_DITHER_LUMA_MODE, sde_cfg->features);
|
|
sde_cfg->mdss_hw_block_size = 0x158;
|
|
sde_cfg->mdss_hw_block_size = 0x158;
|
|
- set_bit(SDE_FEATURE_SYSCACHE, sde_cfg->features);
|
|
|
|
|
|
+ sde_cfg->sc_cfg[SDE_SYS_CACHE_DISP].has_sys_cache = true;
|
|
set_bit(SDE_FEATURE_MULTIRECT_ERROR, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_MULTIRECT_ERROR, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_FP16, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_FP16, sde_cfg->features);
|
|
set_bit(SDE_MDP_PERIPH_TOP_0_REMOVED, &sde_cfg->mdp[0].features);
|
|
set_bit(SDE_MDP_PERIPH_TOP_0_REMOVED, &sde_cfg->mdp[0].features);
|
|
@@ -5104,7 +5127,6 @@ static int _sde_hardware_pre_caps(struct sde_mdss_cfg *sde_cfg, uint32_t hw_rev)
|
|
set_bit(SDE_FEATURE_VIG_P010, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_VIG_P010, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_VBIF_DISABLE_SHAREABLE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_VBIF_DISABLE_SHAREABLE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_DITHER_LUMA_MODE, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_DITHER_LUMA_MODE, sde_cfg->features);
|
|
- set_bit(SDE_FEATURE_SYSCACHE, sde_cfg->features);
|
|
|
|
set_bit(SDE_FEATURE_MULTIRECT_ERROR, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_MULTIRECT_ERROR, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_FP16, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_FP16, sde_cfg->features);
|
|
set_bit(SDE_MDP_PERIPH_TOP_0_REMOVED, &sde_cfg->mdp[0].features);
|
|
set_bit(SDE_MDP_PERIPH_TOP_0_REMOVED, &sde_cfg->mdp[0].features);
|
|
@@ -5113,6 +5135,7 @@ static int _sde_hardware_pre_caps(struct sde_mdss_cfg *sde_cfg, uint32_t hw_rev)
|
|
set_bit(SDE_FEATURE_HW_VSYNC_TS, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_HW_VSYNC_TS, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_AVR_STEP, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_AVR_STEP, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_VBIF_CLK_SPLIT, sde_cfg->features);
|
|
set_bit(SDE_FEATURE_VBIF_CLK_SPLIT, sde_cfg->features);
|
|
|
|
+ sde_cfg->sc_cfg[SDE_SYS_CACHE_DISP].has_sys_cache = true;
|
|
sde_cfg->allowed_dsc_reservation_switch = SDE_DP_DSC_RESERVATION_SWITCH;
|
|
sde_cfg->allowed_dsc_reservation_switch = SDE_DP_DSC_RESERVATION_SWITCH;
|
|
sde_cfg->autorefresh_disable_seq = AUTOREFRESH_DISABLE_SEQ2;
|
|
sde_cfg->autorefresh_disable_seq = AUTOREFRESH_DISABLE_SEQ2;
|
|
sde_cfg->perf.min_prefill_lines = 40;
|
|
sde_cfg->perf.min_prefill_lines = 40;
|