Dave Jiang wrote: > > > On 11/4/2022 11:59 AM, Dan Williams wrote: > > Verma, Vishal L wrote: > >> On Thu, 2022-11-03 at 17:30 -0700, Dan Williams wrote: > >>> When programming port decode targets, the algorithm wants to ensure that > >>> two devices are compatible to be programmed as peers beneath a given > >>> port. A compatible peer is a target that shares the same dport, and > >>> where that target's interleave position also routes it to the same > >>> dport. Compatibility is determined by the device's interleave position > >>> being >= to distance. For example, if a given dport can only map every > >>> Nth position then positions less than N away from the last target > >>> programmed are incompatible. > >>> > >>> The @distance for the host-bridge-cxl_port a simple dual-ported > >> ^ > >> Is this meant to be "the distance for the host-bridge to a cxl_port"? > > > > No, but I will preface this explanation by admitting "distance" may not > > be the best term for what this value is describing. CXL decode routes to > > targets in a round robin fashion per-port. Take the diagram below: > > > > ┌───────────────────────────────────┬──┐ > > │WINDOW0 │x2│ > > └─────────┬─────────────────┬───────┴──┘ > > │ │ > > ┌─────────▼────┬──┐ ┌──────▼───────┬──┐ > > │HB0 │x2│ │HB1 │x2│ > > └──┬────────┬──┴──┘ └─┬─────────┬──┴──┘ > > │ │ │ │ > > ┌──▼─┬──┐ ┌─▼──┬──┐ ┌─▼──┬──┐ ┌─▼──┬──┐ > > │DEV0│x4│ │DEV1│x4│ │DEV2│x4│ │DEV3│x4│ > > └────┴──┘ └────┴──┘ └────┴──┘ └────┴──┘ > > 0 2 1 3 > > > > ...where an x4 region is being established, and all the xN values are > > the interleave-ways settings for those ports/devices. The @distance > > value for that "HB0" port is 2. I.e. in order for 2 devices in that > > region to be mapped under HB0 they must be at position X and X+2 in the > > region. The algorithm needs to be flexible to also allow this > > configuration: > > > > ┌───────────────────────────────────┬──┐ > > │WINDOW0 │x2│ > > └─────────┬─────────────────┬───────┴──┘ > > │ │ > > ┌─────────▼────┬──┐ ┌──────▼───────┬──┐ > > │HB0 │x2│ │HB1 │x2│ > > └──┬────────┬──┴──┘ └─┬─────────┬──┴──┘ > > │ │ │ │ > > ┌──▼─┬──┐ ┌─▼──┬──┐ ┌─▼──┬──┐ ┌─▼──┬──┐ > > │DEV3│x4│ │DEV2│x4│ │DEV1│x4│ │DEV0│x4│ > > └────┴──┘ └────┴──┘ └────┴──┘ └────┴──┘ > > 3 1 2 0 > > > > ...and the algorithm can not know that a device is in the wrong position > > until trying to map the peer (like DEV0 and DEV1 are peers) into the > > decode. So "The @distance for the host-bridge-cxl_port" is referring to > > the value "2" for host-bridge-cxl_port:HB0 and host-bridge-cxl_port:HB1 > > in the diagram. > > > >> Also missing '/in/ a simple dual-ported..'? > > > > Yes to this fixup though. > > > >> > >>> host-bridge configuration with 2 direct-attached devices is 1. An x2 > >>> region divded by 2 dports to reach 2 region targets. > >> > >> The second sentence seems slightly incomprehensible too. > > > > Oh, I think I meant that to be s/. An/, i.e. an/: > > > > "...host-bridge configuration with 2 direct-attached devices is 1, i.e. > > an x2 region divded by 2 dports to reach 2 region positions" > > s/divded/divided/ ? Yup, thanks.