Lines Matching full:firmware
11 #include <linux/firmware.h>
62 const struct firmware *firmware) in falcon_copy_firmware_image() argument
64 u32 *firmware_vaddr = falcon->firmware.vaddr; in falcon_copy_firmware_image()
70 for (i = 0; i < firmware->size / sizeof(u32); i++) in falcon_copy_firmware_image()
71 firmware_vaddr[i] = le32_to_cpu(((u32 *)firmware->data)[i]); in falcon_copy_firmware_image()
73 /* ensure that caches are flushed and falcon can see the firmware */ in falcon_copy_firmware_image()
75 falcon->firmware.size, DMA_TO_DEVICE); in falcon_copy_firmware_image()
78 dev_err(falcon->dev, "failed to map firmware: %d\n", err); in falcon_copy_firmware_image()
82 falcon->firmware.size, DMA_TO_DEVICE); in falcon_copy_firmware_image()
83 dma_unmap_single(falcon->dev, daddr, falcon->firmware.size, in falcon_copy_firmware_image()
89 struct falcon_fw_bin_header_v1 *bin = (void *)falcon->firmware.vaddr; in falcon_parse_firmware_image()
94 dev_err(falcon->dev, "incorrect firmware magic\n"); in falcon_parse_firmware_image()
100 dev_err(falcon->dev, "unsupported firmware version\n"); in falcon_parse_firmware_image()
104 /* check that the firmware size is consistent */ in falcon_parse_firmware_image()
105 if (bin->size > falcon->firmware.size) { in falcon_parse_firmware_image()
106 dev_err(falcon->dev, "firmware image size inconsistency\n"); in falcon_parse_firmware_image()
110 os = falcon->firmware.vaddr + bin->os_header_offset; in falcon_parse_firmware_image()
112 falcon->firmware.bin_data.size = bin->os_size; in falcon_parse_firmware_image()
113 falcon->firmware.bin_data.offset = bin->os_data_offset; in falcon_parse_firmware_image()
114 falcon->firmware.code.offset = os->code_offset; in falcon_parse_firmware_image()
115 falcon->firmware.code.size = os->code_size; in falcon_parse_firmware_image()
116 falcon->firmware.data.offset = os->data_offset; in falcon_parse_firmware_image()
117 falcon->firmware.data.size = os->data_size; in falcon_parse_firmware_image()
127 err = request_firmware(&falcon->firmware.firmware, name, falcon->dev); in falcon_read_firmware()
136 const struct firmware *firmware = falcon->firmware.firmware; in falcon_load_firmware() local
139 falcon->firmware.size = firmware->size; in falcon_load_firmware()
141 /* allocate iova space for the firmware */ in falcon_load_firmware()
142 falcon->firmware.vaddr = falcon->ops->alloc(falcon, firmware->size, in falcon_load_firmware()
143 &falcon->firmware.paddr); in falcon_load_firmware()
144 if (!falcon->firmware.vaddr) { in falcon_load_firmware()
149 /* copy firmware image into local area. this also ensures endianness */ in falcon_load_firmware()
150 falcon_copy_firmware_image(falcon, firmware); in falcon_load_firmware()
155 dev_err(falcon->dev, "failed to parse firmware image\n"); in falcon_load_firmware()
159 release_firmware(firmware); in falcon_load_firmware()
160 falcon->firmware.firmware = NULL; in falcon_load_firmware()
165 falcon->ops->free(falcon, falcon->firmware.size, in falcon_load_firmware()
166 falcon->firmware.paddr, falcon->firmware.vaddr); in falcon_load_firmware()
177 falcon->firmware.vaddr = NULL; in falcon_init()
184 if (falcon->firmware.firmware) { in falcon_exit()
185 release_firmware(falcon->firmware.firmware); in falcon_exit()
186 falcon->firmware.firmware = NULL; in falcon_exit()
189 if (falcon->firmware.vaddr) { in falcon_exit()
190 falcon->ops->free(falcon, falcon->firmware.size, in falcon_exit()
191 falcon->firmware.paddr, in falcon_exit()
192 falcon->firmware.vaddr); in falcon_exit()
193 falcon->firmware.vaddr = NULL; in falcon_exit()
202 if (!falcon->firmware.vaddr) in falcon_boot()
208 falcon_writel(falcon, (falcon->firmware.paddr + in falcon_boot()
209 falcon->firmware.bin_data.offset) >> 8, in falcon_boot()
213 for (offset = 0; offset < falcon->firmware.data.size; offset += 256) in falcon_boot()
215 falcon->firmware.data.offset + offset, in falcon_boot()
219 falcon_copy_chunk(falcon, falcon->firmware.code.offset, in falcon_boot()