Lean Sheng Tan submitted this change.

View Change

Approvals: Arthur Heymans: Looks good to me, approved build bot (Jenkins): Verified
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(-)

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;


To view, visit change 78827. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: main
Gerrit-Change-Id: If76e9126b4aba8e16c1c91dece725aac12e1a7e9
Gerrit-Change-Number: 78827
Gerrit-PatchSet: 11
Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com>
Gerrit-Reviewer: Arthur Heymans <arthur@aheymans.xyz>
Gerrit-Reviewer: Lean Sheng Tan <sheng.tan@9elements.com>
Gerrit-Reviewer: Paul Menzel <paulepanter@mailbox.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-CC: Angel Pons <th3fanbus@gmail.com>
Gerrit-CC: Felix Held <felix-coreboot@felixheld.de>
Gerrit-CC: Martin L Roth <gaumless@gmail.com>
Gerrit-MessageType: merged