Lean Sheng Tan has submitted this change. ( https://review.coreboot.org/c/coreboot/+/78827?usp=email )
Change subject: sb/intel/bd82x6x/early_usb: Print error for invalid USB setting ......................................................................
sb/intel/bd82x6x/early_usb: Print error for invalid USB setting
According to BWG the USB current setting 0 should not be used for desktop boards. As autoport defaults to 0 if the USB current doesn't match one of the lookup table entries most of the desktop boards in tree have such a setting. Print an error to alert users of such boards to update the USB current settings.
Tested: Lenovo X220 still boots.
Change-Id: If76e9126b4aba8e16c1c91dece725aac12e1a7e9 Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/78827 Reviewed-by: Arthur Heymans arthur@aheymans.xyz Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M src/southbridge/intel/bd82x6x/early_usb.c 1 file changed, 17 insertions(+), 2 deletions(-)
Approvals: Arthur Heymans: Looks good to me, approved build bot (Jenkins): Verified
diff --git a/src/southbridge/intel/bd82x6x/early_usb.c b/src/southbridge/intel/bd82x6x/early_usb.c index 654d44b..974c190 100644 --- a/src/southbridge/intel/bd82x6x/early_usb.c +++ b/src/southbridge/intel/bd82x6x/early_usb.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */
+#include <console/console.h> #include <device/mmio.h> #include <device/pci_ops.h> #include <device/pci_def.h> @@ -23,8 +24,22 @@ /* Unlock registers. */ write_pmbase16(UPRWC, read_pmbase16(UPRWC) | UPRWC_WR_EN);
- for (i = 0; i < 14; i++) - RCBA32(USBIR0 + 4 * i) = currents[portmap[i].current]; + for (i = 0; i < 14; i++) { + if (portmap[i].enabled && !pch_is_mobile() && portmap[i].current == 0) { + /* + * Note for developers: You can fix this by re-running autoport on + * vendor firmware and then updating portmap currents accordingly. + * If that is not possible, another option is to choose a non-zero + * current setting. In either case, please test all the USB ports. + */ + printk(BIOS_ERR, "%s: USB%02d: current setting of 0 is an invalid setting for desktop!\n", + __func__, i); + + RCBA32(USBIR0 + 4 * i) = currents[1]; + } else { + RCBA32(USBIR0 + 4 * i) = currents[portmap[i].current]; + } + } for (i = 0; i < 10; i++) RCBA32(0x3538 + 4 * i) = 0;