From nobody Mon Dec 15 12:01:31 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1690805765; cv=none; d=zohomail.com; s=zohoarc; b=ZxKyd+sTVxV0Ks4KE4nUhq1Yxhwv/cwmyKAgAdePmYRXqqUPCkQxdptjRmPodcgvbshwz0MI9iv0niw0eDtYoVFBnX3BLdnvCjhsnXx24Vy7ZxD28ty9IEQnn84h09+N87ZN9vkd4psXvY9E03ZSq8tK62x/+K5sBEI5zVXrK18= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1690805765; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=IuPpDETKsd9EJlCiQj7fwJqFCPyxOJBlZOFnIaGXlq0=; b=UrzD4RrmECgGyGh7S+rHdIjPAApEVs3d9p+cqHM7ncj/4Jln7dxQ5wGvwqjZFCoPxoL//H8iuXpQn+I6b4KeGj1gAxh7hglj2FaWUP5Q/jACtAMKwkkbNJ9wjgOfZSaX9JsOADxIsQHNquz/F4Tt2OS1bddXRnuBXmS8krZR/FU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1690805765584501.6016156009629; Mon, 31 Jul 2023 05:16:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.572962.897139 (Exim 4.92) (envelope-from ) id 1qQRoQ-00042t-GD; Mon, 31 Jul 2023 12:15:46 +0000 Received: by outflank-mailman (output) from mailman id 572962.897139; Mon, 31 Jul 2023 12:15:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qQRoQ-00041L-BS; Mon, 31 Jul 2023 12:15:46 +0000 Received: by outflank-mailman (input) for mailman id 572962; Mon, 31 Jul 2023 12:15:45 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qQRoP-0003r6-Mc for xen-devel@lists.xenproject.org; Mon, 31 Jul 2023 12:15:45 +0000 Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [2a00:1450:4864:20::134]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id f90d4d6c-2f9b-11ee-8613-37d641c3527e; Mon, 31 Jul 2023 14:15:44 +0200 (CEST) Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-4fe0eb0ca75so7035137e87.2 for ; Mon, 31 Jul 2023 05:15:44 -0700 (PDT) Received: from rayden.urgonet (h-46-59-78-111.A175.priv.bahnhof.se. [46.59.78.111]) by smtp.gmail.com with ESMTPSA id l10-20020ac2430a000000b004fbb1bc1ae0sm2028077lfh.163.2023.07.31.05.15.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Jul 2023 05:15:42 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: f90d4d6c-2f9b-11ee-8613-37d641c3527e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690805743; x=1691410543; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IuPpDETKsd9EJlCiQj7fwJqFCPyxOJBlZOFnIaGXlq0=; b=iOTLKtvQETxTMalLcdecJT/sHdrrm5WB3/2sAZHm1rFIfG3n9EU4BTAhUbvsxZDs0t gPmZBjx/gwuRdAQIcIYmsgsgHt17Va1D2yzo2ILTG2UgC+iuyh/pvVkv6WJdDvYMyO8J P5FzTDyuSrRe5GLTEdfrwVcgdA1Y+mQV8bhRnuX/BWm5Z1F5xhxbQ3sngy6qx2/zZ5PM tCXbVOxC7N49qal9hJIXT4I1UoietrdrU6AzGjw0WbRJbMFQ09ZVM++yFiYWtxizQxMQ /cwIjb6CEY+87tKasTbAvDrsz4JO/TesBEIHUXppSepUxW5PZrg2dCyK4LRFMGujQdxl 7FYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690805743; x=1691410543; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IuPpDETKsd9EJlCiQj7fwJqFCPyxOJBlZOFnIaGXlq0=; b=Eluw1HOH88/eHc+/L93iR3NCQpMfTsCkyGVKtEJEYcHEU/9psUxG+o3z/Gd1d3hGyV PHlJh08uTyAazOHwOq41Z57NEUIK5W5KhMkjJ53xknDBiPF1JVN3NERyX/TMDK8exXmI 6fCDB8QSx8tmcl2D+BywgmzAGTxm/Dv1iJx5y/NOwZFPkiTK135vBbnwNFXinsaUmuRH 1BepTKgM5WsFYj6kBRpwFXBC5Y8YDjCvUK/PGLft+M9IhmM0LuFABJoDU+DoXrvryrP9 CpnLtJGU8NkIon/6YzZUf3YKNGIR8r/8Q4bkIgajatup8QZIE0tGm2Qmuu9FjnEmtx88 0Mqw== X-Gm-Message-State: ABy/qLayML9A2IhnkveqcYxR+wmxZfwCcJZC6VDapf6LKMRFT0yPBf7b 2vurS/FwFa8fKi/eWfEz6Ev7fJQCgN9SyBYKzu8= X-Google-Smtp-Source: APBJJlFGXJpsvWNFf2xF1DleAbjD+fJafx2vX2SmChqHWEBQGXJ9Ducp6skAwEtEmdTsL2U78f490Q== X-Received: by 2002:a19:ca44:0:b0:4fe:193c:de74 with SMTP id h4-20020a19ca44000000b004fe193cde74mr4900973lfj.18.1690805743019; Mon, 31 Jul 2023 05:15:43 -0700 (PDT) From: Jens Wiklander To: xen-devel@lists.xenproject.org Cc: Bertrand.Marquis@arm.com, Marc Bonnici , Achin Gupta , Jens Wiklander , Volodymyr Babchuk , Stefano Stabellini , Julien Grall , Bertrand Marquis Subject: [XEN PATCH v11 02/14] xen/arm: ffa: map SPMC rx/tx buffers Date: Mon, 31 Jul 2023 14:15:24 +0200 Message-Id: <20230731121536.934239-3-jens.wiklander@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230731121536.934239-1-jens.wiklander@linaro.org> References: <20230731121536.934239-1-jens.wiklander@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1690805766185100003 Content-Type: text/plain; charset="utf-8" When initializing the FF-A mediator map the RX and TX buffers shared with the SPMC. These buffer are later used to to transmit data that cannot be passed in registers only. Adds a check that the SP supports the needed FF-A features FFA_RXTX_MAP_64 and FFA_RXTX_UNMAP. Signed-off-by: Jens Wiklander Reviewed-by: Bertrand Marquis --- v10->v11 - Adding Reviewed-by: Bertrand Marquis --- xen/arch/arm/tee/ffa.c | 50 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/tee/ffa.c b/xen/arch/arm/tee/ffa.c index 961a8c052f59..072198a1326d 100644 --- a/xen/arch/arm/tee/ffa.c +++ b/xen/arch/arm/tee/ffa.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,12 @@ */ #define FFA_PAGE_SIZE SZ_4K =20 +/* + * The number of pages used for each of the RX and TX buffers shared with + * the SPMC. + */ +#define FFA_RXTX_PAGE_COUNT 1 + /* * Flags and field values used for the MSG_SEND_DIRECT_REQ/RESP: * BIT(31): Framework or partition message @@ -161,6 +168,13 @@ struct ffa_ctx { /* Negotiated FF-A version to use with the SPMC */ static uint32_t __ro_after_init ffa_version; =20 +/* + * Our rx/tx buffers shared with the SPMC. FFA_RXTX_PAGE_COUNT is the + * number of pages used in each of these buffers. + */ +static void *ffa_rx __read_mostly; +static void *ffa_tx __read_mostly; + static bool ffa_get_version(uint32_t *vers) { const struct arm_smccc_1_2_regs arg =3D { @@ -231,6 +245,12 @@ static bool check_mandatory_feature(uint32_t id) return !ret; } =20 +static int32_t ffa_rxtx_map(paddr_t tx_addr, paddr_t rx_addr, + uint32_t page_count) +{ + return ffa_simple_call(FFA_RXTX_MAP_64, tx_addr, rx_addr, page_count, = 0); +} + static uint16_t get_vm_id(const struct domain *d) { /* +1 since 0 is reserved for the hypervisor in FF-A */ @@ -394,6 +414,7 @@ static int ffa_relinquish_resources(struct domain *d) static bool ffa_probe(void) { uint32_t vers; + int e; unsigned int major_vers; unsigned int minor_vers; =20 @@ -441,12 +462,39 @@ static bool ffa_probe(void) * TODO: Rework the code to allow domain to use a subset of the * features supported. */ - if ( !check_mandatory_feature(FFA_MSG_SEND_DIRECT_REQ_32) ) + if ( + !check_mandatory_feature(FFA_RXTX_MAP_64) || + !check_mandatory_feature(FFA_RXTX_UNMAP) || + !check_mandatory_feature(FFA_MSG_SEND_DIRECT_REQ_32) ) + return false; + + ffa_rx =3D alloc_xenheap_pages(get_order_from_pages(FFA_RXTX_PAGE_COUN= T), 0); + if ( !ffa_rx ) return false; =20 + ffa_tx =3D alloc_xenheap_pages(get_order_from_pages(FFA_RXTX_PAGE_COUN= T), 0); + if ( !ffa_tx ) + goto err_free_ffa_rx; + + e =3D ffa_rxtx_map(__pa(ffa_tx), __pa(ffa_rx), FFA_RXTX_PAGE_COUNT); + if ( e ) + { + printk(XENLOG_ERR "ffa: Failed to map rxtx: error %d\n", e); + goto err_free_ffa_tx; + } ffa_version =3D vers; =20 return true; + +err_free_ffa_tx: + free_xenheap_pages(ffa_tx, 0); + ffa_tx =3D NULL; +err_free_ffa_rx: + free_xenheap_pages(ffa_rx, 0); + ffa_rx =3D NULL; + ffa_version =3D 0; + + return false; } =20 static const struct tee_mediator_ops ffa_ops =3D --=20 2.34.1