Lines Matching +full:video +full:- +full:firmware
1 // SPDX-License-Identifier: GPL-2.0-only
7 #include <linux/firmware.h>
20 #include "firmware.h"
29 u32 fw_size = core->fw.mapped_mem_size; in venus_reset_cpu()
30 void __iomem *base = core->base; in venus_reset_cpu()
49 if (core->use_tz) { in venus_set_hw_state()
51 if (resume && ret == -EINVAL) in venus_set_hw_state()
59 writel(1, core->base + WRAPPER_A9SS_SW_RESET); in venus_set_hw_state()
67 const struct firmware *mdt; in venus_load_fw()
78 dev = core->dev; in venus_load_fw()
79 node = of_parse_phandle(dev->of_node, "memory-region", 0); in venus_load_fw()
81 dev_err(dev, "no memory-region specified\n"); in venus_load_fw()
82 return -EINVAL; in venus_load_fw()
103 ret = -EINVAL; in venus_load_fw()
110 ret = -ENOMEM; in venus_load_fw()
114 if (core->use_tz) in venus_load_fw()
136 dev = core->fw.dev; in venus_boot_no_tz()
138 return -EPROBE_DEFER; in venus_boot_no_tz()
140 iommu = core->fw.iommu_domain; in venus_boot_no_tz()
141 core->fw.mapped_mem_size = mem_size; in venus_boot_no_tz()
146 dev_err(dev, "could not map video firmware region\n"); in venus_boot_no_tz()
157 const size_t mapped = core->fw.mapped_mem_size; in venus_shutdown_no_tz()
161 struct device *dev = core->fw.dev; in venus_shutdown_no_tz()
162 void __iomem *base = core->base; in venus_shutdown_no_tz()
172 iommu = core->fw.iommu_domain; in venus_shutdown_no_tz()
176 dev_err(dev, "failed to unmap firmware\n"); in venus_shutdown_no_tz()
183 struct device *dev = core->dev; in venus_boot()
184 const struct venus_resources *res = core->res; in venus_boot()
190 (core->use_tz && !qcom_scm_is_available())) in venus_boot()
191 return -EPROBE_DEFER; in venus_boot()
193 ret = venus_load_fw(core, core->res->fwname, &mem_phys, &mem_size); in venus_boot()
195 dev_err(dev, "fail to load video firmware\n"); in venus_boot()
196 return -EINVAL; in venus_boot()
199 if (core->use_tz) in venus_boot()
207 if (core->use_tz && res->cp_size) { in venus_boot()
208 ret = qcom_scm_mem_protect_video_var(res->cp_start, in venus_boot()
209 res->cp_size, in venus_boot()
210 res->cp_nonpixel_start, in venus_boot()
211 res->cp_nonpixel_size); in venus_boot()
227 if (core->use_tz) in venus_shutdown()
243 np = of_get_child_by_name(core->dev->of_node, "video-firmware"); in venus_firmware_init()
245 core->use_tz = true; in venus_firmware_init()
250 info.fwnode = &np->fwnode; in venus_firmware_init()
251 info.parent = core->dev; in venus_firmware_init()
252 info.name = np->name; in venus_firmware_init()
261 pdev->dev.of_node = np; in venus_firmware_init()
263 ret = of_dma_configure(&pdev->dev, np, true); in venus_firmware_init()
265 dev_err(core->dev, "dma configure fail\n"); in venus_firmware_init()
269 core->fw.dev = &pdev->dev; in venus_firmware_init()
273 dev_err(core->fw.dev, "Failed to allocate iommu domain\n"); in venus_firmware_init()
274 ret = -ENOMEM; in venus_firmware_init()
278 ret = iommu_attach_device(iommu_dom, core->fw.dev); in venus_firmware_init()
280 dev_err(core->fw.dev, "could not attach device\n"); in venus_firmware_init()
284 core->fw.iommu_domain = iommu_dom; in venus_firmware_init()
302 if (!core->fw.dev) in venus_firmware_deinit()
305 iommu = core->fw.iommu_domain; in venus_firmware_deinit()
307 iommu_detach_device(iommu, core->fw.dev); in venus_firmware_deinit()
310 platform_device_unregister(to_platform_device(core->fw.dev)); in venus_firmware_deinit()