* [PATCH 0/4] add sof support on imx95
@ 2024-10-23 16:21 Laurentiu Mihalcea
2024-10-23 16:21 ` [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible Laurentiu Mihalcea
` (3 more replies)
0 siblings, 4 replies; 14+ messages in thread
From: Laurentiu Mihalcea @ 2024-10-23 16:21 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan
Cc: linux-remoteproc, devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
Add sof support on imx95. This series also includes some changes to
the audio-graph-card2 binding required for the support.
Laurentiu Mihalcea (4):
dt-bindings: remoteproc: fsl,imx-rproc: add new compatible
ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios
support
ASoC: SOF: imx: add driver for imx95
arm64: dts: imx: add imx95 dts for sof
.../bindings/remoteproc/fsl,imx-rproc.yaml | 58 ++-
.../bindings/sound/audio-graph-card2.yaml | 9 +
arch/arm64/boot/dts/freescale/Makefile | 1 +
.../dts/freescale/imx95-19x19-evk-sof.dts | 86 ++++
sound/soc/sof/imx/Kconfig | 8 +
sound/soc/sof/imx/Makefile | 2 +
sound/soc/sof/imx/imx95.c | 383 ++++++++++++++++++
7 files changed, 542 insertions(+), 5 deletions(-)
create mode 100644 arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts
create mode 100644 sound/soc/sof/imx/imx95.c
--
2.34.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible
2024-10-23 16:21 [PATCH 0/4] add sof support on imx95 Laurentiu Mihalcea
@ 2024-10-23 16:21 ` Laurentiu Mihalcea
2024-10-23 18:04 ` Frank Li
` (2 more replies)
2024-10-23 16:21 ` [PATCH 2/4] ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios support Laurentiu Mihalcea
` (2 subsequent siblings)
3 siblings, 3 replies; 14+ messages in thread
From: Laurentiu Mihalcea @ 2024-10-23 16:21 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan
Cc: linux-remoteproc, devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
Add new compatible for imx95's CM7 with SOF.
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
---
.../bindings/remoteproc/fsl,imx-rproc.yaml | 58 +++++++++++++++++--
1 file changed, 53 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
index 57d75acb0b5e..ab0d8e017965 100644
--- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
@@ -28,6 +28,15 @@ properties:
- fsl,imx8qxp-cm4
- fsl,imx8ulp-cm33
- fsl,imx93-cm33
+ - fsl,imx95-cm7-sof
+
+ reg:
+ maxItems: 2
+
+ reg-names:
+ items:
+ - const: dram
+ - const: mailbox
clocks:
maxItems: 1
@@ -38,10 +47,8 @@ properties:
Phandle to syscon block which provide access to System Reset Controller
mbox-names:
- items:
- - const: tx
- - const: rx
- - const: rxdb
+ minItems: 1
+ maxItems: 4
mboxes:
description:
@@ -49,7 +56,7 @@ properties:
List of <&phandle type channel> - 1 channel for TX, 1 channel for RX, 1 channel for RXDB.
(see mailbox/fsl,mu.yaml)
minItems: 1
- maxItems: 3
+ maxItems: 4
memory-region:
description:
@@ -84,6 +91,10 @@ properties:
This property is to specify the resource id of the remote processor in SoC
which supports SCFW
+ port:
+ $ref: /schemas/sound/audio-graph-port.yaml#
+ unevaluatedProperties: false
+
required:
- compatible
@@ -114,6 +125,43 @@ allOf:
properties:
power-domains: false
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: fsl,imx95-cm7-sof
+ then:
+ properties:
+ mboxes:
+ minItems: 4
+ mbox-names:
+ items:
+ - const: txdb0
+ - const: txdb1
+ - const: rxdb0
+ - const: rxdb1
+ memory-region:
+ maxItems: 1
+ required:
+ - reg
+ - reg-names
+ - mboxes
+ - mbox-names
+ - memory-region
+ - port
+ else:
+ properties:
+ reg: false
+ reg-names: false
+ mboxes:
+ maxItems: 3
+ mbox-names:
+ items:
+ - const: tx
+ - const: rx
+ - const: rxdb
+ port: false
+
additionalProperties: false
examples:
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/4] ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios support
2024-10-23 16:21 [PATCH 0/4] add sof support on imx95 Laurentiu Mihalcea
2024-10-23 16:21 ` [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible Laurentiu Mihalcea
@ 2024-10-23 16:21 ` Laurentiu Mihalcea
2024-10-23 18:15 ` Frank Li
2024-10-23 16:21 ` [PATCH 3/4] ASoC: SOF: imx: add driver for imx95 Laurentiu Mihalcea
2024-10-23 16:21 ` [PATCH 4/4] arm64: dts: imx: add imx95 dts for sof Laurentiu Mihalcea
3 siblings, 1 reply; 14+ messages in thread
From: Laurentiu Mihalcea @ 2024-10-23 16:21 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan
Cc: linux-remoteproc, devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
Introduce the 'widgets' property, allowing the creation of widgets from
4 template widgets: Microphone, Line, Headphone, and Speaker. Also
introduce the 'hp-det-gpios' property, which allows using headphone
detection using the specified GPIO.
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
---
.../devicetree/bindings/sound/audio-graph-card2.yaml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml b/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
index f943f90d8b15..f0300a08f7fe 100644
--- a/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
+++ b/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
@@ -37,6 +37,15 @@ properties:
codec2codec:
type: object
description: Codec to Codec node
+ hp-det-gpios:
+ maxItems: 1
+ widgets:
+ description:
+ User specified audio sound widgets.
+ Each entry is a pair of strings, the first being the type of
+ widget ("Microphone", "Line", "Headphone", "Speaker"), the
+ second being the machine specific name for the widget.
+ $ref: /schemas/types.yaml#/definitions/non-unique-string-array
required:
- compatible
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/4] ASoC: SOF: imx: add driver for imx95
2024-10-23 16:21 [PATCH 0/4] add sof support on imx95 Laurentiu Mihalcea
2024-10-23 16:21 ` [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible Laurentiu Mihalcea
2024-10-23 16:21 ` [PATCH 2/4] ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios support Laurentiu Mihalcea
@ 2024-10-23 16:21 ` Laurentiu Mihalcea
2024-10-23 18:38 ` Frank Li
2024-10-23 16:21 ` [PATCH 4/4] arm64: dts: imx: add imx95 dts for sof Laurentiu Mihalcea
3 siblings, 1 reply; 14+ messages in thread
From: Laurentiu Mihalcea @ 2024-10-23 16:21 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan
Cc: linux-remoteproc, devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
Add SOF driver for imx95.
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
---
sound/soc/sof/imx/Kconfig | 8 +
sound/soc/sof/imx/Makefile | 2 +
sound/soc/sof/imx/imx95.c | 383 +++++++++++++++++++++++++++++++++++++
3 files changed, 393 insertions(+)
create mode 100644 sound/soc/sof/imx/imx95.c
diff --git a/sound/soc/sof/imx/Kconfig b/sound/soc/sof/imx/Kconfig
index 4751b04d5e6f..51a70a193533 100644
--- a/sound/soc/sof/imx/Kconfig
+++ b/sound/soc/sof/imx/Kconfig
@@ -50,4 +50,12 @@ config SND_SOC_SOF_IMX8ULP
Say Y if you have such a device.
If unsure select "N".
+config SND_SOC_SOF_IMX95
+ tristate "SOF support for i.MX95"
+ depends on IMX_DSP
+ help
+ This adds support for Sound Open Firmware for NXP i.MX95 platforms.
+ Say Y if you have such a device.
+ If unsure select "N".
+
endif ## SND_SOC_SOF_IMX_TOPLEVEL
diff --git a/sound/soc/sof/imx/Makefile b/sound/soc/sof/imx/Makefile
index be0bf0736dfa..715ac3798668 100644
--- a/sound/soc/sof/imx/Makefile
+++ b/sound/soc/sof/imx/Makefile
@@ -2,10 +2,12 @@
snd-sof-imx8-y := imx8.o
snd-sof-imx8m-y := imx8m.o
snd-sof-imx8ulp-y := imx8ulp.o
+snd-sof-imx95-y := imx95.o
snd-sof-imx-common-y := imx-common.o
obj-$(CONFIG_SND_SOC_SOF_IMX8) += snd-sof-imx8.o
obj-$(CONFIG_SND_SOC_SOF_IMX8M) += snd-sof-imx8m.o
obj-$(CONFIG_SND_SOC_SOF_IMX8ULP) += snd-sof-imx8ulp.o
+obj-$(CONFIG_SND_SOC_SOF_IMX95) += snd-sof-imx95.o
obj-$(CONFIG_SND_SOC_SOF_IMX_COMMON) += imx-common.o
diff --git a/sound/soc/sof/imx/imx95.c b/sound/soc/sof/imx/imx95.c
new file mode 100644
index 000000000000..3f7ed6a16c42
--- /dev/null
+++ b/sound/soc/sof/imx/imx95.c
@@ -0,0 +1,383 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
+/*
+ * Copyright 2024 NXP
+ */
+
+#include <linux/module.h>
+#include <linux/of_platform.h>
+#include <sound/sof.h>
+#include <linux/arm-smccc.h>
+#include <linux/firmware/imx/dsp.h>
+#include <linux/of_reserved_mem.h>
+#include <linux/clk.h>
+
+#include "../sof-of-dev.h"
+#include "../ops.h"
+
+#define IMX_SIP_SRC 0xC2000005
+#define IMX_SIP_SRC_M_RESET_ADDR_SET 0x03
+
+#define IMX95_CPU_VEC_FLAGS_BOOT BIT(29)
+
+#define IMX_SIP_LMM 0xC200000F
+#define IMX_SIP_LMM_BOOT 0x0
+#define IMX_SIP_LMM_SHUTDOWN 0x1
+
+#define IMX95_M7_LM_ID 0x1
+
+#define MBOX_DSPBOX_OFFSET 0x1000
+
+struct imx95_priv {
+ struct platform_device *ipc_dev;
+ struct imx_dsp_ipc *ipc_handle;
+ resource_size_t bootaddr;
+};
+
+static void imx95_ipc_handle_reply(struct imx_dsp_ipc *ipc)
+{
+ unsigned long flags;
+ struct snd_sof_dev *sdev = imx_dsp_get_data(ipc);
+
+ spin_lock_irqsave(&sdev->ipc_lock, flags);
+ snd_sof_ipc_process_reply(sdev, 0);
+ spin_unlock_irqrestore(&sdev->ipc_lock, flags);
+}
+
+static void imx95_ipc_handle_request(struct imx_dsp_ipc *ipc)
+{
+ snd_sof_ipc_msgs_rx(imx_dsp_get_data(ipc));
+}
+
+static struct imx_dsp_ops ipc_ops = {
+ .handle_reply = imx95_ipc_handle_reply,
+ .handle_request = imx95_ipc_handle_request,
+};
+
+static int imx95_disable_enable_core(bool enable)
+{
+ struct arm_smccc_res res;
+
+ if (enable)
+ arm_smccc_smc(IMX_SIP_LMM, IMX_SIP_LMM_BOOT, IMX95_M7_LM_ID,
+ 0, 0, 0, 0, 0, &res);
+ else
+ arm_smccc_smc(IMX_SIP_LMM, IMX_SIP_LMM_SHUTDOWN, IMX95_M7_LM_ID,
+ 0, 0, 0, 0, 0, &res);
+
+ return res.a0;
+}
+
+static int imx95_run(struct snd_sof_dev *sdev)
+{
+ return imx95_disable_enable_core(true);
+}
+
+static int imx95_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg)
+{
+ struct imx95_priv *priv = sdev->pdata->hw_pdata;
+
+ sof_mailbox_write(sdev, sdev->host_box.offset,
+ msg->msg_data, msg->msg_size);
+
+ imx_dsp_ring_doorbell(priv->ipc_handle, 0);
+
+ return 0;
+}
+
+static int imx95_get_mailbox_offset(struct snd_sof_dev *sdev)
+{
+ return MBOX_DSPBOX_OFFSET;
+}
+
+static int imx95_get_bar_index(struct snd_sof_dev *sdev, u32 type)
+{
+ switch (type) {
+ case SOF_FW_BLK_TYPE_SRAM:
+ case SOF_FW_BLK_TYPE_DRAM:
+ return type;
+ default:
+ return -EINVAL;
+ }
+}
+
+static int imx95_get_window_offset(struct snd_sof_dev *sdev, u32 id)
+{
+ /* no offset for window regions - they are already relative
+ * to the mailbox memory region described in DT.
+ */
+ return 0;
+}
+
+static int imx95_set_power_state(struct snd_sof_dev *sdev,
+ const struct sof_dsp_power_state *target_state)
+{
+ sdev->dsp_power_state = *target_state;
+
+ return 0;
+}
+
+/* no other resources to power on during (runtime) resume so these functions
+ * don't do any resource management (i.e: clks, PDs, etc...). As for enabling
+ * the M7 LM: this is taken care of by run(), which is called during sof_resume().
+ */
+static int imx95_runtime_resume(struct snd_sof_dev *sdev)
+{
+ const struct sof_dsp_power_state target_state = {
+ .state = SOF_DSP_PM_D0,
+ };
+
+ return snd_sof_dsp_set_power_state(sdev, &target_state);
+}
+
+static int imx95_resume(struct snd_sof_dev *sdev)
+{
+ const struct sof_dsp_power_state target_state = {
+ .state = SOF_DSP_PM_D0,
+ };
+
+ if (pm_runtime_suspended(sdev->dev)) {
+ pm_runtime_disable(sdev->dev);
+ pm_runtime_set_active(sdev->dev);
+ pm_runtime_mark_last_busy(sdev->dev);
+ pm_runtime_enable(sdev->dev);
+ pm_runtime_idle(sdev->dev);
+ }
+
+ return snd_sof_dsp_set_power_state(sdev, &target_state);
+}
+
+static int imx95_runtime_suspend(struct snd_sof_dev *sdev)
+{
+ int ret;
+ const struct sof_dsp_power_state target_state = {
+ .state = SOF_DSP_PM_D3,
+ };
+
+ ret = imx95_disable_enable_core(false);
+ if (ret < 0) {
+ dev_err(sdev->dev, "failed to disable core: %d\n", ret);
+ return ret;
+ }
+
+ return snd_sof_dsp_set_power_state(sdev, &target_state);
+}
+
+static int imx95_suspend(struct snd_sof_dev *sdev, unsigned int target_state)
+{
+ int ret;
+ const struct sof_dsp_power_state target_power_state = {
+ .state = target_state,
+ };
+
+ if (!pm_runtime_suspended(sdev->dev)) {
+ ret = imx95_disable_enable_core(false);
+ if (ret < 0) {
+ dev_err(sdev->dev, "failed to suspend: %d\n", ret);
+ return ret;
+ }
+ }
+
+ return snd_sof_dsp_set_power_state(sdev, &target_power_state);
+}
+
+static struct snd_soc_dai_driver imx95_dai[] = {
+ {
+ .name = "sai3",
+ .playback = {
+ .channels_min = 1,
+ .channels_max = 32,
+ },
+ .capture = {
+ .channels_min = 1,
+ .channels_max = 32,
+ },
+ },
+};
+
+static int imx95_probe(struct snd_sof_dev *sdev)
+{
+ struct platform_device *pdev;
+ struct imx95_priv *priv;
+ struct resource *res;
+ struct arm_smccc_res smc_ret;
+ int ret;
+
+ pdev = container_of(sdev->dev, struct platform_device, dev);
+
+ priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return dev_err_probe(&pdev->dev, -ENOMEM, "failed to alloc priv\n");
+
+ sdev->pdata->hw_pdata = priv;
+
+ /* map DRAM */
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dram");
+ if (!res)
+ return dev_err_probe(&pdev->dev, -ENODEV,
+ "failed to fetch DRAM region\n");
+
+ sdev->bar[SOF_FW_BLK_TYPE_DRAM] = devm_ioremap(&pdev->dev, res->start,
+ resource_size(res));
+ if (IS_ERR(sdev->bar[SOF_FW_BLK_TYPE_DRAM]))
+ return dev_err_probe(&pdev->dev,
+ PTR_ERR(sdev->bar[SOF_FW_BLK_TYPE_DRAM]),
+ "failed to map DRAM region\n");
+
+ sdev->mmio_bar = SOF_FW_BLK_TYPE_DRAM;
+ priv->bootaddr = res->start;
+
+ /* map mailbox region */
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mailbox");
+ if (!res)
+ return dev_err_probe(&pdev->dev, -ENODEV,
+ "failed to fetch MAILBOX region\n");
+
+ sdev->bar[SOF_FW_BLK_TYPE_SRAM] = devm_ioremap_wc(&pdev->dev, res->start,
+ resource_size(res));
+ if (IS_ERR(sdev->bar[SOF_FW_BLK_TYPE_SRAM]))
+ return dev_err_probe(&pdev->dev,
+ PTR_ERR(sdev->bar[SOF_FW_BLK_TYPE_SRAM]),
+ "failed to map mailbox region\n");
+
+ sdev->mailbox_bar = SOF_FW_BLK_TYPE_SRAM;
+ sdev->dsp_box.offset = MBOX_DSPBOX_OFFSET;
+
+ ret = of_reserved_mem_device_init(sdev->dev);
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret,
+ "failed to bind DMA region\n");
+
+ priv->ipc_dev = platform_device_register_data(&pdev->dev, "imx-dsp",
+ PLATFORM_DEVID_NONE,
+ pdev, sizeof(*pdev));
+ if (IS_ERR(priv->ipc_dev))
+ return dev_err_probe(&pdev->dev, PTR_ERR(priv->ipc_dev),
+ "failed to create IPC device\n");
+
+ priv->ipc_handle = dev_get_drvdata(&priv->ipc_dev->dev);
+ if (!priv->ipc_handle) {
+ ret = -EPROBE_DEFER;
+ dev_err(&pdev->dev, "failed to fetch ipc handle\n");
+ goto err_unregister_ipc_dev;
+ }
+
+ priv->ipc_handle->ops = &ipc_ops;
+ imx_dsp_set_data(priv->ipc_handle, sdev);
+
+ /* set core boot reset address */
+ arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M_RESET_ADDR_SET, priv->bootaddr,
+ IMX95_CPU_VEC_FLAGS_BOOT, 0, 0, 0, 0, &smc_ret);
+ if ((int)smc_ret.a0 < 0) {
+ ret = smc_ret.a0;
+ dev_err(&pdev->dev, "failed to set boot address: %d", ret);
+ goto err_unregister_ipc_dev;
+ }
+
+ return 0;
+
+err_unregister_ipc_dev:
+ platform_device_unregister(priv->ipc_dev);
+
+ return ret;
+}
+
+static void imx95_remove(struct snd_sof_dev *sdev)
+{
+ struct imx95_priv *priv;
+
+ priv = sdev->pdata->hw_pdata;
+
+ if (imx95_disable_enable_core(false))
+ dev_err(sdev->dev, "failed to stop core\n");
+
+ platform_device_unregister(priv->ipc_dev);
+}
+
+static const struct snd_sof_dsp_ops sof_imx95_ops = {
+ .probe = imx95_probe,
+ .remove = imx95_remove,
+
+ /* mandatory "DSP" ops */
+ .run = imx95_run,
+ .block_read = sof_block_read,
+ .block_write = sof_block_write,
+ .send_msg = imx95_send_msg,
+ .load_firmware = snd_sof_load_firmware_memcpy,
+ .ipc_msg_data = sof_ipc_msg_data,
+
+ .mailbox_read = sof_mailbox_read,
+ .mailbox_write = sof_mailbox_write,
+
+ .get_mailbox_offset = imx95_get_mailbox_offset,
+ .get_bar_index = imx95_get_bar_index,
+ .get_window_offset = imx95_get_window_offset,
+
+ .pcm_open = sof_stream_pcm_open,
+ .pcm_close = sof_stream_pcm_close,
+ .set_stream_data_offset = sof_set_stream_data_offset,
+
+ .runtime_suspend = imx95_runtime_suspend,
+ .runtime_resume = imx95_runtime_resume,
+
+ .resume = imx95_resume,
+ .suspend = imx95_suspend,
+
+ .set_power_state = imx95_set_power_state,
+
+ .drv = imx95_dai,
+ .num_drv = ARRAY_SIZE(imx95_dai),
+
+ .hw_info = SNDRV_PCM_INFO_MMAP |
+ SNDRV_PCM_INFO_MMAP_VALID |
+ SNDRV_PCM_INFO_INTERLEAVED |
+ SNDRV_PCM_INFO_PAUSE |
+ SNDRV_PCM_INFO_BATCH |
+ SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
+};
+
+static struct snd_sof_of_mach sof_imx95_machs[] = {
+ {
+ .compatible = "fsl,imx95-19x19-evk",
+ .sof_tplg_filename = "sof-imx95-wm8962.tplg",
+ .drv_name = "asoc-audio-graph-card2",
+ },
+ {
+ },
+};
+
+static struct sof_dev_desc sof_of_imx95_desc = {
+ .of_machines = sof_imx95_machs,
+ .ipc_supported_mask = BIT(SOF_IPC_TYPE_3),
+ .ipc_default = SOF_IPC_TYPE_3,
+ .default_fw_path = {
+ [SOF_IPC_TYPE_3] = "imx/sof",
+ },
+ .default_tplg_path = {
+ [SOF_IPC_TYPE_3] = "imx/sof-tplg",
+ },
+ .default_fw_filename = {
+ [SOF_IPC_TYPE_3] = "sof-imx95.ri",
+ },
+ .ops = &sof_imx95_ops,
+};
+
+static const struct of_device_id sof_of_imx95_ids[] = {
+ { .compatible = "fsl,imx95-cm7-sof", .data = &sof_of_imx95_desc },
+ { },
+};
+MODULE_DEVICE_TABLE(of, sof_of_imx95_ids);
+
+static struct platform_driver snd_sof_of_imx95_driver = {
+ .probe = sof_of_probe,
+ .remove = sof_of_remove,
+ .driver = {
+ .name = "sof-audio-of-imx95",
+ .pm = &sof_of_pm,
+ .of_match_table = sof_of_imx95_ids,
+ },
+};
+module_platform_driver(snd_sof_of_imx95_driver);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("SOF support for i.MX95 platforms");
+MODULE_AUTHOR("Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>");
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/4] arm64: dts: imx: add imx95 dts for sof
2024-10-23 16:21 [PATCH 0/4] add sof support on imx95 Laurentiu Mihalcea
` (2 preceding siblings ...)
2024-10-23 16:21 ` [PATCH 3/4] ASoC: SOF: imx: add driver for imx95 Laurentiu Mihalcea
@ 2024-10-23 16:21 ` Laurentiu Mihalcea
2024-10-23 18:48 ` Frank Li
3 siblings, 1 reply; 14+ messages in thread
From: Laurentiu Mihalcea @ 2024-10-23 16:21 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan
Cc: linux-remoteproc, devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
Add imx95 DTS for SOF usage.
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
---
arch/arm64/boot/dts/freescale/Makefile | 1 +
.../dts/freescale/imx95-19x19-evk-sof.dts | 86 +++++++++++++++++++
2 files changed, 87 insertions(+)
create mode 100644 arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index 2a69b7ec6d6d..94660e3e8b2b 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -267,6 +267,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx93-tqma9352-mba93xxca.dtb
dtb-$(CONFIG_ARCH_MXC) += imx93-tqma9352-mba93xxla.dtb
dtb-$(CONFIG_ARCH_MXC) += imx93-var-som-symphony.dtb
dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-evk.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-evk-sof.dtb
imx8mm-kontron-dl-dtbs := imx8mm-kontron-bl.dtb imx8mm-kontron-dl.dtbo
diff --git a/arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts b/arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts
new file mode 100644
index 000000000000..b10dc1af5ce2
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright 2024 NXP
+ */
+
+/dts-v1/;
+
+#include "imx95-19x19-evk.dts"
+
+/ {
+ reserved-memory {
+ adma_res: memory@86100000 {
+ compatible = "shared-dma-pool";
+ reg = <0x0 0x86100000 0x0 0x100000>;
+ no-map;
+ };
+ };
+
+ sound-wm8962 {
+ status = "disabled";
+ };
+
+ sof-sound-wm8962 {
+ compatible = "audio-graph-card2";
+
+ links = <&cpu>;
+ label = "wm8962-audio";
+
+ hp-det-gpios = <&gpio2 11 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_hp>;
+
+ widgets =
+ "Headphone", "Headphones",
+ "Microphone", "Headset Mic";
+ routing =
+ "Headphones", "HPOUTL",
+ "Headphones", "HPOUTR",
+ "Headset Mic", "MICBIAS",
+ "IN3R", "Headset Mic",
+ "IN1R", "Headset Mic";
+ };
+
+ sof_cpu: cm7-cpu@80000000 {
+ compatible = "fsl,imx95-cm7-sof";
+
+ reg = <0x0 0x80000000 0x0 0x400000>,
+ <0x0 0x86000000 0x0 0x3000>;
+ reg-names = "dram", "mailbox";
+
+ memory-region = <&adma_res>;
+
+ mboxes = <&mu7 2 0>, <&mu7 2 1>, <&mu7 3 0>, <&mu7 3 1>;
+ mbox-names = "txdb0", "txdb1", "rxdb0", "rxdb1";
+
+ cpu: port {
+ cpu_ep: endpoint { remote-endpoint = <&codec_ep>; };
+ };
+ };
+};
+
+&wm8962 {
+ assigned-clocks = <&scmi_clk IMX95_CLK_AUDIOPLL1_VCO>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL2_VCO>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL1>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL2>,
+ <&scmi_clk IMX95_CLK_SAI3>;
+ assigned-clock-parents = <0>, <0>, <0>, <0>, <&scmi_clk IMX95_CLK_AUDIOPLL1>;
+ assigned-clock-rates = <3932160000>, <3612672000>,
+ <393216000>, <361267200>,
+ <12288000>;
+ status = "okay";
+
+ port {
+ codec_ep: endpoint { remote-endpoint = <&cpu_ep>; };
+ };
+};
+
+&edma2 {
+ dma-channel-mask = <0x3fffffff>, <0xffffffff>;
+};
+
+&sai3 {
+ status = "disabled";
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible
2024-10-23 16:21 ` [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible Laurentiu Mihalcea
@ 2024-10-23 18:04 ` Frank Li
2024-10-24 7:45 ` Krzysztof Kozlowski
2024-10-24 14:33 ` Mathieu Poirier
2 siblings, 0 replies; 14+ messages in thread
From: Frank Li @ 2024-10-23 18:04 UTC (permalink / raw)
To: Laurentiu Mihalcea
Cc: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan, linux-remoteproc,
devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
On Wed, Oct 23, 2024 at 12:21:11PM -0400, Laurentiu Mihalcea wrote:
> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>
> Add new compatible for imx95's CM7 with SOF.
It is not only add compatible string, but also change reg, reg-names ...
Please add descripts in commit message about these.
>
> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> ---
> .../bindings/remoteproc/fsl,imx-rproc.yaml | 58 +++++++++++++++++--
> 1 file changed, 53 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> index 57d75acb0b5e..ab0d8e017965 100644
> --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> @@ -28,6 +28,15 @@ properties:
> - fsl,imx8qxp-cm4
> - fsl,imx8ulp-cm33
> - fsl,imx93-cm33
> + - fsl,imx95-cm7-sof
> +
> + reg:
> + maxItems: 2
> +
> + reg-names:
> + items:
> + - const: dram
> + - const: mailbox
>
> clocks:
> maxItems: 1
> @@ -38,10 +47,8 @@ properties:
> Phandle to syscon block which provide access to System Reset Controller
>
> mbox-names:
> - items:
> - - const: tx
> - - const: rx
> - - const: rxdb
> + minItems: 1
> + maxItems: 4
>
> mboxes:
> description:
> @@ -49,7 +56,7 @@ properties:
> List of <&phandle type channel> - 1 channel for TX, 1 channel for RX, 1 channel for RXDB.
> (see mailbox/fsl,mu.yaml)
> minItems: 1
> - maxItems: 3
> + maxItems: 4
>
> memory-region:
> description:
> @@ -84,6 +91,10 @@ properties:
> This property is to specify the resource id of the remote processor in SoC
> which supports SCFW
>
> + port:
> + $ref: /schemas/sound/audio-graph-port.yaml#
> + unevaluatedProperties: false
> +
> required:
> - compatible
>
> @@ -114,6 +125,43 @@ allOf:
> properties:
> power-domains: false
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: fsl,imx95-cm7-sof
> + then:
> + properties:
> + mboxes:
> + minItems: 4
> + mbox-names:
> + items:
> + - const: txdb0
> + - const: txdb1
> + - const: rxdb0
> + - const: rxdb1
> + memory-region:
> + maxItems: 1
> + required:
> + - reg
> + - reg-names
> + - mboxes
> + - mbox-names
> + - memory-region
> + - port
> + else:
> + properties:
> + reg: false
> + reg-names: false
> + mboxes:
> + maxItems: 3
> + mbox-names:
> + items:
> + - const: tx
> + - const: rx
> + - const: rxdb
> + port: false
> +
> additionalProperties: false
>
> examples:
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/4] ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios support
2024-10-23 16:21 ` [PATCH 2/4] ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios support Laurentiu Mihalcea
@ 2024-10-23 18:15 ` Frank Li
2024-10-23 23:52 ` Kuninori Morimoto
0 siblings, 1 reply; 14+ messages in thread
From: Frank Li @ 2024-10-23 18:15 UTC (permalink / raw)
To: Laurentiu Mihalcea
Cc: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan, linux-remoteproc,
devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
On Wed, Oct 23, 2024 at 12:21:12PM -0400, Laurentiu Mihalcea wrote:
> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>
> Introduce the 'widgets' property, allowing the creation of widgets from
> 4 template widgets: Microphone, Line, Headphone, and Speaker. Also
> introduce the 'hp-det-gpios' property, which allows using headphone
> detection using the specified GPIO.
>
> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> ---
> .../devicetree/bindings/sound/audio-graph-card2.yaml | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml b/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
> index f943f90d8b15..f0300a08f7fe 100644
> --- a/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
> +++ b/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
> @@ -37,6 +37,15 @@ properties:
> codec2codec:
> type: object
> description: Codec to Codec node
> + hp-det-gpios:
> + maxItems: 1
> + widgets:
> + description:
> + User specified audio sound widgets.
> + Each entry is a pair of strings, the first being the type of
> + widget ("Microphone", "Line", "Headphone", "Speaker"), the
> + second being the machine specific name for the widget.
> + $ref: /schemas/types.yaml#/definitions/non-unique-string-array
Is it possible $ref: /schemas/sound/audio-graph.yaml to avoid duplicate
these properties like audio-graph-card.yaml
Frank
>
> required:
> - compatible
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/4] ASoC: SOF: imx: add driver for imx95
2024-10-23 16:21 ` [PATCH 3/4] ASoC: SOF: imx: add driver for imx95 Laurentiu Mihalcea
@ 2024-10-23 18:38 ` Frank Li
0 siblings, 0 replies; 14+ messages in thread
From: Frank Li @ 2024-10-23 18:38 UTC (permalink / raw)
To: Laurentiu Mihalcea
Cc: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan, linux-remoteproc,
devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
On Wed, Oct 23, 2024 at 12:21:13PM -0400, Laurentiu Mihalcea wrote:
> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>
> Add SOF driver for imx95.
>
> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> ---
> sound/soc/sof/imx/Kconfig | 8 +
> sound/soc/sof/imx/Makefile | 2 +
> sound/soc/sof/imx/imx95.c | 383 +++++++++++++++++++++++++++++++++++++
> 3 files changed, 393 insertions(+)
> create mode 100644 sound/soc/sof/imx/imx95.c
>
> diff --git a/sound/soc/sof/imx/Kconfig b/sound/soc/sof/imx/Kconfig
> index 4751b04d5e6f..51a70a193533 100644
> --- a/sound/soc/sof/imx/Kconfig
> +++ b/sound/soc/sof/imx/Kconfig
> @@ -50,4 +50,12 @@ config SND_SOC_SOF_IMX8ULP
> Say Y if you have such a device.
> If unsure select "N".
>
> +config SND_SOC_SOF_IMX95
> + tristate "SOF support for i.MX95"
> + depends on IMX_DSP
> + help
> + This adds support for Sound Open Firmware for NXP i.MX95 platforms.
> + Say Y if you have such a device.
> + If unsure select "N".
> +
> endif ## SND_SOC_SOF_IMX_TOPLEVEL
> diff --git a/sound/soc/sof/imx/Makefile b/sound/soc/sof/imx/Makefile
> index be0bf0736dfa..715ac3798668 100644
> --- a/sound/soc/sof/imx/Makefile
> +++ b/sound/soc/sof/imx/Makefile
> @@ -2,10 +2,12 @@
> snd-sof-imx8-y := imx8.o
> snd-sof-imx8m-y := imx8m.o
> snd-sof-imx8ulp-y := imx8ulp.o
> +snd-sof-imx95-y := imx95.o
>
> snd-sof-imx-common-y := imx-common.o
>
> obj-$(CONFIG_SND_SOC_SOF_IMX8) += snd-sof-imx8.o
> obj-$(CONFIG_SND_SOC_SOF_IMX8M) += snd-sof-imx8m.o
> obj-$(CONFIG_SND_SOC_SOF_IMX8ULP) += snd-sof-imx8ulp.o
> +obj-$(CONFIG_SND_SOC_SOF_IMX95) += snd-sof-imx95.o
> obj-$(CONFIG_SND_SOC_SOF_IMX_COMMON) += imx-common.o
> diff --git a/sound/soc/sof/imx/imx95.c b/sound/soc/sof/imx/imx95.c
> new file mode 100644
> index 000000000000..3f7ed6a16c42
> --- /dev/null
> +++ b/sound/soc/sof/imx/imx95.c
> @@ -0,0 +1,383 @@
> +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
> +/*
> + * Copyright 2024 NXP
> + */
> +
> +#include <linux/module.h>
> +#include <linux/of_platform.h>
> +#include <sound/sof.h>
> +#include <linux/arm-smccc.h>
> +#include <linux/firmware/imx/dsp.h>
> +#include <linux/of_reserved_mem.h>
> +#include <linux/clk.h>
sort by alphabet order
> +
> +#include "../sof-of-dev.h"
> +#include "../ops.h"
> +
> +#define IMX_SIP_SRC 0xC2000005
> +#define IMX_SIP_SRC_M_RESET_ADDR_SET 0x03
> +
> +#define IMX95_CPU_VEC_FLAGS_BOOT BIT(29)
> +
> +#define IMX_SIP_LMM 0xC200000F
> +#define IMX_SIP_LMM_BOOT 0x0
> +#define IMX_SIP_LMM_SHUTDOWN 0x1
> +
> +#define IMX95_M7_LM_ID 0x1
> +
> +#define MBOX_DSPBOX_OFFSET 0x1000
> +
> +struct imx95_priv {
> + struct platform_device *ipc_dev;
> + struct imx_dsp_ipc *ipc_handle;
> + resource_size_t bootaddr;
> +};
> +
> +static void imx95_ipc_handle_reply(struct imx_dsp_ipc *ipc)
> +{
> + unsigned long flags;
> + struct snd_sof_dev *sdev = imx_dsp_get_data(ipc);
> +
> + spin_lock_irqsave(&sdev->ipc_lock, flags);
> + snd_sof_ipc_process_reply(sdev, 0);
> + spin_unlock_irqrestore(&sdev->ipc_lock, flags);
> +}
> +
> +static void imx95_ipc_handle_request(struct imx_dsp_ipc *ipc)
> +{
> + snd_sof_ipc_msgs_rx(imx_dsp_get_data(ipc));
> +}
> +
> +static struct imx_dsp_ops ipc_ops = {
> + .handle_reply = imx95_ipc_handle_reply,
> + .handle_request = imx95_ipc_handle_request,
> +};
> +
> +static int imx95_disable_enable_core(bool enable)
> +{
> + struct arm_smccc_res res;
> +
> + if (enable)
> + arm_smccc_smc(IMX_SIP_LMM, IMX_SIP_LMM_BOOT, IMX95_M7_LM_ID,
> + 0, 0, 0, 0, 0, &res);
> + else
> + arm_smccc_smc(IMX_SIP_LMM, IMX_SIP_LMM_SHUTDOWN, IMX95_M7_LM_ID,
> + 0, 0, 0, 0, 0, &res);
> +
> + return res.a0;
> +}
> +
> +static int imx95_run(struct snd_sof_dev *sdev)
> +{
> + return imx95_disable_enable_core(true);
> +}
> +
> +static int imx95_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg)
> +{
> + struct imx95_priv *priv = sdev->pdata->hw_pdata;
> +
> + sof_mailbox_write(sdev, sdev->host_box.offset,
> + msg->msg_data, msg->msg_size);
> +
> + imx_dsp_ring_doorbell(priv->ipc_handle, 0);
> +
> + return 0;
> +}
> +
> +static int imx95_get_mailbox_offset(struct snd_sof_dev *sdev)
> +{
> + return MBOX_DSPBOX_OFFSET;
> +}
> +
> +static int imx95_get_bar_index(struct snd_sof_dev *sdev, u32 type)
> +{
> + switch (type) {
> + case SOF_FW_BLK_TYPE_SRAM:
> + case SOF_FW_BLK_TYPE_DRAM:
> + return type;
> + default:
> + return -EINVAL;
> + }
> +}
> +
> +static int imx95_get_window_offset(struct snd_sof_dev *sdev, u32 id)
> +{
> + /* no offset for window regions - they are already relative
> + * to the mailbox memory region described in DT.
> + */
> + return 0;
> +}
> +
> +static int imx95_set_power_state(struct snd_sof_dev *sdev,
> + const struct sof_dsp_power_state *target_state)
> +{
> + sdev->dsp_power_state = *target_state;
> +
> + return 0;
> +}
> +
> +/* no other resources to power on during (runtime) resume so these functions
> + * don't do any resource management (i.e: clks, PDs, etc...). As for enabling
> + * the M7 LM: this is taken care of by run(), which is called during sof_resume().
> + */
> +static int imx95_runtime_resume(struct snd_sof_dev *sdev)
> +{
> + const struct sof_dsp_power_state target_state = {
> + .state = SOF_DSP_PM_D0,
> + };
> +
> + return snd_sof_dsp_set_power_state(sdev, &target_state);
> +}
> +
> +static int imx95_resume(struct snd_sof_dev *sdev)
> +{
> + const struct sof_dsp_power_state target_state = {
> + .state = SOF_DSP_PM_D0,
> + };
> +
> + if (pm_runtime_suspended(sdev->dev)) {
> + pm_runtime_disable(sdev->dev);
> + pm_runtime_set_active(sdev->dev);
> + pm_runtime_mark_last_busy(sdev->dev);
> + pm_runtime_enable(sdev->dev);
> + pm_runtime_idle(sdev->dev);
> + }
> +
> + return snd_sof_dsp_set_power_state(sdev, &target_state);
> +}
> +
> +static int imx95_runtime_suspend(struct snd_sof_dev *sdev)
> +{
> + int ret;
> + const struct sof_dsp_power_state target_state = {
> + .state = SOF_DSP_PM_D3,
> + };
> +
> + ret = imx95_disable_enable_core(false);
> + if (ret < 0) {
> + dev_err(sdev->dev, "failed to disable core: %d\n", ret);
> + return ret;
> + }
> +
> + return snd_sof_dsp_set_power_state(sdev, &target_state);
> +}
> +
> +static int imx95_suspend(struct snd_sof_dev *sdev, unsigned int target_state)
> +{
> + int ret;
> + const struct sof_dsp_power_state target_power_state = {
> + .state = target_state,
> + };
> +
> + if (!pm_runtime_suspended(sdev->dev)) {
> + ret = imx95_disable_enable_core(false);
> + if (ret < 0) {
> + dev_err(sdev->dev, "failed to suspend: %d\n", ret);
> + return ret;
> + }
> + }
> +
> + return snd_sof_dsp_set_power_state(sdev, &target_power_state);
> +}
> +
> +static struct snd_soc_dai_driver imx95_dai[] = {
> + {
> + .name = "sai3",
> + .playback = {
> + .channels_min = 1,
> + .channels_max = 32,
> + },
> + .capture = {
> + .channels_min = 1,
> + .channels_max = 32,
> + },
> + },
> +};
> +
> +static int imx95_probe(struct snd_sof_dev *sdev)
> +{
> + struct platform_device *pdev;
> + struct imx95_priv *priv;
> + struct resource *res;
> + struct arm_smccc_res smc_ret;
> + int ret;
> +
> + pdev = container_of(sdev->dev, struct platform_device, dev);
> +
> + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
> + if (!priv)
> + return dev_err_probe(&pdev->dev, -ENOMEM, "failed to alloc priv\n");
> +
> + sdev->pdata->hw_pdata = priv;
> +
> + /* map DRAM */
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dram");
> + if (!res)
> + return dev_err_probe(&pdev->dev, -ENODEV,
> + "failed to fetch DRAM region\n");
> +
> + sdev->bar[SOF_FW_BLK_TYPE_DRAM] = devm_ioremap(&pdev->dev, res->start,
> + resource_size(res));
> + if (IS_ERR(sdev->bar[SOF_FW_BLK_TYPE_DRAM]))
> + return dev_err_probe(&pdev->dev,
> + PTR_ERR(sdev->bar[SOF_FW_BLK_TYPE_DRAM]),
> + "failed to map DRAM region\n");
> +
> + sdev->mmio_bar = SOF_FW_BLK_TYPE_DRAM;
> + priv->bootaddr = res->start;
> +
> + /* map mailbox region */
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mailbox");
> + if (!res)
> + return dev_err_probe(&pdev->dev, -ENODEV,
> + "failed to fetch MAILBOX region\n");
> +
> + sdev->bar[SOF_FW_BLK_TYPE_SRAM] = devm_ioremap_wc(&pdev->dev, res->start,
> + resource_size(res));
> + if (IS_ERR(sdev->bar[SOF_FW_BLK_TYPE_SRAM]))
> + return dev_err_probe(&pdev->dev,
> + PTR_ERR(sdev->bar[SOF_FW_BLK_TYPE_SRAM]),
> + "failed to map mailbox region\n");
> +
> + sdev->mailbox_bar = SOF_FW_BLK_TYPE_SRAM;
> + sdev->dsp_box.offset = MBOX_DSPBOX_OFFSET;
> +
> + ret = of_reserved_mem_device_init(sdev->dev);
> + if (ret)
> + return dev_err_probe(&pdev->dev, ret,
> + "failed to bind DMA region\n");
> +
> + priv->ipc_dev = platform_device_register_data(&pdev->dev, "imx-dsp",
> + PLATFORM_DEVID_NONE,
> + pdev, sizeof(*pdev));
> + if (IS_ERR(priv->ipc_dev))
> + return dev_err_probe(&pdev->dev, PTR_ERR(priv->ipc_dev),
> + "failed to create IPC device\n");
> +
> + priv->ipc_handle = dev_get_drvdata(&priv->ipc_dev->dev);
> + if (!priv->ipc_handle) {
> + ret = -EPROBE_DEFER;
> + dev_err(&pdev->dev, "failed to fetch ipc handle\n");
> + goto err_unregister_ipc_dev;
> + }
> +
> + priv->ipc_handle->ops = &ipc_ops;
> + imx_dsp_set_data(priv->ipc_handle, sdev);
> +
> + /* set core boot reset address */
> + arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M_RESET_ADDR_SET, priv->bootaddr,
> + IMX95_CPU_VEC_FLAGS_BOOT, 0, 0, 0, 0, &smc_ret);
> + if ((int)smc_ret.a0 < 0) {
> + ret = smc_ret.a0;
> + dev_err(&pdev->dev, "failed to set boot address: %d", ret);
> + goto err_unregister_ipc_dev;
> + }
> +
> + return 0;
> +
> +err_unregister_ipc_dev:
> + platform_device_unregister(priv->ipc_dev);
> +
> + return ret;
> +}
> +
> +static void imx95_remove(struct snd_sof_dev *sdev)
> +{
> + struct imx95_priv *priv;
> +
> + priv = sdev->pdata->hw_pdata;
> +
> + if (imx95_disable_enable_core(false))
> + dev_err(sdev->dev, "failed to stop core\n");
> +
> + platform_device_unregister(priv->ipc_dev);
> +}
> +
> +static const struct snd_sof_dsp_ops sof_imx95_ops = {
> + .probe = imx95_probe,
> + .remove = imx95_remove,
> +
> + /* mandatory "DSP" ops */
> + .run = imx95_run,
> + .block_read = sof_block_read,
> + .block_write = sof_block_write,
> + .send_msg = imx95_send_msg,
> + .load_firmware = snd_sof_load_firmware_memcpy,
> + .ipc_msg_data = sof_ipc_msg_data,
> +
> + .mailbox_read = sof_mailbox_read,
> + .mailbox_write = sof_mailbox_write,
> +
> + .get_mailbox_offset = imx95_get_mailbox_offset,
> + .get_bar_index = imx95_get_bar_index,
> + .get_window_offset = imx95_get_window_offset,
> +
> + .pcm_open = sof_stream_pcm_open,
> + .pcm_close = sof_stream_pcm_close,
> + .set_stream_data_offset = sof_set_stream_data_offset,
> +
> + .runtime_suspend = imx95_runtime_suspend,
> + .runtime_resume = imx95_runtime_resume,
> +
> + .resume = imx95_resume,
> + .suspend = imx95_suspend,
> +
> + .set_power_state = imx95_set_power_state,
> +
> + .drv = imx95_dai,
> + .num_drv = ARRAY_SIZE(imx95_dai),
> +
> + .hw_info = SNDRV_PCM_INFO_MMAP |
> + SNDRV_PCM_INFO_MMAP_VALID |
> + SNDRV_PCM_INFO_INTERLEAVED |
> + SNDRV_PCM_INFO_PAUSE |
> + SNDRV_PCM_INFO_BATCH |
> + SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
> +};
> +
> +static struct snd_sof_of_mach sof_imx95_machs[] = {
> + {
> + .compatible = "fsl,imx95-19x19-evk",
> + .sof_tplg_filename = "sof-imx95-wm8962.tplg",
> + .drv_name = "asoc-audio-graph-card2",
> + },
> + {
> + },
> +};
> +
> +static struct sof_dev_desc sof_of_imx95_desc = {
> + .of_machines = sof_imx95_machs,
> + .ipc_supported_mask = BIT(SOF_IPC_TYPE_3),
> + .ipc_default = SOF_IPC_TYPE_3,
> + .default_fw_path = {
> + [SOF_IPC_TYPE_3] = "imx/sof",
> + },
> + .default_tplg_path = {
> + [SOF_IPC_TYPE_3] = "imx/sof-tplg",
> + },
> + .default_fw_filename = {
> + [SOF_IPC_TYPE_3] = "sof-imx95.ri",
> + },
> + .ops = &sof_imx95_ops,
> +};
> +
> +static const struct of_device_id sof_of_imx95_ids[] = {
> + { .compatible = "fsl,imx95-cm7-sof", .data = &sof_of_imx95_desc },
> + { },
> +};
> +MODULE_DEVICE_TABLE(of, sof_of_imx95_ids);
> +
> +static struct platform_driver snd_sof_of_imx95_driver = {
> + .probe = sof_of_probe,
> + .remove = sof_of_remove,
> + .driver = {
> + .name = "sof-audio-of-imx95",
> + .pm = &sof_of_pm,
> + .of_match_table = sof_of_imx95_ids,
> + },
> +};
> +module_platform_driver(snd_sof_of_imx95_driver);
> +
> +MODULE_LICENSE("Dual BSD/GPL");
> +MODULE_DESCRIPTION("SOF support for i.MX95 platforms");
> +MODULE_AUTHOR("Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>");
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/4] arm64: dts: imx: add imx95 dts for sof
2024-10-23 16:21 ` [PATCH 4/4] arm64: dts: imx: add imx95 dts for sof Laurentiu Mihalcea
@ 2024-10-23 18:48 ` Frank Li
0 siblings, 0 replies; 14+ messages in thread
From: Frank Li @ 2024-10-23 18:48 UTC (permalink / raw)
To: Laurentiu Mihalcea
Cc: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan, linux-remoteproc,
devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
On Wed, Oct 23, 2024 at 12:21:14PM -0400, Laurentiu Mihalcea wrote:
> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>
> Add imx95 DTS for SOF usage.
>
> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> ---
> arch/arm64/boot/dts/freescale/Makefile | 1 +
> .../dts/freescale/imx95-19x19-evk-sof.dts | 86 +++++++++++++++++++
> 2 files changed, 87 insertions(+)
> create mode 100644 arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts
>
> diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
> index 2a69b7ec6d6d..94660e3e8b2b 100644
> --- a/arch/arm64/boot/dts/freescale/Makefile
> +++ b/arch/arm64/boot/dts/freescale/Makefile
> @@ -267,6 +267,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx93-tqma9352-mba93xxca.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-tqma9352-mba93xxla.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-var-som-symphony.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-evk.dtb
> +dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-evk-sof.dtb
>
> imx8mm-kontron-dl-dtbs := imx8mm-kontron-bl.dtb imx8mm-kontron-dl.dtbo
>
> diff --git a/arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts b/arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts
> new file mode 100644
> index 000000000000..b10dc1af5ce2
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/imx95-19x19-evk-sof.dts
> @@ -0,0 +1,86 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright 2024 NXP
> + */
> +
> +/dts-v1/;
> +
> +#include "imx95-19x19-evk.dts"
> +
> +/ {
> + reserved-memory {
> + adma_res: memory@86100000 {
> + compatible = "shared-dma-pool";
> + reg = <0x0 0x86100000 0x0 0x100000>;
> + no-map;
> + };
> + };
> +
> + sound-wm8962 {
> + status = "disabled";
> + };
> +
> + sof-sound-wm8962 {
> + compatible = "audio-graph-card2";
> +
> + links = <&cpu>;
> + label = "wm8962-audio";
> +
> + hp-det-gpios = <&gpio2 11 GPIO_ACTIVE_HIGH>;
> +
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_hp>;
> +
> + widgets =
> + "Headphone", "Headphones",
> + "Microphone", "Headset Mic";
> + routing =
> + "Headphones", "HPOUTL",
> + "Headphones", "HPOUTR",
> + "Headset Mic", "MICBIAS",
> + "IN3R", "Headset Mic",
> + "IN1R", "Headset Mic";
> + };
> +
> + sof_cpu: cm7-cpu@80000000 {
> + compatible = "fsl,imx95-cm7-sof";
needn't space, and remove other extra space.
Can you try https://github.com/lznuaa/dt-format
to order these nodes and properties.
Frank
> +
> + reg = <0x0 0x80000000 0x0 0x400000>,
> + <0x0 0x86000000 0x0 0x3000>;
> + reg-names = "dram", "mailbox";
> +
> + memory-region = <&adma_res>;
> +
> + mboxes = <&mu7 2 0>, <&mu7 2 1>, <&mu7 3 0>, <&mu7 3 1>;
> + mbox-names = "txdb0", "txdb1", "rxdb0", "rxdb1";
> +
> + cpu: port {
> + cpu_ep: endpoint { remote-endpoint = <&codec_ep>; };
> + };
> + };
> +};
> +
> +&wm8962 {
> + assigned-clocks = <&scmi_clk IMX95_CLK_AUDIOPLL1_VCO>,
> + <&scmi_clk IMX95_CLK_AUDIOPLL2_VCO>,
> + <&scmi_clk IMX95_CLK_AUDIOPLL1>,
> + <&scmi_clk IMX95_CLK_AUDIOPLL2>,
> + <&scmi_clk IMX95_CLK_SAI3>;
> + assigned-clock-parents = <0>, <0>, <0>, <0>, <&scmi_clk IMX95_CLK_AUDIOPLL1>;
> + assigned-clock-rates = <3932160000>, <3612672000>,
> + <393216000>, <361267200>,
> + <12288000>;
> + status = "okay";
> +
> + port {
> + codec_ep: endpoint { remote-endpoint = <&cpu_ep>; };
> + };
> +};
> +
> +&edma2 {
> + dma-channel-mask = <0x3fffffff>, <0xffffffff>;
> +};
> +
> +&sai3 {
> + status = "disabled";
> +};
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/4] ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios support
2024-10-23 18:15 ` Frank Li
@ 2024-10-23 23:52 ` Kuninori Morimoto
0 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-10-23 23:52 UTC (permalink / raw)
To: Frank Li
Cc: Laurentiu Mihalcea, Rob Herring, Krzysztof Kozlowski, Shawn Guo,
Daniel Baluta, Peng Fan, Mark Brown, Takashi Iwai, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan, linux-remoteproc,
devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
Hi
> > From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> >
> > Introduce the 'widgets' property, allowing the creation of widgets from
> > 4 template widgets: Microphone, Line, Headphone, and Speaker. Also
> > introduce the 'hp-det-gpios' property, which allows using headphone
> > detection using the specified GPIO.
> >
> > Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> > ---
> > .../devicetree/bindings/sound/audio-graph-card2.yaml | 9 +++++++++
> > 1 file changed, 9 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml b/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
> > index f943f90d8b15..f0300a08f7fe 100644
> > --- a/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
> > +++ b/Documentation/devicetree/bindings/sound/audio-graph-card2.yaml
> > @@ -37,6 +37,15 @@ properties:
> > codec2codec:
> > type: object
> > description: Codec to Codec node
> > + hp-det-gpios:
> > + maxItems: 1
> > + widgets:
> > + description:
> > + User specified audio sound widgets.
> > + Each entry is a pair of strings, the first being the type of
> > + widget ("Microphone", "Line", "Headphone", "Speaker"), the
> > + second being the machine specific name for the widget.
> > + $ref: /schemas/types.yaml#/definitions/non-unique-string-array
>
> Is it possible $ref: /schemas/sound/audio-graph.yaml to avoid duplicate
> these properties like audio-graph-card.yaml
You can find both "hp-det-gpios" and "widget" already exist in audio-graph.yaml
Thank you for your help !!
Best regards
---
Kuninori Morimoto
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible
2024-10-23 16:21 ` [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible Laurentiu Mihalcea
2024-10-23 18:04 ` Frank Li
@ 2024-10-24 7:45 ` Krzysztof Kozlowski
2024-10-24 10:47 ` Laurentiu Mihalcea
2024-10-24 14:33 ` Mathieu Poirier
2 siblings, 1 reply; 14+ messages in thread
From: Krzysztof Kozlowski @ 2024-10-24 7:45 UTC (permalink / raw)
To: Laurentiu Mihalcea
Cc: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan, linux-remoteproc,
devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
On Wed, Oct 23, 2024 at 12:21:11PM -0400, Laurentiu Mihalcea wrote:
> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>
> Add new compatible for imx95's CM7 with SOF.
>
> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> ---
> .../bindings/remoteproc/fsl,imx-rproc.yaml | 58 +++++++++++++++++--
> 1 file changed, 53 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> index 57d75acb0b5e..ab0d8e017965 100644
> --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> @@ -28,6 +28,15 @@ properties:
> - fsl,imx8qxp-cm4
> - fsl,imx8ulp-cm33
> - fsl,imx93-cm33
> + - fsl,imx95-cm7-sof
> +
> + reg:
> + maxItems: 2
> +
> + reg-names:
> + items:
> + - const: dram
> + - const: mailbox
That's quite different programming model. Are you sure these are devices
from similar class/type?
Your big if:then: block suggests this could be separate binding.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible
2024-10-24 7:45 ` Krzysztof Kozlowski
@ 2024-10-24 10:47 ` Laurentiu Mihalcea
2024-10-24 16:48 ` Rob Herring
0 siblings, 1 reply; 14+ messages in thread
From: Laurentiu Mihalcea @ 2024-10-24 10:47 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Mathieu Poirier, Iuliana Prodan, linux-remoteproc,
devicetree, imx, linux-arm-kernel, linux-sound,
sound-open-firmware, linux-kernel
On 10/24/2024 10:45 AM, Krzysztof Kozlowski wrote:
> On Wed, Oct 23, 2024 at 12:21:11PM -0400, Laurentiu Mihalcea wrote:
>> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>>
>> Add new compatible for imx95's CM7 with SOF.
>>
>> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>> ---
>> .../bindings/remoteproc/fsl,imx-rproc.yaml | 58 +++++++++++++++++--
>> 1 file changed, 53 insertions(+), 5 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
>> index 57d75acb0b5e..ab0d8e017965 100644
>> --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
>> +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
>> @@ -28,6 +28,15 @@ properties:
>> - fsl,imx8qxp-cm4
>> - fsl,imx8ulp-cm33
>> - fsl,imx93-cm33
>> + - fsl,imx95-cm7-sof
>> +
>> + reg:
>> + maxItems: 2
>> +
>> + reg-names:
>> + items:
>> + - const: dram
>> + - const: mailbox
> That's quite different programming model. Are you sure these are devices
> from similar class/type?
Yep, these are all Cortex-M cores. It's just that their usage differs quite a lot.
>
> Your big if:then: block suggests this could be separate binding.
Ideally I would have wanted to place the compatible inside dsp/fsl,dsp.yaml as the
programming model would have been more similar.
Unfortunately, these are different physical devices (HiFi DSP core vs CM core) even
though they're all used for DSP purposes so I'm not sure this is entirely appropriate.
Alternatively, if you think grouping these devices (i.e: those represented by the -dsp compatibles
from fsl,dsp and the one represented by the compatible introduced here) under the same binding
is alright we can just branch off from fsl,dsp and fsl,imx-rproc and create a new binding for
these devices. I'm expecting this to be relatively clean as they have the same programming
model.
Let me know your thoughts on this.
>
> Best regards,
> Krzysztof
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible
2024-10-23 16:21 ` [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible Laurentiu Mihalcea
2024-10-23 18:04 ` Frank Li
2024-10-24 7:45 ` Krzysztof Kozlowski
@ 2024-10-24 14:33 ` Mathieu Poirier
2 siblings, 0 replies; 14+ messages in thread
From: Mathieu Poirier @ 2024-10-24 14:33 UTC (permalink / raw)
To: Laurentiu Mihalcea
Cc: Rob Herring, Krzysztof Kozlowski, Shawn Guo, Daniel Baluta,
Peng Fan, Mark Brown, Takashi Iwai, Kuninori Morimoto, Bard Liao,
Peter Ujfalusi, Jaroslav Kysela, Pierre-Louis Bossart,
Conor Dooley, Iuliana Prodan, linux-remoteproc, devicetree, imx,
linux-arm-kernel, linux-sound, sound-open-firmware, linux-kernel
Good day,
On Wed, Oct 23, 2024 at 12:21:11PM -0400, Laurentiu Mihalcea wrote:
> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
>
> Add new compatible for imx95's CM7 with SOF.
>
> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> ---
> .../bindings/remoteproc/fsl,imx-rproc.yaml | 58 +++++++++++++++++--
> 1 file changed, 53 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> index 57d75acb0b5e..ab0d8e017965 100644
> --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> @@ -28,6 +28,15 @@ properties:
> - fsl,imx8qxp-cm4
> - fsl,imx8ulp-cm33
> - fsl,imx93-cm33
> + - fsl,imx95-cm7-sof
Why is this added in the remoteproc bindings when the driver is
sound/soc/sof/imx/imx95.c?
> +
> + reg:
> + maxItems: 2
> +
> + reg-names:
> + items:
> + - const: dram
> + - const: mailbox
>
> clocks:
> maxItems: 1
> @@ -38,10 +47,8 @@ properties:
> Phandle to syscon block which provide access to System Reset Controller
>
> mbox-names:
> - items:
> - - const: tx
> - - const: rx
> - - const: rxdb
> + minItems: 1
> + maxItems: 4
>
> mboxes:
> description:
> @@ -49,7 +56,7 @@ properties:
> List of <&phandle type channel> - 1 channel for TX, 1 channel for RX, 1 channel for RXDB.
> (see mailbox/fsl,mu.yaml)
> minItems: 1
> - maxItems: 3
> + maxItems: 4
>
> memory-region:
> description:
> @@ -84,6 +91,10 @@ properties:
> This property is to specify the resource id of the remote processor in SoC
> which supports SCFW
>
> + port:
> + $ref: /schemas/sound/audio-graph-port.yaml#
> + unevaluatedProperties: false
> +
> required:
> - compatible
>
> @@ -114,6 +125,43 @@ allOf:
> properties:
> power-domains: false
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: fsl,imx95-cm7-sof
> + then:
> + properties:
> + mboxes:
> + minItems: 4
> + mbox-names:
> + items:
> + - const: txdb0
> + - const: txdb1
> + - const: rxdb0
> + - const: rxdb1
> + memory-region:
> + maxItems: 1
> + required:
> + - reg
> + - reg-names
> + - mboxes
> + - mbox-names
> + - memory-region
> + - port
> + else:
> + properties:
> + reg: false
> + reg-names: false
> + mboxes:
> + maxItems: 3
> + mbox-names:
> + items:
> + - const: tx
> + - const: rx
> + - const: rxdb
> + port: false
> +
> additionalProperties: false
>
> examples:
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible
2024-10-24 10:47 ` Laurentiu Mihalcea
@ 2024-10-24 16:48 ` Rob Herring
0 siblings, 0 replies; 14+ messages in thread
From: Rob Herring @ 2024-10-24 16:48 UTC (permalink / raw)
To: Laurentiu Mihalcea
Cc: Krzysztof Kozlowski, Krzysztof Kozlowski, Shawn Guo,
Daniel Baluta, Peng Fan, Mark Brown, Takashi Iwai,
Kuninori Morimoto, Bard Liao, Peter Ujfalusi, Jaroslav Kysela,
Pierre-Louis Bossart, Conor Dooley, Mathieu Poirier,
Iuliana Prodan, linux-remoteproc, devicetree, imx,
linux-arm-kernel, linux-sound, sound-open-firmware, linux-kernel
On Thu, Oct 24, 2024 at 01:47:53PM +0300, Laurentiu Mihalcea wrote:
>
>
> On 10/24/2024 10:45 AM, Krzysztof Kozlowski wrote:
> > On Wed, Oct 23, 2024 at 12:21:11PM -0400, Laurentiu Mihalcea wrote:
> >> From: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> >>
> >> Add new compatible for imx95's CM7 with SOF.
> >>
> >> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
> >> ---
> >> .../bindings/remoteproc/fsl,imx-rproc.yaml | 58 +++++++++++++++++--
> >> 1 file changed, 53 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> >> index 57d75acb0b5e..ab0d8e017965 100644
> >> --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> >> +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> >> @@ -28,6 +28,15 @@ properties:
> >> - fsl,imx8qxp-cm4
> >> - fsl,imx8ulp-cm33
> >> - fsl,imx93-cm33
> >> + - fsl,imx95-cm7-sof
> >> +
> >> + reg:
> >> + maxItems: 2
> >> +
> >> + reg-names:
> >> + items:
> >> + - const: dram
> >> + - const: mailbox
> > That's quite different programming model. Are you sure these are devices
> > from similar class/type?
> Yep, these are all Cortex-M cores. It's just that their usage differs quite a lot.
> >
> > Your big if:then: block suggests this could be separate binding.
> Ideally I would have wanted to place the compatible inside dsp/fsl,dsp.yaml as the
> programming model would have been more similar.
>
> Unfortunately, these are different physical devices (HiFi DSP core vs CM core) even
> though they're all used for DSP purposes so I'm not sure this is entirely appropriate.
That doesn't matter too much. trivial-devices.yaml is a bunch of
completely unrelated devices which happen to have the same binding. We
could probably take that farther with things like trivial clock
providers for example.
Having 'reg' vs not is pretty clearly something that should be different
binding.
>
> Alternatively, if you think grouping these devices (i.e: those represented by the -dsp compatibles
> from fsl,dsp and the one represented by the compatible introduced here) under the same binding
> is alright we can just branch off from fsl,dsp and fsl,imx-rproc and create a new binding for
> these devices. I'm expecting this to be relatively clean as they have the same programming
> model.
If it's just add a compatible and nothing else somewhere, I'd do that.
If it's more than that, then I'd make a new binding doc.
Rob
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-10-24 16:48 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-23 16:21 [PATCH 0/4] add sof support on imx95 Laurentiu Mihalcea
2024-10-23 16:21 ` [PATCH 1/4] dt-bindings: remoteproc: fsl,imx-rproc: add new compatible Laurentiu Mihalcea
2024-10-23 18:04 ` Frank Li
2024-10-24 7:45 ` Krzysztof Kozlowski
2024-10-24 10:47 ` Laurentiu Mihalcea
2024-10-24 16:48 ` Rob Herring
2024-10-24 14:33 ` Mathieu Poirier
2024-10-23 16:21 ` [PATCH 2/4] ASoC: dt-bindings: audio-graph-card2: add widgets and hp-det-gpios support Laurentiu Mihalcea
2024-10-23 18:15 ` Frank Li
2024-10-23 23:52 ` Kuninori Morimoto
2024-10-23 16:21 ` [PATCH 3/4] ASoC: SOF: imx: add driver for imx95 Laurentiu Mihalcea
2024-10-23 18:38 ` Frank Li
2024-10-23 16:21 ` [PATCH 4/4] arm64: dts: imx: add imx95 dts for sof Laurentiu Mihalcea
2024-10-23 18:48 ` Frank Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).