lkml.org 
[lkml]   [2023]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/7] RAS: Add fixed Physical to logical CS ID mapping table
    Date
    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
    \
     
     \ /
      Last update: 2023-10-25 09:45    [W:8.364 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site