[coreboot-gerrit] New patch to review for coreboot: libpayload: udc: dwc2: support force_shutdown() routine

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Fri Jul 3 16:35:24 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10770

-gerrit

commit b1cd9d2dfae4cfd1457e49f664f601a698f18df6
Author: Yunzhi Li <lyz at rock-chips.com>
Date:   Tue Jun 23 17:42:34 2015 +0800

    libpayload: udc: dwc2: support force_shutdown() routine
    
    Add force_shutdown() routine for dwc2 udc driver to support
    disconnect and reconnect case when fastboot receiving data.
    
    BUG=chrome-os-partner:41687
    BRANCH=None
    TEST=None
    
    Change-Id: I9ec204d8b7088cfafd3164c9779a6fd85d379dba
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 9238f87c065ba8a57bfb4a7e65fd1821ff2922f9
    Original-Change-Id: I1e584aaf19efa14409bdfa26039c27fa7034b5f0
    Original-Signed-off-by: Yunzhi Li <lyz at rock-chips.com>
    Original-Reviewed-on: https://chromium-review.googlesource.com/281130
    Original-Reviewed-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Tested-by: Lin Huang <hl at rock-chips.com>
    Original-Commit-Queue: Jeffy Chen <jeffy.chen at rock-chips.com>
---
 payloads/libpayload/drivers/udc/dwc2.c | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/payloads/libpayload/drivers/udc/dwc2.c b/payloads/libpayload/drivers/udc/dwc2.c
index 99ee0b3..ab36844 100644
--- a/payloads/libpayload/drivers/udc/dwc2.c
+++ b/payloads/libpayload/drivers/udc/dwc2.c
@@ -675,12 +675,29 @@ static int dwc2_check_irq(struct usbdev_ctrl *this)
 	return 1;
 }
 
+static void dwc2_force_shutdown(struct usbdev_ctrl *this)
+{
+	gusbcfg_t gusbcfg;
+	dwc2_pdata_t *p = DWC2_PDATA(this);
+
+	/* Disconnect */
+	dwc2_connect(this, 0);
+
+	/* Back to normal otg mode */
+	gusbcfg.d32 = readl(&p->regs->core.gusbcfg);
+	gusbcfg.forcehstmode = 0;
+	gusbcfg.forcedevmode = 0;
+	writel(gusbcfg.d32, &p->regs->core.gusbcfg);
+
+	free(p);
+	free(this);
+}
+
 static void dwc2_shutdown(struct usbdev_ctrl *this)
 {
 	dwc2_pdata_t *p = DWC2_PDATA(this);
 	int i, j;
 	int is_empty = 0;
-	gusbcfg_t gusbcfg;
 
 	while (!is_empty) {
 		is_empty = 1;
@@ -691,17 +708,7 @@ static void dwc2_shutdown(struct usbdev_ctrl *this)
 					is_empty = 0;
 	}
 
-	/* Disconnect */
-	dwc2_connect(this, 0);
-
-	/* Back to normal otg mode */
-	gusbcfg.d32 = readl(&p->regs->core.gusbcfg);
-	gusbcfg.forcehstmode = 0;
-	gusbcfg.forcedevmode = 0;
-	writel(gusbcfg.d32, &p->regs->core.gusbcfg);
-
-	free(p);
-	free(this);
+	dwc2_force_shutdown(this);
 }
 
 static void dwc2_set_address(struct usbdev_ctrl *this, int address)
@@ -910,6 +917,7 @@ struct usbdev_ctrl *dwc2_udc_init(device_descriptor_t *dd)
 	ctrl->poll = dwc2_check_irq;
 	ctrl->add_gadget = udc_add_gadget;
 	ctrl->enqueue_packet = dwc2_enqueue_packet;
+	ctrl->force_shutdown = dwc2_force_shutdown;
 	ctrl->shutdown = dwc2_shutdown;
 	ctrl->set_address = dwc2_set_address;
 	ctrl->stall = dwc2_stall;



More information about the coreboot-gerrit mailing list