Skip to content

lemp12: Enable TCSS Type-C port, PMC mux and retimer - #281

Open
mattwollf wants to merge 26 commits into
system76:system76from
mattwollf:lemp12-tcss-s76
Open

mattwollf wants to merge 26 commits into
system76:system76from
mattwollf:lemp12-tcss-s76

Conversation

@mattwollf

@mattwollf mattwollf commented Aug 12, 2026 •

Copy link
Copy Markdown

lemp12's USB-C connector (J_TYPEC1) never operates above USB 2.0 and DisplayPort
alt-mode never engages. Reported in firmware-open#675, which has the measurements.

fill_fsps_tcss_params() derives UsbTcPortEn from whether the devicetree device
tcss_usb3_port1 is enabled. soc/intel/alderlake/chipset.cb defaults it off, the
rpl baseboard declares no TCSS section, and no rpl variant enables it, so the bit
stays clear and FSP-S never brings the port up. The connector's USB2 pair routes to the
PCH (usb2_ports[2] = USB2_PORT_TYPE_C) and keeps working, so devices enumerate at
480 Mbps with the SuperSpeed lanes dark.

7/7 adl variants enable tcss_usb3_port1; 0/12 rpl variants do. tgl-u and mtl
enable it as well.

Commits:

  • mb/system76/rpl: select DRIVERS_INTEL_PMC and DRIVERS_INTEL_USB4_RETIMER. adl
    selects both, rpl neither; the chip entries below do not link without them.
  • mb/system76/lemp12: enable tcss_root_hub / tcss_usb3_port1 under tcss_xhci, add
    drivers/intel/usb4/retimer under tcss_dma0, add drivers/intel/pmc_mux + conn
    under pmc, add the per-port drivers/usb/acpi descriptors under xhci. Mirrors
    lemp11.

GPP_E4 is this board's retimer force-power pad, per its own gpio.c (TBT_FORCE_PWR)
and the Clevo L140AU schematic (6-71-L14A0-D02A): PCH ball FC22 →
GPPE4_TBT_FORCE_PWR → R411 (0 Ω, populated) → TC_RETIMER_FORCE_PWR → JHL8040R
FORCE_PWR ball A9.

CB:94134 adds the per-port drivers/usb/acpi descriptors to all twelve rpl variants;
that hunk can be dropped if it lands here first. It is included because pmc_mux/conn
references usb2_port3 and lemp12 has no per-port descriptors on this branch.

Verified:

  • Builds for lemp12 on 28fb5085 (release 2025-07-24_c242738).
  • Generated static.c: _dev_tcss_usb3_port1.enabled 0 → 1; gains
    drivers_intel_pmc_mux_ops, drivers_intel_pmc_mux_conn_ops and
    drivers_intel_usb4_retimer_ops; conn.usb2_port = &_dev_usb2_port3,
    conn.usb3_port and retimer.dfp[0].typec_port = &_dev_tcss_usb3_port1.
  • Stock vs patched ROM from the same tree: identical CBFS file set, FSP, microcode,
    payload and bootblock unchanged, fallback/ramstage +2189 B, romstage +768 B.
    INTC105C present only in the patched ramstage. Decoding the device array out of the
    extracted ramstage shows tcss_usb3_port1.enabled 0 → 1.

Not tested on hardware. This board's SPI part is a leadless WSON-8 MX25L25673G (U41),
I have no external programmer, and the flash map has a single COREBOOT region, so I
have not flashed a patched ROM. The runtime behaviour is unverified.

