code: plan9front

Download patch

ref: 35b8a692679495606c09e3f023ddee744a8852b9
parent: 133900625619ca253759b43cf39073d1adca6fc3
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Dec 3 12:11:03 EST 2022

usbxhci: cleanup

--- a/sys/src/9/imx8/usbxhciimx.c
+++ b/sys/src/9/imx8/usbxhciimx.c
@@ -74,6 +74,8 @@
 		if(ctlrs[i] == nil){
 			uintptr base = VIRTIO + 0x8100000 + i*0x100000;
 			ctlr = xhcialloc((u32int*)base, base - KZERO, 0x100000);
+			if(ctlr == nil)
+				break;
 			ctlrs[i] = ctlr;
 			goto Found;
 		}
@@ -81,9 +83,9 @@
 	return -1;
 
 Found:
-	xhcilinkage(hp, ctlr);
 	hp->tbdf = BUSUNKNOWN;
 	hp->irq = IRQusb1 + i;
+	xhcilinkage(hp, ctlr);
 
 	if(i == 0){
 		iomuxpad("pad_gpio1_io13", "usb1_otg_oc", "~LVTTL ~HYS ~PUE ~ODE FAST 45_OHM");
--- a/sys/src/9/port/usbxhci.c
+++ b/sys/src/9/port/usbxhci.c
@@ -1799,9 +1799,9 @@
 		print("usbxhci: no memory for controller\n");
 		return nil;
 	}
+	ctlr->mmio = mmio;
 	ctlr->base = base;
 	ctlr->size = size;
-	ctlr->mmio = mmio;
 
 	ctlr->dmaaddr = physaddr;
 
--- a/sys/src/9/port/usbxhcipci.c
+++ b/sys/src/9/port/usbxhcipci.c
@@ -83,11 +83,11 @@
 static void
 init(Hci *hp)
 {
-	Xhci *xhci = hp->aux;
-	Pcidev *pcidev = xhci->aux;
+	Xhci *ctlr = hp->aux;
+	Pcidev *pcidev = ctlr->aux;
 
 	pcienable(pcidev);
-	if(xhci->mmio[0] == -1){
+	if(ctlr->mmio[0] == -1){
 		pcidisable(pcidev);
 		error("controller vanished");
 	}
@@ -97,8 +97,8 @@
 static void
 shutdown(Hci *hp)
 {
-	Xhci *xhci = hp->aux;
-	Pcidev *pcidev = xhci->aux;
+	Xhci *ctlr = hp->aux;
+	Pcidev *pcidev = ctlr->aux;
 
 	xhcishutdown(hp);
 	pcidisable(pcidev);
@@ -120,8 +120,10 @@
 	 * Any adapter matches if no hp->port is supplied,
 	 * otherwise the ports must match.
 	 */
-	for(i = 0; i < nelem(ctlrs) && ctlrs[i] != nil; i++){
+	for(i = 0; i < nelem(ctlrs); i++){
 		ctlr = ctlrs[i];
+		if(ctlr == nil)
+			break;
 		if(ctlr->active == nil)
 		if(hp->port == 0 || hp->port == ctlr->base)
 			goto Found;
@@ -130,11 +132,12 @@
 
 Found:
 	pcidev = ctlr->aux;
+	hp->irq = pcidev->intl;
+	hp->tbdf = pcidev->tbdf;
+
 	xhcilinkage(hp, ctlr);
 	hp->init = init;
 	hp->shutdown = shutdown;
-	hp->irq = pcidev->intl;
-	hp->tbdf = pcidev->tbdf;
 
 	return 0;
 }