All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sudeep Holla <sudeep.holla@arm.com>
To: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	 Sudeep Holla <sudeep.holla@arm.com>,
	Marc Bonnici <marc.bonnici@arm.com>,
	 Jens Wiklander <jens.wiklander@linaro.org>,
	 Coboy Chen <coboy.chen@mediatek.com>,
	 Lorenzo Pieralisi <lpieralisi@kernel.org>,
	 Olivier Deprez <olivier.deprez@arm.com>
Subject: [PATCH v4 13/17] firmware: arm_ffa: Simplify the computation of transmit and fragment length
Date: Thu, 05 Oct 2023 15:45:06 +0100	[thread overview]
Message-ID: <20231005-ffa_v1-1_notif-v4-13-cddd3237809c@arm.com> (raw)
In-Reply-To: <20231005-ffa_v1-1_notif-v4-0-cddd3237809c@arm.com>

The computation of endpoint memory access descriptor's composite memory
region descriptor offset is using COMPOSITE_CONSTITUENTS_OFFSET which is
unnecessary complicated. Composite memory region descriptor always follow
the endpoint memory access descriptor array and hence it is computed
accordingly. COMPOSITE_CONSTITUENTS_OFFSET is useless and wrong for any
input other than endpoint memory access descriptor count.

Let us drop the usage of COMPOSITE_CONSTITUENTS_OFFSET to simplify the
computation of total transmit and fragment length in the memory
transactions.

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

diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
index 9dd5335001ee..45ad704734a2 100644
--- a/drivers/firmware/arm_ffa/driver.c
+++ b/drivers/firmware/arm_ffa/driver.c
@@ -442,23 +442,25 @@ ffa_setup_and_transmit(u32 func_id, void *buffer, u32 max_fragsize,
 {
 	int rc = 0;
 	bool first = true;
+	u32 composite_offset;
 	phys_addr_t addr = 0;
+	struct ffa_mem_region *mem_region = buffer;
 	struct ffa_composite_mem_region *composite;
 	struct ffa_mem_region_addr_range *constituents;
 	struct ffa_mem_region_attributes *ep_mem_access;
-	struct ffa_mem_region *mem_region = buffer;
 	u32 idx, frag_len, length, buf_sz = 0, num_entries = sg_nents(args->sg);
 
 	mem_region->tag = args->tag;
 	mem_region->flags = args->flags;
 	mem_region->sender_id = drv_info->vm_id;
 	mem_region->attributes = ffa_memory_attributes_get(func_id);
-	ep_mem_access = &mem_region->ep_mem_access[0];
+	ep_mem_access = buffer + COMPOSITE_OFFSET(0);
+	composite_offset = COMPOSITE_OFFSET(args->nattrs);
 
 	for (idx = 0; idx < args->nattrs; idx++, ep_mem_access++) {
 		ep_mem_access->receiver = args->attrs[idx].receiver;
 		ep_mem_access->attrs = args->attrs[idx].attrs;
-		ep_mem_access->composite_off = COMPOSITE_OFFSET(args->nattrs);
+		ep_mem_access->composite_off = composite_offset;
 		ep_mem_access->flag = 0;
 		ep_mem_access->reserved = 0;
 	}
@@ -467,13 +469,13 @@ ffa_setup_and_transmit(u32 func_id, void *buffer, u32 max_fragsize,
 	mem_region->reserved_1 = 0;
 	mem_region->ep_count = args->nattrs;
 
-	composite = buffer + COMPOSITE_OFFSET(args->nattrs);
+	composite = buffer + composite_offset;
 	composite->total_pg_cnt = ffa_get_num_pages_sg(args->sg);
 	composite->addr_range_cnt = num_entries;
 	composite->reserved = 0;
 
-	length = COMPOSITE_CONSTITUENTS_OFFSET(args->nattrs, num_entries);
-	frag_len = COMPOSITE_CONSTITUENTS_OFFSET(args->nattrs, 0);
+	length = composite_offset + CONSTITUENTS_OFFSET(num_entries);
+	frag_len = composite_offset + CONSTITUENTS_OFFSET(0);
 	if (frag_len > max_fragsize)
 		return -ENXIO;
 
diff --git a/include/linux/arm_ffa.h b/include/linux/arm_ffa.h
index f6df81f14b6d..748d0a83a4bc 100644
--- a/include/linux/arm_ffa.h
+++ b/include/linux/arm_ffa.h
@@ -356,8 +356,6 @@ struct ffa_mem_region {
 	(offsetof(struct ffa_mem_region, ep_mem_access[x]))
 #define CONSTITUENTS_OFFSET(x)	\
 	(offsetof(struct ffa_composite_mem_region, constituents[x]))
-#define COMPOSITE_CONSTITUENTS_OFFSET(x, y)	\
-	(COMPOSITE_OFFSET(x) + CONSTITUENTS_OFFSET(y))
 
 struct ffa_mem_ops_args {
 	bool use_txbuf;

-- 
2.42.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Sudeep Holla <sudeep.holla@arm.com>
To: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, Sudeep Holla <sudeep.holla@arm.com>,
	Marc Bonnici <marc.bonnici@arm.com>,
	Jens Wiklander <jens.wiklander@linaro.org>,
	Coboy Chen <coboy.chen@mediatek.com>,
	Lorenzo Pieralisi <lpieralisi@kernel.org>,
	Olivier Deprez <olivier.deprez@arm.com>
Subject: [PATCH v4 13/17] firmware: arm_ffa: Simplify the computation of transmit and fragment length
Date: Thu, 05 Oct 2023 15:45:06 +0100	[thread overview]
Message-ID: <20231005-ffa_v1-1_notif-v4-13-cddd3237809c@arm.com> (raw)
In-Reply-To: <20231005-ffa_v1-1_notif-v4-0-cddd3237809c@arm.com>

The computation of endpoint memory access descriptor's composite memory
region descriptor offset is using COMPOSITE_CONSTITUENTS_OFFSET which is
unnecessary complicated. Composite memory region descriptor always follow
the endpoint memory access descriptor array and hence it is computed
accordingly. COMPOSITE_CONSTITUENTS_OFFSET is useless and wrong for any
input other than endpoint memory access descriptor count.

Let us drop the usage of COMPOSITE_CONSTITUENTS_OFFSET to simplify the
computation of total transmit and fragment length in the memory
transactions.

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

diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
index 9dd5335001ee..45ad704734a2 100644
--- a/drivers/firmware/arm_ffa/driver.c
+++ b/drivers/firmware/arm_ffa/driver.c
@@ -442,23 +442,25 @@ ffa_setup_and_transmit(u32 func_id, void *buffer, u32 max_fragsize,
 {
 	int rc = 0;
 	bool first = true;
+	u32 composite_offset;
 	phys_addr_t addr = 0;
+	struct ffa_mem_region *mem_region = buffer;
 	struct ffa_composite_mem_region *composite;
 	struct ffa_mem_region_addr_range *constituents;
 	struct ffa_mem_region_attributes *ep_mem_access;
-	struct ffa_mem_region *mem_region = buffer;
 	u32 idx, frag_len, length, buf_sz = 0, num_entries = sg_nents(args->sg);
 
 	mem_region->tag = args->tag;
 	mem_region->flags = args->flags;
 	mem_region->sender_id = drv_info->vm_id;
 	mem_region->attributes = ffa_memory_attributes_get(func_id);
-	ep_mem_access = &mem_region->ep_mem_access[0];
+	ep_mem_access = buffer + COMPOSITE_OFFSET(0);
+	composite_offset = COMPOSITE_OFFSET(args->nattrs);
 
 	for (idx = 0; idx < args->nattrs; idx++, ep_mem_access++) {
 		ep_mem_access->receiver = args->attrs[idx].receiver;
 		ep_mem_access->attrs = args->attrs[idx].attrs;
-		ep_mem_access->composite_off = COMPOSITE_OFFSET(args->nattrs);
+		ep_mem_access->composite_off = composite_offset;
 		ep_mem_access->flag = 0;
 		ep_mem_access->reserved = 0;
 	}
@@ -467,13 +469,13 @@ ffa_setup_and_transmit(u32 func_id, void *buffer, u32 max_fragsize,
 	mem_region->reserved_1 = 0;
 	mem_region->ep_count = args->nattrs;
 
-	composite = buffer + COMPOSITE_OFFSET(args->nattrs);
+	composite = buffer + composite_offset;
 	composite->total_pg_cnt = ffa_get_num_pages_sg(args->sg);
 	composite->addr_range_cnt = num_entries;
 	composite->reserved = 0;
 
-	length = COMPOSITE_CONSTITUENTS_OFFSET(args->nattrs, num_entries);
-	frag_len = COMPOSITE_CONSTITUENTS_OFFSET(args->nattrs, 0);
+	length = composite_offset + CONSTITUENTS_OFFSET(num_entries);
+	frag_len = composite_offset + CONSTITUENTS_OFFSET(0);
 	if (frag_len > max_fragsize)
 		return -ENXIO;
 
diff --git a/include/linux/arm_ffa.h b/include/linux/arm_ffa.h
index f6df81f14b6d..748d0a83a4bc 100644
--- a/include/linux/arm_ffa.h
+++ b/include/linux/arm_ffa.h
@@ -356,8 +356,6 @@ struct ffa_mem_region {
 	(offsetof(struct ffa_mem_region, ep_mem_access[x]))
 #define CONSTITUENTS_OFFSET(x)	\
 	(offsetof(struct ffa_composite_mem_region, constituents[x]))
-#define COMPOSITE_CONSTITUENTS_OFFSET(x, y)	\
-	(COMPOSITE_OFFSET(x) + CONSTITUENTS_OFFSET(y))
 
 struct ffa_mem_ops_args {
 	bool use_txbuf;

-- 
2.42.0


  parent reply	other threads:[~2023-10-05 14:46 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-05 14:44 [PATCH v4 00/17] firmware: arm_ffa: Add FF-A v1.1 support(notification + new memory descriptor format) Sudeep Holla
2023-10-05 14:44 ` Sudeep Holla
2023-10-05 14:44 ` [PATCH v4 01/17] firmware: arm_ffa: Update the FF-A command list with v1.1 additions Sudeep Holla
2023-10-05 14:44   ` Sudeep Holla
2023-10-05 14:44 ` [PATCH v4 02/17] firmware: arm_ffa: Implement notification bitmap create and destroy interfaces Sudeep Holla
2023-10-05 14:44   ` Sudeep Holla
2023-10-05 14:44 ` [PATCH v4 03/17] firmware: arm_ffa: Implement the notification bind and unbind interface Sudeep Holla
2023-10-05 14:44   ` Sudeep Holla
2023-10-05 14:44 ` [PATCH v4 04/17] firmware: arm_ffa: Implement the FFA_RUN interface Sudeep Holla
2023-10-05 14:44   ` Sudeep Holla
2023-10-05 14:44 ` [PATCH v4 05/17] firmware: arm_ffa: Implement the FFA_NOTIFICATION_SET interface Sudeep Holla
2023-10-05 14:44   ` Sudeep Holla
2023-10-05 14:44 ` [PATCH v4 06/17] firmware: arm_ffa: Implement the FFA_NOTIFICATION_GET interface Sudeep Holla
2023-10-05 14:44   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 07/17] firmware: arm_ffa: Implement the NOTIFICATION_INFO_GET interface Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 08/17] firmware: arm_ffa: Initial support for scheduler receiver interrupt Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 09/17] firmware: arm_ffa: Add schedule receiver callback mechanism Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 10/17] firmware: arm_ffa: Add interfaces to request notification callbacks Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 11/17] firmware: arm_ffa: Add interface to send a notification to a given partition Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 12/17] firmware: arm_ffa: Add notification handling mechanism Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` Sudeep Holla [this message]
2023-10-05 14:45   ` [PATCH v4 13/17] firmware: arm_ffa: Simplify the computation of transmit and fragment length Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 14/17] KVM: arm64: FFA: Remove access of endpoint memory access descriptor array Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-06 15:25   ` Sudeep Holla
2023-10-06 15:25     ` Sudeep Holla
2023-10-06 18:25   ` Marc Zyngier
2023-10-06 18:25     ` Marc Zyngier
2023-10-05 14:45 ` [PATCH v4 15/17] firmware: arm_ffa: Switch to using ffa_mem_desc_offset() accessor Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 16/17] firmware: arm_ffa: Update memory descriptor to support v1.1 format Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-05 14:45 ` [PATCH v4 17/17] firmware: arm_ffa: Upgrade the driver version to v1.1 Sudeep Holla
2023-10-05 14:45   ` Sudeep Holla
2023-10-09 11:49 ` [PATCH v4 00/17] firmware: arm_ffa: Add FF-A v1.1 support(notification + new memory descriptor format) Sudeep Holla
2023-10-09 11:49   ` Sudeep Holla

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=20231005-ffa_v1-1_notif-v4-13-cddd3237809c@arm.com \
    --to=sudeep.holla@arm.com \
    --cc=coboy.chen@mediatek.com \
    --cc=jens.wiklander@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lpieralisi@kernel.org \
    --cc=marc.bonnici@arm.com \
    --cc=olivier.deprez@arm.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.