From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C50B53DB332 for ; Mon, 27 Jul 2026 07:10:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785136261; cv=none; b=clNgaM1vN/OtuBWGQ/pTnRARfe9nDVNe1RDhb03Ixgi4YfSysSAHkSbF3C9FOhI4cIAp+Dv+tnnM7U+IlR1c46g4wCmXoNDPOZWLMTIkmw63mPvkfqvkPYLoKXrLhH8L2J7KYEp/utzjTsD1dLcY9emvIV89spaKd5HAY7n91j8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785136261; c=relaxed/simple; bh=zFBKrhK2pwXaG3WNgdlDnhSSB8c0jrON3i7enZymGB8=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=fqkDE9zL8F/G2UZV6+vQphUu5Ixctaz0aPW6ofTbihyPExYYL+sEViLKTkdAtJzsOy/7aNX482g1TbVVXfwfDRgVnDCvsooK2lc920aPqYj5wmHhCXO/zTNqBdBDMZI8WG7RgBuBUpQyXqXmuVjwNmz01bP1n43f3MGZXva1D34= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Ny/2z2x+; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Y8qlmoZL; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Ny/2z2x+"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Y8qlmoZL" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66R1gmTe2177217 for ; Mon, 27 Jul 2026 07:10:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= llsXN0N3BdtWqiMXZg7L9PFfjnaDu3GJ9CPFx7LxGYQ=; b=Ny/2z2x+MJTejbam kCCQNttTzWmqvpsp3OW17+bN3aN9crFbrwBBdhmiOq+u8/ugo+PxMhUC2ZFz5/hy 56f5Dj4frBgSYq1LTZPeBo5nUfqf/zkyS984nxPBsGlphtbDCXkqw5NAJCTPGx3w mCkINWOTlFnRjE1n3xvExPQbpjznUF0czx0i+lO6hfnzS5VDNEeVxle+aNdXXhEW adkidbY/mpb25HQXzpxReSaVlIg4Du4B9jqldXvtjuuupTDZa7L4euWsJP0jR1Lh 28LZ+TsXxAE9CY1aLbmKwCvXBjgT5fjAg3gmFoSdA7vrAaJypM/AVx7nkHFwRMhI yICr8g== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fmnwevt9j-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 27 Jul 2026 07:10:58 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cceabd70f5so68977755ad.1 for ; Mon, 27 Jul 2026 00:10:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1785136258; x=1785741058; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to :content-type; bh=llsXN0N3BdtWqiMXZg7L9PFfjnaDu3GJ9CPFx7LxGYQ=; b=Y8qlmoZLFjKnzKDAbAqK60BNjYafsgCNQUiOsFQFdNNIvfjCJ7fPHX2+yu3eL46THG YZJUBnheXLkuZkSg0RZnpTXGXJy5L42nRuZYgdgrR7F+emgM4aiC1eyTNUihEYtx381s K/D/HkjM3P2TZRsHg1dFghjfp0u/T2Sg5qCDuJJ0ruFDkCdd/GP2+DuXZWdEYatPHUXa FS6a+4FQ4XwOz9iJfpX2KHImxGAFrsa0120riElkODL7Zo53n3WQzBB/Q25YwVAIVYfu 9iriCwkHTkd07Y0N+RSKWEHQlj+/258wAcP/g2GlxpjnCFPLHPvsO6U04eJUIrmb7uJD Npuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785136258; x=1785741058; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=llsXN0N3BdtWqiMXZg7L9PFfjnaDu3GJ9CPFx7LxGYQ=; b=FY8X8RiWWdJE2Gl2FvnuEUhxm6kSzMppoYgmUegOYdi+DnddTLa0z6n5nA+cnVsoJB iFUh+jqBwwzieU7AWQCw22mR2lQSGi34NS2F9N16oFrytJnXg8YRR2Bw3kI3LCHvloou GsUCLjxpaUz/JLYNc6LhbLo2895ncm/FaCW9NjJC+QfsdZJ2egnDnfekW09RK1dfFPYE s7q79RhFbZbuawfmLiDhVmj06+Jjt+AX+yJv6rYZBTwafTo8vfGl+mXqe3pMGMsYZHq5 MMP30daRBI5HYY026hIQEh/ZsaAtNqex1PtkabNSxn8inEkT9J7j49K8gHIqGuEzXs74 w9cQ== X-Forwarded-Encrypted: i=1; AHgh+RpbW5MaNKBz58ed4+xoQWVlGArVdS50fW8qU/4hXTJBmrweb+Hu3htfL93GQkvGBsfvNWhEQm8U2ZSUdzs=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4yHtMsiQB82a+vf+tjhv7GOjGYb9NC2Z6/ZPieJnAaWmDgBQ9 MMv8w+1TGy0txnNg/KF2ZNm1OxHOAAoE8gUOailBv9tJfXUYrEaPBJYZLv+uHrN+rwYp1xQZc8L R8VAroDTZaZz1w4GqryLAjJj9LQVHdKcm+YuxDow7E5s2Hjs3t/ezQgQQAdk5OSI/5R8= X-Gm-Gg: AR+sD11BYfskX2fb9ONdhFlN0H8I2cBLKtwowsZ0V5rCY1IlOhVTSno/LE8xBjfmbWZ Hx6NNOSRORWRMFAlxmRAC6UKU4eNB9EcPQgz3SO9OuUxPiUBQAUeL8Sxu31Dy3fc2S+gOryJNB+ HTXOr4ZVyswhddMFPS7LG+teuN+heJXGrvzXWRkMtpkhiv/LZkYTaNaCBf+BWiGtwl/TIDzYb0j VUkgrvoAHp06DfXa6V4Q907vQycs63Mh4UIwJVtVeE4D4FvcQo6QpJV5yN/e8tRIds7Yppwz4mz N5p7XDq6ekkBdvvrgoVwT9/+qCgl7d72DkZKlxiy5JN4NKWjTkcWFJF16i91yQDnqhSa26agNo0 8I58UDyv69ScGiOrpaNOiz15I X-Received: by 2002:a17:903:2412:b0:2c1:98b7:ecf3 with SMTP id d9443c01a7336-2cfde851de6mr69686085ad.23.1785136258139; Mon, 27 Jul 2026 00:10:58 -0700 (PDT) X-Received: by 2002:a17:903:2412:b0:2c1:98b7:ecf3 with SMTP id d9443c01a7336-2cfde851de6mr69685855ad.23.1785136257729; Mon, 27 Jul 2026 00:10:57 -0700 (PDT) Received: from [10.206.98.126] ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cfde59b8d6sm29863575ad.3.2026.07.27.00.10.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Jul 2026 00:10:57 -0700 (PDT) Message-ID: Date: Mon, 27 Jul 2026 12:40:52 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] misc: fastrpc: map ADSP remote heap into remoteproc IOMMU domain To: Ekansh Gupta , Srinivas Kandagatla , Amol Maheshwari , Arnd Bergmann , Greg Kroah-Hartman Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, quic_bkumar@quicinc.com, quic_chennak@quicinc.com References: <20260618-audio_fix_clean_v3-v1-1-ec1ee66fe455@oss.qualcomm.com> Content-Language: en-US From: Anandu Krishnan E In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI3MDA2OSBTYWx0ZWRfX0aGiyrMmY4Nv Y3dY7wLTuVFQMGjpNenyZf+RWU6yVaaUaRwYDGMUo/Weg5siXKkhpIbCWVoxinKKWB/H2/ScsZe uSvOj/0H1jOI5TfR22Q4OGAtCnK19AkqzdpgT9tGdMvLjSsHQ/OtU2LgNDuACxVELXvyefptowc K2QL2lxn4ct9sxesJn3beEXVKpBQLKM++rg+ZOg5VefOnHr09uSLxzEvN1Gnek2+jWuDqlLOlPl PBhpgljWX061wX/jEzAmvYX7BxjHVS3/ic+RV+fm6vnuHeF0EqSqz+mxV+Kjb33vqjO+AoLQUTw vD7iisOr5gcSz9gYN/zqX5s0rARKx8tn1/9Gliu+hfe8LpJI61VZPyBBxE8dlair4LW+e4P6zEb Ot4ihBTgP66+0Eqx5fViSl0023EgkdrzhKZInz/JjTRESZYYQZIvyA/SrbAiC72mqPmXnYP81rn GvXvBayAXG2iFLTPeyw== X-Proofpoint-GUID: vWaJIfoDFugDxbg686WY6lnTMC7Meow8 X-Authority-Analysis: v=2.4 cv=S77pBosP c=1 sm=1 tr=0 ts=6a670482 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=PhU69RS8PR5OjDqLnIAA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-ORIG-GUID: vWaJIfoDFugDxbg686WY6lnTMC7Meow8 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI3MDA2OSBTYWx0ZWRfX/Ctjom/Pbo1i N45Lcp5ltMxTUs01DpUH8eEH/6mrbfXR/FR5EVZiaaXKsPQR/jlkp1ecNeZMd85b4cheAoz7nIo 88Rb4AFPufNqXdQDa0679AaWeC2VZaU= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-27_01,2026-07-24_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 suspectscore=0 phishscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607270069 On 27-07-2026 12:19 pm, Ekansh Gupta wrote: > On 18-06-2026 15:21, Anandu Krishnan E wrote: >> On KVM-based targets the kernel runs at EL2 without a separate >> hypervisor to manage inter-VM memory access control. In this >> configuration the remoteproc is assigned its own IOMMU domain, and >> any memory carveout the DSP must access requires an explicit mapping >> into that domain before the DSP can reach it. >> >> The existing code calls qcom_scm_assign_mem() to transfer ownership >> of the ADSP remote heap carveout from HLOS to the DSP VM. This SCM >> call is only meaningful when a separate hypervisor (e.g. Gunyah) is >> present to enforce inter-VM memory access control. On KVM-based >> targets no such hypervisor exists, so the carveout must instead be >> mapped into the remoteproc's IOMMU domain via an identity mapping >> (IOVA == PA) using iommu_map(). Without this mapping the DSP >> triggers an SMMU translation fault when accessing the remote heap >> during audio PD static process creation. >> >> Detect whether the remoteproc has an IOMMU by checking for the >> "iommus" property on the remoteproc DT node and store the result in >> a new has_iommu flag in fastrpc_channel_ctx. When the flag is set, >> map the carveout into the remoteproc's IOMMU domain instead of >> calling qcom_scm_assign_mem(). Introduce fastrpc_remote_heap_map() >> and fastrpc_remote_heap_unmap() helpers to encapsulate the IOMMU >> domain lookup and map/unmap operations. >> >> This change relies on the remote heap handling introduced in: >> https://lore.kernel.org/r/20260609025938.457-1-jianping.li@oss.qualcomm.com >> >> Link: https://lore.kernel.org/r/20260609025938.457-1-jianping.li@oss.qualcomm.com >> Signed-off-by: Anandu Krishnan E >> --- >> This patch depends on: >> >> [PATCH v8 0/4] misc: fastrpc: Add missing bug fixes >> https://lore.kernel.org/r/20260609025938.457-1-jianping.li@oss.qualcomm.com >> >> Please apply after that series. >> --- >> drivers/misc/fastrpc.c | 141 +++++++++++++++++++++++++++++++++++++++---------- >> 1 file changed, 114 insertions(+), 27 deletions(-) >> >> diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c >> index a5af901c1cb8..9ce7af2091f1 100644 >> --- a/drivers/misc/fastrpc.c >> +++ b/drivers/misc/fastrpc.c >> @@ -21,6 +21,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> >> @@ -285,6 +286,8 @@ struct fastrpc_channel_ctx { >> struct list_head invoke_interrupted_mmaps; >> bool secure; >> bool unsigned_support; >> + /* set when remoteproc has an IOMMU; use iommu_map instead of hyp_assign */ >> + bool has_iommu; > maybe something like use_iommu_map will be more meaningful here?> u64 > dma_mask; sure will update  >> const struct fastrpc_soc_data *soc_data; >> }; >> @@ -2343,10 +2346,65 @@ static const struct fastrpc_soc_data default_soc_data = { >> .dma_addr_bits_default = 32, >> }; >> >> +static int fastrpc_remote_heap_map(struct device *rdev, >> + struct device_node *rproc_node, >> + struct fastrpc_buf *heap) >> +{ >> + struct platform_device *rproc_pdev; >> + struct iommu_domain *domain; >> + int ret; >> + >> + rproc_pdev = of_find_device_by_node(rproc_node); >> + if (!rproc_pdev) { >> + dev_err(rdev, "failed to find remoteproc platform device\n"); >> + return -ENODEV; >> + } >> + >> + domain = iommu_get_domain_for_dev(&rproc_pdev->dev); >> + if (!domain) { >> + put_device(&rproc_pdev->dev); >> + dev_err(rdev, "no IOMMU domain for remoteproc\n"); >> + return -ENODEV; >> + } >> + >> + ret = iommu_map(domain, heap->dma_addr, heap->dma_addr, heap->size, >> + IOMMU_READ | IOMMU_WRITE, GFP_KERNEL); >> + if (ret) >> + dev_err(rdev, "failed to map remote heap phys=0x%llx size=0x%llx err=%d\n", >> + heap->dma_addr, heap->size, ret); >> + >> + put_device(&rproc_pdev->dev); >> + return ret; >> +} >> + >> +static void fastrpc_remote_heap_unmap(struct rpmsg_device *rpdev, >> + struct fastrpc_buf *heap) >> +{ >> + struct device_node *rproc_node; >> + struct platform_device *rproc_pdev; >> + struct iommu_domain *domain; >> + >> + rproc_node = of_get_parent(of_get_parent(rpdev->dev.of_node)); >> + if (!rproc_node) >> + return; >> + >> + rproc_pdev = of_find_device_by_node(rproc_node); >> + of_node_put(rproc_node); >> + if (!rproc_pdev) >> + return; >> + >> + domain = iommu_get_domain_for_dev(&rproc_pdev->dev); >> + if (domain) >> + iommu_unmap(domain, heap->dma_addr, heap->size); >> + >> + put_device(&rproc_pdev->dev); >> +} >> + >> static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) >> { >> struct device *rdev = &rpdev->dev; >> struct fastrpc_channel_ctx *data; >> + struct device_node *rproc_node; >> int i, err, domain_id = -1, vmcount; >> const char *domain; >> bool secure_dsp; >> @@ -2390,9 +2448,12 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) >> } >> } >> >> + rproc_node = of_get_parent(of_get_parent(rdev->of_node)); >> + if (rproc_node) >> + data->has_iommu = of_property_present(rproc_node, "iommus"); >> + >> if (domain_id == SDSP_DOMAIN_ID || domain_id == ADSP_DOMAIN_ID) { >> struct resource res; >> - u64 src_perms; >> >> err = of_reserved_mem_region_to_resource(rdev->of_node, 0, &res); >> if (!err) { >> @@ -2401,21 +2462,41 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) >> kzalloc_obj(*data->remote_heap, GFP_KERNEL); >> if (!data->remote_heap) { >> err = -ENOMEM; >> - goto err_free_data; >> + goto err_put_node; >> } >> >> data->remote_heap->dma_addr = res.start; >> data->remote_heap->size = resource_size(&res); >> + >> + if (data->has_iommu) { >> + err = fastrpc_remote_heap_map(rdev, >> + rproc_node, >> + data->remote_heap); >> + if (err) { >> + kfree(data->remote_heap); >> + data->remote_heap = NULL; >> + goto err_put_node; >> + } >> + } >> } >> - src_perms = BIT(QCOM_SCM_VMID_HLOS); >> >> - err = qcom_scm_assign_mem(res.start, resource_size(&res), &src_perms, >> - data->vmperms, data->vmcount); >> - if (err) >> - goto err_free_data; >> + if (!data->has_iommu) { >> + u64 src_perms = BIT(QCOM_SCM_VMID_HLOS); >> + >> + err = qcom_scm_assign_mem(res.start, >> + resource_size(&res), >> + &src_perms, >> + data->vmperms, >> + data->vmcount); >> + if (err) >> + goto err_put_node; >> + } >> } >> } >> >> + of_node_put(rproc_node); >> + rproc_node = NULL; >> + >> secure_dsp = !(of_property_read_bool(rdev->of_node, "qcom,non-secure-domain")); >> data->secure = secure_dsp; >> data->soc_data = soc_data; >> @@ -2471,6 +2552,9 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) >> if (data->secure_fdevice) >> misc_deregister(&data->secure_fdevice->miscdev); >> >> +err_put_node: >> + of_node_put(rproc_node); >> + >> err_free_data: >> kfree(data->remote_heap); >> kfree(data); >> @@ -2513,28 +2597,31 @@ static void fastrpc_rpmsg_remove(struct rpmsg_device *rpdev) >> list_for_each_entry_safe(buf, b, &cctx->invoke_interrupted_mmaps, node) >> list_del(&buf->node); >> >> - if (cctx->remote_heap && cctx->vmcount) { >> - u64 src_perms = 0; >> - struct qcom_scm_vmperm dst_perms; >> - >> - for (u32 i = 0; i < cctx->vmcount; i++) >> - src_perms |= BIT(cctx->vmperms[i].vmid); >> - >> - dst_perms.vmid = QCOM_SCM_VMID_HLOS; >> - dst_perms.perm = QCOM_SCM_PERM_RWX; >> - >> - err = qcom_scm_assign_mem(cctx->remote_heap->dma_addr, >> - cctx->remote_heap->size, &src_perms, >> - &dst_perms, 1); >> - if (err) >> - dev_err(&rpdev->dev, >> - "Failed to assign memory back to HLOS: dma_addr %pad size %#llx err %d\n", >> - &cctx->remote_heap->dma_addr, cctx->remote_heap->size, err); >> + if (cctx->remote_heap) { >> + if (cctx->has_iommu) { >> + fastrpc_remote_heap_unmap(rpdev, cctx->remote_heap); >> + kfree(cctx->remote_heap); >> + cctx->remote_heap = NULL; >> + } else if (cctx->vmcount) { >> + u64 src_perms = 0; >> + struct qcom_scm_vmperm dst_perms; >> + >> + for (u32 i = 0; i < cctx->vmcount; i++) >> + src_perms |= BIT(cctx->vmperms[i].vmid); >> + >> + dst_perms.vmid = QCOM_SCM_VMID_HLOS; >> + dst_perms.perm = QCOM_SCM_PERM_RWX; >> + >> + err = qcom_scm_assign_mem(cctx->remote_heap->dma_addr, >> + cctx->remote_heap->size, >> + &src_perms, &dst_perms, 1); >> + if (!err) { >> + kfree(cctx->remote_heap); >> + cctx->remote_heap = NULL; > why is this needed under error check? Won't it lead to memory leak? > + } > yes , will udpate and share new version >> + } >> } >> >> - kfree(cctx->remote_heap); >> - cctx->remote_heap = NULL; >> - >> of_platform_depopulate(&rpdev->dev); >> >> fastrpc_channel_ctx_put(cctx); >> >> --- >> base-commit: f1256704b88067430e255e5c85d6b727e1bbb2ea >> change-id: 20260618-audio_fix_clean_v3-9df607546095 >> >> Best regards, >> -- >> Anandu Krishnan E >>