Lines Matching refs:risaf
204 static vaddr_t risaf_base(struct stm32_risaf_instance *risaf) in risaf_base() argument
206 return io_pa_or_va_secure(&risaf->pdata.base, 1); in risaf_base()
231 struct stm32_risaf_instance *risaf = NULL; in stm32_risaf_clear_illegal_access_flags() local
233 SLIST_FOREACH(risaf, &risaf_list, link) { in stm32_risaf_clear_illegal_access_flags()
234 vaddr_t base = io_pa_or_va_secure(&risaf->pdata.base, 1); in stm32_risaf_clear_illegal_access_flags()
246 struct stm32_risaf_instance *risaf = NULL; in stm32_risaf_print_erroneous_data() local
251 SLIST_FOREACH(risaf, &risaf_list, link) { in stm32_risaf_print_erroneous_data()
252 vaddr_t base = io_pa_or_va_secure(&risaf->pdata.base, 1); in stm32_risaf_print_erroneous_data()
258 IMSG("\n\nDUMPING DATA FOR %s\n\n", risaf->pdata.risaf_name); in stm32_risaf_print_erroneous_data()
271 risaf->pdata.mem_base + in stm32_risaf_print_erroneous_data()
277 risaf->pdata.mem_base + in stm32_risaf_print_erroneous_data()
294 bool risaf_is_hw_encryption_enabled(struct stm32_risaf_instance *risaf) in risaf_is_hw_encryption_enabled() argument
296 return (io_read32(risaf_base(risaf) + _RISAF_SR) & in risaf_is_hw_encryption_enabled()
301 risaf_check_region_boundaries(struct stm32_risaf_instance *risaf, in risaf_check_region_boundaries() argument
305 risaf->pdata.mem_base, in risaf_check_region_boundaries()
306 risaf->pdata.mem_size)) { in risaf_check_region_boundaries()
309 risaf->pdata.mem_base, in risaf_check_region_boundaries()
310 risaf->pdata.mem_base + risaf->pdata.mem_size - 1); in risaf_check_region_boundaries()
314 if (!risaf->ddata->granularity || in risaf_check_region_boundaries()
315 (region->addr % risaf->ddata->granularity) || in risaf_check_region_boundaries()
316 (region->len % risaf->ddata->granularity)) { in risaf_check_region_boundaries()
318 risaf->pdata.base.pa); in risaf_check_region_boundaries()
326 risaf_check_overlap(struct stm32_risaf_instance *risaf __maybe_unused, in risaf_check_overlap()
341 risaf->pdata.base.pa, index, i); in risaf_check_overlap()
349 static TEE_Result risaf_configure_region(struct stm32_risaf_instance *risaf, in risaf_configure_region() argument
354 uint32_t mask = risaf->ddata->mask_regions; in risaf_configure_region()
355 vaddr_t base = risaf_base(risaf); in risaf_configure_region()
358 if (!risaf->pdata.enc_supported) { in risaf_configure_region()
360 risaf->pdata.base.pa); in risaf_configure_region()
366 risaf->pdata.base.pa); in risaf_configure_region()
374 (saddr - risaf->pdata.mem_base) & mask); in risaf_configure_region()
376 (eaddr - risaf->pdata.mem_base) & mask); in risaf_configure_region()
387 risaf->pdata.base.pa, region_id, in risaf_configure_region()
388 risaf->pdata.mem_base + in risaf_configure_region()
390 risaf->pdata.mem_base + in risaf_configure_region()
398 static void risaf_print_version(struct stm32_risaf_instance *risaf) in risaf_print_version() argument
400 vaddr_t base = risaf_base(risaf); in risaf_print_version()
411 risaf->pdata.base.pa, version.major, version.minor, version.ip_id, in risaf_print_version()
416 void stm32_risaf_lock(struct stm32_risaf_instance *risaf) in stm32_risaf_lock() argument
418 assert(risaf); in stm32_risaf_lock()
420 io_setbits32(risaf_base(risaf) + _RISAF_CR, _RISAF_CR_GLOCK); in stm32_risaf_lock()
424 void stm32_risaf_is_locked(struct stm32_risaf_instance *risaf, bool *state) in stm32_risaf_is_locked() argument
426 assert(risaf); in stm32_risaf_is_locked()
428 *state = (io_read32(risaf_base(risaf) + _RISAF_CR) & in stm32_risaf_is_locked()
432 static TEE_Result stm32_risaf_init_ddata(struct stm32_risaf_instance *risaf) in stm32_risaf_init_ddata() argument
434 vaddr_t base = risaf_base(risaf); in stm32_risaf_init_ddata()
440 risaf->ddata = calloc(1, sizeof(*risaf->ddata)); in stm32_risaf_init_ddata()
441 if (!risaf->ddata) in stm32_risaf_init_ddata()
450 risaf->ddata->mask_regions = GENMASK_32(mask_msb, mask_lsb); in stm32_risaf_init_ddata()
451 risaf->ddata->max_base_regions = (hwcfgr & _RISAF_HWCFGR_CFG1_MASK) >> in stm32_risaf_init_ddata()
455 granularity = io_read32(risaf_base(risaf) + _RISAF_HWCFGR); in stm32_risaf_init_ddata()
458 risaf->ddata->granularity = granularity; in stm32_risaf_init_ddata()
463 static TEE_Result stm32_risaf_pm_resume(struct stm32_risaf_instance *risaf) in stm32_risaf_pm_resume() argument
465 struct stm32_risaf_region *regions = risaf->pdata.regions; in stm32_risaf_pm_resume()
468 for (i = 0; i < risaf->pdata.nregions; i++) { in stm32_risaf_pm_resume()
482 if (risaf_configure_region(risaf, id, cfg, cid_cfg, in stm32_risaf_pm_resume()
490 static TEE_Result stm32_risaf_pm_suspend(struct stm32_risaf_instance *risaf) in stm32_risaf_pm_suspend() argument
492 vaddr_t base = io_pa_or_va_secure(&risaf->pdata.base, 1); in stm32_risaf_pm_suspend()
495 for (i = 0; i < risaf->pdata.nregions; i++) { in stm32_risaf_pm_suspend()
496 uint32_t id = _RISAF_GET_REGION_ID(risaf->pdata.regions[i].cfg); in stm32_risaf_pm_suspend()
497 struct stm32_risaf_region *region = risaf->pdata.regions + i; in stm32_risaf_pm_suspend()
533 region->addr = start_addr + risaf->pdata.mem_base; in stm32_risaf_pm_suspend()
544 struct stm32_risaf_instance *risaf = pm_handle->handle; in stm32_risaf_pm() local
547 assert(risaf); in stm32_risaf_pm()
553 res = stm32_risaf_pm_resume(risaf); in stm32_risaf_pm()
555 res = stm32_risaf_pm_suspend(risaf); in stm32_risaf_pm()
564 struct stm32_risaf_instance *risaf = NULL; in stm32_risaf_acquire_access() local
577 risaf = fw->ctrl->priv; in stm32_risaf_acquire_access()
578 base = risaf_base(risaf); in stm32_risaf_acquire_access()
590 if (!id || id >= risaf->pdata.nregions) in stm32_risaf_acquire_access()
593 for (i = 0; i < risaf->pdata.nregions; i++) { in stm32_risaf_acquire_access()
594 if (id == _RISAF_GET_REGION_ID(risaf->pdata.regions[i].cfg)) { in stm32_risaf_acquire_access()
595 region = &risaf->pdata.regions[i]; in stm32_risaf_acquire_access()
628 struct stm32_risaf_instance *risaf = NULL; in stm32_risaf_reconfigure_region() local
638 risaf = fw->ctrl->priv; in stm32_risaf_reconfigure_region()
651 if (!id || id >= risaf->pdata.nregions) in stm32_risaf_reconfigure_region()
654 for (i = 0; i < risaf->pdata.nregions; i++) { in stm32_risaf_reconfigure_region()
655 if (id == _RISAF_GET_REGION_ID(risaf->pdata.regions[i].cfg)) { in stm32_risaf_reconfigure_region()
656 region = &risaf->pdata.regions[i]; in stm32_risaf_reconfigure_region()
665 DMSG("Reconfiguring %s region ID: %"PRIu32, risaf->pdata.risaf_name, in stm32_risaf_reconfigure_region()
668 exceptions = cpu_spin_lock_xsave(&risaf->pdata.conf_lock); in stm32_risaf_reconfigure_region()
669 res = risaf_configure_region(risaf, id, in stm32_risaf_reconfigure_region()
675 cpu_spin_unlock_xrestore(&risaf->pdata.conf_lock, exceptions); in stm32_risaf_reconfigure_region()
690 struct stm32_risaf_instance *risaf = NULL; in stm32_risaf_probe() local
707 risaf = calloc(1, sizeof(*risaf)); in stm32_risaf_probe()
708 if (!risaf) in stm32_risaf_probe()
714 free(risaf); in stm32_risaf_probe()
718 risaf->pdata.base.pa = dt_info.reg; in stm32_risaf_probe()
719 io_pa_or_va_secure(&risaf->pdata.base, dt_info.reg_size); in stm32_risaf_probe()
721 risaf->pdata.enc_supported = compat->supported_encryption; in stm32_risaf_probe()
723 res = clk_dt_get_by_index(fdt, node, 0, &risaf->pdata.clock); in stm32_risaf_probe()
724 if (!risaf->pdata.clock) in stm32_risaf_probe()
730 risaf->pdata.base.pa); in stm32_risaf_probe()
731 free(risaf); in stm32_risaf_probe()
738 strncpy(risaf->pdata.risaf_name, fdt_get_name(fdt, node, NULL), in stm32_risaf_probe()
739 sizeof(risaf->pdata.risaf_name) - 1); in stm32_risaf_probe()
741 res = clk_enable(risaf->pdata.clock); in stm32_risaf_probe()
745 res = stm32_risaf_init_ddata(risaf); in stm32_risaf_probe()
749 risaf_print_version(risaf); in stm32_risaf_probe()
755 risaf->pdata.mem_base = (paddr_t)fdt64_to_cpu(*cuint); in stm32_risaf_probe()
756 risaf->pdata.mem_size = (size_t)fdt64_to_cpu(*(cuint + 1)); in stm32_risaf_probe()
765 risaf->pdata.base.pa, risaf->pdata.mem_base, in stm32_risaf_probe()
766 risaf->pdata.mem_base + risaf->pdata.mem_size - 1); in stm32_risaf_probe()
810 if (risaf_check_region_boundaries(risaf, ®ions[i]) || in stm32_risaf_probe()
811 risaf_check_overlap(risaf, regions, i)) in stm32_risaf_probe()
815 assert(id < risaf->ddata->max_base_regions); in stm32_risaf_probe()
824 if (risaf_configure_region(risaf, id, cfg, cid_cfg, in stm32_risaf_probe()
833 controller->base = &risaf->pdata.base; in stm32_risaf_probe()
834 controller->name = risaf->pdata.risaf_name; in stm32_risaf_probe()
835 controller->priv = risaf; in stm32_risaf_probe()
838 risaf->pdata.regions = regions; in stm32_risaf_probe()
839 risaf->pdata.nregions = nregions; in stm32_risaf_probe()
841 SLIST_INSERT_HEAD(&risaf_list, risaf, link); in stm32_risaf_probe()
847 register_pm_core_service_cb(stm32_risaf_pm, risaf, "stm32-risaf"); in stm32_risaf_probe()
852 free(risaf->ddata); in stm32_risaf_probe()
854 clk_disable(risaf->pdata.clock); in stm32_risaf_probe()
856 free(risaf); in stm32_risaf_probe()