dma: intel_adsp_gpdma: Unmask interrupt on ACE

On ACE a seperate, soc specific, interrupt mask needs to be enabled
to unmask the interrupt. Do so for GPDMA.

Signed-off-by: Tom Burdick <thomas.burdick@intel.com>
This commit is contained in:
Tom Burdick 2023-08-01 16:18:48 -05:00 committed by Carles Cufí
parent 6e66efa088
commit 0e373019d6
2 changed files with 16 additions and 2 deletions

View file

@ -4,6 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
#include <adsp_interrupt.h>
#include <zephyr/drivers/dma.h>
#include <zephyr/cache.h>
@ -425,6 +426,16 @@ int intel_adsp_gpdma_get_attribute(const struct device *dev, uint32_t type, uint
return 0;
}
#ifdef CONFIG_SOC_SERIES_INTEL_ACE
static inline void ace_gpdma_intc_unmask(void)
{
ACE_DINT[0].ie[ACE_INTL_GPDMA] = BIT(0);
}
#else
static inline void ace_gpdma_intc_unmask(void) {}
#endif
int intel_adsp_gpdma_init(const struct device *dev)
{
struct dw_dma_dev_data *const dev_data = dev->data;
@ -433,6 +444,9 @@ int intel_adsp_gpdma_init(const struct device *dev)
dev_data->dma_ctx.magic = DMA_MAGIC;
dev_data->dma_ctx.dma_channels = DW_MAX_CHAN;
dev_data->dma_ctx.atomic = dev_data->channels_atomic;
ace_gpdma_intc_unmask();
#if CONFIG_PM_DEVICE && CONFIG_SOC_SERIES_INTEL_ACE
if (pm_device_on_power_domain(dev)) {
pm_device_init_off(dev);

View file

@ -556,8 +556,8 @@
#dma-cells = <1>;
reg = <0x0007c000 0x1000>;
shim = <0x0007c800 0x1000>;
interrupts = <0x10 0 0>;
interrupt-parent = <&core_intc>;
interrupts = <17 0 0>;
interrupt-parent = <&ace_intc>;
dma-buf-size-alignment = <4>;
dma-copy-alignment = <4>;
status = "okay";