[coreboot-gerrit] New patch to review for coreboot: 89f9ad2 southbridge/hudson: Disable USB controllers if devicetree says so

Alexandru Gagniuc (mr.nuke.me@gmail.com) gerrit at coreboot.org
Thu Apr 17 03:37:10 CEST 2014


Alexandru Gagniuc (mr.nuke.me at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5525

-gerrit

commit 89f9ad2348eb591915be930f78913275cb475544
Author: Alexandru Gagniuc <mr.nuke.me at gmail.com>
Date:   Wed Apr 16 16:33:03 2014 -0500

    southbridge/hudson: Disable USB controllers if devicetree says so
    
    Change-Id: I009a01d3324d48d2eeda87d74c8e3e7c27958ee2
    Signed-off-by: Alexandru Gagniuc <mr.nuke.me at gmail.com>
---
 src/southbridge/amd/agesa/hudson/hudson.c | 49 ++++++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/src/southbridge/amd/agesa/hudson/hudson.c b/src/southbridge/amd/agesa/hudson/hudson.c
index 8289c7f..42b5636 100644
--- a/src/southbridge/amd/agesa/hudson/hudson.c
+++ b/src/southbridge/amd/agesa/hudson/hudson.c
@@ -91,11 +91,34 @@ u16 pm_read16(u16 reg)
 	return read16(PM_MMIO_BASE + reg);
 }
 
+#define PM_REG_USB_ENABLE	0xef
+
+enum usb_enable {
+	USB_EN_DEVFN_12_0 = (1 << 0),
+	USB_EN_DEVFN_12_2 = (1 << 1),
+	USB_EN_DEVFN_13_0 = (1 << 2),
+	USB_EN_DEVFN_13_2 = (1 << 3),
+	USB_EN_DEVFN_16_0 = (1 << 4),
+	USB_EN_DEVFN_16_2 = (1 << 5),
+};
+
+static void hudson_disable_usb(u8 disable)
+{
+	u8 reg8;
+
+	/* Bit 7 handles routing, 6 is reserved. we don't mess with those */
+	disable &= 0x3f;
+
+	reg8 = pm_read8(PM_REG_USB_ENABLE);
+	reg8 &= ~disable;
+	pm_write8(PM_REG_USB_ENABLE, reg8);
+}
+
 void hudson_enable(device_t dev)
 {
 	printk(BIOS_DEBUG, "hudson_enable()\n");
 	switch (dev->path.pci.devfn) {
-	case (0x14 << 3) | 7: /* 0:14.7  SD */
+	case PCI_DEVFN(0x14, 7):
 		if (dev->enabled == 0) {
 			// read the VENDEV ID
 			device_t sd_dev = dev_find_slot( 0, PCI_DEVFN( 0x14, 7));
@@ -118,6 +141,30 @@ void hudson_enable(device_t dev)
 			pm_write8(0xd3, reg8);
 		}
 		break;
+	case PCI_DEVFN(12, 0):
+		if (dev->enabled == 0)
+			hudson_disable_usb(USB_EN_DEVFN_12_0);
+		break;
+	case PCI_DEVFN(12, 2):
+		if (dev->enabled == 0)
+			hudson_disable_usb(USB_EN_DEVFN_12_2);
+		break;
+	case PCI_DEVFN(13, 0):
+		if (dev->enabled == 0)
+			hudson_disable_usb(USB_EN_DEVFN_13_0);
+		break;
+	case PCI_DEVFN(13, 2):
+		if (dev->enabled == 0)
+			hudson_disable_usb(USB_EN_DEVFN_13_2);
+		break;
+	case PCI_DEVFN(16, 0):
+		if (dev->enabled == 0)
+			hudson_disable_usb(USB_EN_DEVFN_16_0);
+		break;
+	case PCI_DEVFN(16, 2):
+		if (dev->enabled == 0)
+			hudson_disable_usb(USB_EN_DEVFN_16_2);
+		break;
 	default:
 		break;
 	}



More information about the coreboot-gerrit mailing list