darp9, galp7 and oryp11 show the same pattern — a Type-C connector with no PCH
usb3_ports[] entry (firmware-open#472, #497). Not touched here; I cannot test them.

crawfxrd and others added 26 commits March 19, 2026 18:31
The Infineon SLB 9672 on newer Clevo machines regularly fails TPM Resume
on S3 with the error `TPM_RC_VALUE`.

Per TPM2 spec, handle the failure by performing a TPM Restart.

> The startup behavior defined by this specification is different than
> TPM 1.2 with respect to Startup(STATE). A TPM 1.2 device will enter
> Failure Mode if no state is available when the TPM receives
> Startup(STATE). This is not the case in this specification. It is up
> to the CRTM to take corrective action if it the TPM returns
> TPM_RC_VALUE in response to Startup(STATE).

Fixes the following error from being repeatedly logged in Linux:

> kernel: tpm tpm0: A TPM error (256) occurred attempting get random

Ref: Trusted Platform Module Library, Part 1: Architecture, rev 1.59
Change-Id: I3388007d4448c93bd0dda591c8ca7d1a8dc5306b
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Previously, only _PR0 was specified, which allowed devices to enter D0.
Add _PR3 to allow the same devices to enter D3Cold, enabling proper
runtime power management for devices that support it.

Change-Id: Id7f4373989dffe8c3bc68a034f59a94d2160dd15
Signed-off-by: Jeremy Soller <jeremy@system76.com>
Change-Id: Ic30bec272e82535f6f606033c3ba512662cb2c8b
Signed-off-by: Jeremy Soller <jackpot51@gmail.com>
These values were taken from alderlake.

Change-Id: Ib790c7d52748156b25bad423ed082c1b51a33550
Signed-off-by: Jeremy Soller <jackpot51@gmail.com>
Intel introduced a new UPD specifically for setting the HDA subsystem ID
in FSP-M. Using SiSsidTablePtr in FSP-S no longer works as it will be
locked with a default value of 0 by that point.

Tested on Clevo V560TU with MTL FSP 4122.12 (0D.00.A8.20).

TEST=PCI config space for HDA device has subsystem ID set.

Change-Id: I5e668747d99b955b0a3946524c5918d328b8e1d3
Signed-off-by: Tim Crawford <tcrawford@system76.com>
The Bonobo has 2 AMPs: one for the speakers and one for the subwoofer.

Smart AMP data was collected using a logic analyzer connected to the IC
during system start on proprietary firmware. This data is then used to
generate a C file [1].

[1]: https://github.com/system76/smart-amp

Change-Id: I5389a9890563ebd3adb20096b6225f474bc006f9
Signed-off-by: Tim Crawford <tcrawford@system76.com>
This config is not available in coreboot FSP headers, but is required
for USB3 to work correctly.

Change-Id: I9f69935123b8d3e2a7f93318ea39667d8a9efe0d
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Add a driver for laptops with NVIDIA Optimus (hybrid) graphics. The
driver provides ACPI support for dynamically powering on and off the
GPU, NVIDIA Dynamic Boost support, and a function for enabling the GPU
power in romstage.

References:
- DG-09845-001: NVIDIA GN20/QN20 Hardware Design Guide
- DG-09954-001: NVIDIA GN20/QN20 Software Design Guide

Change-Id: I2dec7aa2c8db7994f78a7cc1220502676e248465
Signed-off-by: Jeremy Soller <jeremy@system76.com>
Signed-off-by: Tim Crawford <tcrawford@system76.com>
System76 EC supports a lock bit on Clevo-based boards (`ME_WE`) that
prevents writing its flash when enabled. Extend this lock to system
flash by protecting regions when the `SECURITY` feature is present and
enabled.

Change-Id: Ifd5f77e8516bfd538409a079022f444a571d4e72
Signed-off-by: Jeremy Soller <jeremy@system76.com>
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Change-Id: I4b07846c404eb93ab4baf0a78a4bbffcc5d8afca
Signed-off-by: Tim Crawford <tcrawford@system76.com>
The Bonobo has been updated with a Thunderbolt 5 controller (Barlow
Ridge).

Identified chip changes from the schematics:

- JHL8540_MP -> JHL9580_QS
- TPS65994BF -> TPS65994BH
- IT5570E-128 -> IT5570E-256

Change-Id: I784e489cdd034febeaaac0182ab5b4fe672381ec
Signed-off-by: Tim Crawford <tcrawford@system76.com>
The Meerkat 9 is an Intel Meteor Lake-H based small form factor desktop
computer based on the Asus NUC-155H R2.

Change-Id: I37a0b808cf383379b8e284831644c824c0d4817e
Signed-off-by: Jeremy Soller <jeremy@system76.com>
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Change-Id: Ibc3401463084173483ef2c98e4241af6557607ce
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Change-Id: I35b792e0298700f41fc8469fcf9c75a1bae3d4d4
Signed-off-by: Jeremy Soller <jeremy@system76.com>
Signed-off-by: Tim Crawford <tcrawford@system76.com>
The newer batch of these boards do not de-assert VW PLTRST# on S3
resume, causing the units to not power on in the EC code. Switch them to
S0ix as a workaround.

Enable CSME in CMOS options by default so that S0ix will work.

Change-Id: I95337c1391102db9e020e82bdd938659c1a4f905
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Change-Id: I1b2ec2ec95f5d29e71e4d99a76a0d186679fd101
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Drain pending SPI sync SMIs before dropping write protect for SMMSTORE and once more after the command runs. This keeps a stale sync status from leaking into the next request.

Change-Id: I7ba21719a6dafa926b0d5986a253da9cff52575a
Signed-off-by: Sean Rhodes <sean@starlabs.systems>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/91726
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Commit a1ef551 ("soc/intel: Use chipset.cb for PCIe root port ops
linking") added `ops pcie_rp_ops` to PCH root ports in chipset.cb and
trimmed the pch_pcie PCI ID list in pcie.c. CPU-side bridges (PEG /
pcie4 / pcie5) were never given explicit ops, so they still relied on
DID-based binding and lost pcie_rp_ops after that cleanup, resulting
in NVMe boot failures.

Wire the same pcie_rp_ops used for PCH RPs on CPU PCIe devices for
all Intel SoCs, to restore the previous functionality.

This fixes NMVe booting on google/crota and other boards which use
CPU-attached PCIe root ports for attached storage.

TEST=build/boot google/crota with NVMe storage.

Change-Id: I15fab69657cc5a26d1e6f454896136e71d5cb149
Signed-off-by: Matt DeVillier <matt.devillier@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/92629
Reviewed-by: Sean Rhodes <sean@starlabs.systems>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Felix Singer <service+coreboot-gerrit@felixsinger.de>
Downstream bridges behind a discrete Thunderbolt controller need the
PCIe hotplug scan path when PCIEXP_HOTPLUG is enabled. Use the hotplug
scanner only for bridges whose parent is also handled by the dTBT
driver, and keep the normal PCIe bridge scan for the upstream bridge.

Tested on ThinkPad T480: Hotplugging AMD Radeon R7 250X and ATI Radeon
HD 2600 XT works.

Change-Id: I48ba91a523bb7ad697ac7ab966056ff4c04d9851
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/92520
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Replace arbitrary delay between PWR_EN and RST# with a check for PWRGD.
Increase the time from 25ms (romstage) and 5ms (ACPI) to 50ms for both.

All boards using the driver except CFL (addw1, oryp5) have the pin.

Change-Id: I613f30fca2e3783eba8f87a4197e34ab682f9820
Signed-off-by: Jacob Kaulike <kaulike@system76.com>
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Change-Id: I4440417af3aac21d715b591bcb983d48b453a478
Signed-off-by: Tim Crawford <tcrawford@system76.com>
[ upstream commit 8cdb7bc ]

Rework the Kconfigs for boards using SoC directories to have a common
config block and board-specific configs.

CNL-H boards are not touched as they are a separate mess that needs to
be cleaned up.

TEST: Build with CONFIG_INCLUDE_CONFIG_FILE=n and BUILD_TIMELESS=1 is
identical.

Change-Id: I259c00b54e6d204fbbf7b8c6e9a761140112c5ed
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/92902
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Felix Singer <service+coreboot-gerrit@felixsinger.de>
Match the new default region size from commit d32a372
("drivers/smmstore: Increase default size of store to 512KB"), as was
done for Google and Star Labs boards.

Change-Id: I61298df80e4ce50d79adcf2c74f947c319b0c40b
Signed-off-by: Tim Crawford <tcrawford@system76.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/91768
Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
The cherry-picked commit missed some models that were added later
upstream that already had the increased size.

Change-Id: I758cc7e279d95e60f7cab7b1bb3855f2a5337ab8
Fixes: bcbc146 ("mb/system76: Increase size of SMMSTORE to 512KB")
Signed-off-by: Tim Crawford <tcrawford@system76.com>
The adl baseboard selects both of these; rpl selects neither. They gate the
build of the devicetree chip drivers used to describe a TCSS Type-C port:

  - drivers/intel/pmc_mux/Makefile.mk builds mux.c and conn/conn.c only when
    CONFIG_DRIVERS_INTEL_PMC is set
  - drivers/intel/usb4/retimer is gated on CONFIG_DRIVERS_INTEL_USB4_RETIMER

Without them, a variant that adds "chip drivers/intel/pmc_mux" or
"chip drivers/intel/usb4/retimer" to its overridetree fails to link.

This commit has no functional effect on its own, and none on any variant that
does not use those drivers. It is a prerequisite for the lemp12 change that
follows.

TEST=Builds for lemp12. No change to the built image: with no variant using
these drivers yet, the .config gains the two symbols but no additional objects
are linked.

Change-Id: Iada38a12a1157c5190084aa7c893c13c2f29d236
Signed-off-by: mw <mw@mattsp.dev>
lemp12's sole USB-C connector (J_TYPEC1) never operates above USB 2.0 and
DisplayPort alt-mode never engages. Reported in firmware-open#675.

soc/intel/alderlake fill_fsps_tcss_params() derives UsbTcPortEn from whether
the devicetree device tcss_usb3_port1 is enabled:

	s_cfg->UsbTcPortEn = 0;
	for (int i = 0; i < MAX_TYPE_C_PORTS; i++)
		if (is_dev_enabled(tcss_port_arr[i]))
			s_cfg->UsbTcPortEn |= BIT(i);

chipset.cb defaults tcss_root_hub and tcss_usb3_port1 to off, the rpl
baseboard declares no TCSS section, and no rpl variant enables them, so the
bit stays clear and FSP-S never enables the Type-C port. The connector's USB2
pair routes to the PCH and keeps working, which is why the port enumerates
devices at 480 Mbps while its SuperSpeed lanes stay dark.

Enable the port and describe it the way the adl variants do. The per-port
drivers/usb/acpi descriptors under xhci are added at the same time, since the
pmc_mux conn node references usb2_port3 and the board has no per-port
descriptors at all today. Upstream CB:94134 adds those descriptors to all
twelve rpl variants; if that lands here first, that hunk can be dropped.

GPP_E4 is this board's retimer force-power pad, declared in its own gpio.c as
TBT_FORCE_PWR and confirmed against the Clevo L140AU schematic (board
6-71-L14A0-D02A): PCH ball FC22 -> GPPE4_TBT_FORCE_PWR -> R411 (0R, populated)
-> TC_RETIMER_FORCE_PWR -> JHL8040R FORCE_PWR ball A9.

All adl variants (7/7) enable tcss_usb3_port1; no rpl variant (0/12) does. The
same split holds for tgl-u and mtl, which suggests the rpl directory was
created without carrying the Type-C stack over. Reading their overridetrees,
darp9, galp7 and oryp11 look affected the same way -- in each case the Type-C
connector with no PCH usb3_ports[] entry is the one users report as broken
(firmware-open#472 for oryp11, #497 for darp9). I have deliberately left those
boards alone: I do not own them and cannot test them, so this change is scoped
to the one board I can verify on. The same blocks should apply, with the conn
alias and the retimer pad adjusted per board.

TEST=Builds for lemp12 on the current release (2025-07-24_c242738). Generated
static.c has _dev_tcss_usb3_port1 .enabled = 0 before this change and 1 after,
and gains drivers_intel_pmc_mux_ops, drivers_intel_pmc_mux_conn_ops and
drivers_intel_usb4_retimer_ops. Comparing a stock and a patched ROM built from
the same tree: identical CBFS file set, FSP, microcode, payload and bootblock
bit-for-bit unchanged, fallback/ramstage +2189 B and romstage +768 B. The
string INTC105C appears only in the patched ramstage, and decoding the device
array out of the extracted ramstage shows tcss_usb3_port1 .enabled going 0 ->
1, so the bit reaches the image that would be flashed.

NOT tested on hardware. This machine's SPI flash is a leadless WSON-8 part
with no external programmer attached and the flash map has a single COREBOOT
region, so I have not flashed it. The runtime behaviour is unverified; I will
follow up once I have flashed it, and would welcome anyone with a bench unit
testing it first.

Change-Id: I69f5f7ceef1f39a2be4a28a24270e9650589f915
Signed-off-by: mw <mw@mattsp.dev>
@jackpot51

Copy link
Copy Markdown
Member

Please disclose any LLM usage in the creation of this PR including all associated code changes and PR descriptions.

@mattwollf

Copy link
Copy Markdown
Author

pretty much everything is LLM generated and edited by me

@crawfxrd

Copy link
Copy Markdown
Member

Fork has been rebased on 26.09. The xHCI ACPI configs have been upstreamed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants