All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sudeep Holla <sudeep.holla@arm.com>
To: linux-kernel@vger.kernel.org, op-tee@lists.trustedfirmware.org
Cc: Sudeep Holla <sudeep.holla@arm.com>,
	Marc Bonnici <marc.bonnici@arm.com>,
	Achin Gupta <achin.gupta@arm.com>,
	Jens Wiklander <jens.wiklander@linaro.org>,
	Valentin Laurent <valentin.laurent@trustonic.com>,
	Lukas Hanel <lukas.hanel@trustonic.com>,
	Coboy Chen <coboy.chen@mediatek.com>
Subject: [PATCH 7/9] firmware: arm_ffa: Add v1.1 get_partition_info support
Date: Tue, 30 Aug 2022 11:06:58 +0100	[thread overview]
Message-ID: <20220830100700.344594-8-sudeep.holla@arm.com> (raw)
In-Reply-To: <20220830100700.344594-1-sudeep.holla@arm.com>

FF-A v1.1 adds support to discovery the UUIDs of the partitions that was
missing in v1.0 and which the driver workarounds by using UUIDs supplied
by the ffa_drivers.

Add the v1.1 get_partition_info support and disable the workaround if
the detected FF-A version is greater than v1.0.

Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/firmware/arm_ffa/driver.c | 39 ++++++++++++++++++++++++-------
 include/linux/arm_ffa.h           |  1 +
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
index 5c8484b05c50..6822241168d6 100644
--- a/drivers/firmware/arm_ffa/driver.c
+++ b/drivers/firmware/arm_ffa/driver.c
@@ -264,18 +264,24 @@ static int ffa_rxtx_unmap(u16 vm_id)
 	return 0;
 }
 
