From bea7de7419eec2bf9401d06e5b6262613a6251fa Mon Sep 17 00:00:00 2001 From: Ohad Oz Date: Sun, 6 Jan 2019 21:41:00 +0000 Subject: [PATCH] updating with latest patchs from HW mgmt; renaming two patchs 0016->0017 & 0017->0018 --- ...-Support-port-numbers-initialization.patch | 86 +++++++++++++++++++ ...mlxsw-thermal-monitoring-amendments.patch} | 2 +- ...introduce-watchdog-driver-for-Mella.patch} | 0 ...-Support-extended-port-numbers-for-S.patch | 75 ++++++++++++++++ 4 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 packages/base/any/kernels/4.9-lts/patches/0016-mlxsw-qsfp_sysfs-Support-port-numbers-initialization.patch rename packages/base/any/kernels/4.9-lts/patches/{0016-mlxsw-thermal-monitoring-amendments.patch => 0017-mlxsw-thermal-monitoring-amendments.patch} (99%) rename packages/base/any/kernels/4.9-lts/patches/{0017-watchdog-mlx-wdt-introduce-watchdog-driver-for-Mella.patch => 0018-watchdog-mlx-wdt-introduce-watchdog-driver-for-Mella.patch} (100%) create mode 100644 packages/base/any/kernels/4.9-lts/patches/0019-mlxsw-qsfp_sysfs-Support-extended-port-numbers-for-S.patch diff --git a/packages/base/any/kernels/4.9-lts/patches/0016-mlxsw-qsfp_sysfs-Support-port-numbers-initialization.patch b/packages/base/any/kernels/4.9-lts/patches/0016-mlxsw-qsfp_sysfs-Support-port-numbers-initialization.patch new file mode 100644 index 00000000..ae982fd4 --- /dev/null +++ b/packages/base/any/kernels/4.9-lts/patches/0016-mlxsw-qsfp_sysfs-Support-port-numbers-initialization.patch @@ -0,0 +1,86 @@ +From d83d9b8a4813c6a626db151f9b9269d8c69a032a Mon Sep 17 00:00:00 2001 +From: Vadim Pasternak +Date: Sun, 6 Jan 2019 12:25:46 +0000 +Subject: [PATCH v1] mlxsw: qsfp_sysfs: Support port numbers initialization + +Support port numbers initialization based on system type. + +Signed-off-by: Vadim Pasternak +--- + drivers/net/ethernet/mellanox/mlxsw/core.c | 20 +++++++++++++++++++- + drivers/net/ethernet/mellanox/mlxsw/core.h | 10 +++------- + drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c | 1 + + 3 files changed, 23 insertions(+), 8 deletions(-) + +diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c +index 10863d6..01987f0 100644 +--- a/drivers/net/ethernet/mellanox/mlxsw/core.c ++++ b/drivers/net/ethernet/mellanox/mlxsw/core.c +@@ -114,12 +114,30 @@ struct mlxsw_core { + struct mlxsw_resources resources; + struct mlxsw_hwmon *hwmon; + struct mlxsw_thermal *thermal; +-struct mlxsw_qsfp *qsfp; ++ struct mlxsw_qsfp *qsfp; + struct mlxsw_core_port ports[MLXSW_PORT_MAX_PORTS]; ++ unsigned int max_ports; + unsigned long driver_priv[0]; + /* driver_priv has to be always the last item */ + }; + ++#define MLXSW_PORT_MAX_PORTS_DEFAULT 0x40 ++unsigned int mlxsw_core_max_ports(const struct mlxsw_core *mlxsw_core) ++{ ++ if (mlxsw_core->max_ports) ++ return mlxsw_core->max_ports; ++ else ++ return MLXSW_PORT_MAX_PORTS_DEFAULT; ++} ++EXPORT_SYMBOL(mlxsw_core_max_ports); ++ ++void mlxsw_core_max_ports_set(struct mlxsw_core *mlxsw_core, ++ unsigned int max_ports) ++{ ++ mlxsw_core->max_ports = max_ports; ++} ++EXPORT_SYMBOL(mlxsw_core_max_ports_set); ++ + void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core) + { + return mlxsw_core->driver_priv; +diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h +index 4fb104e..db27dd0 100644 +--- a/drivers/net/ethernet/mellanox/mlxsw/core.h ++++ b/drivers/net/ethernet/mellanox/mlxsw/core.h +@@ -63,13 +63,9 @@ struct mlxsw_driver; + struct mlxsw_bus; + struct mlxsw_bus_info; + +-#define MLXSW_PORT_MAX_PORTS_DEFAULT 0x40 +-static inline unsigned int +-mlxsw_core_max_ports(const struct mlxsw_core *mlxsw_core) +-{ +- return MLXSW_PORT_MAX_PORTS_DEFAULT; +-} +- ++unsigned int mlxsw_core_max_ports(const struct mlxsw_core *mlxsw_core); ++void mlxsw_core_max_ports_set(struct mlxsw_core *mlxsw_core, ++ unsigned int max_ports); + void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core); + + int mlxsw_core_driver_register(struct mlxsw_driver *mlxsw_driver); +diff --git a/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c b/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c +index bee2a08..0781f16 100644 +--- a/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c ++++ b/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c +@@ -298,6 +298,7 @@ int mlxsw_qsfp_init(struct mlxsw_core *mlxsw_core, + mlxsw_qsfp->bus_info = mlxsw_bus_info; + mlxsw_bus_info->dev->platform_data = mlxsw_qsfp; + ++ mlxsw_core_max_ports_set(mlxsw_core, mlxsw_qsfp_num); + for (i = 1; i <= mlxsw_qsfp_num; i++) { + mlxsw_reg_pmlp_pack(pmlp_pl, i); + err = mlxsw_reg_query(mlxsw_qsfp->core, MLXSW_REG(pmlp), +-- +2.1.4 + diff --git a/packages/base/any/kernels/4.9-lts/patches/0016-mlxsw-thermal-monitoring-amendments.patch b/packages/base/any/kernels/4.9-lts/patches/0017-mlxsw-thermal-monitoring-amendments.patch similarity index 99% rename from packages/base/any/kernels/4.9-lts/patches/0016-mlxsw-thermal-monitoring-amendments.patch rename to packages/base/any/kernels/4.9-lts/patches/0017-mlxsw-thermal-monitoring-amendments.patch index f1d4b58c..9abbc574 100644 --- a/packages/base/any/kernels/4.9-lts/patches/0016-mlxsw-thermal-monitoring-amendments.patch +++ b/packages/base/any/kernels/4.9-lts/patches/0017-mlxsw-thermal-monitoring-amendments.patch @@ -484,7 +484,7 @@ index d8fa4be..11388c5 100644 } /* Validate that conf parameters are not zeros. */ - if (!data->mask || !data->bit) { -+ if (!data->mask || !data->bit || !data->capability) { ++ if (!data->mask && !data->bit && !data->capability) { dev_err(fan->dev, "invalid conf entry params: %s\n", data->label); return -EINVAL; diff --git a/packages/base/any/kernels/4.9-lts/patches/0017-watchdog-mlx-wdt-introduce-watchdog-driver-for-Mella.patch b/packages/base/any/kernels/4.9-lts/patches/0018-watchdog-mlx-wdt-introduce-watchdog-driver-for-Mella.patch similarity index 100% rename from packages/base/any/kernels/4.9-lts/patches/0017-watchdog-mlx-wdt-introduce-watchdog-driver-for-Mella.patch rename to packages/base/any/kernels/4.9-lts/patches/0018-watchdog-mlx-wdt-introduce-watchdog-driver-for-Mella.patch diff --git a/packages/base/any/kernels/4.9-lts/patches/0019-mlxsw-qsfp_sysfs-Support-extended-port-numbers-for-S.patch b/packages/base/any/kernels/4.9-lts/patches/0019-mlxsw-qsfp_sysfs-Support-extended-port-numbers-for-S.patch new file mode 100644 index 00000000..0783cffb --- /dev/null +++ b/packages/base/any/kernels/4.9-lts/patches/0019-mlxsw-qsfp_sysfs-Support-extended-port-numbers-for-S.patch @@ -0,0 +1,75 @@ +From c6a95c1ea4518a19cf46e8d0c844ae980df4c5da Mon Sep 17 00:00:00 2001 +From: Vadim Pasternak +Date: Thu, 3 Jan 2019 18:05:01 +0000 +Subject: [PATCH v1] mlxsw: qsfp_sysfs: Support extended port numbers for + Spectrume2 chip + +Add system type detection through DMI table in order to distinct between +the systems supporting up to 64 and up to 128 ports. + +Signed-off-by: Vadim Pasternak +--- + drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c | 19 +++++++++++++++++-- + 1 file changed, 17 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c b/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c +index c072b91..bee2a08 100644 +--- a/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c ++++ b/drivers/net/ethernet/mellanox/mlxsw/qsfp_sysfs.c +@@ -47,7 +47,7 @@ + #define MLXSW_QSFP_SUB_PAGE_NUM 3 + #define MLXSW_QSFP_SUB_PAGE_SIZE 48 + #define MLXSW_QSFP_LAST_SUB_PAGE_SIZE 32 +-#define MLXSW_QSFP_MAX_NUM 64 ++#define MLXSW_QSFP_MAX_NUM 128 + #define MLXSW_QSFP_MIN_REQ_LEN 4 + #define MLXSW_QSFP_STATUS_VALID_TIME (120 * HZ) + #define MLXSW_QSFP_MAX_CPLD_NUM 3 +@@ -88,6 +88,7 @@ struct mlxsw_qsfp { + }; + + static int mlxsw_qsfp_cpld_num = MLXSW_QSFP_MIN_CPLD_NUM; ++static int mlxsw_qsfp_num = MLXSW_QSFP_MAX_NUM / 2; + + static int + mlxsw_qsfp_query_module_eeprom(struct mlxsw_qsfp *mlxsw_qsfp, u8 index, +@@ -238,6 +239,13 @@ static int mlxsw_qsfp_dmi_set_cpld_num(const struct dmi_system_id *dmi) + return 1; + }; + ++static int mlxsw_qsfp_dmi_set_qsfp_num(const struct dmi_system_id *dmi) ++{ ++ mlxsw_qsfp_num = MLXSW_QSFP_MAX_NUM; ++ ++ return 1; ++}; ++ + static const struct dmi_system_id mlxsw_qsfp_dmi_table[] = { + { + .callback = mlxsw_qsfp_dmi_set_cpld_num, +@@ -253,6 +261,13 @@ static const struct dmi_system_id mlxsw_qsfp_dmi_table[] = { + DMI_MATCH(DMI_PRODUCT_NAME, "MSN27"), + }, + }, ++ { ++ .callback = mlxsw_qsfp_dmi_set_qsfp_num, ++ .matches = { ++ DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "MSN37"), ++ }, ++ }, + { } + }; + MODULE_DEVICE_TABLE(dmi, mlxsw_qsfp_dmi_table); +@@ -283,7 +298,7 @@ int mlxsw_qsfp_init(struct mlxsw_core *mlxsw_core, + mlxsw_qsfp->bus_info = mlxsw_bus_info; + mlxsw_bus_info->dev->platform_data = mlxsw_qsfp; + +- for (i = 1; i <= MLXSW_QSFP_MAX_NUM; i++) { ++ for (i = 1; i <= mlxsw_qsfp_num; i++) { + mlxsw_reg_pmlp_pack(pmlp_pl, i); + err = mlxsw_reg_query(mlxsw_qsfp->core, MLXSW_REG(pmlp), + pmlp_pl); +-- +2.1.4 +