| From 743e62c56e1b53e8655125cd977217778b4a4c88 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 20 Mar 2026 11:12:17 +0100 |
| Subject: ASoC: Intel: catpt: Fix the device initialization |
| |
| From: Cezary Rojewski <cezary.rojewski@intel.com> |
| |
| [ Upstream commit 5a184f1cb43a8e035251c635f5c47da5dc3e3049 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/soc/intel/catpt/device.c | 10 +++++++++- |
| sound/soc/intel/catpt/dsp.c | 3 --- |
| 2 files changed, 9 insertions(+), 4 deletions(-) |
| |
| diff --git a/sound/soc/intel/catpt/device.c b/sound/soc/intel/catpt/device.c |
| index a701799597956..db67509f051ad 100644 |
| --- a/sound/soc/intel/catpt/device.c |
| +++ b/sound/soc/intel/catpt/device.c |
| @@ -263,7 +263,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) |
| diff --git a/sound/soc/intel/catpt/dsp.c b/sound/soc/intel/catpt/dsp.c |
| index 38a92bbc1ed56..2c67d2d35cdae 100644 |
| --- a/sound/soc/intel/catpt/dsp.c |
| +++ b/sound/soc/intel/catpt/dsp.c |
| @@ -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. |
| -- |
| 2.53.0 |
| |