int remoteproc_resource_deinit(struct remote_proc *rproc) { int i = 0; struct proc_vring *vring_hw = 0; if (rproc) { if (rproc->rdev) { /* disable IPC interrupts */ if (rproc->proc->ops->reg_ipi_after_deinit) { for(i = 0; i < 2; i++) { vring_hw = &rproc->proc->vdev.vring_info[i]; rproc->proc->ops->reg_ipi_after_deinit(vring_hw); } } rpmsg_deinit(rproc->rdev); } if (rproc->proc) { hil_delete_proc(rproc->proc); } env_free_memory(rproc); } env_deinit(); /* Disable the caches - This is required if master boots firmwares * multiple times without hard reset on same core. If caches are * not invalidated at this point in time then subsequent firmware * boots on the same core may experience cache inconsistencies. * */ env_disable_cache(); return RPROC_SUCCESS; }
void lib_deinit(void) { lib_atexit_run(); ipwd_deinit(); hostpid_deinit(); data_stack_deinit(); env_deinit(); failures_deinit(); process_title_deinit(); }
/** * remoteproc_deinit * * Uninitializes resources for remoteproc "master" configuration. * * @param rproc - pointer to remote proc instance * * @param returns - status of function execution * */ int remoteproc_deinit(struct remote_proc *rproc) { if (rproc) { if (rproc->loader) { (void) remoteproc_loader_delete(rproc->loader); rproc->loader = RPROC_NULL; } if (rproc->proc) { hil_delete_proc(rproc->proc); rproc->proc = RPROC_NULL; } env_free_memory(rproc); } env_deinit(); return RPROC_SUCCESS; }
void rpmsg_deinit(struct remote_device *rdev) { if (rdev) { rpmsg_rdev_deinit(rdev); env_deinit(); } }