• Dan Williams's avatar
    cxl/region: Program target lists · 27b3f8d1
    Dan Williams authored
    Once the region's interleave geometry (ways, granularity, size) is
    established and all the endpoint decoder targets are assigned, the next
    phase is to program all the intermediate decoders. Specifically, each
    CXL switch in the path between the endpoint and its CXL host-bridge
    (including the logical switch internal to the host-bridge) needs to have
    its decoders programmed and the target list order assigned.
    
    The difficulty in this implementation lies in determining which endpoint
    decoder ordering combinations are valid. Consider the cxl_test case of 2
    host bridges, each of those host-bridges attached to 2 switches, and
    each of those switches attached to 2 endpoints for a potential 8-way
    interleave. The x2 interleave at the host-bridge level requires that all
    even numbered endpoint decoder positions be located on the "left" hand
    side of the topology tree, and the odd numbered positions on the other.
    The endpoints that are peers on the same switch need to have a position
    that can be routed with a dedicated address bit per-endpoint. See
    check_last_peer() for the details.
    Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    Link: https://lore.kernel.org/r/165784337827.1758207.132121746122685208.stgit@dwillia2-xfh.jf.intel.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    27b3f8d1
port.c 46 KB