diff mbox series

[v5,2/2] firmware: zynqmp: return status in EL2 from xilinx_pm_request.

Message ID 20211014124349.1429696-2-adrian.fiergolski@fastree3d.com
State Deferred
Delegated to: Tom Rini
Headers show
Series [v5,1/2] firmware: zynqmp: fix write to an uninitialised pointer in xilinx_pm_request | expand

Commit Message

Adrian Fiergolski Oct. 14, 2021, 12:43 p.m. UTC
This patch fixes xilinx_pm_request to return a valid status from
xilinx_pm_request in EL2.

Signed-off-by: Adrian Fiergolski <adrian.fiergolski@fastree3d.com>
---
 drivers/firmware/firmware-zynqmp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Michal Simek Oct. 15, 2021, 2:58 p.m. UTC | #1
On 10/14/21 14:43, Adrian Fiergolski wrote:
> This patch fixes xilinx_pm_request to return a valid status from
> xilinx_pm_request in EL2.
> 
> Signed-off-by: Adrian Fiergolski <adrian.fiergolski@fastree3d.com>
> ---
>   drivers/firmware/firmware-zynqmp.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c
> index 8273437dd9..34ad7fb985 100644
> --- a/drivers/firmware/firmware-zynqmp.c
> +++ b/drivers/firmware/firmware-zynqmp.c
> @@ -208,7 +208,7 @@ int __maybe_unused xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2,
>   			ret_payload[4] = (u32)regs.regs[2];
>   		}
>   
> -		ret = (ret_payload) ? ret_payload[0] : 0;
> +		ret = (int)regs.regs[0];
>   	}
>   	return ret;
>   }
> 


I have tested this series and our expectation that regs.regs[0] is 
return value is not unfortunately correct. mmio_read/write are not 
aligned to it. And when you try to boot you will see hang without any 
message.

I sent 2 patches as suggestion how we could do it via ipi_req().
Please take a look at it and let me know your opinion.

Thanks,
Michal
diff mbox series

Patch

diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c
index 8273437dd9..34ad7fb985 100644
--- a/drivers/firmware/firmware-zynqmp.c
+++ b/drivers/firmware/firmware-zynqmp.c
@@ -208,7 +208,7 @@  int __maybe_unused xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2,
 			ret_payload[4] = (u32)regs.regs[2];
 		}
 
-		ret = (ret_payload) ? ret_payload[0] : 0;
+		ret = (int)regs.regs[0];
 	}
 	return ret;
 }