diff mbox series

[U-Boot] arm: socfpga: stratix10: Fix mailbox urgent command with urgent register

Message ID 1534494123-9257-2-git-send-email-ley.foon.tan@intel.com
State Accepted
Commit 8497cb9b25302e75a4422502c9d13d310ffbcfd2
Delegated to: Marek Vasut
Headers show
Series [U-Boot] arm: socfpga: stratix10: Fix mailbox urgent command with urgent register | expand

Commit Message

Ley Foon Tan Aug. 17, 2018, 8:22 a.m. UTC
According to mailbox spec, software should send urgent command with
urgent register instead of COUT location. This patch write urgent
command index to urgent register.

Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com>
---
 arch/arm/mach-socfpga/mailbox_s10.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

Comments

Marek Vasut Aug. 17, 2018, 10:08 a.m. UTC | #1
On 08/17/2018 10:22 AM, Ley Foon Tan wrote:
> According to mailbox spec, software should send urgent command with
> urgent register instead of COUT location. This patch write urgent
> command index to urgent register.
> 
> Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com>
> ---
>  arch/arm/mach-socfpga/mailbox_s10.c | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/mach-socfpga/mailbox_s10.c b/arch/arm/mach-socfpga/mailbox_s10.c
> index cccd1a4..0d906c3 100644
> --- a/arch/arm/mach-socfpga/mailbox_s10.c
> +++ b/arch/arm/mach-socfpga/mailbox_s10.c
> @@ -160,15 +160,15 @@ static __always_inline int mbox_send_cmd_common(u8 id, u32 cmd, u8 is_indirect,
>  	u32 buf_len;
>  	int ret;
>  
> -	ret = mbox_prepare_cmd_only(id, cmd, is_indirect, len, arg);
> -	if (ret)
> -		return ret;
> -
>  	if (urgent) {
>  		/* Read status because it is toggled */
>  		status = MBOX_READL(MBOX_STATUS) & MBOX_STATUS_UA_MSK;
> -		/* Send command as urgent command */
> -		MBOX_WRITEL(1, MBOX_URG);
> +		/* Write urgent command to urgent register */
> +		MBOX_WRITEL(cmd, MBOX_URG);
> +	} else {
> +		ret = mbox_prepare_cmd_only(id, cmd, is_indirect, len, arg);
> +		if (ret)
> +			return ret;
>  	}
>  
>  	/* write doorbell */
> @@ -188,8 +188,7 @@ static __always_inline int mbox_send_cmd_common(u8 id, u32 cmd, u8 is_indirect,
>  
>  		if (urgent) {
>  			u32 new_status = MBOX_READL(MBOX_STATUS);
> -			/* urgent command doesn't have response */
> -			MBOX_WRITEL(0, MBOX_URG);
> +
>  			/* Urgent ACK is toggled */
>  			if ((new_status & MBOX_STATUS_UA_MSK) ^ status)
>  				return 0;
> 
Applied, thanks.
diff mbox series

Patch

diff --git a/arch/arm/mach-socfpga/mailbox_s10.c b/arch/arm/mach-socfpga/mailbox_s10.c
index cccd1a4..0d906c3 100644
--- a/arch/arm/mach-socfpga/mailbox_s10.c
+++ b/arch/arm/mach-socfpga/mailbox_s10.c
@@ -160,15 +160,15 @@  static __always_inline int mbox_send_cmd_common(u8 id, u32 cmd, u8 is_indirect,
 	u32 buf_len;
 	int ret;
 
-	ret = mbox_prepare_cmd_only(id, cmd, is_indirect, len, arg);
-	if (ret)
-		return ret;
-
 	if (urgent) {
 		/* Read status because it is toggled */
 		status = MBOX_READL(MBOX_STATUS) & MBOX_STATUS_UA_MSK;
-		/* Send command as urgent command */
-		MBOX_WRITEL(1, MBOX_URG);
+		/* Write urgent command to urgent register */
+		MBOX_WRITEL(cmd, MBOX_URG);
+	} else {
+		ret = mbox_prepare_cmd_only(id, cmd, is_indirect, len, arg);
+		if (ret)
+			return ret;
 	}
 
 	/* write doorbell */
@@ -188,8 +188,7 @@  static __always_inline int mbox_send_cmd_common(u8 id, u32 cmd, u8 is_indirect,
 
 		if (urgent) {
 			u32 new_status = MBOX_READL(MBOX_STATUS);
-			/* urgent command doesn't have response */
-			MBOX_WRITEL(0, MBOX_URG);
+
 			/* Urgent ACK is toggled */
 			if ((new_status & MBOX_STATUS_UA_MSK) ^ status)
 				return 0;