From 0d59423263be43f22cf8d597a6da4ec5f2d7f142 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Mon, 9 May 2022 17:53:46 -0400 Subject: meta-agl-bsp: update virtio-aarch64 Updates to get the virtio-aarch64 machine building after the upgrade to Yocto Project 4.0 / kirkstone: - Switch to the 5.15 linux-yocto kernel and drop the local backport of the 5.10 recipe. - Fix override syntax in the machine-specific linux-yocto bbappend. - Remove all the patches applied for the virtio and virtio-snd configuration fragments, they seem to have all been applied upstream. Bug-AGL: SPEC-4356 Signed-off-by: Scott Murray Change-Id: I96d4bb9b04d74280d1a3767fe17284fe6049fcba Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/27465 Reviewed-by: Vasyl Vavrychuk Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account --- ...-virtio-introduce-PCM-channel-map-support.patch | 335 --------------------- 1 file changed, 335 deletions(-) delete mode 100644 meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch (limited to 'meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch') diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch deleted file mode 100644 index d27ddb435..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch +++ /dev/null @@ -1,335 +0,0 @@ -From 861932797d59b807b4fcc8a2e12dafbddd5ca4d9 Mon Sep 17 00:00:00 2001 -From: Anton Yakovlev -Date: Tue, 2 Mar 2021 17:47:08 +0100 -Subject: [PATCH] ALSA: virtio: introduce PCM channel map support - -Enumerate all available PCM channel maps and create ALSA controls. - -Signed-off-by: Anton Yakovlev -Link: https://lore.kernel.org/r/20210302164709.3142702-9-anton.yakovlev@opensynergy.com -Signed-off-by: Takashi Iwai -Signed-off-by: Vasyl Vavrychuk ---- - sound/virtio/Makefile | 1 + - sound/virtio/virtio_card.c | 10 ++ - sound/virtio/virtio_card.h | 8 ++ - sound/virtio/virtio_chmap.c | 219 ++++++++++++++++++++++++++++++++++++ - sound/virtio/virtio_pcm.h | 4 + - 5 files changed, 242 insertions(+) - create mode 100644 sound/virtio/virtio_chmap.c - -diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile -index 09f485291285..2742bddb8874 100644 ---- a/sound/virtio/Makefile -+++ b/sound/virtio/Makefile -@@ -4,6 +4,7 @@ obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o - - virtio_snd-objs := \ - virtio_card.o \ -+ virtio_chmap.o \ - virtio_ctl_msg.o \ - virtio_jack.o \ - virtio_pcm.o \ -diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c -index 89bd66c1256e..1c03fcc41c3b 100644 ---- a/sound/virtio/virtio_card.c -+++ b/sound/virtio/virtio_card.c -@@ -231,6 +231,10 @@ static int virtsnd_build_devs(struct virtio_snd *snd) - if (rc) - return rc; - -+ rc = virtsnd_chmap_parse_cfg(snd); -+ if (rc) -+ return rc; -+ - if (snd->njacks) { - rc = virtsnd_jack_build_devs(snd); - if (rc) -@@ -243,6 +247,12 @@ static int virtsnd_build_devs(struct virtio_snd *snd) - return rc; - } - -+ if (snd->nchmaps) { -+ rc = virtsnd_chmap_build_devs(snd); -+ if (rc) -+ return rc; -+ } -+ - return snd_card_register(snd->card); - } - -diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h -index f154313c79fd..86ef3941895e 100644 ---- a/sound/virtio/virtio_card.h -+++ b/sound/virtio/virtio_card.h -@@ -43,6 +43,8 @@ struct virtio_snd_queue { - * @njacks: Number of jacks. - * @substreams: VirtIO PCM substreams. - * @nsubstreams: Number of PCM substreams. -+ * @chmaps: VirtIO channel maps. -+ * @nchmaps: Number of channel maps. - */ - struct virtio_snd { - struct virtio_device *vdev; -@@ -55,6 +57,8 @@ struct virtio_snd { - u32 njacks; - struct virtio_pcm_substream *substreams; - u32 nsubstreams; -+ struct virtio_snd_chmap_info *chmaps; -+ u32 nchmaps; - }; - - /* Message completion timeout in milliseconds (module parameter). */ -@@ -100,4 +104,8 @@ int virtsnd_jack_build_devs(struct virtio_snd *snd); - void virtsnd_jack_event(struct virtio_snd *snd, - struct virtio_snd_event *event); - -+int virtsnd_chmap_parse_cfg(struct virtio_snd *snd); -+ -+int virtsnd_chmap_build_devs(struct virtio_snd *snd); -+ - #endif /* VIRTIO_SND_CARD_H */ -diff --git a/sound/virtio/virtio_chmap.c b/sound/virtio/virtio_chmap.c -new file mode 100644 -index 000000000000..5bc924933a59 ---- /dev/null -+++ b/sound/virtio/virtio_chmap.c -@@ -0,0 +1,219 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * virtio-snd: Virtio sound device -+ * Copyright (C) 2021 OpenSynergy GmbH -+ */ -+#include -+ -+#include "virtio_card.h" -+ -+/* VirtIO->ALSA channel position map */ -+static const u8 g_v2a_position_map[] = { -+ [VIRTIO_SND_CHMAP_NONE] = SNDRV_CHMAP_UNKNOWN, -+ [VIRTIO_SND_CHMAP_NA] = SNDRV_CHMAP_NA, -+ [VIRTIO_SND_CHMAP_MONO] = SNDRV_CHMAP_MONO, -+ [VIRTIO_SND_CHMAP_FL] = SNDRV_CHMAP_FL, -+ [VIRTIO_SND_CHMAP_FR] = SNDRV_CHMAP_FR, -+ [VIRTIO_SND_CHMAP_RL] = SNDRV_CHMAP_RL, -+ [VIRTIO_SND_CHMAP_RR] = SNDRV_CHMAP_RR, -+ [VIRTIO_SND_CHMAP_FC] = SNDRV_CHMAP_FC, -+ [VIRTIO_SND_CHMAP_LFE] = SNDRV_CHMAP_LFE, -+ [VIRTIO_SND_CHMAP_SL] = SNDRV_CHMAP_SL, -+ [VIRTIO_SND_CHMAP_SR] = SNDRV_CHMAP_SR, -+ [VIRTIO_SND_CHMAP_RC] = SNDRV_CHMAP_RC, -+ [VIRTIO_SND_CHMAP_FLC] = SNDRV_CHMAP_FLC, -+ [VIRTIO_SND_CHMAP_FRC] = SNDRV_CHMAP_FRC, -+ [VIRTIO_SND_CHMAP_RLC] = SNDRV_CHMAP_RLC, -+ [VIRTIO_SND_CHMAP_RRC] = SNDRV_CHMAP_RRC, -+ [VIRTIO_SND_CHMAP_FLW] = SNDRV_CHMAP_FLW, -+ [VIRTIO_SND_CHMAP_FRW] = SNDRV_CHMAP_FRW, -+ [VIRTIO_SND_CHMAP_FLH] = SNDRV_CHMAP_FLH, -+ [VIRTIO_SND_CHMAP_FCH] = SNDRV_CHMAP_FCH, -+ [VIRTIO_SND_CHMAP_FRH] = SNDRV_CHMAP_FRH, -+ [VIRTIO_SND_CHMAP_TC] = SNDRV_CHMAP_TC, -+ [VIRTIO_SND_CHMAP_TFL] = SNDRV_CHMAP_TFL, -+ [VIRTIO_SND_CHMAP_TFR] = SNDRV_CHMAP_TFR, -+ [VIRTIO_SND_CHMAP_TFC] = SNDRV_CHMAP_TFC, -+ [VIRTIO_SND_CHMAP_TRL] = SNDRV_CHMAP_TRL, -+ [VIRTIO_SND_CHMAP_TRR] = SNDRV_CHMAP_TRR, -+ [VIRTIO_SND_CHMAP_TRC] = SNDRV_CHMAP_TRC, -+ [VIRTIO_SND_CHMAP_TFLC] = SNDRV_CHMAP_TFLC, -+ [VIRTIO_SND_CHMAP_TFRC] = SNDRV_CHMAP_TFRC, -+ [VIRTIO_SND_CHMAP_TSL] = SNDRV_CHMAP_TSL, -+ [VIRTIO_SND_CHMAP_TSR] = SNDRV_CHMAP_TSR, -+ [VIRTIO_SND_CHMAP_LLFE] = SNDRV_CHMAP_LLFE, -+ [VIRTIO_SND_CHMAP_RLFE] = SNDRV_CHMAP_RLFE, -+ [VIRTIO_SND_CHMAP_BC] = SNDRV_CHMAP_BC, -+ [VIRTIO_SND_CHMAP_BLC] = SNDRV_CHMAP_BLC, -+ [VIRTIO_SND_CHMAP_BRC] = SNDRV_CHMAP_BRC -+}; -+ -+/** -+ * virtsnd_chmap_parse_cfg() - Parse the channel map configuration. -+ * @snd: VirtIO sound device. -+ * -+ * This function is called during initial device initialization. -+ * -+ * Context: Any context that permits to sleep. -+ * Return: 0 on success, -errno on failure. -+ */ -+int virtsnd_chmap_parse_cfg(struct virtio_snd *snd) -+{ -+ struct virtio_device *vdev = snd->vdev; -+ u32 i; -+ int rc; -+ -+ virtio_cread_le(vdev, struct virtio_snd_config, chmaps, &snd->nchmaps); -+ if (!snd->nchmaps) -+ return 0; -+ -+ snd->chmaps = devm_kcalloc(&vdev->dev, snd->nchmaps, -+ sizeof(*snd->chmaps), GFP_KERNEL); -+ if (!snd->chmaps) -+ return -ENOMEM; -+ -+ rc = virtsnd_ctl_query_info(snd, VIRTIO_SND_R_CHMAP_INFO, 0, -+ snd->nchmaps, sizeof(*snd->chmaps), -+ snd->chmaps); -+ if (rc) -+ return rc; -+ -+ /* Count the number of channel maps per each PCM device/stream. */ -+ for (i = 0; i < snd->nchmaps; ++i) { -+ struct virtio_snd_chmap_info *info = &snd->chmaps[i]; -+ u32 nid = le32_to_cpu(info->hdr.hda_fn_nid); -+ struct virtio_pcm *vpcm; -+ struct virtio_pcm_stream *vs; -+ -+ vpcm = virtsnd_pcm_find_or_create(snd, nid); -+ if (IS_ERR(vpcm)) -+ return PTR_ERR(vpcm); -+ -+ switch (info->direction) { -+ case VIRTIO_SND_D_OUTPUT: -+ vs = &vpcm->streams[SNDRV_PCM_STREAM_PLAYBACK]; -+ break; -+ case VIRTIO_SND_D_INPUT: -+ vs = &vpcm->streams[SNDRV_PCM_STREAM_CAPTURE]; -+ break; -+ default: -+ dev_err(&vdev->dev, -+ "chmap #%u: unknown direction (%u)\n", i, -+ info->direction); -+ return -EINVAL; -+ } -+ -+ vs->nchmaps++; -+ } -+ -+ return 0; -+} -+ -+/** -+ * virtsnd_chmap_add_ctls() - Create an ALSA control for channel maps. -+ * @pcm: ALSA PCM device. -+ * @direction: PCM stream direction (SNDRV_PCM_STREAM_XXX). -+ * @vs: VirtIO PCM stream. -+ * -+ * Context: Any context. -+ * Return: 0 on success, -errno on failure. -+ */ -+static int virtsnd_chmap_add_ctls(struct snd_pcm *pcm, int direction, -+ struct virtio_pcm_stream *vs) -+{ -+ u32 i; -+ int max_channels = 0; -+ -+ for (i = 0; i < vs->nchmaps; i++) -+ if (max_channels < vs->chmaps[i].channels) -+ max_channels = vs->chmaps[i].channels; -+ -+ return snd_pcm_add_chmap_ctls(pcm, direction, vs->chmaps, max_channels, -+ 0, NULL); -+} -+ -+/** -+ * virtsnd_chmap_build_devs() - Build ALSA controls for channel maps. -+ * @snd: VirtIO sound device. -+ * -+ * Context: Any context. -+ * Return: 0 on success, -errno on failure. -+ */ -+int virtsnd_chmap_build_devs(struct virtio_snd *snd) -+{ -+ struct virtio_device *vdev = snd->vdev; -+ struct virtio_pcm *vpcm; -+ struct virtio_pcm_stream *vs; -+ u32 i; -+ int rc; -+ -+ /* Allocate channel map elements per each PCM device/stream. */ -+ list_for_each_entry(vpcm, &snd->pcm_list, list) { -+ for (i = 0; i < ARRAY_SIZE(vpcm->streams); ++i) { -+ vs = &vpcm->streams[i]; -+ -+ if (!vs->nchmaps) -+ continue; -+ -+ vs->chmaps = devm_kcalloc(&vdev->dev, vs->nchmaps + 1, -+ sizeof(*vs->chmaps), -+ GFP_KERNEL); -+ if (!vs->chmaps) -+ return -ENOMEM; -+ -+ vs->nchmaps = 0; -+ } -+ } -+ -+ /* Initialize channel maps per each PCM device/stream. */ -+ for (i = 0; i < snd->nchmaps; ++i) { -+ struct virtio_snd_chmap_info *info = &snd->chmaps[i]; -+ unsigned int channels = info->channels; -+ unsigned int ch; -+ struct snd_pcm_chmap_elem *chmap; -+ -+ vpcm = virtsnd_pcm_find(snd, le32_to_cpu(info->hdr.hda_fn_nid)); -+ if (IS_ERR(vpcm)) -+ return PTR_ERR(vpcm); -+ -+ if (info->direction == VIRTIO_SND_D_OUTPUT) -+ vs = &vpcm->streams[SNDRV_PCM_STREAM_PLAYBACK]; -+ else -+ vs = &vpcm->streams[SNDRV_PCM_STREAM_CAPTURE]; -+ -+ chmap = &vs->chmaps[vs->nchmaps++]; -+ -+ if (channels > ARRAY_SIZE(chmap->map)) -+ channels = ARRAY_SIZE(chmap->map); -+ -+ chmap->channels = channels; -+ -+ for (ch = 0; ch < channels; ++ch) { -+ u8 position = info->positions[ch]; -+ -+ if (position >= ARRAY_SIZE(g_v2a_position_map)) -+ return -EINVAL; -+ -+ chmap->map[ch] = g_v2a_position_map[position]; -+ } -+ } -+ -+ /* Create an ALSA control per each PCM device/stream. */ -+ list_for_each_entry(vpcm, &snd->pcm_list, list) { -+ if (!vpcm->pcm) -+ continue; -+ -+ for (i = 0; i < ARRAY_SIZE(vpcm->streams); ++i) { -+ vs = &vpcm->streams[i]; -+ -+ if (!vs->nchmaps) -+ continue; -+ -+ rc = virtsnd_chmap_add_ctls(vpcm->pcm, i, vs); -+ if (rc) -+ return rc; -+ } -+ } -+ -+ return 0; -+} -diff --git a/sound/virtio/virtio_pcm.h b/sound/virtio/virtio_pcm.h -index efd0228746cf..1353fdc9bd69 100644 ---- a/sound/virtio/virtio_pcm.h -+++ b/sound/virtio/virtio_pcm.h -@@ -63,10 +63,14 @@ struct virtio_pcm_substream { - * struct virtio_pcm_stream - VirtIO PCM stream. - * @substreams: VirtIO substreams belonging to the stream. - * @nsubstreams: Number of substreams. -+ * @chmaps: Kernel channel maps belonging to the stream. -+ * @nchmaps: Number of channel maps. - */ - struct virtio_pcm_stream { - struct virtio_pcm_substream **substreams; - u32 nsubstreams; -+ struct snd_pcm_chmap_elem *chmaps; -+ u32 nchmaps; - }; - - /** -- cgit 1.2.3-korg