From: Jun Yang <[email protected]> For ls104xa, MAC9 and MAC10's type could be either of 10G/2.5G/1G up to serdes configuration, MAC index should be identified by port name instead of parsing MAC type and port number.
Signed-off-by: Jun Yang <[email protected]> --- drivers/net/dpaa/dpaa_fmc.c | 73 ++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/drivers/net/dpaa/dpaa_fmc.c b/drivers/net/dpaa/dpaa_fmc.c index 7dc42f6e23..3034f534a5 100644 --- a/drivers/net/dpaa/dpaa_fmc.c +++ b/drivers/net/dpaa/dpaa_fmc.c @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2017-2023 NXP + * Copyright 2017-2026 NXP */ /* System headers */ @@ -204,6 +204,36 @@ struct fmc_model_t { struct fmc_model_t *g_fmc_model; +static int +dpaa_port_fmc_get_idx_from_name(const char *name) +{ + const char *found; + int idx_str_start = -1, idx; + +#define FMC_PORT_NAME_MAC "MAC/" +#define FMC_PORT_NAME_OFFLINE "OFFLINE/" + + found = strstr(name, FMC_PORT_NAME_MAC); + if (!found) { + found = strstr(name, FMC_PORT_NAME_OFFLINE); + if (found) + idx_str_start = strlen(FMC_PORT_NAME_OFFLINE); + } else { + idx_str_start = strlen(FMC_PORT_NAME_MAC); + } + + if (!found) { + DPAA_PMD_ERR("Invalid fmc port name: %s", name); + return -EINVAL; + } + + idx = atoi(&found[idx_str_start]); + + DPAA_PMD_INFO("MAC index of %s is %d", name, idx); + + return idx; +} + static int dpaa_port_fmc_port_parse(struct fman_if *fif, const struct fmc_model_t *fmc_model, @@ -211,7 +241,10 @@ dpaa_port_fmc_port_parse(struct fman_if *fif, { int current_port = fmc_model->apply_order[apply_idx].index; const fmc_port *pport = &fmc_model->port[current_port]; - uint32_t num; + int num = dpaa_port_fmc_get_idx_from_name(pport->name); + + if (num < 0) + return num; if (pport->type == e_FM_PORT_TYPE_OH_OFFLINE_PARSING && pport->number == fif->mac_idx && @@ -219,40 +252,22 @@ dpaa_port_fmc_port_parse(struct fman_if *fif, fif->mac_type == fman_onic)) return current_port; - if (fif->mac_type == fman_mac_1g) { - if (pport->type != e_FM_PORT_TYPE_RX) - return -ENODEV; - num = pport->number + DPAA_1G_MAC_START_IDX; - if (fif->mac_idx == num) - return current_port; - + if (fif->mac_type == fman_mac_1g && + pport->type != e_FM_PORT_TYPE_RX) return -ENODEV; - } - - if (fif->mac_type == fman_mac_2_5g) { - if (pport->type != e_FM_PORT_TYPE_RX_2_5G) - return -ENODEV; - num = pport->number + DPAA_2_5G_MAC_START_IDX; - if (fif->mac_idx == num) - return current_port; + if (fif->mac_type == fman_mac_2_5g && + pport->type != e_FM_PORT_TYPE_RX_2_5G) return -ENODEV; - } - - if (fif->mac_type == fman_mac_10g) { - if (pport->type != e_FM_PORT_TYPE_RX_10G) - return -ENODEV; - num = pport->number + DPAA_10G_MAC_START_IDX; - if (fif->mac_idx == num) - return current_port; + if (fif->mac_type == fman_mac_10g && + pport->type != e_FM_PORT_TYPE_RX_10G) return -ENODEV; - } - DPAA_PMD_ERR("Invalid MAC(mac_idx=%d) type(%d)", - fif->mac_idx, fif->mac_type); + if (fif->mac_idx == num) + return current_port; - return -EINVAL; + return -ENODEV; } static int -- 2.25.1

