]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: Intel: catpt: Fix the device initialization
authorCezary Rojewski <cezary.rojewski@intel.com>
Fri, 20 Mar 2026 10:12:17 +0000 (11:12 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 23 Mar 2026 17:32:27 +0000 (17:32 +0000)
The DMA mask shall be coerced before any buffer allocations for the
device are done.  At the same time explain why DMA mask of 31 bits is
used in the first place.

Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Fixes: 7a10b66a5df9 ("ASoC: Intel: catpt: Device driver lifecycle")
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://patch.msgid.link/20260320101217.1243688-1-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/catpt/device.c
sound/soc/intel/catpt/dsp.c

index 0638aecba40de42f09fb658f9ed6d57f9f530ffc..0b3f20e384c7882c9be3a80aa8ec174a800ef613 100644 (file)
@@ -281,7 +281,15 @@ static int catpt_acpi_probe(struct platform_device *pdev)
        if (IS_ERR(cdev->pci_ba))
                return PTR_ERR(cdev->pci_ba);
 
-       /* alloc buffer for storing DRAM context during dx transitions */
+       /*
+        * As per design HOST is responsible for preserving firmware's runtime
+        * context during D0 -> D3 -> D0 transitions.  Addresses used for DMA
+        * to/from HOST memory shall be outside the reserved range of 0xFFFxxxxx.
+        */
+       ret = dma_coerce_mask_and_coherent(cdev->dev, DMA_BIT_MASK(31));
+       if (ret)
+               return ret;
+
        cdev->dxbuf_vaddr = dmam_alloc_coherent(dev, catpt_dram_size(cdev),
                                                &cdev->dxbuf_paddr, GFP_KERNEL);
        if (!cdev->dxbuf_vaddr)
index 008a20a2acbda72f39c8231633198b9bd7b0c007..677f348909c8f1aa0cd6af3c7ffa7ab6a2b230e5 100644 (file)
@@ -125,9 +125,6 @@ int catpt_dmac_probe(struct catpt_dev *cdev)
        dmac->dev = cdev->dev;
        dmac->irq = cdev->irq;
 
-       ret = dma_coerce_mask_and_coherent(cdev->dev, DMA_BIT_MASK(31));
-       if (ret)
-               return ret;
        /*
         * Caller is responsible for putting device in D0 to allow
         * for I/O and memory access before probing DW.