diff --git a/src/ipc/ipc-common.c b/src/ipc/ipc-common.c index dd29110e18c3..cd630f459a69 100644 --- a/src/ipc/ipc-common.c +++ b/src/ipc/ipc-common.c @@ -231,8 +231,13 @@ int ipc_init(struct sof *sof) /* init ipc data */ sof->ipc = rzalloc(SOF_MEM_ZONE_SYS_SHARED, 0, SOF_MEM_CAPS_RAM, sizeof(*sof->ipc)); + if (!sof->ipc) + return -ENOMEM; + sof->ipc->comp_data = rzalloc(SOF_MEM_ZONE_SYS_SHARED, 0, SOF_MEM_CAPS_RAM, SOF_IPC_MSG_MAX_SIZE); + if (!sof->ipc->comp_data) + return -ENOMEM; spinlock_init(&sof->ipc->lock); list_init(&sof->ipc->msg_list); diff --git a/src/platform/amd/renoir/platform.c b/src/platform/amd/renoir/platform.c index cc5d0a567755..65f9215a9331 100644 --- a/src/platform/amd/renoir/platform.c +++ b/src/platform/amd/renoir/platform.c @@ -94,7 +94,10 @@ int platform_init(struct sof *sof) sizeof(sof->dma_info->dma_array), PLATFORM_DEFAULT_CLOCK, true); scheduler_init_ll(sof->platform_dma_domain); /* initialize the host IPC mechanisms */ - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; + /* initialize the DAI mechanisms */ ret = dai_init(sof); if (ret < 0) diff --git a/src/platform/baytrail/platform.c b/src/platform/baytrail/platform.c index 8d239ae940f0..9b051ae70e4a 100644 --- a/src/platform/baytrail/platform.c +++ b/src/platform/baytrail/platform.c @@ -253,7 +253,9 @@ int platform_init(struct sof *sof) /* initialise the host IPC mechanisms */ trace_point(TRACE_BOOT_PLATFORM_IPC); - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; trace_point(TRACE_BOOT_PLATFORM_DAI); ret = dai_init(sof); diff --git a/src/platform/haswell/platform.c b/src/platform/haswell/platform.c index 6526cb687b77..0669c96886f8 100644 --- a/src/platform/haswell/platform.c +++ b/src/platform/haswell/platform.c @@ -226,7 +226,9 @@ int platform_init(struct sof *sof) /* initialise the host IPC mechanisms */ trace_point(TRACE_BOOT_PLATFORM_IPC); - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; trace_point(TRACE_BOOT_PLATFORM_DAI); ret = dai_init(sof); diff --git a/src/platform/imx8/platform.c b/src/platform/imx8/platform.c index c3bb07f268b2..4b13f4092676 100644 --- a/src/platform/imx8/platform.c +++ b/src/platform/imx8/platform.c @@ -193,7 +193,9 @@ int platform_init(struct sof *sof) scheduler_init_ll(sof->platform_dma_domain); /* initialize the host IPC mechanims */ - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; ret = dai_init(sof); if (ret < 0) diff --git a/src/platform/imx8m/platform.c b/src/platform/imx8m/platform.c index 798be01ce892..aef26bf46f15 100644 --- a/src/platform/imx8m/platform.c +++ b/src/platform/imx8m/platform.c @@ -193,7 +193,9 @@ int platform_init(struct sof *sof) scheduler_init_ll(sof->platform_dma_domain); /* initialize the host IPC mechanims */ - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; ret = dai_init(sof); if (ret < 0) diff --git a/src/platform/imx8ulp/platform.c b/src/platform/imx8ulp/platform.c index a081375fbd5d..26f4f5301d38 100644 --- a/src/platform/imx8ulp/platform.c +++ b/src/platform/imx8ulp/platform.c @@ -181,7 +181,9 @@ int platform_init(struct sof *sof) scheduler_init_ll(sof->platform_dma_domain); /* initialize the host IPC mechanims */ - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; ret = dai_init(sof); if (ret < 0) diff --git a/src/platform/intel/cavs/platform.c b/src/platform/intel/cavs/platform.c index 66093ac2ab43..c1be08ed9a5f 100644 --- a/src/platform/intel/cavs/platform.c +++ b/src/platform/intel/cavs/platform.c @@ -491,7 +491,9 @@ int platform_init(struct sof *sof) /* initialize the host IPC mechanisms */ trace_point(TRACE_BOOT_PLATFORM_IPC); - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; /* initialize IDC mechanism */ trace_point(TRACE_BOOT_PLATFORM_IDC); diff --git a/src/platform/mt8195/platform.c b/src/platform/mt8195/platform.c index 4ad2b98f4395..0e40da5f6fc4 100644 --- a/src/platform/mt8195/platform.c +++ b/src/platform/mt8195/platform.c @@ -206,7 +206,9 @@ int platform_init(struct sof *sof) scheduler_init_ll(sof->platform_dma_domain); /* initialize the host IPC mechanims */ - ipc_init(sof); + ret = ipc_init(sof); + if (ret < 0) + return ret; ret = dai_init(sof); if (ret < 0) diff --git a/src/trace/dma-trace.c b/src/trace/dma-trace.c index 16c8037402b1..3c48a545df9c 100644 --- a/src/trace/dma-trace.c +++ b/src/trace/dma-trace.c @@ -407,6 +407,10 @@ int dma_trace_enable(struct dma_trace_data *d) { int err; + /* the existence of the trace buffer means the dma trace already initialized */ + if (d->dmatb.addr) + return 0; + /* initialize dma trace buffer */ err = dma_trace_buffer_init(d);