diff options
| author | Davidlohr Bueso <dave@stgolabs.net> | 2026-11-08 14:07:37 -0800 |
|---|---|---|
| committer | Dave Jiang <dave.jiang@intel.com> | 2026-11-09 15:25:20 -0700 |
| commit | e8116033242d6c1146b8c3ebb1dafacd9ae24a51 (patch) | |
| tree | 4065b1c2f1b2bee6b130bd519ec06f3884ebc706 /scripts/Makefile.thinlto | |
| parent | 77d2d170a9bbdb3a61b1fa86d6f6662ffa62c409 (diff) | |
| download | linux-next-e8116033242d6c1146b8c3ebb1dafacd9ae24a51.tar.gz linux-next-e8116033242d6c1146b8c3ebb1dafacd9ae24a51.zip | |
cxl: Handle auto-committed BI hdm decoders
An HDM decoder that firmware committed with the BI bit set was
assembled without the bit ever being looked at. Record it, and
refuse what is broken - BI paired with a host-only target range type,
or for an endpoint decoder BI on a path that cannot route BISnp.
Taking over such a path must not re-program what firmware already
did, and a dport's committed state does not say which device it was
committed for, only that firmware committed for something below it.
Two endpoints sharing a level show why that is not enough to go on.
RP Forward set, but for mem0
|
USP
/ \
DSP0 DSP1
| |
mem0 mem1
BI Enable BI Enable
set clear
Adoption is therefore seeded from the endpoint's own BI Enable, since
only a device firmware itself enabled can have had its BI-ID
accounted for above, and carried up the walk. A level is taken as
found, with no register write and no commit, when nothing this driver
routed sits below it, the value this driver would write is already
there, and both the decoder and the switch's route table are
committed - the table carries a commit of its own that firmware may
not have performed. The first level to fall short ends adoption, and
from it up the driver programs and commits as for any other device.
RP Forward, written but never committed
|
USP0 route table committed by the driver
|
DSP0 Forward, written and committed
| ..... adoption ended here .....
USP1 route table already committed
|
DSP1 Enable, taken as found
|
mem0 BI Enable already set by firmware
An adopted level owes no commit either way. Table 8-152 and Table
8-156 owe one per new BI device enabled below the port, and an
adopted level is not seeing one.
On failure the walk unwinds through the same release as teardown. An
adopted level was found up and is held, so the unwind drops its
reference and leaves its register alone; a level this walk brought up
is cleared. Teardown works the same way: every level this driver
brought up is deallocated, unless a decoder below still decodes with
BI and holds it.
A committed decoder is refused when its coherency model does not fit
where it lands: unlike a decoder this driver programs it cannot
inherit a region's model, so its committed BI bit must match the
window's, checked before the region is built and again at attach,
where a second decoder joining the region arrives.
A firmware-committed decoder's BI bit is recorded as CXL_DECODER_F_BI
at enumeration, as it already is for a decoder this driver commits.
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
Reviewed-by: Li Ming <ming.li@zohomail.com>
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
Link: https://patch.msgid.link/0570b67e078439a64c513d62faca1abd7ed70e6c.1794172701.git.dave@stgolabs.net
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
