diff --git a/app/boards/amd_acp_6_0_adsp.conf b/app/boards/amd_acp_6_0_adsp.conf new file mode 100644 index 000000000000..d56937f651c9 --- /dev/null +++ b/app/boards/amd_acp_6_0_adsp.conf @@ -0,0 +1,11 @@ +CONFIG_REMBRANDT=y +CONFIG_HAVE_AGENT=n +CONFIG_DCACHE_LINE_SIZE_DETECT=n +CONFIG_DCACHE_LINE_SIZE=128 +CONFIG_DYNAMIC_INTERRUPTS=y +CONFIG_SHARED_INTERRUPTS=n +CONFIG_ZEPHYR_LOG=n +CONFIG_TRACE=n +CONFIG_DMA=y +CONFIG_ZEPHYR_NATIVE_DRIVERS=n +CONFIG_AMS=n diff --git a/posix/include/rtos/interrupt.h b/posix/include/rtos/interrupt.h index 839b4bef3ca3..58cefae94c81 100644 --- a/posix/include/rtos/interrupt.h +++ b/posix/include/rtos/interrupt.h @@ -122,7 +122,7 @@ static inline struct cascade_root *cascade_root_get(void) /* For i.MX, while building SOF with Zephyr use the interrupt_* * functions from second level interrupt handling and IRQ_STEER. */ -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) int mux_interrupt_get_irq(unsigned int irq, const char *cascade); int mux_interrupt_register(uint32_t irq, void(*handler)(void *arg), void *arg); void mux_interrupt_unregister(uint32_t irq, const void *arg); diff --git a/scripts/xtensa-build-zephyr.py b/scripts/xtensa-build-zephyr.py index b7640ea8ce58..62634e3a00df 100755 --- a/scripts/xtensa-build-zephyr.py +++ b/scripts/xtensa-build-zephyr.py @@ -168,6 +168,12 @@ class PlatformConfig: "imx", "imx95_evk/mimx9596/m7/ddr", "", "", "", "" ), + "acp_6_0" : PlatformConfig( + "amd", "amd_acp_6_0_adsp/acp_6_0", + f"RI-2019.1{xtensa_tools_version_postfix}", + "rmb_LX7_HiFi5_PROD", + RIMAGE_KEY = "key param ignored by acp_6_0" + ), } platform_configs = platform_configs_all.copy() @@ -1165,7 +1171,7 @@ def gzip_compress(fname, gzdst=None): RI_INFO_UNSUPPORTED = [] RI_INFO_UNSUPPORTED += ['imx8', 'imx8x', 'imx8m', 'imx8ulp', 'imx95'] -RI_INFO_UNSUPPORTED += ['rn'] +RI_INFO_UNSUPPORTED += ['rn','acp_6_0'] RI_INFO_UNSUPPORTED += ['mt8186', 'mt8195'] # For temporary workarounds. Unlike _UNSUPPORTED above, the platforms below will print a warning. diff --git a/src/drivers/amd/common/acp_dma.c b/src/drivers/amd/common/acp_dma.c index ba641c93c5b8..11095dc1e8db 100644 --- a/src/drivers/amd/common/acp_dma.c +++ b/src/drivers/amd/common/acp_dma.c @@ -167,9 +167,13 @@ static int acp_dma_start(struct dma_chan_data *channel) acp_dma_cntl_0_t dma_cntl; acp_dma_ch_sts_t dma_sts; uint32_t chan_sts; +#ifdef __ZEPHYR__ + uint64_t deadline = sof_cycle_get_64() + k_us_to_cyc_ceil64(500); +#else struct timer *timer = timer_get(); uint64_t deadline = platform_timer_get(timer) + clock_ms_to_ticks(PLATFORM_DEFAULT_CLOCK, 1) * 500 / 1000; +#endif if (channel->status != COMP_STATE_PREPARE && channel->status != COMP_STATE_SUSPEND) return -EINVAL; @@ -196,7 +200,11 @@ static int acp_dma_start(struct dma_chan_data *channel) chan_sts = dma_sts.u32all & (1 << channel->index); if (!chan_sts) return 0; - } while (platform_timer_get(timer) <= deadline); +#ifdef __ZEPHYR__ + }while (sof_cycle_get_64() <= deadline); +#else + }while (platform_timer_get(timer) <= deadline); +#endif tr_err(&acpdma_tr, "acp-dma: timed out for dma start"); @@ -263,7 +271,11 @@ static int acp_dma_status(struct dma_chan_data *channel, { status->state = channel->status; status->flags = 0; +#ifdef __ZEPHYR__ + status->timestamp = sof_cycle_get_64(); +#else status->timestamp = timer_get_system(timer_get()); +#endif return 0; } diff --git a/src/drivers/amd/rembrandt/acp_dmic_dma.c b/src/drivers/amd/rembrandt/acp_dmic_dma.c index 6801b907dd9b..951309aa9374 100644 --- a/src/drivers/amd/rembrandt/acp_dmic_dma.c +++ b/src/drivers/amd/rembrandt/acp_dmic_dma.c @@ -47,10 +47,13 @@ int acp_dmic_dma_start(struct dma_chan_data *channel) acp_hstdm_iter_t hs_iter; acp_hstdm_irer_t hs_irer; uint32_t acp_pdm_en; +#ifdef __ZEPHYR__ + uint64_t deadline = sof_cycle_get_64() + k_us_to_cyc_ceil64(500); +#else struct timer *timer = timer_get(); uint64_t deadline = platform_timer_get(timer) + clock_ms_to_ticks(PLATFORM_DEFAULT_CLOCK, 1) * 500 / 1000; - +#endif hs_iter = (acp_hstdm_iter_t)io_reg_read((PU_REGISTER_BASE + ACP_HSTDM_ITER)); hs_irer = (acp_hstdm_irer_t)io_reg_read((PU_REGISTER_BASE + ACP_HSTDM_IRER)); acp_pdm_en = (uint32_t)io_reg_read(PU_REGISTER_BASE + ACP_WOV_PDM_ENABLE); @@ -82,13 +85,18 @@ int acp_dmic_dma_start(struct dma_chan_data *channel) pdm_dma_enable = (acp_wov_pdm_dma_enable_t) io_reg_read(PU_REGISTER_BASE + ACP_WOV_PDM_DMA_ENABLE); while (!(uint32_t)pdm_dma_enable.bits.pdm_dma_en_status) { - if (deadline < platform_timer_get(timer)) { - /* safe check in case we've got preempted after read */ - if ((uint32_t)pdm_dma_enable.bits.pdm_dma_en_status) - return 0; - tr_err(&acp_dmic_dma_rmb_tr, "timed out for dma start"); - return -ETIME; - } +#ifdef __ZEPHYR__ + if (deadline < sof_cycle_get_64()) +#else + if (deadline < platform_timer_get(timer)) +#endif + { + /* safe check in case we've got preempted after read */ + if ((uint32_t)pdm_dma_enable.bits.pdm_dma_en_status) + return 0; + tr_err(&acp_dmic_dma_rmb_tr, "timed out for dma start"); + return -ETIME; + } pdm_dma_enable = (acp_wov_pdm_dma_enable_t) io_reg_read(PU_REGISTER_BASE + ACP_WOV_PDM_DMA_ENABLE); } @@ -102,9 +110,13 @@ int acp_dmic_dma_stop(struct dma_chan_data *channel) acp_hstdm_iter_t hs_iter; acp_hstdm_irer_t hs_irer; uint32_t acp_pdm_en; +#ifdef __ZEPHYR__ + uint64_t deadline = sof_cycle_get_64() + k_us_to_cyc_ceil64(500); +#else struct timer *timer = timer_get(); uint64_t deadline = platform_timer_get(timer) + clock_ms_to_ticks(PLATFORM_DEFAULT_CLOCK, 1) * 500 / 1000; +#endif switch (channel->status) { case COMP_STATE_READY: case COMP_STATE_PREPARE: @@ -123,7 +135,12 @@ int acp_dmic_dma_stop(struct dma_chan_data *channel) io_reg_read(PU_REGISTER_BASE + ACP_WOV_PDM_DMA_ENABLE); /* Check PDM DMA Status */ while ((uint32_t)pdm_dma_enable.bits.pdm_dma_en_status) { - if (deadline < platform_timer_get(timer)) { +#ifdef __ZEPHYR__ + if (deadline < sof_cycle_get_64()) +#else + if (deadline < platform_timer_get(timer)) +#endif + { /* safe check in case we've got preempted after read */ if ((uint32_t)pdm_dma_enable.bits.pdm_dma_en_status) return 0; diff --git a/src/drivers/amd/rembrandt/acp_hs_dai.c b/src/drivers/amd/rembrandt/acp_hs_dai.c index 56099d4c79cb..6b51a1a248e5 100644 --- a/src/drivers/amd/rembrandt/acp_hs_dai.c +++ b/src/drivers/amd/rembrandt/acp_hs_dai.c @@ -21,6 +21,10 @@ SOF_DEFINE_REG_UUID(hsdai); DECLARE_TR_CTX(hsdai_tr, SOF_UUID(hsdai_uuid), LOG_LEVEL_INFO); +#if defined(__ZEPHYR__) +#define interrupt_get_irq mux_interrupt_get_irq +#endif + static inline int hsdai_set_config(struct dai *dai, struct ipc_config_dai *common_config, const void *spec_config) { diff --git a/src/drivers/amd/rembrandt/interrupt.c b/src/drivers/amd/rembrandt/interrupt.c index 1316ad88b0da..9a94cd322685 100644 --- a/src/drivers/amd/rembrandt/interrupt.c +++ b/src/drivers/amd/rembrandt/interrupt.c @@ -17,7 +17,6 @@ #include #include #include -#include "xtos-internal.h" #include #include #include @@ -280,7 +279,7 @@ void platform_interrupt_init(void) acp_intr_enable(); acp_dsp_sw_intr_enable(); } - +#ifndef __ZEPHYR__ void platform_interrupt_set(uint32_t irq) { arch_interrupt_set(irq); @@ -300,7 +299,7 @@ void platform_interrupt_clear(uint32_t irq, uint32_t mask) break; } } - +#endif uint32_t platform_interrupt_get_enabled(void) { /* TODO */ diff --git a/src/drivers/interrupt.c b/src/drivers/interrupt.c index 2829b4c0a16a..dd208a3cfb4e 100644 --- a/src/drivers/interrupt.c +++ b/src/drivers/interrupt.c @@ -35,7 +35,7 @@ DECLARE_TR_CTX(irq_tr, SOF_UUID(irq_uuid), LOG_LEVEL_INFO); * handling go through interrupt-irqsteer.c define macros to * rename the duplicated functions. */ -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) #define interrupt_get_irq mux_interrupt_get_irq #define interrupt_register mux_interrupt_register #define interrupt_unregister mux_interrupt_unregister @@ -377,7 +377,7 @@ static int interrupt_register_internal(uint32_t irq, void (*handler)(void *arg), /* no parent means we are registering DSP internal IRQ */ cascade = interrupt_get_parent(irq); if (!cascade) { -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) /* undefine the macro so that interrupt_register() * is resolved to the one from wrapper.c */ @@ -410,7 +410,7 @@ static void interrupt_unregister_internal(uint32_t irq, const void *arg, /* no parent means we are unregistering DSP internal IRQ */ cascade = interrupt_get_parent(irq); if (!cascade) { -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) /* undefine the macro so that interrupt_unregister() * is resolved to the one from wrapper.c */ @@ -437,7 +437,7 @@ uint32_t interrupt_enable(uint32_t irq, void *arg) if (cascade) return irq_enable_child(cascade, irq, arg); -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) /* undefine the macro so that interrupt_enable() * is resolved to the one from wrapper.c */ @@ -458,7 +458,7 @@ uint32_t interrupt_disable(uint32_t irq, void *arg) if (cascade) return irq_disable_child(cascade, irq, arg); -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) /* undefine the macro so that interrupt_disable() * is resolved to the one from wrapper.c */ diff --git a/src/platform/amd/rembrandt/include/platform/lib/memory.h b/src/platform/amd/rembrandt/include/platform/lib/memory.h index b4afeb8ada16..92ac53b4c2ed 100644 --- a/src/platform/amd/rembrandt/include/platform/lib/memory.h +++ b/src/platform/amd/rembrandt/include/platform/lib/memory.h @@ -167,6 +167,9 @@ static inline void *platform_rfree_prepare(void *ptr) } #endif +#define host_to_local(addr) (addr) +#define local_to_host(addr) (addr) + #endif /* __PLATFORM_LIB_MEMORY_H__ */ #else diff --git a/src/platform/amd/rembrandt/lib/memory.c b/src/platform/amd/rembrandt/lib/memory.c index 1e7caebd0a2e..bd26e6a64791 100644 --- a/src/platform/amd/rembrandt/lib/memory.c +++ b/src/platform/amd/rembrandt/lib/memory.c @@ -11,6 +11,7 @@ #include #include +#ifndef __ZEPHYR__ /* Heap blocks for system runtime */ static SHARED_DATA struct block_hdr sys_rt_block64[HEAP_SYS_RT_COUNT64]; static SHARED_DATA struct block_hdr sys_rt_block512[HEAP_SYS_RT_COUNT512]; @@ -93,3 +94,4 @@ void platform_init_memmap(struct sof *sof) /* memmap has been initialized statically as a part of .data */ sof->memory_map = &memmap; } +#endif diff --git a/src/platform/amd/rembrandt/platform.c b/src/platform/amd/rembrandt/platform.c index 4c3ae1c429cf..ac001d02a1e2 100644 --- a/src/platform/amd/rembrandt/platform.c +++ b/src/platform/amd/rembrandt/platform.c @@ -123,17 +123,24 @@ const struct ext_man_windows xsram_window }, }; +#ifndef __ZEPHYR__ static SHARED_DATA struct timer timer = { .id = TIMER0, .irq = IRQ_NUM_TIMER0, -}; + }; +#endif int platform_init(struct sof *sof) { int ret; - +#ifndef __ZEPHYR__ sof->platform_timer = &timer; sof->cpu_timers = &timer; +#endif +#ifdef __ZEPHYR__ + /* initialize cascade interrupts before any usage */ + interrupt_init(sof); +#endif /* to view system memory */ platform_interrupt_init(); platform_clock_init(sof); @@ -143,7 +150,9 @@ int platform_init(struct sof *sof) sof->platform_timer_domain = timer_domain_init(sof->platform_timer, PLATFORM_DEFAULT_CLOCK); scheduler_init_ll(sof->platform_timer_domain); +#ifndef __ZEPHYR__ platform_timer_start(sof->platform_timer); +#endif /*CONFIG_SYSTICK_PERIOD hardcoded as 200000*/ sa_init(sof, 200000); clock_set_freq(CLK_CPU(cpu_get_id()), CLK_MAX_CPU_HZ); @@ -199,7 +208,9 @@ int platform_context_save(struct sof *sof) return 0; } +#ifndef __ZEPHYR__ void platform_wait_for_interrupt(int level) { arch_wait_for_interrupt(level); } +#endif diff --git a/src/schedule/dma_multi_chan_domain.c b/src/schedule/dma_multi_chan_domain.c index 88b2e9c58e74..9bf41a8515dc 100644 --- a/src/schedule/dma_multi_chan_domain.c +++ b/src/schedule/dma_multi_chan_domain.c @@ -32,7 +32,7 @@ LOG_MODULE_DECLARE(ll_schedule, CONFIG_SOF_LOG_LEVEL); * handling go through interrupt-irqsteer.c define macros to * rename the duplicated functions. */ -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) #define interrupt_get_irq mux_interrupt_get_irq #define interrupt_register mux_interrupt_register #define interrupt_unregister mux_interrupt_unregister diff --git a/src/schedule/zephyr_dma_domain.c b/src/schedule/zephyr_dma_domain.c index 45c26387c4fe..6766855de1cd 100644 --- a/src/schedule/zephyr_dma_domain.c +++ b/src/schedule/zephyr_dma_domain.c @@ -24,7 +24,7 @@ LOG_MODULE_DECLARE(ll_schedule, CONFIG_SOF_LOG_LEVEL); -#ifdef CONFIG_IMX +#if (defined(CONFIG_IMX) || defined(CONFIG_AMD)) #define interrupt_get_irq mux_interrupt_get_irq #define interrupt_register mux_interrupt_register #define interrupt_unregister mux_interrupt_unregister diff --git a/tools/rimage/config/acp_6_0.toml b/tools/rimage/config/acp_6_0.toml new file mode 100644 index 000000000000..f761b839399f --- /dev/null +++ b/tools/rimage/config/acp_6_0.toml @@ -0,0 +1,15 @@ +version = [1, 0] # use simple file write + +[adsp] +name = "acp_6_0" + +[[adsp.mem_zone]] +type = "IRAM" +base = "0x7F000000" +size = "0x40000" +host_offset = "0x0" +[[adsp.mem_zone]] +type = "DRAM" +base = "0xE0000000" +size = "0xE0000" +host_offset = "0x0" diff --git a/xtos/include/rtos/interrupt.h b/xtos/include/rtos/interrupt.h index 839b4bef3ca3..58cefae94c81 100644 --- a/xtos/include/rtos/interrupt.h +++ b/xtos/include/rtos/interrupt.h @@ -122,7 +122,7 @@ static inline struct cascade_root *cascade_root_get(void) /* For i.MX, while building SOF with Zephyr use the interrupt_* * functions from second level interrupt handling and IRQ_STEER. */ -#if defined(__ZEPHYR__) && defined(CONFIG_IMX) +#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD)) int mux_interrupt_get_irq(unsigned int irq, const char *cascade); int mux_interrupt_register(uint32_t irq, void(*handler)(void *arg), void *arg); void mux_interrupt_unregister(uint32_t irq, const void *arg); diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt index 90bdf710dad3..7a03a267655b 100644 --- a/zephyr/CMakeLists.txt +++ b/zephyr/CMakeLists.txt @@ -413,6 +413,59 @@ if (CONFIG_SOC_MIMX9596_M7) set(PLATFORM "imx95") endif() +# AMD RMB platforms +if (CONFIG_SOC_ACP_6_0) + zephyr_library_sources( + ${SOF_DRIVERS_PATH}/amd/common/acp_bt_dai.c + ${SOF_DRIVERS_PATH}/amd/common/acp_dma.c + ${SOF_DRIVERS_PATH}/amd/common/acp_dmic_dai.c + ${SOF_DRIVERS_PATH}/amd/common/acp_dmic_dma.c + ${SOF_DRIVERS_PATH}/amd/common/acp_sp_dma.c + ${SOF_DRIVERS_PATH}/amd/common/ipc.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/acp_bt_dma.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/acp_dma.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/acp_dmic_dma.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/acp_hs_dai.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/acp_hs_dma.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/acp_sp_dai.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/acp_sp_dma.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/interrupt.c + ${SOF_DRIVERS_PATH}/amd/rembrandt/ipc.c + ) + + # Platform sources + zephyr_library_sources( + ${SOF_PLATFORM_PATH}/amd/rembrandt/platform.c + ${SOF_PLATFORM_PATH}/amd/rembrandt/lib/clk.c + ${SOF_PLATFORM_PATH}/amd/rembrandt/lib/dai.c + ${SOF_PLATFORM_PATH}/amd/rembrandt/lib/dma.c + ${SOF_PLATFORM_PATH}/amd/rembrandt/lib/memory.c + ) + + # SOF core infrastructure - runs on top of Zephyr + zephyr_library_sources( + ${SOF_SRC_PATH}/drivers/interrupt.c + ) + + # Zephyr DMA domain should only be used with zephyr_ll + + if (NOT(CONFIG_DMA_DOMAIN)) + zephyr_library_sources( + ${SOF_SRC_PATH}/schedule/ll_schedule.c + ) + else() + zephyr_library_sources( + ${SOF_SRC_PATH}/schedule/zephyr_ll.c + ) + endif() + + zephyr_include_directories(${SOF_PLATFORM_PATH}/amd/rembrandt/include) + zephyr_include_directories(${SOF_PLATFORM_PATH}/amd/common/include) + zephyr_include_directories(${SOF_PLATFORM_PATH}/amd/rembrandt/include/arch) + + set(PLATFORM "acp_6_0") +endif() + # Building for native_posix-based whole-OS host emulator zephyr_library_sources_ifdef(CONFIG_ZEPHYR_POSIX ${SOF_SRC_PATH}/schedule/zephyr_ll.c diff --git a/zephyr/include/rtos/interrupt.h b/zephyr/include/rtos/interrupt.h index 50dee3c9a37e..01350cb08ba4 100644 --- a/zephyr/include/rtos/interrupt.h +++ b/zephyr/include/rtos/interrupt.h @@ -11,7 +11,7 @@ /* TODO: to be removed completely when the following platforms are switched * to native drivers. */ -#if defined(CONFIG_IMX8M) +#if defined(CONFIG_IMX8M) || defined(CONFIG_AMD) /* imx currently has no IRQ driver in Zephyr so we force to xtos IRQ */ #include "../../../xtos/include/rtos/interrupt.h" #else @@ -49,7 +49,7 @@ static inline void interrupt_unregister(uint32_t irq, const void *arg) static inline int interrupt_get_irq(unsigned int irq, const char *cascade) { #if defined(CONFIG_LIBRARY) || defined(CONFIG_ACE) || defined(CONFIG_CAVS) || \ - defined(CONFIG_ZEPHYR_POSIX) || (defined(CONFIG_IMX) && !defined(CONFIG_IMX8M)) + defined(CONFIG_ZEPHYR_POSIX) || (defined(CONFIG_IMX) && !defined(CONFIG_IMX8M)) || defined(CONFIG_AMD) return irq; #else if (cascade == irq_name_level2) diff --git a/zephyr/lib/alloc.c b/zephyr/lib/alloc.c index 1e6d6a73370f..7d29fca18b1d 100644 --- a/zephyr/lib/alloc.c +++ b/zephyr/lib/alloc.c @@ -52,7 +52,7 @@ extern struct tr_ctx zephyr_tr; /* The Zephyr heap */ -#ifdef CONFIG_IMX +#if defined(CONFIG_IMX) || defined(CONFIG_AMD) #ifdef CONFIG_XTENSA #define HEAPMEM_SIZE (HEAP_SYSTEM_SIZE + HEAP_RUNTIME_SIZE + HEAP_BUFFER_SIZE) diff --git a/zephyr/wrapper.c b/zephyr/wrapper.c index b12175969500..a3ef96f2b043 100644 --- a/zephyr/wrapper.c +++ b/zephyr/wrapper.c @@ -53,7 +53,7 @@ const char irq_name_level2[] = "level2"; const char irq_name_level5[] = "level5"; /* imx currently has no IRQ driver in Zephyr so we force to xtos IRQ */ -#if defined(CONFIG_IMX8M) +#if (defined(CONFIG_IMX8M) || defined(CONFIG_AMD)) int interrupt_register(uint32_t irq, void(*handler)(void *arg), void *arg) { #ifdef CONFIG_DYNAMIC_INTERRUPTS @@ -98,7 +98,7 @@ uint32_t interrupt_disable(uint32_t irq, void *arg) /* * i.MX uses the IRQ_STEER */ -#if !CONFIG_IMX +#if !CONFIG_IMX && !CONFIG_AMD void interrupt_mask(uint32_t irq, unsigned int cpu) {