diff options
Diffstat (limited to 'sound/soc/intel/catpt/loader.c')
| -rw-r--r-- | sound/soc/intel/catpt/loader.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/sound/soc/intel/catpt/loader.c b/sound/soc/intel/catpt/loader.c index 696d84314eeb..432cb1f0ab4e 100644 --- a/sound/soc/intel/catpt/loader.c +++ b/sound/soc/intel/catpt/loader.c @@ -90,6 +90,7 @@ int catpt_store_streams_context(struct catpt_dev *cdev, struct dma_chan *chan) { struct catpt_stream_runtime *stream; + /* Lockless as no streams can be added or removed during D3 -> D0 transition. */ list_for_each_entry(stream, &cdev->stream_list, node) { u32 off, size; int ret; @@ -180,6 +181,7 @@ catpt_restore_streams_context(struct catpt_dev *cdev, struct dma_chan *chan) { struct catpt_stream_runtime *stream; + /* Lockless as no streams can be added or removed during D3 -> D0 transition. */ list_for_each_entry(stream, &cdev->stream_list, node) { u32 off, size; int ret; @@ -208,6 +210,7 @@ static int catpt_restore_memdumps(struct catpt_dev *cdev, struct dma_chan *chan) for (i = 0; i < cdev->dx_ctx.num_meminfo; i++) { struct catpt_save_meminfo *info; + struct resource r = {}; u32 off; int ret; @@ -216,7 +219,8 @@ static int catpt_restore_memdumps(struct catpt_dev *cdev, struct dma_chan *chan) continue; off = catpt_to_host_offset(info->offset); - if (off < cdev->dram.start || off > cdev->dram.end) + resource_set_range(&r, off, info->size); + if (!resource_contains(&cdev->dram, &r)) continue; dev_dbg(cdev->dev, "restoring memdump: off 0x%08x size %d\n", @@ -239,34 +243,32 @@ static int catpt_restore_fwimage(struct catpt_dev *cdev, struct dma_chan *chan, dma_addr_t paddr, struct catpt_fw_block_hdr *blk) { - struct resource r1, r2, common; + struct resource r1 = {}; int i; print_hex_dump_debug(__func__, DUMP_PREFIX_OFFSET, 8, 4, blk, sizeof(*blk), false); - r1.start = cdev->dram.start + blk->ram_offset; - r1.end = r1.start + blk->size - 1; + resource_set_range(&r1, cdev->dram.start + blk->ram_offset, blk->size); /* advance to data area */ paddr += sizeof(*blk); for (i = 0; i < cdev->dx_ctx.num_meminfo; i++) { struct catpt_save_meminfo *info; + struct resource common = {}; + struct resource r2 = {}; u32 off; int ret; info = &cdev->dx_ctx.meminfo[i]; - if (info->source != CATPT_DX_TYPE_FW_IMAGE) continue; off = catpt_to_host_offset(info->offset); - if (off < cdev->dram.start || off > cdev->dram.end) + resource_set_range(&r2, off, info->size); + if (!resource_contains(&cdev->dram, &r2)) continue; - r2.start = off; - r2.end = r2.start + info->size - 1; - if (!resource_intersection(&r2, &r1, &common)) continue; /* calculate start offset of common data area */ @@ -580,10 +582,6 @@ release_fw: static int catpt_load_images(struct catpt_dev *cdev, bool restore) { - static const char *const names[] = { - "intel/IntcSST1.bin", - "intel/IntcSST2.bin", - }; struct dma_chan *chan; int ret; @@ -591,7 +589,7 @@ static int catpt_load_images(struct catpt_dev *cdev, bool restore) if (IS_ERR(chan)) return PTR_ERR(chan); - ret = catpt_load_image(cdev, chan, names[cdev->spec->core_id - 1], + ret = catpt_load_image(cdev, chan, cdev->spec->fw_name, FW_SIGNATURE, restore); if (ret) goto release_dma_chan; @@ -656,7 +654,7 @@ int catpt_first_boot_firmware(struct catpt_dev *cdev) ret = catpt_ipc_get_mixer_stream_info(cdev, &cdev->mixer); if (ret) - return CATPT_IPC_ERROR(ret); + return CATPT_IPC_RET(ret); ret = catpt_arm_stream_templates(cdev); if (ret) { |
