blob: fccf34660a7c7a6836e5174262619b78e3adb6cb [file] [log] [blame]
Patrick Williams2194f502022-10-16 14:26:09 -05001From 47cd54d908380de17d84a852625ef3a1ff92f496 Mon Sep 17 00:00:00 2001
Brad Bishopbec4ebc2022-08-03 09:55:16 -04002From: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com>
3Date: Fri, 14 Jan 2022 12:23:04 +0000
Patrick Williams2194f502022-10-16 14:26:09 -05004Subject: [PATCH 06/40] firmware: arm_ffa: Fix FFA_MEM_SHARE and
Brad Bishopbec4ebc2022-08-03 09:55:16 -04005 FFA_MEM_FRAG_TX
6
7FFA memory share on success might return FFA_MEM_FRAG_RX. In that case
8set handle from w1/w2 from FFA return value.
9
10FFA_MEM_FRAG_TX call will return FFA_SUCCESS for the last fragment, so
11check for this return code.
12
13Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com>
14Change-Id: I7ef44742d53a9e75d8587d1213be98a1352f16d4
15Upstream-Status: Pending [Not submitted to upstream yet]
Patrick Williams2194f502022-10-16 14:26:09 -050016Signed-off-by: Rupinderjit Singh <rupinderjit.singh@arm.com>
Brad Bishopbec4ebc2022-08-03 09:55:16 -040017---
18 drivers/firmware/arm_ffa/driver.c | 12 ++++++++----
19 1 file changed, 8 insertions(+), 4 deletions(-)
20
21diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
Patrick Williams2194f502022-10-16 14:26:09 -050022index d3d53fbd3d29..de6641912768 100644
Brad Bishopbec4ebc2022-08-03 09:55:16 -040023--- a/drivers/firmware/arm_ffa/driver.c
24+++ b/drivers/firmware/arm_ffa/driver.c
Patrick Williams2194f502022-10-16 14:26:09 -050025@@ -317,11 +317,15 @@ static int ffa_mem_first_frag(u32 func_id, phys_addr_t buf, u32 buf_sz,
Brad Bishopbec4ebc2022-08-03 09:55:16 -040026 if (ret.a0 == FFA_ERROR)
27 return ffa_to_linux_errno((int)ret.a2);
28
29- if (ret.a0 != FFA_SUCCESS)
30+ if (ret.a0 != FFA_SUCCESS && ret.a0 != FFA_MEM_FRAG_RX)
31 return -EOPNOTSUPP;
32
33- if (handle)
34- *handle = PACK_HANDLE(ret.a2, ret.a3);
35+ if (handle) {
36+ if (ret.a0 == FFA_MEM_FRAG_RX)
37+ *handle = PACK_HANDLE(ret.a1, ret.a2);
38+ else
39+ *handle = PACK_HANDLE(ret.a2, ret.a3);
40+ }
41
42 return frag_len;
43 }
Patrick Williams2194f502022-10-16 14:26:09 -050044@@ -345,7 +349,7 @@ static int ffa_mem_next_frag(u64 handle, u32 frag_len)
Brad Bishopbec4ebc2022-08-03 09:55:16 -040045 if (ret.a0 == FFA_ERROR)
46 return ffa_to_linux_errno((int)ret.a2);
47
48- if (ret.a0 != FFA_MEM_FRAG_RX)
49+ if (ret.a0 != FFA_SUCCESS && ret.a0 != FFA_MEM_FRAG_RX)
50 return -EOPNOTSUPP;
51
52 return ret.a3;
53--
Patrick Williams2194f502022-10-16 14:26:09 -0500542.34.1
Brad Bishopbec4ebc2022-08-03 09:55:16 -040055