Mian Yousaf Kaukab 242ace
From: Thierry Reding <treding@nvidia.com>
Mian Yousaf Kaukab 242ace
Date: Fri, 6 Dec 2019 15:06:48 +0100
Mian Yousaf Kaukab 242ace
Subject: usb: host: xhci-tegra: Extract firmware enable helper
Mian Yousaf Kaukab 242ace
Mian Yousaf Kaukab 242ace
Git-commit: 96d8f628f0b35e1c1d93340cd4d2cde1ed3b8d9f
Mian Yousaf Kaukab 242ace
Patch-mainline: v5.6-rc1
Mian Yousaf Kaukab 242ace
References: bsc#1167765
Mian Yousaf Kaukab 242ace
Mian Yousaf Kaukab 242ace
Extract a helper that enables message generation from the firmware. This
Mian Yousaf Kaukab 242ace
removes clutter from tegra_xusb_probe() and will also come in useful for
Mian Yousaf Kaukab 242ace
subsequent patches that introduce suspend/resume support.
Mian Yousaf Kaukab 242ace
Mian Yousaf Kaukab 242ace
Based on work by JC Kuo <jckuo@nvidia.com>.
Mian Yousaf Kaukab 242ace
Mian Yousaf Kaukab 242ace
Signed-off-by: Thierry Reding <treding@nvidia.com>
Mian Yousaf Kaukab 242ace
Link: https://lore.kernel.org/r/20191206140653.2085561-6-thierry.reding@gmail.com
Mian Yousaf Kaukab 242ace
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Mian Yousaf Kaukab 242ace
Signed-off-by: Mian Yousaf Kaukab <ykaukab@suse.de>
Mian Yousaf Kaukab 242ace
---
Mian Yousaf Kaukab 242ace
 drivers/usb/host/xhci-tegra.c | 41 +++++++++++++++++++++++++++++------------
Mian Yousaf Kaukab 242ace
 1 file changed, 29 insertions(+), 12 deletions(-)
Mian Yousaf Kaukab 242ace
Mian Yousaf Kaukab 242ace
diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
Mian Yousaf Kaukab 242ace
index eda5e1d50828..499104c05668 100644
Mian Yousaf Kaukab 242ace
--- a/drivers/usb/host/xhci-tegra.c
Mian Yousaf Kaukab 242ace
+++ b/drivers/usb/host/xhci-tegra.c
Mian Yousaf Kaukab 242ace
@@ -993,11 +993,37 @@ static int tegra_xusb_powerdomain_init(struct device *dev,
Mian Yousaf Kaukab 242ace
 	return 0;
Mian Yousaf Kaukab 242ace
 }
Mian Yousaf Kaukab 242ace
 
Mian Yousaf Kaukab 242ace
-static int tegra_xusb_probe(struct platform_device *pdev)
Mian Yousaf Kaukab 242ace
+static int __tegra_xusb_enable_firmware_messages(struct tegra_xusb *tegra)
Mian Yousaf Kaukab 242ace
 {
Mian Yousaf Kaukab 242ace
 	struct tegra_xusb_mbox_msg msg;
Mian Yousaf Kaukab 242ace
-	struct resource *regs;
Mian Yousaf Kaukab 242ace
+	int err;
Mian Yousaf Kaukab 242ace
+
Mian Yousaf Kaukab 242ace
+	/* Enable firmware messages from controller. */
Mian Yousaf Kaukab 242ace
+	msg.cmd = MBOX_CMD_MSG_ENABLED;
Mian Yousaf Kaukab 242ace
+	msg.data = 0;
Mian Yousaf Kaukab 242ace
+
Mian Yousaf Kaukab 242ace
+	err = tegra_xusb_mbox_send(tegra, &msg;;
Mian Yousaf Kaukab 242ace
+	if (err < 0)
Mian Yousaf Kaukab 242ace
+		dev_err(tegra->dev, "failed to enable messages: %d\n", err);
Mian Yousaf Kaukab 242ace
+
Mian Yousaf Kaukab 242ace
+	return err;
Mian Yousaf Kaukab 242ace
+}
Mian Yousaf Kaukab 242ace
+
Mian Yousaf Kaukab 242ace
+static int tegra_xusb_enable_firmware_messages(struct tegra_xusb *tegra)
Mian Yousaf Kaukab 242ace
+{
Mian Yousaf Kaukab 242ace
+	int err;
Mian Yousaf Kaukab 242ace
+
Mian Yousaf Kaukab 242ace
+	mutex_lock(&tegra->lock);
Mian Yousaf Kaukab 242ace
+	err = __tegra_xusb_enable_firmware_messages(tegra);
Mian Yousaf Kaukab 242ace
+	mutex_unlock(&tegra->lock);
Mian Yousaf Kaukab 242ace
+
Mian Yousaf Kaukab 242ace
+	return err;
Mian Yousaf Kaukab 242ace
+}
Mian Yousaf Kaukab 242ace
+
Mian Yousaf Kaukab 242ace
+static int tegra_xusb_probe(struct platform_device *pdev)
Mian Yousaf Kaukab 242ace
+{
Mian Yousaf Kaukab 242ace
 	struct tegra_xusb *tegra;
Mian Yousaf Kaukab 242ace
+	struct resource *regs;
Mian Yousaf Kaukab 242ace
 	struct xhci_hcd *xhci;
Mian Yousaf Kaukab 242ace
 	unsigned int i, j, k;
Mian Yousaf Kaukab 242ace
 	struct phy *phy;
Mian Yousaf Kaukab 242ace
@@ -1277,21 +1303,12 @@ static int tegra_xusb_probe(struct platform_device *pdev)
Mian Yousaf Kaukab 242ace
 		goto put_usb3;
Mian Yousaf Kaukab 242ace
 	}
Mian Yousaf Kaukab 242ace
 
Mian Yousaf Kaukab 242ace
-	mutex_lock(&tegra->lock);
Mian Yousaf Kaukab 242ace
-
Mian Yousaf Kaukab 242ace
-	/* Enable firmware messages from controller. */
Mian Yousaf Kaukab 242ace
-	msg.cmd = MBOX_CMD_MSG_ENABLED;
Mian Yousaf Kaukab 242ace
-	msg.data = 0;
Mian Yousaf Kaukab 242ace
-
Mian Yousaf Kaukab 242ace
-	err = tegra_xusb_mbox_send(tegra, &msg;;
Mian Yousaf Kaukab 242ace
+	err = tegra_xusb_enable_firmware_messages(tegra);
Mian Yousaf Kaukab 242ace
 	if (err < 0) {
Mian Yousaf Kaukab 242ace
 		dev_err(&pdev->dev, "failed to enable messages: %d\n", err);
Mian Yousaf Kaukab 242ace
-		mutex_unlock(&tegra->lock);
Mian Yousaf Kaukab 242ace
 		goto remove_usb3;
Mian Yousaf Kaukab 242ace
 	}
Mian Yousaf Kaukab 242ace
 
Mian Yousaf Kaukab 242ace
-	mutex_unlock(&tegra->lock);
Mian Yousaf Kaukab 242ace
-
Mian Yousaf Kaukab 242ace
 	err = devm_request_threaded_irq(&pdev->dev, tegra->mbox_irq,
Mian Yousaf Kaukab 242ace
 					tegra_xusb_mbox_irq,
Mian Yousaf Kaukab 242ace
 					tegra_xusb_mbox_thread, 0,
Mian Yousaf Kaukab 242ace
-- 
Mian Yousaf Kaukab 242ace
2.16.4
Mian Yousaf Kaukab 242ace