Messages in this thread Patch in this message | | | From | Muralidhara M K <> | Subject | [PATCH 5/7] RAS: Add fixed Physical to logical CS ID mapping table | Date | Wed, 25 Oct 2023 07:33:37 +0000 |
| |
From: Muralidhara M K <muralidhara.mk@amd.com>
AMD MI300A models have a single Data Fabric (DF) instance per socket. So, only one out of 4 AIDs are software-visible using PCI Device 18h.
Add a static lookup table for converting physical CS ID to logical CS ID for mapping of all 4 respective AIDs in a socket.
Signed-off-by: Muralidhara M K <muralidhara.mk@amd.com> --- drivers/ras/amd/atl/denormalize.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/drivers/ras/amd/atl/denormalize.c b/drivers/ras/amd/atl/denormalize.c index b233a26f68fc..4c127347a56e 100644 --- a/drivers/ras/amd/atl/denormalize.c +++ b/drivers/ras/amd/atl/denormalize.c @@ -442,6 +442,20 @@ static u16 get_logical_cs_fabric_id(struct addr_ctx *ctx) return (phys_cs_fabric_id & df_cfg.node_id_mask) | log_cs_fabric_id; } +/* Physical CS to Logical CS mapping for MI300 AIDs */ +u16 phy_to_logicalcs_mapping_mi300_aid[] = { 12, 13, 14, 15, 8, 9, 10, 11, + 4, 5, 6, 7, 0, 1, 2, 3, + 28, 29, 30, 31, 24, 25, 26, 27, + 20, 21, 22, 23, 16, 17, 18, 19}; + +static u16 get_logical_cs_fabric_id_mi300_die(struct addr_ctx *ctx) +{ + if (ctx->inst_id >= sizeof(phy_to_logicalcs_mapping_mi300_aid)) + return -EINVAL; + + return phy_to_logicalcs_mapping_mi300_aid[ctx->inst_id]; +} + static int denorm_addr_common(struct addr_ctx *ctx) { u64 denorm_addr; @@ -451,7 +465,11 @@ static int denorm_addr_common(struct addr_ctx *ctx) * Convert the original physical CS Fabric ID to a logical value. * This is required for non-power-of-two and other interleaving modes. */ - ctx->cs_fabric_id = get_logical_cs_fabric_id(ctx); + if (df_cfg.rev == DF4p5 && df_cfg.flags.heterogeneous) + ctx->cs_fabric_id = (ctx->cs_fabric_id & df_cfg.node_id_mask) | + get_logical_cs_fabric_id_mi300_die(ctx); + else + ctx->cs_fabric_id = get_logical_cs_fabric_id(ctx); denorm_addr = make_space_for_cs_id(ctx); cs_id = calculate_cs_id(ctx); -- 2.25.1
| |