+#define PARTITION_INFO_GET_RETURN_COUNT_ONLY	BIT(0)
+
 /* buffer must be sizeof(struct ffa_partition_info) * num_partitions */
 static int
 __ffa_partition_info_get(u32 uuid0, u32 uuid1, u32 uuid2, u32 uuid3,
 			 struct ffa_partition_info *buffer, int num_partitions)
 {
-	int count;
+	int idx, count, flags = 0, size;
 	ffa_value_t partition_info;
 
+	if (!buffer || !num_partitions) /* Just get the count for now */
+		flags = PARTITION_INFO_GET_RETURN_COUNT_ONLY;
+
 	mutex_lock(&drv_info->rx_lock);
 	invoke_ffa_fn((ffa_value_t){
 		      .a0 = FFA_PARTITION_INFO_GET,
 		      .a1 = uuid0, .a2 = uuid1, .a3 = uuid2, .a4 = uuid3,
+		      .a5 = flags,
 		      }, &partition_info);
 
 	if (partition_info.a0 == FFA_ERROR) {
@@ -285,8 +291,15 @@ __ffa_partition_info_get(u32 uuid0, u32 uuid1, u32 uuid2, u32 uuid3,
 
 	count = partition_info.a2;
 
+	if (drv_info->version > FFA_VERSION_1_0)
+		size = partition_info.a3;
+	else
+		size = 8; /* FFA_VERSION_1_0 lacks size in the response */
+
 	if (buffer && count <= num_partitions)
-		memcpy(buffer, drv_info->rx_buffer, sizeof(*buffer) * count);
+		for (idx = 0; idx < count; idx++)
+			memcpy(buffer + idx, drv_info->rx_buffer + idx * size,
+			       size);
 
 	ffa_rx_release();
 
@@ -678,6 +691,14 @@ void ffa_device_match_uuid(struct ffa_device *ffa_dev, const uuid_t *uuid)
 	int count, idx;
 	struct ffa_partition_info *pbuf, *tpbuf;
 
+	/*
+	 * FF-A v1.1 provides UUID for each partition as part of the discovery
+	 * API, the discovered UUID must be populated in the device's UUID and
+	 * there is no need to copy the same from the driver table.
+	 */
+	if (drv_info->version > FFA_VERSION_1_0)
+		return;
+
 	count = ffa_partition_probe(uuid, &pbuf);
 	if (count <= 0)
 		return;
@@ -691,6 +712,7 @@ void ffa_device_match_uuid(struct ffa_device *ffa_dev, const uuid_t *uuid)
 static void ffa_setup_partitions(void)
 {
 	int count, idx;
+	uuid_t uuid;
 	struct ffa_device *ffa_dev;
 	struct ffa_partition_info *pbuf, *tpbuf;
 
@@ -701,14 +723,15 @@ static void ffa_setup_partitions(void)
 	}
 
 	for (idx = 0, tpbuf = pbuf; idx < count; idx++, tpbuf++) {
-		/* Note that the &uuid_null parameter will require
+		import_uuid(&uuid, (u8 *)tpbuf->uuid);
+
+		/* Note that the UUID will be uuid_null and that will require
 		 * ffa_device_match() to find the UUID of this partition id
-		 * with help of ffa_device_match_uuid(). Once the FF-A spec
-		 * is updated to provide correct UUID here for each partition
-		 * as part of the discovery API, we need to pass the
-		 * discovered UUID here instead.
+		 * with help of ffa_device_match_uuid(). FF-A v1.1 and above
+		 * provides UUID here for each partition as part of the
+		 * discovery API and the same is passed.
 		 */
-		ffa_dev = ffa_device_register(&uuid_null, tpbuf->id, &ffa_ops);
+		ffa_dev = ffa_device_register(&uuid, tpbuf->id, &ffa_ops);
 		if (!ffa_dev) {
 			pr_err("%s: failed to register partition ID 0x%x\n",
 			       __func__, tpbuf->id);
diff --git a/include/linux/arm_ffa.h b/include/linux/arm_ffa.h
index eafab07c9f58..b40afa7933dc 100644
--- a/include/linux/arm_ffa.h
+++ b/include/linux/arm_ffa.h
@@ -107,6 +107,7 @@ struct ffa_partition_info {
 /* partition can send and receive indirect messages. */
 #define FFA_PARTITION_INDIRECT_MSG	BIT(2)
 	u32 properties;
+	u32 uuid[4];
 };
 
 /* For use with FFA_MSG_SEND_DIRECT_{REQ,RESP} which pass data via registers */
-- 
2.37.2


  parent reply	other threads:[~2022-08-30 10:12 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-30 10:06 [PATCH 0/9] firmware: arm_ffa: Refactoring and initial/minor v1.1 update Sudeep Holla
2022-08-30 10:06 ` [PATCH 1/9] firmware: arm_ffa: Add pointer to the ffa_dev_ops in struct ffa_dev Sudeep Holla
2022-09-01  7:42   ` Jens Wiklander
2022-08-30 10:06 ` [PATCH 2/9] tee: optee: Use ffa_dev->ops directly Sudeep Holla
2022-08-31  7:38   ` Sumit Garg
2022-09-01  7:21   ` Jens Wiklander
2022-08-30 10:06 ` [PATCH 3/9] firmware: arm_ffa: Remove ffa_dev_ops_get() Sudeep Holla
2022-09-01  7:39   ` Jens Wiklander
2022-08-30 10:06 ` [PATCH 4/9] firmware: arm_ffa: Add support for querying FF-A features Sudeep Holla
2022-09-01  7:56   ` Jens Wiklander
2022-09-01  9:04     ` Sudeep Holla
2022-09-01 11:32       ` Jens Wiklander
2022-08-30 10:06 ` [PATCH 5/9] firmware: arm_ffa: Use FFA_FEATURES to detect if native versions are supported Sudeep Holla
2022-09-01  8:18   ` Jens Wiklander
2022-08-30 10:06 ` [PATCH 6/9] firmware: arm_ffa: Make memory apis ffa_device independent Sudeep Holla
2022-08-31 10:46   ` Sumit Garg
2022-08-31 12:26     ` Sudeep Holla
2022-08-30 10:06 ` Sudeep Holla [this message]
2022-09-01  8:43   ` [PATCH 7/9] firmware: arm_ffa: Add v1.1 get_partition_info support Jens Wiklander
2022-09-01  8:57     ` Sudeep Holla
2022-09-01  9:37       ` Jens Wiklander
2022-08-30 10:06 ` [PATCH 8/9] tee: optee: Drop ffa_ops in optee_ffa structure Sudeep Holla
2022-08-31 10:58   ` Sumit Garg
2022-08-31 11:26     ` Sudeep Holla
2022-08-31 11:29       ` Sumit Garg
2022-09-01  7:26         ` Jens Wiklander
2022-08-30 10:07 ` [PATCH 9/9] firmware: arm_ffa: Split up ffa_dev_ops into info, message and memory operations Sudeep Holla
2022-09-01  8:49   ` Jens Wiklander

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220830100700.344594-8-sudeep.holla@arm.com \
    --to=sudeep.holla@arm.com \
    --cc=achin.gupta@arm.com \
    --cc=coboy.chen@mediatek.com \
    --cc=jens.wiklander@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukas.hanel@trustonic.com \
    --cc=marc.bonnici@arm.com \
    --cc=op-tee@lists.trustedfirmware.org \
    --cc=valentin.laurent@trustonic.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.