Lines Matching refs:ipcc_d
79 static void apply_rif_config(struct ipcc_pdata *ipcc_d) in apply_rif_config() argument
92 if (!ipcc_d->conf_data) in apply_rif_config()
99 assert((io_read32(ipcc_d->base + IPCC_HWCFGR) & in apply_rif_config()
101 ipcc_d->nb_channels_cfg / 2); in apply_rif_config()
108 if (ipcc_d->is_tdcid) { in apply_rif_config()
110 io_clrbits32(ipcc_d->base + IPCC_C1CIDCFGR, in apply_rif_config()
114 io_clrbits32(ipcc_d->base + IPCC_C2CIDCFGR, in apply_rif_config()
118 cid1 = io_read32(ipcc_d->base + IPCC_C1CIDCFGR) & in apply_rif_config()
120 cid2 = io_read32(ipcc_d->base + IPCC_C2CIDCFGR) & in apply_rif_config()
123 proc1_cidfilt = io_read32(ipcc_d->base + IPCC_C1CIDCFGR) & in apply_rif_config()
125 proc2_cidfilt = io_read32(ipcc_d->base + IPCC_C2CIDCFGR) & in apply_rif_config()
129 sec_proc_1 = ipcc_d->conf_data->sec_conf[0] & in apply_rif_config()
131 priv_proc_1 = ipcc_d->conf_data->priv_conf[0] & in apply_rif_config()
134 sec_proc_2 = (ipcc_d->conf_data->sec_conf[0] & in apply_rif_config()
138 priv_proc_2 = (ipcc_d->conf_data->priv_conf[0] & in apply_rif_config()
145 io_clrsetbits32(ipcc_d->base + IPCC_C1PRIVCFGR, in apply_rif_config()
147 io_clrsetbits32(ipcc_d->base + IPCC_C1SECCFGR, in apply_rif_config()
151 io_clrsetbits32(ipcc_d->base + IPCC_C2PRIVCFGR, in apply_rif_config()
153 io_clrsetbits32(ipcc_d->base + IPCC_C2SECCFGR, in apply_rif_config()
164 if (!(BIT(i) & ipcc_d->conf_data->access_mask[0])) in apply_rif_config()
168 (BIT(0) & ipcc_d->conf_data->cid_confs[i])) { in apply_rif_config()
175 !(BIT(0) & ipcc_d->conf_data->cid_confs[i])) in apply_rif_config()
180 if (!ipcc_d->is_tdcid) in apply_rif_config()
183 io_clrsetbits32(ipcc_d->base + IPCC_C1CIDCFGR, in apply_rif_config()
185 ipcc_d->conf_data->cid_confs[0]); in apply_rif_config()
194 if (!(BIT(i) & ipcc_d->conf_data->access_mask[0])) in apply_rif_config()
198 (BIT(0) & ipcc_d->conf_data->cid_confs[i])) { in apply_rif_config()
205 !(BIT(0) & ipcc_d->conf_data->cid_confs[i])) in apply_rif_config()
210 io_clrsetbits32(ipcc_d->base + IPCC_C2CIDCFGR, in apply_rif_config()
212 ipcc_d->conf_data->cid_confs[IPCC_NB_MAX_RIF_CHAN]); in apply_rif_config()
253 static TEE_Result parse_dt(const void *fdt, int node, struct ipcc_pdata *ipcc_d) in parse_dt() argument
267 ipcc_d->base = io_pa_or_va_secure(&addr, info.reg_size); in parse_dt()
268 assert(ipcc_d->base); in parse_dt()
271 res = clk_dt_get_by_index(fdt, node, 0, &ipcc_d->ipcc_clock); in parse_dt()
281 ipcc_d->conf_data = calloc(1, sizeof(*ipcc_d->conf_data)); in parse_dt()
282 if (!ipcc_d->conf_data) in parse_dt()
285 ipcc_d->nb_channels_cfg = (unsigned int)(lenp / sizeof(uint32_t)); in parse_dt()
286 assert(ipcc_d->nb_channels_cfg <= (IPCC_NB_MAX_RIF_CHAN * 2)); in parse_dt()
288 ipcc_d->conf_data->cid_confs = calloc(IPCC_NB_MAX_RIF_CHAN * 2, in parse_dt()
290 ipcc_d->conf_data->sec_conf = calloc(1, sizeof(uint32_t)); in parse_dt()
291 ipcc_d->conf_data->priv_conf = calloc(1, sizeof(uint32_t)); in parse_dt()
292 ipcc_d->conf_data->access_mask = calloc(1, sizeof(uint32_t)); in parse_dt()
293 if (!ipcc_d->conf_data->cid_confs || !ipcc_d->conf_data->sec_conf || in parse_dt()
294 !ipcc_d->conf_data->priv_conf || !ipcc_d->conf_data->access_mask) in parse_dt()
297 for (i = 0; i < ipcc_d->nb_channels_cfg; i++) in parse_dt()
298 stm32_rif_parse_cfg(fdt32_to_cpu(cuint[i]), ipcc_d->conf_data, in parse_dt()
308 struct ipcc_pdata *ipcc_d = NULL; in stm32_ipcc_probe() local
310 ipcc_d = calloc(1, sizeof(*ipcc_d)); in stm32_ipcc_probe()
311 if (!ipcc_d) in stm32_ipcc_probe()
314 res = stm32_rifsc_check_tdcid(&ipcc_d->is_tdcid); in stm32_ipcc_probe()
318 res = parse_dt(fdt, node, ipcc_d); in stm32_ipcc_probe()
322 res = clk_enable(ipcc_d->ipcc_clock); in stm32_ipcc_probe()
326 apply_rif_config(ipcc_d); in stm32_ipcc_probe()
328 clk_disable(ipcc_d->ipcc_clock); in stm32_ipcc_probe()
330 STAILQ_INSERT_TAIL(&ipcc_list, ipcc_d, link); in stm32_ipcc_probe()
332 register_pm_core_service_cb(stm32_ipcc_pm, ipcc_d, "stm32-ipcc"); in stm32_ipcc_probe()
338 if (ipcc_d->conf_data) { in stm32_ipcc_probe()
339 free(ipcc_d->conf_data->access_mask); in stm32_ipcc_probe()
340 free(ipcc_d->conf_data->cid_confs); in stm32_ipcc_probe()
341 free(ipcc_d->conf_data->priv_conf); in stm32_ipcc_probe()
342 free(ipcc_d->conf_data->sec_conf); in stm32_ipcc_probe()
344 free(ipcc_d->conf_data); in stm32_ipcc_probe()
345 free(ipcc_d); in stm32_ipcc_probe()