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 D444D2FF17B for ; Mon, 13 Oct 2025 10:04:27 +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=1760349869; cv=none; b=nKPceQ3v2fxmmpjjP1B+uJNbkfMiKisCQYg5HX5IUJ35HzQhe63/TWywi3FjHHrhYvFmmdu3AWa7NlxVu9z8oy79ybxtwUHp0lubXDDd/MWME3dJ60EZt9w9yo0tqVM7aQ+dwYJeNxY+eHRdh83zAdrJTlyb+dlYd0kbPoB+tf8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760349869; c=relaxed/simple; bh=VNLUfg0VTMrMLAfssDOHBS/ywOaH/J6hWRjnKH7tG0A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DMqTDLrMTLCODbP+dmeJzl7HXAuwDfWlHeQW7L3abCsChRXH3URcKSo8YMUPiu9gwla7hpHqUOVBa2AOFxr3WkLOUOIYs/qVfdYWuU86osYoIxZwmGFav8ha38RG9Lln7/Xzp6MLzdhEQ1AdjpxnabrLGHslw26G3oSi3MVJ378= 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=SnNLzU+i; 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="SnNLzU+i" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59D2n5gn010433 for ; Mon, 13 Oct 2025 10:04:27 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= KCuKX9XLPL59gzeynIkI5vcGYQyfxzjGKslvVQaoJJY=; b=SnNLzU+iaMBubhe/ dYgtEERFpo886G9lN+oHgvfDaCgWqQxx9xNdyu7RrlfXG0iqOhhcpMW1qx5EifAm sq+qAHTOlYhQF9JUSMcZ06DP3zquYqhXwfNJ0x2/w1ZKytBjoDpBe6NNLl7fUkIL s7/yzvtHgfZiIU/o4FwVRETUOvrAc33bmNq2K9usJbzXT5kudfKovfBUNNQSnXCJ NPBK9q8rd01lMk88WUbtaMOOob6cSTQAqizsMrDhSZPUJbY2/rBFrv00h6m2zc91 qTkRWpmJwkuErLH9jDik5L3cv1OENGzZWp0dBbmCm5COb0pGxMfoOTJad4eGiiC8 GUUTqw== Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 49qg0bv49a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 13 Oct 2025 10:04:27 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-792722e4ebeso7164380b3a.3 for ; Mon, 13 Oct 2025 03:04:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760349866; x=1760954666; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KCuKX9XLPL59gzeynIkI5vcGYQyfxzjGKslvVQaoJJY=; b=Pa3psoLQyPooer9uYR6MT35one4QpWKzjHK3rMr58JexciBg8XkTh3+TFC6shaRYQC CqHKTmIWNToq7XfBhrn9vhttL6uEBWSo+mJkr+z9F0+RANSvZlWuSTvmZo4IPqTGRZLU 0EsC9sHaPMsLHcLfJbBf25N78kMhfoTSmrJK4EPT2PBDp1K+xER8KFDbOs2uZDeLMv9g kwE6ud4b8tkazbJcii6J650ex3ssPegRQGKFtI4aipTXMAk6zNvPlGNaQ0ZC9cZN+7hA Jg8y35IWvg1tpWzo8SsWE5tukmbPMinlgvChQbUsIiRQfWWEu1KRBSEJLlLP7NzIokf5 CdQg== X-Forwarded-Encrypted: i=1; AJvYcCXNS1huCR+cXgTD0AmTOPq6pw8yqE1hLhmP4P8f0vVrYgQ6MyQ8t3rfYNJVGZl1oIZ0OzflIJPuKrW6@vger.kernel.org X-Gm-Message-State: AOJu0Yx9mwchuNN/cXO1x/NEociG+NLWIvVazdgJSlHr+rHPURmyXFnQ Bcm0IHgKeyaCuyVvDRUGxGsnmjlJ288c3qEKG1K1HmwO6CwmgVi0fAtJEGG81Zhmb1Nrz+bR8uH Eo1IW4uGgJz5lm6zmmksUaSsKz6OtnQc1Q9h7FdmpSds7uPToWbiHfSJxtwB/tURg X-Gm-Gg: ASbGncsEy4ZuCpodW2EKTAvc6RVZ+GH8XAIBMwOCoHkRaanrDqZ9f/q7iK+bHa1IrwB Usk+X1AO6WyPwLqsweUD7be7zjwZy73wg6gwBFpjjZfYJY80hfAzuFVQGXsFZ+OLfPFUW5ZnW2I TlJOtGm/GeLkIYR5iKnFiibP31krIrNNOK6m8xsHX9LkHDxP/kzbFGQd98ROl6KYfb5juMoZD9V fTDKkFb5fQoCmAEGq8+DqN0oM8MMaqZ1SkOoZCcCaRTeUSAUqRTnyqlHWdOYgs0P9hIx1Aguu/7 15nLfMbWNhkK6cEGDnNm9z6oXfDybReTGwOZZmJ2GCmhODBuhFU8W8e0VI1sPftGANo= X-Received: by 2002:a05:6a00:cd3:b0:781:27f8:d2e7 with SMTP id d2e1a72fcca58-79385ce1171mr22405047b3a.10.1760349865989; Mon, 13 Oct 2025 03:04:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFwKFN5Yiqp2cQ01LwFms3qJjhy7wGHDj+GAyroqt4GpVGhRA0gNrqB6LOzar1OB3V2kYCqPA== X-Received: by 2002:a05:6a00:cd3:b0:781:27f8:d2e7 with SMTP id d2e1a72fcca58-79385ce1171mr22405006b3a.10.1760349865301; Mon, 13 Oct 2025 03:04:25 -0700 (PDT) Received: from hu-mojha-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7992d5b8672sm10981657b3a.69.2025.10.13.03.04.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Oct 2025 03:04:25 -0700 (PDT) From: Mukesh Ojha Date: Mon, 13 Oct 2025 15:33:15 +0530 Subject: [PATCH v5 11/13] remoteproc: pas: Extend parse_fw callback to fetch resources via SMC call Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20251013-kvm_rprocv5-v5-11-d609ed766061@oss.qualcomm.com> References: <20251013-kvm_rprocv5-v5-0-d609ed766061@oss.qualcomm.com> In-Reply-To: <20251013-kvm_rprocv5-v5-0-d609ed766061@oss.qualcomm.com> To: Bryan O'Donoghue , Bjorn Andersson , Mathieu Poirier , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Manivannan Sadhasivam , Konrad Dybcio Cc: linux-arm-msm@vger.kernel.org, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Mukesh Ojha X-Mailer: b4 0.14-dev-f7c49 X-Developer-Signature: v=1; a=ed25519-sha256; t=1760349819; l=4665; i=mukesh.ojha@oss.qualcomm.com; s=20250708; h=from:subject:message-id; bh=VNLUfg0VTMrMLAfssDOHBS/ywOaH/J6hWRjnKH7tG0A=; b=Hs0YWDva1dXdF1lXvU2TISdQhUfia8JQNTUeedOomuY7gru/DCU/Maw5FuqqO3Pt1lvS6bhxN hfHDTbHvu+ECLirErqtB9TiZKUyLcMkI1blaL5YCCjzckeOxPEDm6kJ X-Developer-Key: i=mukesh.ojha@oss.qualcomm.com; a=ed25519; pk=eX8dr/7d4HJz/HEXZIpe3c+Ukopa/wZmxH+5YV3gdNc= X-Proofpoint-GUID: wKdBlHO75tiI31DoALUIQXiUGdsWyBkr X-Proofpoint-ORIG-GUID: wKdBlHO75tiI31DoALUIQXiUGdsWyBkr X-Authority-Analysis: v=2.4 cv=eaIwvrEH c=1 sm=1 tr=0 ts=68ecceab cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=x6icFKpwvdMA:10 a=EUspDBNiAAAA:8 a=KMz1R6K7GWUeRkMKapkA:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDExMDAyMiBTYWx0ZWRfX/pXySj9kwB22 B6OrTQVvbNjmVdDYi911rf+5akOdTLAXuxUJgdUqEGASmXY91iE9SbUDopgZSHDSPYANp+zMmS/ xRTk0AbQjvjL0U4W1EIzp/J5CBMR5HRdZYkshZ+27d4yrsMOtEoKIFLEO6aQGPG5+f2lYLrwui8 U7seUKdPxjg5ekbN30q1huPxT0B3nbse6sxxf7UU8Xqye9pMIeV/FOhSQTrGga//MppLP0UzuLG lOLpMnm63utDxCtZ0RPEohbANPnFWYSPmnUNcX8WGwU/k2TUikce5HPSNGJJ6OWOVSf6eErbfp+ YaXiRlC4CXiOFYQ7gq5SgQFQuPPPzfKo14seEctP+iQfKSCNfhwdXTHoBuatfgNC001QzVqry+A U/6NFJox1u1toNyc3daoCJiGc55Ctw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-10-13_03,2025-10-06_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 priorityscore=1501 spamscore=0 impostorscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510020000 definitions=main-2510110022 Qualcomm remote processor may rely on static and dynamic resources for it to be functional. For most of the Qualcomm SoCs, when run with Gunyah or older QHEE hypervisor, all the resources whether it is static or dynamic, is managed by the hypervisor. Dynamic resources if it is present for a remote processor will always be coming from secure world via SMC call while static resources may be present in remote processor firmware binary or it may be coming from SMC call along with dynamic resources. Remoteproc already has method like rproc_elf_load_rsc_table() to check firmware binary has resources or not and if it is not having then we pass NULL and zero as input resource table and its size argument respectively to qcom_scm_pas_get_rsc_table() and while it has resource present then it should pass the present resources to Trustzone(TZ) so that it could authenticate the present resources and append dynamic resource to return in output_rt argument along with authenticated resources. Extend parse_fw callback to include SMC call to get resources from Trustzone and to leverage resource table parsing and mapping and unmapping code from the remoteproc framework. Signed-off-by: Mukesh Ojha --- drivers/remoteproc/qcom_q6v5_pas.c | 60 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index ee0ea35803c6..1944df49893f 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -34,6 +34,7 @@ #define QCOM_PAS_DECRYPT_SHUTDOWN_DELAY_MS 100 #define MAX_ASSIGN_COUNT 3 +#define MAX_RSCTABLE_SIZE SZ_16K struct qcom_pas_data { int crash_reason_smem; @@ -413,6 +414,61 @@ static void *qcom_pas_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is return pas->mem_region + offset; } +static int qcom_pas_parse_firmware(struct rproc *rproc, const struct firmware *fw) +{ + size_t output_rt_size = MAX_RSCTABLE_SIZE; + struct qcom_pas *pas = rproc->priv; + struct resource_table *table = NULL; + void *output_rt; + size_t table_sz; + int ret; + + ret = qcom_register_dump_segments(rproc, fw); + if (ret) { + dev_err(pas->dev, "Error in registering dump segments\n"); + return ret; + } + + if (!rproc->has_iommu) + return ret; + + ret = rproc_elf_load_rsc_table(rproc, fw); + if (ret) + dev_info(&rproc->dev, "Error in loading resource table from firmware\n"); + + table = rproc->table_ptr; + table_sz = rproc->table_sz; + + /* + * Qualcomm remote processor may rely on static and dynamic resources for + * it to be functional. For most of the Qualcomm SoCs, when run with Gunyah + * or older QHEE hypervisor, all the resources whether it is static or dynamic, + * is managed by present hypervisor. Dynamic resources if it is present for + * a remote processor will always be coming from secure world via SMC call + * while static resources may be present in remote processor firmware binary + * or it may be coming from SMC call along with dynamic resources. + * + * Here, we call rproc_elf_load_rsc_table() to check firmware binary has resources + * or not and if it is not having then we pass NULL and zero as input resource + * table pointer and size respectively to the argument of qcom_scm_pas_get_rsc_table() + * and this is even true for Qualcomm remote processor who does follow remoteproc + * framework. + */ + ret = qcom_scm_pas_get_rsc_table(pas->pas_ctx, table, table_sz, &output_rt, + &output_rt_size); + if (ret) { + dev_err(pas->dev, "Error in getting resource table: %d\n", ret); + return ret; + } + + kfree(rproc->cached_table); + rproc->cached_table = output_rt; + rproc->table_ptr = rproc->cached_table; + rproc->table_sz = output_rt_size; + + return ret; +} + static unsigned long qcom_pas_panic(struct rproc *rproc) { struct qcom_pas *pas = rproc->priv; @@ -425,7 +481,7 @@ static const struct rproc_ops qcom_pas_ops = { .start = qcom_pas_start, .stop = qcom_pas_stop, .da_to_va = qcom_pas_da_to_va, - .parse_fw = qcom_register_dump_segments, + .parse_fw = qcom_pas_parse_firmware, .load = qcom_pas_load, .panic = qcom_pas_panic, }; @@ -435,7 +491,7 @@ static const struct rproc_ops qcom_pas_minidump_ops = { .start = qcom_pas_start, .stop = qcom_pas_stop, .da_to_va = qcom_pas_da_to_va, - .parse_fw = qcom_register_dump_segments, + .parse_fw = qcom_pas_parse_firmware, .load = qcom_pas_load, .panic = qcom_pas_panic, .coredump = qcom_pas_minidump, -- 2.50.1