1 | When validating decoder IW/IG when setting up regions, the granularity | 1 | When validating decoder IW/IG when setting up regions, the granularity |
---|---|---|---|
2 | is irrelevant when iw=1 - all accesses will always route to the only | 2 | is irrelevant when iw=1 - all accesses will always route to the only |
3 | target anyway - so all ig values are "correct". Loosen the requirement | 3 | target anyway - so all ig values are "correct". Loosen the requirement |
4 | that `ig = (parent_iw * parent_ig)` when iw=1. | 4 | that `ig = (parent_iw * parent_ig)` when iw=1. |
5 | 5 | ||
6 | On some Zen5 platforms, the platform BIOS specifies a 256-byte | ||
7 | interleave granularity window for host bridges when there is only | ||
8 | one target downstream. This leads to Linux rejecting the configuration | ||
9 | of a region with a x2 root with two x1 hostbridges. | ||
10 | |||
11 | Decoder Programming: | ||
12 | root - iw:2 ig:256 | ||
13 | hb1 - iw:1 ig:256 (Linux expects 512) | ||
14 | hb2 - iw:1 ig:256 (Linux expects 512) | ||
15 | ep1 - iw:2 ig:256 | ||
16 | ep2 - iw:2 ig:256 | ||
17 | |||
18 | This change allows all decoders downstream of a passthrough decoder to | ||
19 | also be configured as passthrough (iw:1 ig:X), but still disallows | ||
20 | downstream decoders from applying subsequent interleaves. | ||
21 | |||
22 | e.g. in the above example if there was another decoder south of hb1 | ||
23 | attempting to interleave 2 endpoints - Linux would enforce hb1.ig=512 | ||
24 | because the southern decoder would have iw:2 and require ig=pig*piw. | ||
25 | |||
6 | Signed-off-by: Gregory Price <gourry@gourry.net> | 26 | Signed-off-by: Gregory Price <gourry@gourry.net> |
27 | Reviewed-by: Dave Jiang <dave.jiang@intel.com> | ||
7 | --- | 28 | --- |
8 | drivers/cxl/core/region.c | 2 +- | 29 | drivers/cxl/core/region.c | 2 +- |
9 | 1 file changed, 1 insertion(+), 1 deletion(-) | 30 | 1 file changed, 1 insertion(+), 1 deletion(-) |
10 | 31 | ||
11 | diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c | 32 | diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c |
... | ... | diff view generated by jsdifflib |