Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp6660236iob; Wed, 11 May 2022 02:31:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxupMe7yfXyl0d3Em+tY2OeQ5b9bQMcRYionlOUqvjQBI8JuE7nwu83GEZLM00qiDChPooi X-Received: by 2002:a17:907:9711:b0:6f4:6989:6afb with SMTP id jg17-20020a170907971100b006f469896afbmr24681348ejc.618.1652261502057; Wed, 11 May 2022 02:31:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652261502; cv=none; d=google.com; s=arc-20160816; b=Yi6IDzmxEeaePCKAOLdl5ble1zEdJCvV+cEQeMHCg3GqJW2OPXshgeLFhSLdemgRzo mCEUiHTnF7XqYWexgDvvV8Fls1m3T2Rx8Fdt+iIf4gGHUYHMqFDZClnmKClMuKzxGrvv 7pEPYylgkHLg498LLT+/B/5Swr987FsY0xDIXmEueDnRsaDXxST3BAtgFdWVtP3/A3fE yJM4mz6u57pNRpqhckGQEbmHiGzY5cG17y7MA1LQQrjUFMqB1XVoGxhRgmzOzBWtjK84 WTedq5yrQl8xy7i5qOXhq8VHf77t6MjnqlSDz9GOpklAeUl1gNVG7ov7Mt9UHwzI7fGs 3XoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from :dkim-signature; bh=JS0wQtwj/aI1mz6dCd4z6y/dqiOprbNP2cwtAwaTJck=; b=MVmn6yQGgN2ZR2h7OHLWm5Ab8dOuGKFbJozAZLeH74G82dDGwRsMSi5JJqkQGDFRSm B48vwAORWkmKeHtk9n6UvOgDX65+fZR+8WsEt4hWl0Gz5UM7Q6zEicHw+fIOXt2A2+kQ u+TCgzn4B//5XrtNKiShWvfkkE1jrBYKnHnQW5E3Ze6kmR3kBDSQAs1C7/erd7wLIfRg u+E4tyCvVTFTwNtXdIOsWL01Su0gJjuKcFEyB276D5yZDfuIRdpr7qh7dznp9KQMNDM4 +YsbpmmxMCbhsaDcLpEbDi3LqRleEMh1FILLA+JewejB9Cl9042UTJYkCpC2Rupzs+gO V7Xg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=zRDyEXMC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dd13-20020a1709069b8d00b006e7f5b1fb91si2144093ejc.370.2022.05.11.02.31.15; Wed, 11 May 2022 02:31:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=zRDyEXMC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235288AbiEKF53 (ORCPT + 99 others); Wed, 11 May 2022 01:57:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49972 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229568AbiEKF5Y (ORCPT ); Wed, 11 May 2022 01:57:24 -0400 Received: from alexa-out-sd-01.qualcomm.com (alexa-out-sd-01.qualcomm.com [199.106.114.38]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7AF9B4F9EE; Tue, 10 May 2022 22:57:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1652248643; x=1683784643; h=from:to:cc:subject:date:message-id:mime-version; bh=JS0wQtwj/aI1mz6dCd4z6y/dqiOprbNP2cwtAwaTJck=; b=zRDyEXMC5yr/kWra3Wz8CDLtnsCSEbVh75UyZIPXtzbq/gBk4wI52AA4 rcTtSXAzNsMc9GA7IHXdHLdrUBtBjYYrXmQEVOxFFA8Y5ngOQAYU3bzIf q4umUDuo4A5p4+8SsQ+O2VndKaLujRZQFCrCNhwKNXDf+JSM9GGmNyDSM o=; Received: from unknown (HELO ironmsg05-sd.qualcomm.com) ([10.53.140.145]) by alexa-out-sd-01.qualcomm.com with ESMTP; 10 May 2022 22:57:22 -0700 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg05-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2022 22:57:22 -0700 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Tue, 10 May 2022 22:57:22 -0700 Received: from blr-ubuntu-87.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Tue, 10 May 2022 22:57:18 -0700 From: Sibi Sankar To: , CC: , , , , , , , Sibi Sankar Subject: [PATCH v2] remoteproc: qcom_q6v5_mss: map/unmap metadata region before/after use Date: Wed, 11 May 2022 11:27:05 +0530 Message-ID: <1652248625-990-1-git-send-email-quic_sibis@quicinc.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The application processor accessing the dynamically assigned metadata region after assigning it to the remote Q6 would lead to an XPU violation. Fix this by un-mapping the metadata region post firmware header copy. The metadata region is freed only after the modem Q6 is done with fw header authentication. Signed-off-by: Sibi Sankar --- V2: * Fix error when MSS is built as a module [Kernel Test Bot] * Fixup cleanup errors drivers/remoteproc/qcom_q6v5_mss.c | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c index af217de75e4d..4b37e11fbb03 100644 --- a/drivers/remoteproc/qcom_q6v5_mss.c +++ b/drivers/remoteproc/qcom_q6v5_mss.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -932,27 +933,52 @@ static void q6v5proc_halt_axi_port(struct q6v5 *qproc, static int q6v5_mpss_init_image(struct q6v5 *qproc, const struct firmware *fw, const char *fw_name) { - unsigned long dma_attrs = DMA_ATTR_FORCE_CONTIGUOUS; + unsigned long dma_attrs = DMA_ATTR_FORCE_CONTIGUOUS | DMA_ATTR_NO_KERNEL_MAPPING; + unsigned long flags = VM_DMA_COHERENT | VM_FLUSH_RESET_PERMS; + struct page **pages; + struct page *page; dma_addr_t phys; void *metadata; int mdata_perm; int xferop_ret; size_t size; - void *ptr; + void *vaddr; + int count; int ret; + int i; metadata = qcom_mdt_read_metadata(fw, &size, fw_name, qproc->dev); if (IS_ERR(metadata)) return PTR_ERR(metadata); - ptr = dma_alloc_attrs(qproc->dev, size, &phys, GFP_KERNEL, dma_attrs); - if (!ptr) { + page = dma_alloc_attrs(qproc->dev, size, &phys, GFP_KERNEL, dma_attrs); + if (!page) { kfree(metadata); dev_err(qproc->dev, "failed to allocate mdt buffer\n"); return -ENOMEM; } - memcpy(ptr, metadata, size); + count = PAGE_ALIGN(size) >> PAGE_SHIFT; + pages = kmalloc_array(count, sizeof(struct page *), GFP_KERNEL); + if (!pages) { + ret = -ENOMEM; + goto free_dma_attrs; + } + + for (i = 0; i < count; i++) + pages[i] = nth_page(page, i); + + vaddr = vmap(pages, count, flags, pgprot_dmacoherent(PAGE_KERNEL)); + kfree(pages); + if (!vaddr) { + dev_err(qproc->dev, "unable to map memory region: %pa+%zx\n", &phys, size); + ret = -EBUSY; + goto free_dma_attrs; + } + + memcpy(vaddr, metadata, size); + + vunmap(vaddr); /* Hypervisor mapping to access metadata by modem */ mdata_perm = BIT(QCOM_SCM_VMID_HLOS); @@ -982,7 +1008,7 @@ static int q6v5_mpss_init_image(struct q6v5 *qproc, const struct firmware *fw, "mdt buffer not reclaimed system may become unstable\n"); free_dma_attrs: - dma_free_attrs(qproc->dev, size, ptr, phys, dma_attrs); + dma_free_attrs(qproc->dev, size, page, phys, dma_attrs); kfree(metadata); return ret < 0 ? ret : 0; -- 2.7.4