mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-31 18:17:52 +00:00 
			
		
		
		
	[Mellanox] Update HW-MGMT package to new version V.7.0030.1011 (#16239)
- Why I did it 1. Update Mellanox HW-MGMT package to newer version V.7.0030.1011 2. Replace the SONiC PMON Thermal control algorithm with the one inside the HW-MGMT package on all Nvidia platforms 3. Support Spectrum-4 systems - How I did it 1. Update the HW-MGMT package version number and submodule pointer 2. Remove the thermal control algorithm implementation from Mellanox platform API 3. Revise the patch to HW-MGMT package which will disable HW-MGMT from running on SIMX 4. Update the downstream kernel patch list Signed-off-by: Kebo Liu <kebol@nvidia.com>
This commit is contained in:
		| @@ -4,77 +4,9 @@ | |||||||
|         "fan_speed_when_suspend": "60" |         "fan_speed_when_suspend": "60" | ||||||
|     }, |     }, | ||||||
|     "info_types": [ |     "info_types": [ | ||||||
|         { |  | ||||||
|             "type": "fan_info" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "psu_info" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "chassis_info" |  | ||||||
|         } |  | ||||||
|     ], |     ], | ||||||
|     "policies": [ |     "policies": [ | ||||||
|         { |  | ||||||
|             "name": "any fan absence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.any.absence" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "any psu absence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "psu.any.absence" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "any fan broken", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.any.fault" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "all fan and psu presence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.presence" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "psu.all.presence" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.good" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "thermal.recover" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         } |  | ||||||
|     ] |     ] | ||||||
| } | } | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| # | # | ||||||
| # Copyright (c) 2016-2022 NVIDIA CORPORATION & AFFILIATES. | # Copyright (c) 2016-2023 NVIDIA CORPORATION & AFFILIATES. | ||||||
| # Apache-2.0 | # Apache-2.0 | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| @@ -16,7 +16,7 @@ | |||||||
| # | # | ||||||
| # Mellanox HW Management | # Mellanox HW Management | ||||||
|  |  | ||||||
| MLNX_HW_MANAGEMENT_VERSION = 7.0020.4301 | MLNX_HW_MANAGEMENT_VERSION = 7.0030.1011 | ||||||
|  |  | ||||||
| export MLNX_HW_MANAGEMENT_VERSION | export MLNX_HW_MANAGEMENT_VERSION | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,69 +1,103 @@ | |||||||
| From 422b64397f2f33b394d037820f0ceb4c09e3a725 Mon Sep 17 00:00:00 2001 | From eb3a76d7fbd0cbf2c370ecadd912960b094403d6 Mon Sep 17 00:00:00 2001 | ||||||
| From: Alexander Allen <arallen@nvidia.com> | From: Junchao-Mellanox <junchao@nvidia.com> | ||||||
| Date: Fri, 21 Jan 2022 16:47:19 +0000 | Date: Wed, 23 Aug 2023 14:33:44 +0800 | ||||||
| Subject: [PATCH 2/4] Disable hw-mgmt on SimX platforms | Subject: [PATCH] [PATCH 2/4] Disable hw-mgmt on SimX platforms | ||||||
|  |  | ||||||
| --- | --- | ||||||
|  usr/usr/bin/hw-management-ready.sh | 11 +++++++---- |  usr/usr/bin/hw-management-ready.sh |  3 --- | ||||||
|  usr/usr/bin/hw-management.sh       |  9 +++++++++ |  usr/usr/bin/hw-management.sh       | 21 +++++++++------------ | ||||||
|  2 files changed, 16 insertions(+), 4 deletions(-) |  2 files changed, 9 insertions(+), 15 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/usr/usr/bin/hw-management-ready.sh b/usr/usr/bin/hw-management-ready.sh | diff --git a/usr/usr/bin/hw-management-ready.sh b/usr/usr/bin/hw-management-ready.sh | ||||||
| index 88672a8..7558c68 100755 | index 840bb0b..2f8547f 100755 | ||||||
| --- a/usr/usr/bin/hw-management-ready.sh | --- a/usr/usr/bin/hw-management-ready.sh | ||||||
| +++ b/usr/usr/bin/hw-management-ready.sh | +++ b/usr/usr/bin/hw-management-ready.sh | ||||||
| @@ -51,17 +51,20 @@ if [ -d /var/run/hw-management ]; then | @@ -56,9 +56,6 @@ fi | ||||||
|  	rm -fr /var/run/hw-management |  # environment, TC need to be stopped. | ||||||
|  fi |  if [ -n "$(lspci -vvv | grep SimX)" ]; then | ||||||
|   |  	case $product_sku in | ||||||
| -case $board_type in | -		HI130|HI122) | ||||||
| -VMOD0014) | -			# Let the TC continue to run | ||||||
| +if [ -z "$(lspci -vvv | grep SimX)" ]; then | -			;; | ||||||
| +    case $board_type in |  		*) | ||||||
| +    VMOD0014) |  			if systemctl is-enabled --quiet hw-management-tc; then | ||||||
|  	if [ ! -d /sys/devices/pci0000:00/0000:00:1f.0/NVSN2201:00/mlxreg-hotplug/hwmon ]; then |  				echo "Stopping and disabling hw-management-tc on SimX" | ||||||
|  		timeout 180 bash -c 'until [ -d /sys/devices/pci0000:00/0000:00:1f.0/NVSN2201:00/mlxreg-hotplug/hwmon ]; do sleep 0.2; done' |  | ||||||
|  	fi |  | ||||||
|  	;; |  | ||||||
| -*) |  | ||||||
| +    *) |  | ||||||
|  	if [ ! -d /sys/devices/platform/mlxplat/mlxreg-hotplug/hwmon ]; then |  | ||||||
|  		timeout 180 bash -c 'until [ -d /sys/devices/platform/mlxplat/mlxreg-hotplug/hwmon ]; do sleep 0.2; done' |  | ||||||
|  	fi |  | ||||||
|  	;; |  | ||||||
| -esac |  | ||||||
| +    esac |  | ||||||
| +fi |  | ||||||
| + |  | ||||||
|  echo "Start Chassis HW management service." |  | ||||||
|  logger -t hw-management -p daemon.notice "Start Chassis HW management service." |  | ||||||
| diff --git a/usr/usr/bin/hw-management.sh b/usr/usr/bin/hw-management.sh | diff --git a/usr/usr/bin/hw-management.sh b/usr/usr/bin/hw-management.sh | ||||||
| index 1ee05b5..50d922b 100755 | index d3914d1..a60dba9 100755 | ||||||
| --- a/usr/usr/bin/hw-management.sh | --- a/usr/usr/bin/hw-management.sh | ||||||
| +++ b/usr/usr/bin/hw-management.sh | +++ b/usr/usr/bin/hw-management.sh | ||||||
| @@ -2310,6 +2310,13 @@ do_chip_down() | @@ -545,7 +545,7 @@ function restore_i2c_bus_frequency_default() | ||||||
|  	/usr/bin/hw-management-thermal-events.sh change hotplug_asic down %S %p |  function find_regio_sysfs_path_helper() | ||||||
|  } |  { | ||||||
|  |  	# Find hwmon{n} sysfs path for regio device | ||||||
|  | -	case $board_type in  | ||||||
|  | +	case $board_type in | ||||||
|  |  	VMOD0014) | ||||||
|  |  		for path in /sys/devices/pci0000:00/*/NVSN2201:*/mlxreg-io/hwmon/hwmon*; do | ||||||
|  |  			if [ -d "$path" ]; then | ||||||
|  | @@ -732,10 +732,10 @@ set_jtag_gpio() | ||||||
|  |  	gpio_tdi=$((gpiobase+jtag_tdi)) | ||||||
|  |  	echo $gpio_tdi > /sys/class/gpio/"$export_unexport" | ||||||
|   |   | ||||||
| +check_simx() | -	# In SN2201 system.  | ||||||
| +{ | +	# In SN2201 system. | ||||||
| +	if [ -n "$(lspci -vvv | grep SimX)" ]; then |  	# GPIO0 for CPU request to reset the Main Board I2C Mux. | ||||||
| +		exit 0 | -	# GPIO1 for CPU control the CPU Board MUX when doing the ISP programming.  | ||||||
|  | -	# GPIO13 for CPU request Main Board JTAG control signal.  | ||||||
|  | +	# GPIO1 for CPU control the CPU Board MUX when doing the ISP programming. | ||||||
|  | +	# GPIO13 for CPU request Main Board JTAG control signal. | ||||||
|  |  	if [ "$board_type" == "VMOD0014" ]; then | ||||||
|  |  		mux_reset=27 | ||||||
|  |  		jtag_mux_en=33 | ||||||
|  | @@ -1294,7 +1294,7 @@ connect_msn4700_msn4600_A1() | ||||||
|  |  		#  msn4600C with removed A2D | ||||||
|  |  		connect_table+=(${msn4600C_A1_base_connect_table[@]}) | ||||||
|  |  	else | ||||||
|  | -		# msn4700/msn4600 respin  | ||||||
|  | +		# msn4700/msn4600 respin | ||||||
|  |  		connect_table+=(${msn4700_msn4600_A1_base_connect_table[@]}) | ||||||
|  |  	fi | ||||||
|  |  	add_cpu_board_to_connection_table | ||||||
|  | @@ -2144,7 +2144,7 @@ create_symbolic_links() | ||||||
|  |  	fi | ||||||
|  |  	if [ ! -d $thermal_path ]; then | ||||||
|  |  		mkdir $thermal_path | ||||||
|  | -	fi	 | ||||||
| +	fi | +	fi | ||||||
| +} |  	if [ ! -d $config_path ]; then | ||||||
| + |  		mkdir $config_path | ||||||
|  __usage=" |  	fi | ||||||
|  Usage: $(basename "$0") [Options] | @@ -2341,7 +2341,7 @@ do_start() | ||||||
|  |  	check_system | ||||||
|  |  	set_asic_pci_id | ||||||
|   |   | ||||||
| @@ -2335,6 +2342,8 @@ Options: | -	asic_control=$(< $config_path/asic_control)  | ||||||
|  	force-reload	Performs hw-management 'stop' and the 'start. | +	asic_control=$(< $config_path/asic_control) | ||||||
|  " |  	if [[ $asic_control -ne 0 ]]; then | ||||||
|   |  		get_asic_bus | ||||||
| +check_simx |  		get_asic2_bus | ||||||
| + | @@ -2379,9 +2379,9 @@ do_start() | ||||||
|  case $ACTION in |  	else | ||||||
|  	start) |  		ln -sf /etc/sensors3.conf $config_path/lm_sensors_config | ||||||
|  		if [ -d /var/run/hw-management ]; then |  	fi | ||||||
|  | -	if [ -v "lm_sensors_labels" ] && [ -f $lm_sensors_labels ]; then  | ||||||
|  | +	if [ -v "lm_sensors_labels" ] && [ -f $lm_sensors_labels ]; then | ||||||
|  |  		ln -sf $lm_sensors_labels $config_path/lm_sensors_labels | ||||||
|  | -	fi  | ||||||
|  | +	fi | ||||||
|  |  	if [ -v "thermal_control_config" ] && [ -f $thermal_control_config ]; then | ||||||
|  |  		ln -sf $thermal_control_config $config_path/tc_config.json | ||||||
|  |  	else | ||||||
|  | @@ -2528,9 +2528,6 @@ do_chip_up_down() | ||||||
|  |  check_simx() | ||||||
|  |  { | ||||||
|  |  	case $sku in | ||||||
|  | -		HI130|HI122) | ||||||
|  | -			# Let the initialization go through | ||||||
|  | -			;; | ||||||
|  |  		*) | ||||||
|  |  			if [ -n "$(lspci -vvv | grep SimX)" ]; then | ||||||
|  |  				exit 0 | ||||||
| --  | --  | ||||||
| 2.20.1 | 1.9.1 | ||||||
|  |  | ||||||
|   | |||||||
 Submodule platform/mellanox/hw-management/hw-mgmt updated: c036e38b39...c7d4c31a21
									
								
							| @@ -1,4 +1,10 @@ | |||||||
| # Current non-upstream patch list, should be updated by hwmgmt_kernel_patches.py script | # Current non-upstream patch list, should be updated by hwmgmt_kernel_patches.py script | ||||||
|  | 0049-leds-mlxreg-Provide-conversion-for-hardware-LED-colo.patch | ||||||
|  | 0050-leds-mlxreg-Skip-setting-LED-color-during-initializa.patch | ||||||
|  | 0051-leds-mlxreg-Allow-multi-instantiation-of-same-name-L.patch | ||||||
|  | 0098-1-Revert-mlxsw-Use-u16-for-local_port-field.patch | ||||||
|  | 0098-2-Revert-mlxsw-i2c-Fix-chunk-size-setting.patch | ||||||
|  | 0098-3-Revert-mlxsw-core_hwmon-Adjust-module-label-names.patch | ||||||
| 0099-mlxsw-core_hwmon-Fix-variable-names-for-hwmon-attrib.patch | 0099-mlxsw-core_hwmon-Fix-variable-names-for-hwmon-attrib.patch | ||||||
| 0100-mlxsw-core_thermal-Rename-labels-according-to-naming.patch | 0100-mlxsw-core_thermal-Rename-labels-according-to-naming.patch | ||||||
| 0101-mlxsw-core_thermal-Remove-obsolete-API-for-query-res.patch | 0101-mlxsw-core_thermal-Remove-obsolete-API-for-query-res.patch | ||||||
| @@ -57,7 +63,107 @@ | |||||||
| 0154-mlxsw-core-Export-line-card-API.patch | 0154-mlxsw-core-Export-line-card-API.patch | ||||||
| 0155-mlxsw-minimal-Add-system-event-handler.patch | 0155-mlxsw-minimal-Add-system-event-handler.patch | ||||||
| 0156-mlxsw-minimal-Add-interfaces-for-line-card-initializ.patch | 0156-mlxsw-minimal-Add-interfaces-for-line-card-initializ.patch | ||||||
| 0163-platform-mellanox-Introduce-support-for-rack-manager.patch | 0167-DS-lan743x-Add-support-for-fixed-phy.patch | ||||||
| 0176-platform-mellanox-fix-reset_pwr_converter_fail-attri.patch | 0168-TMP-mlxsw-minimal-Ignore-error-reading-SPAD-register.patch | ||||||
| 0177-Documentation-ABI-fix-description-of-fix-reset_pwr_c.patch | 0171-platform-mellanox-mlxreg-lc-Fix-cleanup-on-failure-a.patch | ||||||
| 0178-platform-mellanox-Introduce-support-for-next-generat.patch | 0172-DS-platform-mlx-platform-Add-SPI-path-for-rack-switc.patch | ||||||
|  | 0174-DS-mlxsw-core_linecards-Skip-devlink-and-provisionin.patch | ||||||
|  | 0181-Revert-Fix-out-of-bounds-memory-accesses-in-thermal.patch | ||||||
|  | 0182-platform-mellanox-Introduce-support-of-new-Nvidia-L1.patch | ||||||
|  | 0183-platform-mellanox-Split-initialization-procedure.patch | ||||||
|  | 0184-platform-mellanox-Split-logic-in-init-and-exit-flow.patch | ||||||
|  | 0185-platform-mellanox-Extend-all-systems-with-I2C-notifi.patch | ||||||
|  | 0187-platform_data-mlxreg-Add-field-with-mapped-resource-.patch | ||||||
|  | 0188-i2c-mux-Add-register-map-based-mux-driver.patch | ||||||
|  | 0189-i2c-mlxcpld-Allow-driver-to-run-on-ARM64-architectur.patch | ||||||
|  | 0190-i2c-mlxcpld-Modify-base-address-type.patch | ||||||
|  | 0191-i2c-mlxcpld-Allow-to-configure-base-address-of-regis.patch | ||||||
|  | 0192-i2c-mlxcpld-Add-support-for-extended-transaction-len.patch | ||||||
|  | 0193-platform-mellanox-mlx-platform-Add-mux-selection-reg.patch | ||||||
|  | 0194-platform-mellanox-mlx-platform-Move-bus-shift-assign.patch | ||||||
|  | 0195-platform-mellanox-Add-support-for-dynamic-I2C-channe.patch | ||||||
|  | 0196-platform-mellanox-Relocate-mlx-platform-driver.patch | ||||||
|  | 0197-platform-mellanox-Add-initial-support-for-PCIe-based.patch | ||||||
|  | 0198-platform-mellanox-Introduce-support-for-switches-bas.patch | ||||||
|  | 0199-platform-mellanox-mlx-platform-Add-reset-and-extend-.patch | ||||||
|  | 0200-dt-bindings-i2c-mellanox-i2c-mlxbf-convert-txt-to-YA.patch | ||||||
|  | 0203-i2c-mlxbf-remove-IRQF_ONESHOT.patch | ||||||
|  | 0206-i2c-mlxbf-add-multi-slave-functionality.patch | ||||||
|  | 0207-i2c-mlxbf-support-BlueField-3-SoC.patch | ||||||
|  | 0208-i2c-mlxbf-remove-device-tree-support.patch | ||||||
|  | 0209-UBUNTU-SAUCE-i2c-mlxbf.c-Add-driver-version.patch | ||||||
|  | 0210-platform-mellanox-Typo-fix-in-the-file-mlxbf-bootctl.patch | ||||||
|  | 0211-UBUNTU-SAUCE-platform-mellanox-Updates-to-mlxbf-boot.patch | ||||||
|  | 0212-platform-mellanox-mlxbf-pmc-Add-Mellanox-BlueField-P.patch | ||||||
|  | 0213-platform-mellanox-mlxbf-pmc-fix-kernel-doc-notation.patch | ||||||
|  | 0214-platform-mellanox-mlxbf-pmc-Fix-an-IS_ERR-vs-NULL-bu.patch | ||||||
|  | 0215-UBUNTU-SAUCE-platform-mellanox-Updates-to-mlxbf-pmc.patch | ||||||
|  | 0216-UBUNTU-SAUCE-mlxbf_pmc-Fix-references-to-sprintf.patch | ||||||
|  | 0217-UBUNTU-SAUCE-mlxbf-pmc-Fix-error-when-reading-unprog.patch | ||||||
|  | 0218-UBUNTU-SAUCE-platform-mellanox-Add-mlx-trio-driver.patch | ||||||
|  | 0219-UBUNTU-SAUCE-platform-mellanox-mlxbf-tmfifo-Add-Blue.patch | ||||||
|  | 0220-UBUNTU-SAUCE-pka-Add-pka-driver.patch | ||||||
|  | 0221-UBUNTU-SAUCE-platform-mellanox-Add-mlxbf-livefish-dr.patch | ||||||
|  | 0222-workqueue-Add-resource-managed-version-of-delayed-wo.patch | ||||||
|  | 0223-devm-helpers-Fix-devm_delayed_work_autocancel-kernel.patch | ||||||
|  | 0224-devm-helpers-Add-resource-managed-version-of-work-in.patch | ||||||
|  | 0225-UBUNTU-SAUCE-Add-support-to-pwr-mlxbf.c-driver.patch | ||||||
|  | 0226-Add-Mellanox-BlueField-Gigabit-Ethernet-driver.patch | ||||||
|  | 0227-mlxbf_gige-clear-valid_polarity-upon-open.patch | ||||||
|  | 0228-net-mellanox-mlxbf_gige-Replace-non-standard-interru.patch | ||||||
|  | 0229-mlxbf_gige-increase-MDIO-polling-rate-to-5us.patch | ||||||
|  | 0230-mlxbf_gige-remove-driver-managed-interrupt-counts.patch | ||||||
|  | 0231-mlxbf_gige-remove-own-module-name-define-and-use-KBU.patch | ||||||
|  | 0232-UBUNTU-SAUCE-mlxbf_gige-add-ethtool-mlxbf_gige_set_r.patch | ||||||
|  | 0233-UBUNTU-SAUCE-Fix-OOB-handling-RX-packets-in-heavy-tr.patch | ||||||
|  | 0234-UBUNTU-SAUCE-mlxbf_gige-add-validation-of-ACPI-table.patch | ||||||
|  | 0235-UBUNTU-SAUCE-mlxbf_gige-set-driver-version-to-1.27.patch | ||||||
|  | 0236-UBUNTU-SAUCE-mlxbf_gige-clear-MDIO-gateway-lock-afte.patch | ||||||
|  | 0237-mlxbf_gige-compute-MDIO-period-based-on-i1clk.patch | ||||||
|  | 0238-net-mlxbf_gige-Fix-an-IS_ERR-vs-NULL-bug-in-mlxbf_gi.patch | ||||||
|  | 0239-UBUNTU-SAUCE-mlxbf_gige-add-MDIO-support-for-BlueFie.patch | ||||||
|  | 0240-UBUNTU-SAUCE-mlxbf_gige-support-10M-100M-1G-speeds-o.patch | ||||||
|  | 0241-UBUNTU-SAUCE-mlxbf_gige-add-BlueField-3-Serdes-confi.patch | ||||||
|  | 0242-UBUNTU-SAUCE-mlxbf_gige-add-BlueField-3-ethtool_ops.patch | ||||||
|  | 0243-UBUNTU-SAUCE-bluefield_edac-Add-SMC-support.patch | ||||||
|  | 0244-UBUNTU-SAUCE-bluefield_edac-Update-license-and-copyr.patch | ||||||
|  | 0245-gpio-mlxbf2-Convert-to-device-PM-ops.patch | ||||||
|  | 0246-gpio-mlxbf2-Drop-wrong-use-of-ACPI_PTR.patch | ||||||
|  | 0247-gpio-mlxbf2-Use-devm_platform_ioremap_resource.patch | ||||||
|  | 0248-gpio-mlxbf2-Use-DEFINE_RES_MEM_NAMED-helper-macro.patch | ||||||
|  | 0249-gpio-mlxbf2-Introduce-IRQ-support.patch | ||||||
|  | 0250-UBUNTU-SAUCE-gpio-mlxbf2.c-support-driver-version.patch | ||||||
|  | 0251-mmc-sdhci-of-dwcmshc-add-rockchip-platform-support.patch | ||||||
|  | 0252-mmc-sdhci-of-dwcmshc-add-ACPI-support-for-BlueField-.patch | ||||||
|  | 0253-mmc-sdhci-of-dwcmshc-fix-error-return-code-in-dwcmsh.patch | ||||||
|  | 0254-mmc-sdhci-of-dwcmshc-set-MMC_CAP_WAIT_WHILE_BUSY.patch | ||||||
|  | 0255-mmc-sdhci-of-dwcmshc-Re-enable-support-for-the-BlueF.patch | ||||||
|  | 0256-UBUNTU-SAUCE-Support-BlueField-3-GPIO-driver.patch | ||||||
|  | 0257-regmap-debugfs-Enable-writing-to-the-regmap-debugfs-.patch | ||||||
|  | 0258-UBUNTU-SAUCE-mlx-bootctl-support-icm-carveout-eeprom.patch | ||||||
|  | 0259-mmc-sdhci-of-dwcmshc-Enable-host-V4-support-for-Blue.patch | ||||||
|  | 0260-UBUNTU-SAUCE-mlxbf-pka-Fix-kernel-crash-with-pka-TRN.patch | ||||||
|  | 0261-mlxbf-ptm-power-and-thermal-management-debugfs-drive.patch | ||||||
|  | 0262-UBUNTU-SAUCE-mlxbf-pmc-Fix-event-string-typo.patch | ||||||
|  | 0263-UBUNTU-SAUCE-mlxbf-pmc-Support-for-BlueField-3-perfo.patch | ||||||
|  | 0264-UBUNTU-SAUCE-platform-mellanox-Add-ctrl-message-and-.patch | ||||||
|  | 0266-UBUNTU-SAUCE-mlxbf-pmc-Bug-fix-for-BlueField-3-count.patch | ||||||
|  | 0267-UBUNTU-SAUCE-mmc-sdhci-of-dwcmshc-add-the-missing-de.patch | ||||||
|  | 0268-DS-mlxsw-core_linecards-Disable-firmware-bundling-ma.patch | ||||||
|  | 0269-platform-mellanox-Cosmetic-changes.patch | ||||||
|  | 0270-platform-mellanox-Fix-order-in-exit-flow.patch | ||||||
|  | 0271-platform-mellanox-Add-new-attributes.patch | ||||||
|  | 0272-platform-mellanox-Change-register-offset-addresses.patch | ||||||
|  | 0273-platform-mellanox-Add-field-upgrade-capability-regis.patch | ||||||
|  | 0274-platform-mellanox-Modify-reset-causes-description.patch | ||||||
|  | 0275-mlxsw-Use-u16-for-local_port-field-instead-of-u8.patch | ||||||
|  | 0276-mlxsw-minimal-Change-type-for-local-port.patch | ||||||
|  | 0277-mlxsw-i2c-Fix-chunk-size-setting-in-output-mailbox-b.patch | ||||||
|  | 0278-platform-mellanox-mlx-platform-Modify-graceful-shutd.patch | ||||||
|  | 0279-platform-mellanox-mlx-platform-Fix-signals-polarity-.patch | ||||||
|  | 0280-platform-mellanox-mlxreg-hotplug-Extend-condition-fo.patch | ||||||
|  | 0281-platform-mellanox-mlx-platform-Modify-health-and-pow.patch | ||||||
|  | 0282-platform-mellanox-mlx-platform-add-support-of-5th-CP.patch | ||||||
|  | 0283-mlxsw-core_hwmon-Align-modules-label-name-assignment.patch | ||||||
|  | 0284-platform-mellanox-mlx-platform-fix-CPLD4-PN-report.patch | ||||||
|  | 9002-TMP-fix-for-fan-minimum-speed.patch | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # | # | ||||||
| # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. | # Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. | ||||||
| # Apache-2.0 | # Apache-2.0 | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| @@ -23,10 +23,6 @@ from . import utils | |||||||
| DEVICE_DATA = { | DEVICE_DATA = { | ||||||
|     'x86_64-mlnx_msn2700-r0': { |     'x86_64-mlnx_msn2700-r0': { | ||||||
|         'thermal': { |         'thermal': { | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:30":13, "31:40":14 , "41:120":15}, |  | ||||||
|                 "unk_untrust": {"-127:25":13, "26:30":14 , "31:35":15, "36:120":16} |  | ||||||
|             }, |  | ||||||
|             "capability": { |             "capability": { | ||||||
|                 "comex_amb": False |                 "comex_amb": False | ||||||
|             } |             } | ||||||
| @@ -34,10 +30,6 @@ DEVICE_DATA = { | |||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn2740-r0': { |     'x86_64-mlnx_msn2740-r0': { | ||||||
|         'thermal': { |         'thermal': { | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:120":13}, |  | ||||||
|                 "unk_untrust": {"-127:15":13, "16:25":14 , "26:30":15, "31:120":17}, |  | ||||||
|             }, |  | ||||||
|             "capability": { |             "capability": { | ||||||
|                 "cpu_pack": False, |                 "cpu_pack": False, | ||||||
|                 "comex_amb": False |                 "comex_amb": False | ||||||
| @@ -46,10 +38,6 @@ DEVICE_DATA = { | |||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn2100-r0': { |     'x86_64-mlnx_msn2100-r0': { | ||||||
|         'thermal': { |         'thermal': { | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:40":12, "41:120":13}, |  | ||||||
|                 "unk_untrust": {"-127:15":12, "16:25":13, "26:30":14, "31:35":15, "36:120":16} |  | ||||||
|             }, |  | ||||||
|             "capability": { |             "capability": { | ||||||
|                 "cpu_pack": False, |                 "cpu_pack": False, | ||||||
|                 "comex_amb": False |                 "comex_amb": False | ||||||
| @@ -58,10 +46,6 @@ DEVICE_DATA = { | |||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn2410-r0': { |     'x86_64-mlnx_msn2410-r0': { | ||||||
|         'thermal': { |         'thermal': { | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:30":13, "31:40":14 , "41:120":15}, |  | ||||||
|                 "unk_untrust": {"-127:25":13, "26:30":14 , "31:35":15, "36:120":16} |  | ||||||
|             }, |  | ||||||
|             "capability": { |             "capability": { | ||||||
|                 "comex_amb": False |                 "comex_amb": False | ||||||
|             } |             } | ||||||
| @@ -69,10 +53,6 @@ DEVICE_DATA = { | |||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn2010-r0': { |     'x86_64-mlnx_msn2010-r0': { | ||||||
|         'thermal': { |         'thermal': { | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:120":12}, |  | ||||||
|                 "unk_untrust": {"-127:15":12, "16:20":13 , "21:30":14, "31:35":15, "36:120":16} |  | ||||||
|             }, |  | ||||||
|             "capability": { |             "capability": { | ||||||
|                 "cpu_pack": False, |                 "cpu_pack": False, | ||||||
|                 "comex_amb": False |                 "comex_amb": False | ||||||
| @@ -80,75 +60,26 @@ DEVICE_DATA = { | |||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn3700-r0': { |     'x86_64-mlnx_msn3700-r0': { | ||||||
|         'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:25":12, "26:40":13 , "41:120":14}, |  | ||||||
|                 "unk_untrust": {"-127:15":12, "16:30":13 , "31:35":14, "36:40":15, "41:120":16}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn3700c-r0': { |     'x86_64-mlnx_msn3700c-r0': { | ||||||
|         'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:40":12, "41:120":13}, |  | ||||||
|                 "unk_untrust": {"-127:10":12, "11:20":13 , "21:30":14, "31:35":15, "36:120":16}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn3800-r0': { |     'x86_64-mlnx_msn3800-r0': { | ||||||
|         'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:30":12, "31:40":13 , "41:120":14}, |  | ||||||
|                 "unk_untrust": {"-127:0":12, "1:10":13 , "11:15":14, "16:20":15, "21:35":16, "36:120":17}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn4700-r0': { |     'x86_64-mlnx_msn4700-r0': { | ||||||
|        'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:35":14, "36:120":15}, |  | ||||||
|                 "unk_untrust": {"-127:35":14, "36:120":15}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn4410-r0': { |     'x86_64-mlnx_msn4410-r0': { | ||||||
|        'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:40":12, "41:120":13}, |  | ||||||
|                 "unk_untrust": {"-127:10":12, "11:20":13, "21:30":14, "31:35":15, "36:120":16}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn3420-r0': { |     'x86_64-mlnx_msn3420-r0': { | ||||||
|         'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:120":12}, |  | ||||||
|                 "unk_untrust": {"-127:25":12, "26:35":13, "36:40":14, "41:120":16}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn4600c-r0': { |     'x86_64-mlnx_msn4600c-r0': { | ||||||
|         'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust":   {"-127:40":12, "41:120":13}, |  | ||||||
|                 "unk_untrust": {"-127:5":12, "6:20":13, "21:30":14, "31:35":15, "36:40":16, "41:120":17}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-mlnx_msn4600-r0': { |     'x86_64-mlnx_msn4600-r0': { | ||||||
|         'thermal': { |  | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust": {"-127:40": 12, "41:120": 13}, |  | ||||||
|                 "unk_untrust": {"-127:5": 12, "6:20": 13, "21:30": 14, "31:35": 15, "36:40": 16, "41:120": 17}, |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |     }, | ||||||
|     'x86_64-nvidia_sn4800-r0': { |     'x86_64-nvidia_sn4800-r0': { | ||||||
|         'thermal': { |         'thermal': { | ||||||
|             "capability": { |             "capability": { | ||||||
|                 "comex_amb": False |                 "comex_amb": False | ||||||
|             }, |             } | ||||||
|             'cpu_threshold': (80, 95)  # min=80, max=95 |  | ||||||
|         }, |         }, | ||||||
|         'sfp': { |         'sfp': { | ||||||
|             'max_port_per_line_card': 16 |             'max_port_per_line_card': 16 | ||||||
| @@ -156,10 +87,6 @@ DEVICE_DATA = { | |||||||
|     }, |     }, | ||||||
|     'x86_64-nvidia_sn2201-r0': { |     'x86_64-nvidia_sn2201-r0': { | ||||||
|         'thermal': { |         'thermal': { | ||||||
|             'minimum_table': { |  | ||||||
|                 "unk_trust": {"-127:30": 13, "31:35": 14, "36:40": 15, "41:120": 16}, |  | ||||||
|                 "unk_untrust": {"-127:15": 13, "16:20": 14, "21:25": 15, "26:30": 16, "31:35": 17, "36:40": 18, "41:120": 19}, |  | ||||||
|             }, |  | ||||||
|             "capability": { |             "capability": { | ||||||
|                 "comex_amb": False, |                 "comex_amb": False, | ||||||
|                 "cpu_amb": True |                 "cpu_amb": True | ||||||
| @@ -242,19 +169,6 @@ class DeviceDataManager: | |||||||
|     def get_sodimm_thermal_count(cls): |     def get_sodimm_thermal_count(cls): | ||||||
|         return len(glob.glob('/run/hw-management/thermal/sodimm*_temp_input')) |         return len(glob.glob('/run/hw-management/thermal/sodimm*_temp_input')) | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     @utils.read_only_cache() |  | ||||||
|     def get_minimum_table(cls): |  | ||||||
|         platform_data = DEVICE_DATA.get(cls.get_platform_name(), None) |  | ||||||
|         if not platform_data: |  | ||||||
|             return None |  | ||||||
|  |  | ||||||
|         thermal_data = platform_data.get('thermal', None) |  | ||||||
|         if not thermal_data: |  | ||||||
|             return None |  | ||||||
|  |  | ||||||
|         return thermal_data.get('minimum_table', None) |  | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
|     @utils.read_only_cache() |     @utils.read_only_cache() | ||||||
|     def get_thermal_capability(cls): |     def get_thermal_capability(cls): | ||||||
| @@ -285,23 +199,6 @@ class DeviceDataManager: | |||||||
|             return 0 |             return 0 | ||||||
|         return sfp_data.get('max_port_per_line_card', 0) |         return sfp_data.get('max_port_per_line_card', 0) | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def is_cpu_thermal_control_supported(cls): |  | ||||||
|         return cls.get_cpu_thermal_threshold() != (None, None) |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     @utils.read_only_cache() |  | ||||||
|     def get_cpu_thermal_threshold(cls): |  | ||||||
|         platform_data = DEVICE_DATA.get(cls.get_platform_name(), None) |  | ||||||
|         if not platform_data: |  | ||||||
|             return None, None |  | ||||||
|  |  | ||||||
|         thermal_data = platform_data.get('thermal', None) |  | ||||||
|         if not thermal_data: |  | ||||||
|             return None, None |  | ||||||
|  |  | ||||||
|         return thermal_data.get('cpu_threshold', (None, None)) |  | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
|     def get_bios_component(cls): |     def get_bios_component(cls): | ||||||
|         from .component import ComponentBIOS, ComponentBIOSSN2201 |         from .component import ComponentBIOS, ComponentBIOSSN2201 | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # | # | ||||||
| # Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. | # Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. | ||||||
| # Apache-2.0 | # Apache-2.0 | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| @@ -216,7 +216,7 @@ class PsuFan(MlnxFan): | |||||||
|         """ |         """ | ||||||
|         try: |         try: | ||||||
|             # Get PSU fan target speed according to current system cooling level |             # Get PSU fan target speed according to current system cooling level | ||||||
|             cooling_level = Thermal.get_cooling_level() |             cooling_level = utils.read_int_from_file('/run/hw-management/thermal/cooling_cur_state', log_func=None) | ||||||
|             return int(self.PSU_FAN_SPEED[cooling_level], 16) |             return int(self.PSU_FAN_SPEED[cooling_level], 16) | ||||||
|         except Exception: |         except Exception: | ||||||
|             return self.get_speed() |             return self.get_speed() | ||||||
| @@ -250,6 +250,7 @@ class PsuFan(MlnxFan): | |||||||
|             logger.log_error('Failed to set PSU FAN speed - {}'.format(e)) |             logger.log_error('Failed to set PSU FAN speed - {}'.format(e)) | ||||||
|             return False |             return False | ||||||
|  |  | ||||||
|  |  | ||||||
| class Fan(MlnxFan): | class Fan(MlnxFan): | ||||||
|     """Platform-specific Fan class""" |     """Platform-specific Fan class""" | ||||||
|     def __init__(self, fan_index, fan_drawer, position): |     def __init__(self, fan_index, fan_drawer, position): | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # | # | ||||||
| # Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. | # Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. | ||||||
| # Apache-2.0 | # Apache-2.0 | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| @@ -27,12 +27,11 @@ try: | |||||||
|     from sonic_py_common.logger import Logger |     from sonic_py_common.logger import Logger | ||||||
|     import copy |     import copy | ||||||
|     import os |     import os | ||||||
|     import glob |  | ||||||
|  |  | ||||||
|     from .device_data import DeviceDataManager |     from .device_data import DeviceDataManager | ||||||
|     from . import utils |     from . import utils | ||||||
| except ImportError as e: | except ImportError as e: | ||||||
|     raise ImportError (str(e) + "- required module not found") |     raise ImportError(str(e) + "- required module not found") | ||||||
|  |  | ||||||
| # Global logger class instance | # Global logger class instance | ||||||
| logger = Logger() | logger = Logger() | ||||||
| @@ -143,23 +142,6 @@ THERMAL_NAMING_RULE = { | |||||||
| } | } | ||||||
|  |  | ||||||
| CHASSIS_THERMAL_SYSFS_FOLDER = '/run/hw-management/thermal' | CHASSIS_THERMAL_SYSFS_FOLDER = '/run/hw-management/thermal' | ||||||
| COOLING_STATE_PATH = "/var/run/hw-management/thermal/cooling_cur_state" |  | ||||||
| THERMAL_ZONE_ASIC_PATH = '/var/run/hw-management/thermal/mlxsw/' |  | ||||||
| THERMAL_ZONE_FOLDER_WILDCARD = '/run/hw-management/thermal/mlxsw*' |  | ||||||
| THERMAL_ZONE_HIGH_THRESHOLD = 'temp_trip_high' |  | ||||||
| THERMAL_ZONE_HOT_THRESHOLD = 'temp_trip_hot' |  | ||||||
| THERMAL_ZONE_NORMAL_THRESHOLD = 'temp_trip_norm' |  | ||||||
| THERMAL_ZONE_MODE_FILE = 'thermal_zone_mode' |  | ||||||
| THERMAL_ZONE_POLICY_FILE = 'thermal_zone_policy' |  | ||||||
| THERMAL_ZONE_TEMP_FILE = 'thermal_zone_temp' |  | ||||||
| THERMAL_ZONE_HYSTERESIS = 5000 |  | ||||||
| MODULE_TEMP_FAULT_WILDCARRD = '/run/hw-management/thermal/module*_temp_fault' |  | ||||||
| MAX_AMBIENT_TEMP = 120 |  | ||||||
| # Min allowed cooling level when all thermal zones are in normal state |  | ||||||
| MIN_COOLING_LEVEL_FOR_NORMAL = 2 |  | ||||||
| # Min allowed cooling level when any thermal zone is in high state but no thermal zone is in emergency state |  | ||||||
| MIN_COOLING_LEVEL_FOR_HIGH = 4 |  | ||||||
| MAX_COOLING_LEVEL = 10 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def initialize_chassis_thermals(): | def initialize_chassis_thermals(): | ||||||
| @@ -369,175 +351,6 @@ class Thermal(ThermalBase): | |||||||
|         """ |         """ | ||||||
|         return False |         return False | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def set_thermal_algorithm_status(cls, status, force=True): |  | ||||||
|         """ |  | ||||||
|         Enable/disable kernel thermal algorithm. |  | ||||||
|         When enable kernel thermal algorithm, kernel will adjust fan speed |  | ||||||
|         according to thermal zones temperature. Please note that kernel will |  | ||||||
|         only adjust fan speed when temperature across some "edge", e.g temperature |  | ||||||
|         changes to exceed high threshold. |  | ||||||
|         When disable kernel thermal algorithm, kernel no longer adjust fan speed. |  | ||||||
|         We usually disable the algorithm when we want to set a fix speed. E.g, when |  | ||||||
|         a fan unit is removed from system, we will set fan speed to 100% and disable |  | ||||||
|         the algorithm to avoid it adjust the speed. |  | ||||||
|  |  | ||||||
|         Returns: |  | ||||||
|             True if thermal algorithm status changed. |  | ||||||
|         """ |  | ||||||
|         if not force and cls.thermal_algorithm_status == status: |  | ||||||
|             return False |  | ||||||
|  |  | ||||||
|         cls.thermal_algorithm_status = status |  | ||||||
|         mode = "enabled" if status else "disabled" |  | ||||||
|         policy = "step_wise" if status else "user_space" |  | ||||||
|         for thermal_zone_folder in glob.iglob(THERMAL_ZONE_FOLDER_WILDCARD): |  | ||||||
|             policy_file = os.path.join(thermal_zone_folder, THERMAL_ZONE_POLICY_FILE) |  | ||||||
|             utils.write_file(policy_file, policy) |  | ||||||
|             mode_file = os.path.join(thermal_zone_folder, THERMAL_ZONE_MODE_FILE) |  | ||||||
|             utils.write_file(mode_file, mode) |  | ||||||
|  |  | ||||||
|         return True |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def get_min_allowed_cooling_level_by_thermal_zone(cls): |  | ||||||
|         """Get min allowed cooling level according to thermal zone status: |  | ||||||
|             1. If temperature of all thermal zones is less than normal threshold, min allowed cooling level is |  | ||||||
|                $MIN_COOLING_LEVEL_FOR_NORMAL = 2 |  | ||||||
|             2. If temperature of any thermal zone is greater than normal threshold, but no thermal zone temperature |  | ||||||
|                is greater than high threshold, min allowed cooling level is $MIN_COOLING_LEVEL_FOR_HIGH = 4 |  | ||||||
|             3. Otherwise, there is no minimum allowed value and policy should not adjust cooling level |  | ||||||
|         Returns: |  | ||||||
|             int: minimum allowed cooling level |  | ||||||
|         """ |  | ||||||
|         min_allowed = MIN_COOLING_LEVEL_FOR_NORMAL |  | ||||||
|         thermal_zone_present = False |  | ||||||
|         try: |  | ||||||
|             for thermal_zone_folder in glob.iglob(THERMAL_ZONE_FOLDER_WILDCARD): |  | ||||||
|                 current = utils.read_int_from_file(os.path.join(thermal_zone_folder, THERMAL_ZONE_TEMP_FILE)) |  | ||||||
|                 if current == 0: |  | ||||||
|                     # Temperature value 0 means that this thermal zone has no |  | ||||||
|                     # sensor and it should be ignored in this loop |  | ||||||
|                     continue |  | ||||||
|  |  | ||||||
|                 thermal_zone_present = True |  | ||||||
|                 normal_thresh = utils.read_int_from_file(os.path.join(thermal_zone_folder, THERMAL_ZONE_NORMAL_THRESHOLD)) |  | ||||||
|                 if current < normal_thresh - THERMAL_ZONE_HYSTERESIS: |  | ||||||
|                     continue |  | ||||||
|  |  | ||||||
|                 hot_thresh = utils.read_int_from_file(os.path.join(thermal_zone_folder, THERMAL_ZONE_HIGH_THRESHOLD)) |  | ||||||
|                 if current < hot_thresh - THERMAL_ZONE_HYSTERESIS: |  | ||||||
|                     min_allowed = MIN_COOLING_LEVEL_FOR_HIGH |  | ||||||
|                 else: |  | ||||||
|                     min_allowed = None |  | ||||||
|                     break |  | ||||||
|         except Exception as e: |  | ||||||
|             logger.log_error('Failed to get thermal zone status for {} - {}'.format(thermal_zone_folder, repr(e))) |  | ||||||
|             return None |  | ||||||
|  |  | ||||||
|         return min_allowed if thermal_zone_present else None |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def check_module_temperature_trustable(cls): |  | ||||||
|         for file_path in glob.iglob(MODULE_TEMP_FAULT_WILDCARRD): |  | ||||||
|             fault = utils.read_int_from_file(file_path) |  | ||||||
|             if fault != 0: |  | ||||||
|                 return 'untrust' |  | ||||||
|         return 'trust' |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def get_min_amb_temperature(cls): |  | ||||||
|         fan_ambient_path = os.path.join(CHASSIS_THERMAL_SYSFS_FOLDER, 'fan_amb') |  | ||||||
|         port_ambient_path = os.path.join(CHASSIS_THERMAL_SYSFS_FOLDER, 'port_amb') |  | ||||||
|  |  | ||||||
|         try: |  | ||||||
|             fan_ambient_temp = utils.read_int_from_file(fan_ambient_path, raise_exception=True) |  | ||||||
|             port_ambient_temp = utils.read_int_from_file(port_ambient_path, raise_exception=True) |  | ||||||
|             return fan_ambient_temp if fan_ambient_temp < port_ambient_temp else port_ambient_temp |  | ||||||
|         except Exception as e: |  | ||||||
|             # Can't get ambient temperature, return maximum |  | ||||||
|             logger.log_error('Failed to get minimum ambient temperature, use pessimistic instead') |  | ||||||
|             return MAX_AMBIENT_TEMP |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def set_cooling_level(cls, level): |  | ||||||
|         """ |  | ||||||
|         Change cooling level. The input level should be an integer value [1, 10]. |  | ||||||
|         1 means 10%, 2 means 20%, 10 means 100%. |  | ||||||
|         """ |  | ||||||
|         if cls.last_set_cooling_level != level: |  | ||||||
|             utils.write_file(COOLING_STATE_PATH, level + 10, raise_exception=True) |  | ||||||
|             cls.last_set_cooling_level = level |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def set_cooling_state(cls, state): |  | ||||||
|         """Change cooling state. |  | ||||||
|         Args: |  | ||||||
|             state (int): cooling state |  | ||||||
|         """ |  | ||||||
|         if cls.last_set_cooling_state != state: |  | ||||||
|             utils.write_file(COOLING_STATE_PATH, state, raise_exception=True) |  | ||||||
|             cls.last_set_cooling_state = state |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def get_cooling_level(cls): |  | ||||||
|         try: |  | ||||||
|             return utils.read_int_from_file(COOLING_STATE_PATH, raise_exception=True) |  | ||||||
|         except (ValueError, IOError) as e: |  | ||||||
|             raise RuntimeError("Failed to get cooling level - {}".format(e)) |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def set_expect_cooling_level(cls, expect_value): |  | ||||||
|         """During thermal policy running, cache the expect cooling level generated by policies. The max expect |  | ||||||
|            cooling level will be committed to hardware. |  | ||||||
|         Args: |  | ||||||
|             expect_value (int): Expected cooling level value |  | ||||||
|         """ |  | ||||||
|         if cls.expect_cooling_level is None or cls.expect_cooling_level < expect_value: |  | ||||||
|             cls.expect_cooling_level = int(expect_value) |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def commit_cooling_level(cls, thermal_info_dict): |  | ||||||
|         """Commit cooling level to hardware. This will affect system fan and PSU fan speed. |  | ||||||
|         Args: |  | ||||||
|             thermal_info_dict (dict): Thermal information dictionary |  | ||||||
|         """ |  | ||||||
|         if cls.expect_cooling_level is not None: |  | ||||||
|             cls.set_cooling_level(cls.expect_cooling_level) |  | ||||||
|  |  | ||||||
|         if cls.expect_cooling_state is not None: |  | ||||||
|             cls.set_cooling_state(cls.expect_cooling_state) |  | ||||||
|         elif cls.expect_cooling_level is not None: |  | ||||||
|             cls.set_cooling_state(cls.expect_cooling_level) |  | ||||||
|  |  | ||||||
|         cls.expect_cooling_level = None |  | ||||||
|         # We need to set system fan speed here because kernel will automaticlly adjust fan speed according to cooling level and cooling state |  | ||||||
|  |  | ||||||
|         # Commit PSU fan speed with current state |  | ||||||
|         from .thermal_infos import ChassisInfo |  | ||||||
|         if ChassisInfo.INFO_NAME in thermal_info_dict and isinstance(thermal_info_dict[ChassisInfo.INFO_NAME], ChassisInfo): |  | ||||||
|             cooling_level = cls.get_cooling_level() |  | ||||||
|             if cls.last_set_psu_cooling_level == cooling_level: |  | ||||||
|                 return |  | ||||||
|             speed = cooling_level * 10 |  | ||||||
|             chassis = thermal_info_dict[ChassisInfo.INFO_NAME].get_chassis() |  | ||||||
|             for psu in chassis.get_all_psus(): |  | ||||||
|                 for psu_fan in psu.get_all_fans(): |  | ||||||
|                     psu_fan.set_speed(speed) |  | ||||||
|             cls.last_set_psu_cooling_level = cooling_level |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def monitor_asic_themal_zone(cls): |  | ||||||
|         """This is a protection for asic thermal zone, if asic temperature is greater than hot threshold + THERMAL_ZONE_HYSTERESIS, |  | ||||||
|            and if cooling state is not MAX, we need enforce the cooling state to MAX |  | ||||||
|         """ |  | ||||||
|         asic_temp = utils.read_int_from_file(os.path.join(THERMAL_ZONE_ASIC_PATH, THERMAL_ZONE_TEMP_FILE), raise_exception=True) |  | ||||||
|         hot_thresh = utils.read_int_from_file(os.path.join(THERMAL_ZONE_ASIC_PATH, THERMAL_ZONE_HOT_THRESHOLD), raise_exception=True) |  | ||||||
|         if asic_temp >= hot_thresh + THERMAL_ZONE_HYSTERESIS: |  | ||||||
|             cls.expect_cooling_state = MAX_COOLING_LEVEL |  | ||||||
|         else: |  | ||||||
|             cls.expect_cooling_state = None |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class RemovableThermal(Thermal): | class RemovableThermal(Thermal): | ||||||
|     def __init__(self, name, temp_file, high_th_file, high_crit_th_file, position, presence_cb): |     def __init__(self, name, temp_file, high_th_file, high_crit_th_file, position, presence_cb): | ||||||
|   | |||||||
| @@ -1,111 +0,0 @@ | |||||||
| # |  | ||||||
| # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. |  | ||||||
| # Apache-2.0 |  | ||||||
| # |  | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| # you may not use this file except in compliance with the License. |  | ||||||
| # You may obtain a copy of the License at |  | ||||||
| # |  | ||||||
| # http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| # |  | ||||||
| # Unless required by applicable law or agreed to in writing, software |  | ||||||
| # distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| # See the License for the specific language governing permissions and |  | ||||||
| # limitations under the License. |  | ||||||
| # |  | ||||||
| from sonic_platform_base.sonic_thermal_control.thermal_action_base import ThermalPolicyActionBase |  | ||||||
| from sonic_platform_base.sonic_thermal_control.thermal_json_object import thermal_json_object |  | ||||||
| from .thermal import Thermal |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class SetFanSpeedAction(ThermalPolicyActionBase): |  | ||||||
|     """ |  | ||||||
|     Base thermal action class to set speed for fans |  | ||||||
|     """ |  | ||||||
|     # JSON field definition |  | ||||||
|     JSON_FIELD_SPEED = 'speed' |  | ||||||
|  |  | ||||||
|     def __init__(self): |  | ||||||
|         """ |  | ||||||
|         Constructor of SetFanSpeedAction which actually do nothing. |  | ||||||
|         """ |  | ||||||
|         self.speed = None |  | ||||||
|  |  | ||||||
|     def load_from_json(self, json_obj): |  | ||||||
|         """ |  | ||||||
|         Construct SetFanSpeedAction via JSON. JSON example: |  | ||||||
|             { |  | ||||||
|                 "type": "fan.all.set_speed" |  | ||||||
|                 "speed": "100" |  | ||||||
|             } |  | ||||||
|         :param json_obj: A JSON object representing a SetFanSpeedAction action. |  | ||||||
|         :return: |  | ||||||
|         """ |  | ||||||
|         if SetFanSpeedAction.JSON_FIELD_SPEED in json_obj: |  | ||||||
|             speed = float(json_obj[SetFanSpeedAction.JSON_FIELD_SPEED]) |  | ||||||
|             if speed < 0 or speed > 100: |  | ||||||
|                 raise ValueError('SetFanSpeedAction invalid speed value {} in JSON policy file, valid value should be [0, 100]'. |  | ||||||
|                                  format(speed)) |  | ||||||
|             self.speed = float(json_obj[SetFanSpeedAction.JSON_FIELD_SPEED]) |  | ||||||
|         else: |  | ||||||
|             raise ValueError('SetFanSpeedAction missing mandatory field {} in JSON policy file'. |  | ||||||
|                              format(SetFanSpeedAction.JSON_FIELD_SPEED)) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('fan.all.set_speed') |  | ||||||
| class SetAllFanSpeedAction(SetFanSpeedAction): |  | ||||||
|     """ |  | ||||||
|     Action to set speed for all fans |  | ||||||
|     """ |  | ||||||
|     def execute(self, thermal_info_dict): |  | ||||||
|         """ |  | ||||||
|         Set speed for all fans |  | ||||||
|         :param thermal_info_dict: A dictionary stores all thermal information. |  | ||||||
|         :return: |  | ||||||
|         """ |  | ||||||
|         Thermal.set_expect_cooling_level(self.speed / 10) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('thermal.recover') |  | ||||||
| class ThermalRecoverAction(ThermalPolicyActionBase): |  | ||||||
|     UNKNOWN_SKU_COOLING_LEVEL = 6 |  | ||||||
|  |  | ||||||
|     def execute(self, thermal_info_dict): |  | ||||||
|         from .device_data import DeviceDataManager |  | ||||||
|         from .thermal import MAX_COOLING_LEVEL, MIN_COOLING_LEVEL_FOR_HIGH, logger |  | ||||||
|         Thermal.monitor_asic_themal_zone() |  | ||||||
|  |  | ||||||
|         # Calculate dynamic minimum cooling level |  | ||||||
|         dynamic_min_cooling_level = None |  | ||||||
|         minimum_table = DeviceDataManager.get_minimum_table() |  | ||||||
|         if not minimum_table: |  | ||||||
|             # If there is no minimum_table defined, set dynamic_min_cooling_level to default value |  | ||||||
|             dynamic_min_cooling_level = ThermalRecoverAction.UNKNOWN_SKU_COOLING_LEVEL |  | ||||||
|         else: |  | ||||||
|             trust_state = Thermal.check_module_temperature_trustable() |  | ||||||
|             temperature = Thermal.get_min_amb_temperature() |  | ||||||
|             temperature = int(temperature / 1000) |  | ||||||
|             minimum_table = minimum_table['unk_{}'.format(trust_state)] |  | ||||||
|  |  | ||||||
|             for key, cooling_level in minimum_table.items(): |  | ||||||
|                 temp_range = key.split(':') |  | ||||||
|                 temp_min = int(temp_range[0].strip()) |  | ||||||
|                 temp_max = int(temp_range[1].strip()) |  | ||||||
|                 if temp_min <= temperature <= temp_max: |  | ||||||
|                     dynamic_min_cooling_level = cooling_level - 10 |  | ||||||
|                     break |  | ||||||
|  |  | ||||||
|         if not dynamic_min_cooling_level: |  | ||||||
|             # Should not go to this branch, just in case |  | ||||||
|             logger.log_error('Failed to get dynamic minimum cooling level') |  | ||||||
|             dynamic_min_cooling_level = MAX_COOLING_LEVEL |  | ||||||
|  |  | ||||||
|         if Thermal.last_set_cooling_level is not None and dynamic_min_cooling_level > Thermal.last_set_cooling_level and dynamic_min_cooling_level >= MIN_COOLING_LEVEL_FOR_HIGH: |  | ||||||
|             # No need to check thermal zone as dynamic_min_cooling_level is greater than previous value and MIN_COOLING_LEVEL_FOR_HIGH |  | ||||||
|             Thermal.set_expect_cooling_level(dynamic_min_cooling_level) |  | ||||||
|         else: |  | ||||||
|             min_cooling_level_by_tz = Thermal.get_min_allowed_cooling_level_by_thermal_zone() |  | ||||||
|             if min_cooling_level_by_tz is not None: |  | ||||||
|                 cooling_level = max(dynamic_min_cooling_level, min_cooling_level_by_tz) |  | ||||||
|                 Thermal.set_expect_cooling_level(cooling_level) |  | ||||||
| @@ -1,92 +0,0 @@ | |||||||
| # |  | ||||||
| # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. |  | ||||||
| # Apache-2.0 |  | ||||||
| # |  | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| # you may not use this file except in compliance with the License. |  | ||||||
| # You may obtain a copy of the License at |  | ||||||
| # |  | ||||||
| # http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| # |  | ||||||
| # Unless required by applicable law or agreed to in writing, software |  | ||||||
| # distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| # See the License for the specific language governing permissions and |  | ||||||
| # limitations under the License. |  | ||||||
| # |  | ||||||
| from sonic_platform_base.sonic_thermal_control.thermal_condition_base import ThermalPolicyConditionBase |  | ||||||
| from sonic_platform_base.sonic_thermal_control.thermal_json_object import thermal_json_object |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class FanCondition(ThermalPolicyConditionBase): |  | ||||||
|     def get_fan_info(self, thermal_info_dict): |  | ||||||
|         from .thermal_infos import FanInfo |  | ||||||
|         if FanInfo.INFO_NAME in thermal_info_dict and isinstance(thermal_info_dict[FanInfo.INFO_NAME], FanInfo): |  | ||||||
|             return thermal_info_dict[FanInfo.INFO_NAME] |  | ||||||
|         else: |  | ||||||
|             return None |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('fan.any.absence') |  | ||||||
| class AnyFanAbsenceCondition(FanCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         fan_info_obj = self.get_fan_info(thermal_info_dict) |  | ||||||
|         return len(fan_info_obj.get_absence_fans()) > 0 if fan_info_obj else False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('fan.all.absence') |  | ||||||
| class AllFanAbsenceCondition(FanCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         fan_info_obj = self.get_fan_info(thermal_info_dict) |  | ||||||
|         return len(fan_info_obj.get_presence_fans()) == 0 if fan_info_obj else False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('fan.all.presence') |  | ||||||
| class AllFanPresenceCondition(FanCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         fan_info_obj = self.get_fan_info(thermal_info_dict) |  | ||||||
|         return len(fan_info_obj.get_absence_fans()) == 0 if fan_info_obj else False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('fan.any.fault') |  | ||||||
| class AnyFanFaultCondition(FanCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         fan_info_obj = self.get_fan_info(thermal_info_dict) |  | ||||||
|         return len(fan_info_obj.get_fault_fans()) > 0 if fan_info_obj else False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('fan.all.good') |  | ||||||
| class AllFanGoodCondition(FanCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         fan_info_obj = self.get_fan_info(thermal_info_dict) |  | ||||||
|         return len(fan_info_obj.get_fault_fans()) == 0 if fan_info_obj else False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class PsuCondition(ThermalPolicyConditionBase): |  | ||||||
|     def get_psu_info(self, thermal_info_dict): |  | ||||||
|         from .thermal_infos import PsuInfo |  | ||||||
|         if PsuInfo.INFO_NAME in thermal_info_dict and isinstance(thermal_info_dict[PsuInfo.INFO_NAME], PsuInfo): |  | ||||||
|             return thermal_info_dict[PsuInfo.INFO_NAME] |  | ||||||
|         else: |  | ||||||
|             return None |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('psu.any.absence') |  | ||||||
| class AnyPsuAbsenceCondition(PsuCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         psu_info_obj = self.get_psu_info(thermal_info_dict) |  | ||||||
|         return len(psu_info_obj.get_absence_psus()) > 0 if psu_info_obj else False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('psu.all.absence') |  | ||||||
| class AllPsuAbsenceCondition(PsuCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         psu_info_obj = self.get_psu_info(thermal_info_dict) |  | ||||||
|         return len(psu_info_obj.get_presence_psus()) == 0 if psu_info_obj else False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('psu.all.presence') |  | ||||||
| class AllPsuPresenceCondition(PsuCondition): |  | ||||||
|     def is_match(self, thermal_info_dict): |  | ||||||
|         psu_info_obj = self.get_psu_info(thermal_info_dict) |  | ||||||
|         return len(psu_info_obj.get_absence_psus()) == 0 if psu_info_obj else False |  | ||||||
| @@ -1,171 +0,0 @@ | |||||||
| # |  | ||||||
| # Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. |  | ||||||
| # Apache-2.0 |  | ||||||
| # |  | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| # you may not use this file except in compliance with the License. |  | ||||||
| # You may obtain a copy of the License at |  | ||||||
| # |  | ||||||
| # http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| # |  | ||||||
| # Unless required by applicable law or agreed to in writing, software |  | ||||||
| # distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| # See the License for the specific language governing permissions and |  | ||||||
| # limitations under the License. |  | ||||||
| # |  | ||||||
| from sonic_platform_base.sonic_thermal_control.thermal_info_base import ThermalPolicyInfoBase |  | ||||||
| from sonic_platform_base.sonic_thermal_control.thermal_json_object import thermal_json_object |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('fan_info') |  | ||||||
| class FanInfo(ThermalPolicyInfoBase): |  | ||||||
|     """ |  | ||||||
|     Fan information needed by thermal policy |  | ||||||
|     """ |  | ||||||
|  |  | ||||||
|     # Fan information name |  | ||||||
|     INFO_NAME = 'fan_info' |  | ||||||
|  |  | ||||||
|     def __init__(self): |  | ||||||
|         self._absence_fans = set() |  | ||||||
|         self._presence_fans = set() |  | ||||||
|         self._fault_fans = set() |  | ||||||
|         self._status_changed = False |  | ||||||
|  |  | ||||||
|     def collect(self, chassis): |  | ||||||
|         """ |  | ||||||
|         Collect absence and presence fans. |  | ||||||
|         :param chassis: The chassis object |  | ||||||
|         :return: |  | ||||||
|         """ |  | ||||||
|         self._status_changed = False |  | ||||||
|         for fan_drawer in chassis.get_all_fan_drawers(): |  | ||||||
|             for fan in fan_drawer.get_all_fans(): |  | ||||||
|                 presence = fan.get_presence() |  | ||||||
|                 status = fan.get_status() |  | ||||||
|                 if presence and fan not in self._presence_fans: |  | ||||||
|                     self._presence_fans.add(fan) |  | ||||||
|                     self._status_changed = True |  | ||||||
|                     if fan in self._absence_fans: |  | ||||||
|                         self._absence_fans.remove(fan) |  | ||||||
|                 elif not presence and fan not in self._absence_fans: |  | ||||||
|                     self._absence_fans.add(fan) |  | ||||||
|                     self._status_changed = True |  | ||||||
|                     if fan in self._presence_fans: |  | ||||||
|                         self._presence_fans.remove(fan) |  | ||||||
|  |  | ||||||
|                 if not status and fan not in self._fault_fans: |  | ||||||
|                     self._fault_fans.add(fan) |  | ||||||
|                     self._status_changed = True |  | ||||||
|                 elif status and fan in self._fault_fans: |  | ||||||
|                     self._fault_fans.remove(fan) |  | ||||||
|                     self._status_changed = True |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     def get_absence_fans(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves absence fans |  | ||||||
|         :return: A set of absence fans |  | ||||||
|         """ |  | ||||||
|         return self._absence_fans |  | ||||||
|  |  | ||||||
|     def get_presence_fans(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves presence fans |  | ||||||
|         :return: A set of presence fans |  | ||||||
|         """ |  | ||||||
|         return self._presence_fans |  | ||||||
|  |  | ||||||
|     def get_fault_fans(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves fault fans |  | ||||||
|         :return: A set of fault fans |  | ||||||
|         """ |  | ||||||
|         return self._fault_fans |  | ||||||
|  |  | ||||||
|     def is_status_changed(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves if the status of fan information changed |  | ||||||
|         :return: True if status changed else False |  | ||||||
|         """ |  | ||||||
|         return self._status_changed |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('psu_info') |  | ||||||
| class PsuInfo(ThermalPolicyInfoBase): |  | ||||||
|     """ |  | ||||||
|     PSU information needed by thermal policy |  | ||||||
|     """ |  | ||||||
|     INFO_NAME = 'psu_info' |  | ||||||
|  |  | ||||||
|     def __init__(self): |  | ||||||
|         self._absence_psus = set() |  | ||||||
|         self._presence_psus = set() |  | ||||||
|         self._status_changed = False |  | ||||||
|  |  | ||||||
|     def collect(self, chassis): |  | ||||||
|         """ |  | ||||||
|         Collect absence and presence PSUs. |  | ||||||
|         :param chassis: The chassis object |  | ||||||
|         :return: |  | ||||||
|         """ |  | ||||||
|         self._status_changed = False |  | ||||||
|         for psu in chassis.get_all_psus(): |  | ||||||
|             if psu.get_presence() and psu not in self._presence_psus: |  | ||||||
|                 self._presence_psus.add(psu) |  | ||||||
|                 self._status_changed = True |  | ||||||
|                 if psu in self._absence_psus: |  | ||||||
|                     self._absence_psus.remove(psu) |  | ||||||
|             elif (not psu.get_presence()) and psu not in self._absence_psus: |  | ||||||
|                 self._absence_psus.add(psu) |  | ||||||
|                 self._status_changed = True |  | ||||||
|                 if psu in self._presence_psus: |  | ||||||
|                     self._presence_psus.remove(psu) |  | ||||||
|  |  | ||||||
|     def get_absence_psus(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves presence PSUs |  | ||||||
|         :return: A set of absence PSUs |  | ||||||
|         """ |  | ||||||
|         return self._absence_psus |  | ||||||
|  |  | ||||||
|     def get_presence_psus(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves presence PSUs |  | ||||||
|         :return: A set of presence fans |  | ||||||
|         """ |  | ||||||
|         return self._presence_psus |  | ||||||
|  |  | ||||||
|     def is_status_changed(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves if the status of PSU information changed |  | ||||||
|         :return: True if status changed else False |  | ||||||
|         """ |  | ||||||
|         return self._status_changed |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @thermal_json_object('chassis_info') |  | ||||||
| class ChassisInfo(ThermalPolicyInfoBase): |  | ||||||
|     """ |  | ||||||
|     Chassis information needed by thermal policy |  | ||||||
|     """ |  | ||||||
|     INFO_NAME = 'chassis_info' |  | ||||||
|  |  | ||||||
|     def __init__(self): |  | ||||||
|         self._chassis = None |  | ||||||
|  |  | ||||||
|     def collect(self, chassis): |  | ||||||
|         """ |  | ||||||
|         Collect platform chassis. |  | ||||||
|         :param chassis: The chassis object |  | ||||||
|         :return: |  | ||||||
|         """ |  | ||||||
|         self._chassis = chassis |  | ||||||
|  |  | ||||||
|     def get_chassis(self): |  | ||||||
|         """ |  | ||||||
|         Retrieves platform chassis object |  | ||||||
|         :return: A platform chassis object. |  | ||||||
|         """ |  | ||||||
|         return self._chassis |  | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| # | # | ||||||
| # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. | # Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. | ||||||
| # Apache-2.0 | # Apache-2.0 | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| @@ -15,81 +15,9 @@ | |||||||
| # limitations under the License. | # limitations under the License. | ||||||
| # | # | ||||||
| from sonic_platform_base.sonic_thermal_control.thermal_manager_base import ThermalManagerBase | from sonic_platform_base.sonic_thermal_control.thermal_manager_base import ThermalManagerBase | ||||||
| from .cpu_thermal_control import CPUThermalControl |  | ||||||
| from .device_data import DeviceDataManager |  | ||||||
| from .thermal_actions import * |  | ||||||
| from .thermal_conditions import * |  | ||||||
| from .thermal_infos import * |  | ||||||
| from .thermal import logger, MAX_COOLING_LEVEL, Thermal |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class ThermalManager(ThermalManagerBase): | class ThermalManager(ThermalManagerBase): | ||||||
|     cpu_thermal_control = None |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def start_thermal_control_algorithm(cls): |  | ||||||
|         """ |  | ||||||
|         Start thermal control algorithm |  | ||||||
|  |  | ||||||
|         Returns: |  | ||||||
|             bool: True if set success, False if fail. |  | ||||||
|         """ |  | ||||||
|         Thermal.set_thermal_algorithm_status(True) |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def stop_thermal_control_algorithm(cls): |  | ||||||
|         """ |  | ||||||
|         Stop thermal control algorithm |  | ||||||
|  |  | ||||||
|         Returns: |  | ||||||
|             bool: True if set success, False if fail. |  | ||||||
|         """ |  | ||||||
|         Thermal.set_thermal_algorithm_status(False) |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def start_cpu_thermal_control_algoritm(cls): |  | ||||||
|         if cls.cpu_thermal_control: |  | ||||||
|             return |  | ||||||
|  |  | ||||||
|         if not DeviceDataManager.is_cpu_thermal_control_supported(): |  | ||||||
|             return |  | ||||||
|  |  | ||||||
|         cls.cpu_thermal_control = CPUThermalControl() |  | ||||||
|         cls.cpu_thermal_control.task_run() |  | ||||||
|          |  | ||||||
|     @classmethod |  | ||||||
|     def stop_cpu_thermal_control_algoritm(cls): |  | ||||||
|         if cls.cpu_thermal_control: |  | ||||||
|             cls.cpu_thermal_control.task_stop() |  | ||||||
|             cls.cpu_thermal_control = None |  | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
|     def run_policy(cls, chassis): |     def run_policy(cls, chassis): | ||||||
|         if cls._running: |         pass | ||||||
|             cls.start_cpu_thermal_control_algoritm() |  | ||||||
|         else: |  | ||||||
|             cls.stop_cpu_thermal_control_algoritm() |  | ||||||
|  |  | ||||||
|         if not cls._policy_dict: |  | ||||||
|             return |  | ||||||
|  |  | ||||||
|         try: |  | ||||||
|             cls._collect_thermal_information(chassis) |  | ||||||
|         except Exception as e: |  | ||||||
|             logger.log_error('Failed to collect thermal information {}'.format(repr(e))) |  | ||||||
|             Thermal.set_expect_cooling_level(MAX_COOLING_LEVEL) |  | ||||||
|             Thermal.commit_cooling_level(cls._thermal_info_dict) |  | ||||||
|             return |  | ||||||
|  |  | ||||||
|         for policy in cls._policy_dict.values(): |  | ||||||
|             if not cls._running: |  | ||||||
|                 return |  | ||||||
|             try: |  | ||||||
|                 if policy.is_match(cls._thermal_info_dict): |  | ||||||
|                     policy.do_action(cls._thermal_info_dict) |  | ||||||
|             except Exception as e: |  | ||||||
|                 logger.log_error('Failed to run thermal policy {} - {}'.format(policy.name, repr(e))) |  | ||||||
|                 # In case there is an exception, we put cooling level to max value |  | ||||||
|                 Thermal.set_expect_cooling_level(MAX_COOLING_LEVEL) |  | ||||||
|  |  | ||||||
|         Thermal.commit_cooling_level(cls._thermal_info_dict) |  | ||||||
|   | |||||||
| @@ -1,18 +0,0 @@ | |||||||
| { |  | ||||||
|     "name": "any fan absence", |  | ||||||
|     "conditions": [ |  | ||||||
|         {  |  | ||||||
|             "type": "fan.any.absence" |  | ||||||
|         } |  | ||||||
|     ], |  | ||||||
|     "actions": [ |  | ||||||
|         { |  | ||||||
|             "type": "fan.all.set_speed", |  | ||||||
|             "speed": "100" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "fan.all.set_speed", |  | ||||||
|             "speed": "100" |  | ||||||
|         } |  | ||||||
|     ] |  | ||||||
| } |  | ||||||
| @@ -1,17 +0,0 @@ | |||||||
| {  |  | ||||||
|     "name": "any fan absence",  |  | ||||||
|     "conditions": [  |  | ||||||
|         {  |  | ||||||
|             "type": "fan.any.absence" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "fan.any.absence" |  | ||||||
|         } |  | ||||||
|     ], |  | ||||||
|     "actions": [ |  | ||||||
|         { |  | ||||||
|             "type": "fan.all.set_speed", |  | ||||||
|             "speed": "100" |  | ||||||
|         } |  | ||||||
|     ] |  | ||||||
| } |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| {  |  | ||||||
|     "name": "any fan absence",  |  | ||||||
|     "conditions": [  |  | ||||||
|         {  |  | ||||||
|             "type": "fan.any.absence" |  | ||||||
|         } |  | ||||||
|     ], |  | ||||||
|     "actions": [ |  | ||||||
|     ] |  | ||||||
| } |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| { |  | ||||||
|     "name": "any fan absence", |  | ||||||
|     "conditions": [ |  | ||||||
|     ], |  | ||||||
|     "actions": [ |  | ||||||
|         { |  | ||||||
|             "type": "fan.all.set_speed", |  | ||||||
|             "speed": "100" |  | ||||||
|         } |  | ||||||
|     ] |  | ||||||
| } |  | ||||||
| @@ -1,72 +0,0 @@ | |||||||
| { |  | ||||||
|     "thermal_control_algorithm": { |  | ||||||
|         "run_at_boot_up": "false", |  | ||||||
|         "fan_speed_when_suspend": "60" |  | ||||||
|     }, |  | ||||||
|     "info_types": [ |  | ||||||
|         { |  | ||||||
|             "type": "fan_info" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "psu_info" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "chassis_info" |  | ||||||
|         } |  | ||||||
|     ], |  | ||||||
|     "policies": [ |  | ||||||
|         { |  | ||||||
|             "name": "all fan and psu presence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.presence" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "psu.all.presence" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "thermal.recover" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "any psu absence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "psu.any.absence" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "thermal.recover" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "all fan and psu presence 1", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.presence" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "psu.all.presence" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "thermal.recover" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         } |  | ||||||
|     ] |  | ||||||
| } |  | ||||||
| @@ -1,83 +0,0 @@ | |||||||
| # |  | ||||||
| # Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. |  | ||||||
| # Apache-2.0 |  | ||||||
| # |  | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| # you may not use this file except in compliance with the License. |  | ||||||
| # You may obtain a copy of the License at |  | ||||||
| # |  | ||||||
| # http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| # |  | ||||||
| # Unless required by applicable law or agreed to in writing, software |  | ||||||
| # distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| # See the License for the specific language governing permissions and |  | ||||||
| # limitations under the License. |  | ||||||
| # |  | ||||||
| ############################################################################# |  | ||||||
| # Mellanox |  | ||||||
| # |  | ||||||
| # Module contains an implementation of SONiC Platform Base API and |  | ||||||
| # provides the Chassis information which are available in the platform |  | ||||||
| # |  | ||||||
| ############################################################################# |  | ||||||
|  |  | ||||||
| import glob |  | ||||||
| import os |  | ||||||
| import pytest |  | ||||||
| import sys |  | ||||||
| if sys.version_info.major == 3: |  | ||||||
|     from unittest import mock |  | ||||||
| else: |  | ||||||
|     import mock |  | ||||||
|  |  | ||||||
| test_path = os.path.dirname(os.path.abspath(__file__)) |  | ||||||
| modules_path = os.path.dirname(test_path) |  | ||||||
| sys.path.insert(0, modules_path) |  | ||||||
|  |  | ||||||
| from sonic_platform.cpu_thermal_control import CPUThermalControl |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestCPUThermalControl: |  | ||||||
|     @mock.patch('sonic_platform.device_data.DeviceDataManager.get_cpu_thermal_threshold', mock.MagicMock(return_value=(85, 95))) |  | ||||||
|     @mock.patch('sonic_platform.utils.read_int_from_file') |  | ||||||
|     @mock.patch('sonic_platform.utils.write_file') |  | ||||||
|     def test_run(self, mock_write_file, mock_read_file): |  | ||||||
|         instance = CPUThermalControl() |  | ||||||
|         file_content = { |  | ||||||
|             CPUThermalControl.CPU_COOLING_STATE: 5, |  | ||||||
|             CPUThermalControl.CPU_TEMP_FILE: instance.temp_high + 1 |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         def read_file(file_path, **kwargs): |  | ||||||
|             return file_content[file_path] |  | ||||||
|  |  | ||||||
|         mock_read_file.side_effect = read_file |  | ||||||
|         # Test current temp is higher than high threshold |  | ||||||
|         instance.run(0) |  | ||||||
|         mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MAX_COOLING_STATE, log_func=None) |  | ||||||
|  |  | ||||||
|         # Test current temp is lower than low threshold |  | ||||||
|         file_content[CPUThermalControl.CPU_TEMP_FILE] = instance.temp_low - 1 |  | ||||||
|         instance.run(0) |  | ||||||
|         mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MIN_COOLING_STATE, log_func=None) |  | ||||||
|  |  | ||||||
|         # Test current temp increasing |  | ||||||
|         file_content[CPUThermalControl.CPU_TEMP_FILE] = instance.temp_low |  | ||||||
|         instance.run(0) |  | ||||||
|         mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, 6, log_func=None) |  | ||||||
|  |  | ||||||
|         # Test current temp decreasing |  | ||||||
|         instance.run(instance.temp_low + 1) |  | ||||||
|         mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, 4, log_func=None) |  | ||||||
|  |  | ||||||
|         # Test current temp increasing and current cooling state is already the max |  | ||||||
|         file_content[CPUThermalControl.CPU_TEMP_FILE] = 85 |  | ||||||
|         file_content[CPUThermalControl.CPU_COOLING_STATE] = CPUThermalControl.MAX_COOLING_STATE |  | ||||||
|         instance.run(84) |  | ||||||
|         mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MAX_COOLING_STATE, log_func=None) |  | ||||||
|  |  | ||||||
|         # Test current temp decreasing and current cooling state is already the max |  | ||||||
|         file_content[CPUThermalControl.CPU_COOLING_STATE] = CPUThermalControl.MIN_COOLING_STATE |  | ||||||
|         instance.run(86) |  | ||||||
|         mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MIN_COOLING_STATE, log_func=None) |  | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| # | # | ||||||
| # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. | # Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. | ||||||
| # Apache-2.0 | # Apache-2.0 | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| @@ -108,11 +108,10 @@ class TestFan: | |||||||
|         mock_write_file.assert_called_with(fan.fan_speed_set_path, 153, raise_exception=True) |         mock_write_file.assert_called_with(fan.fan_speed_set_path, 153, raise_exception=True) | ||||||
|  |  | ||||||
|     @patch('sonic_platform.utils.read_int_from_file') |     @patch('sonic_platform.utils.read_int_from_file') | ||||||
|     @patch('sonic_platform.thermal.Thermal.get_cooling_level') |  | ||||||
|     @patch('sonic_platform.psu.Psu.get_presence') |     @patch('sonic_platform.psu.Psu.get_presence') | ||||||
|     @patch('sonic_platform.psu.Psu.get_powergood_status') |     @patch('sonic_platform.psu.Psu.get_powergood_status') | ||||||
|     @patch('os.path.exists') |     @patch('os.path.exists') | ||||||
|     def test_psu_fan_basic(self, mock_path_exists, mock_powergood, mock_presence, mock_cooling_level, mock_read_int): |     def test_psu_fan_basic(self, mock_path_exists, mock_powergood, mock_presence, mock_read_int): | ||||||
|         mock_path_exists.return_value = False |         mock_path_exists.return_value = False | ||||||
|         psu = Psu(0) |         psu = Psu(0) | ||||||
|         fan = PsuFan(0, 1, psu) |         fan = PsuFan(0, 1, psu) | ||||||
| @@ -125,7 +124,7 @@ class TestFan: | |||||||
|         assert fan.get_presence() is False |         assert fan.get_presence() is False | ||||||
|         mock_path_exists.return_value = True |         mock_path_exists.return_value = True | ||||||
|         assert fan.get_presence() is True |         assert fan.get_presence() is True | ||||||
|         mock_cooling_level.return_value = 7 |         mock_read_int.return_value = 7 | ||||||
|         assert fan.get_target_speed() == 70 |         assert fan.get_target_speed() == 70 | ||||||
|         mock_read_int.return_value = FAN_DIR_VALUE_INTAKE |         mock_read_int.return_value = FAN_DIR_VALUE_INTAKE | ||||||
|         assert fan.get_direction() == Fan.FAN_DIRECTION_INTAKE |         assert fan.get_direction() == Fan.FAN_DIRECTION_INTAKE | ||||||
|   | |||||||
| @@ -205,149 +205,3 @@ class TestThermal: | |||||||
|  |  | ||||||
|         mock_read.return_value = None |         mock_read.return_value = None | ||||||
|         assert thermal.get_high_critical_threshold() is None |         assert thermal.get_high_critical_threshold() is None | ||||||
|  |  | ||||||
|     @mock.patch('glob.iglob', mock.MagicMock(return_value=['thermal_zone1', 'thermal_zone2'])) |  | ||||||
|     @mock.patch('sonic_platform.utils.write_file') |  | ||||||
|     def test_set_thermal_algorithm_status(self, mock_write): |  | ||||||
|         from sonic_platform.thermal import Thermal, THERMAL_ZONE_FOLDER_WILDCARD, THERMAL_ZONE_POLICY_FILE, THERMAL_ZONE_MODE_FILE |  | ||||||
|         assert Thermal.set_thermal_algorithm_status(True, False) |  | ||||||
|  |  | ||||||
|         for folder in glob.iglob(THERMAL_ZONE_FOLDER_WILDCARD): |  | ||||||
|             mock_write.assert_any_call(os.path.join(folder, THERMAL_ZONE_POLICY_FILE), 'step_wise') |  | ||||||
|             mock_write.assert_any_call(os.path.join(folder, THERMAL_ZONE_MODE_FILE), 'enabled') |  | ||||||
|  |  | ||||||
|         assert Thermal.set_thermal_algorithm_status(False, False) |  | ||||||
|         for folder in glob.iglob(THERMAL_ZONE_FOLDER_WILDCARD): |  | ||||||
|             mock_write.assert_any_call(os.path.join(folder, THERMAL_ZONE_POLICY_FILE), 'user_space') |  | ||||||
|             mock_write.assert_any_call(os.path.join(folder, THERMAL_ZONE_MODE_FILE), 'disabled') |  | ||||||
|  |  | ||||||
|         assert not Thermal.set_thermal_algorithm_status(False, False) |  | ||||||
|  |  | ||||||
|         assert Thermal.set_thermal_algorithm_status(False) |  | ||||||
|  |  | ||||||
|     @mock.patch('glob.iglob', mock.MagicMock(return_value=['thermal_zone1', 'thermal_zone2'])) |  | ||||||
|     @mock.patch('sonic_platform.utils.read_int_from_file') |  | ||||||
|     def test_get_min_allowed_cooling_level_by_thermal_zone(self, mock_read_file): |  | ||||||
|         from sonic_platform.thermal import Thermal, THERMAL_ZONE_TEMP_FILE, THERMAL_ZONE_HIGH_THRESHOLD, THERMAL_ZONE_NORMAL_THRESHOLD, MIN_COOLING_LEVEL_FOR_HIGH, MIN_COOLING_LEVEL_FOR_NORMAL |  | ||||||
|         mock_read_file.side_effect = Exception('') |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() is None |  | ||||||
|  |  | ||||||
|         mock_file_content = {} |  | ||||||
|         def mock_read_int_from_file(file_path, default=0, raise_exception=False): |  | ||||||
|             return mock_file_content[file_path] |  | ||||||
|  |  | ||||||
|         mock_read_file.side_effect = mock_read_int_from_file |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_NORMAL_THRESHOLD)] = 75000 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_HIGH_THRESHOLD)] = 85000 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_TEMP_FILE)] = 69000 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_NORMAL_THRESHOLD)] = 75000 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_HIGH_THRESHOLD)] = 85000 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 24000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_NORMAL |  | ||||||
|  |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_TEMP_FILE)] = 71000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_HIGH |  | ||||||
|  |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_TEMP_FILE)] = 79000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_HIGH |  | ||||||
|  |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_TEMP_FILE)] = 81000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() is None |  | ||||||
|  |  | ||||||
|     @mock.patch('glob.iglob', mock.MagicMock(return_value=['thermal_zone1', 'thermal_zone2'])) |  | ||||||
|     @mock.patch('sonic_platform.utils.read_int_from_file') |  | ||||||
|     def test_no_sensor_thermal_zone(self, mock_read_file): |  | ||||||
|         from sonic_platform.thermal import Thermal, THERMAL_ZONE_TEMP_FILE, THERMAL_ZONE_HIGH_THRESHOLD, THERMAL_ZONE_NORMAL_THRESHOLD, MIN_COOLING_LEVEL_FOR_HIGH, MIN_COOLING_LEVEL_FOR_NORMAL |  | ||||||
|  |  | ||||||
|         mock_file_content = {} |  | ||||||
|         def mock_read_int_from_file(file_path, **kwargs): |  | ||||||
|             return mock_file_content[file_path] |  | ||||||
|  |  | ||||||
|         mock_read_file.side_effect = mock_read_int_from_file |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_NORMAL_THRESHOLD)] = 0 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_HIGH_THRESHOLD)] = 0 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_TEMP_FILE)] = 0 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_NORMAL_THRESHOLD)] = 75000 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_HIGH_THRESHOLD)] = 85000 |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 24000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_NORMAL |  | ||||||
|  |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 71000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_HIGH |  | ||||||
|  |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 79000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_HIGH |  | ||||||
|  |  | ||||||
|         mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 81000 |  | ||||||
|         assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() is None |  | ||||||
|  |  | ||||||
|     @mock.patch('glob.iglob', mock.MagicMock(return_value=['thermal_zone1', 'thermal_zone2'])) |  | ||||||
|     def test_check_module_temperature_trustable(self): |  | ||||||
|         from sonic_platform.thermal import Thermal |  | ||||||
|         from sonic_platform import utils |  | ||||||
|  |  | ||||||
|         utils.read_int_from_file = mock.MagicMock(return_value=1) |  | ||||||
|         assert Thermal.check_module_temperature_trustable() == 'untrust' |  | ||||||
|  |  | ||||||
|         utils.read_int_from_file = mock.MagicMock(return_value=0) |  | ||||||
|         assert Thermal.check_module_temperature_trustable() == 'trust' |  | ||||||
|  |  | ||||||
|     def test_get_min_amb_temperature(self): |  | ||||||
|         from sonic_platform.thermal import Thermal, MAX_AMBIENT_TEMP, CHASSIS_THERMAL_SYSFS_FOLDER |  | ||||||
|         from sonic_platform import utils |  | ||||||
|  |  | ||||||
|         utils.read_int_from_file = mock.MagicMock(side_effect=Exception('')) |  | ||||||
|         assert Thermal.get_min_amb_temperature() == MAX_AMBIENT_TEMP |  | ||||||
|  |  | ||||||
|         mock_file_content = {} |  | ||||||
|         def mock_read_int_from_file(file_path, default=0, raise_exception=False): |  | ||||||
|             return mock_file_content[file_path] |  | ||||||
|  |  | ||||||
|         utils.read_int_from_file = mock_read_int_from_file |  | ||||||
|         mock_file_content[os.path.join(CHASSIS_THERMAL_SYSFS_FOLDER, 'fan_amb')] = 50 |  | ||||||
|         mock_file_content[os.path.join(CHASSIS_THERMAL_SYSFS_FOLDER, 'port_amb')] = 40 |  | ||||||
|         assert Thermal.get_min_amb_temperature() == 40 |  | ||||||
|  |  | ||||||
|     @mock.patch('sonic_platform.utils.write_file') |  | ||||||
|     def test_set_cooling_level(self, mock_write_file): |  | ||||||
|         from sonic_platform.thermal import Thermal, COOLING_STATE_PATH |  | ||||||
|         Thermal.set_cooling_level(10) |  | ||||||
|         calls = [mock.call(COOLING_STATE_PATH, 20, raise_exception=True)] |  | ||||||
|         mock_write_file.assert_has_calls(calls) |  | ||||||
|  |  | ||||||
|         pre_call_count = mock_write_file.call_count |  | ||||||
|         Thermal.set_cooling_level(10) |  | ||||||
|         assert pre_call_count == mock_write_file.call_count |  | ||||||
|  |  | ||||||
|         Thermal.set_cooling_level(9) |  | ||||||
|         calls = [mock.call(COOLING_STATE_PATH, 19, raise_exception=True)] |  | ||||||
|         mock_write_file.assert_has_calls(calls) |  | ||||||
|  |  | ||||||
|     @mock.patch('sonic_platform.utils.write_file') |  | ||||||
|     def test_set_cooling_state(self, mock_write_file): |  | ||||||
|         from sonic_platform.thermal import Thermal, COOLING_STATE_PATH |  | ||||||
|         Thermal.set_cooling_state(10) |  | ||||||
|         calls = [mock.call(COOLING_STATE_PATH, 10, raise_exception=True)] |  | ||||||
|         mock_write_file.assert_has_calls(calls) |  | ||||||
|  |  | ||||||
|         pre_call_count = mock_write_file.call_count |  | ||||||
|         Thermal.set_cooling_state(10) |  | ||||||
|         assert pre_call_count == mock_write_file.call_count |  | ||||||
|  |  | ||||||
|         Thermal.set_cooling_state(9) |  | ||||||
|         calls = [mock.call(COOLING_STATE_PATH, 9, raise_exception=True)] |  | ||||||
|         mock_write_file.assert_has_calls(calls) |  | ||||||
|  |  | ||||||
|     @mock.patch('sonic_platform.utils.read_int_from_file') |  | ||||||
|     def test_get_cooling_level(self, mock_read_file): |  | ||||||
|         from sonic_platform.thermal import Thermal, COOLING_STATE_PATH |  | ||||||
|         Thermal.get_cooling_level() |  | ||||||
|         mock_read_file.assert_called_with(COOLING_STATE_PATH, raise_exception=True) |  | ||||||
|  |  | ||||||
|         mock_read_file.side_effect = IOError('') |  | ||||||
|         with pytest.raises(RuntimeError): |  | ||||||
|             Thermal.get_cooling_level() |  | ||||||
|  |  | ||||||
|         mock_read_file.side_effect = ValueError('') |  | ||||||
|         with pytest.raises(RuntimeError): |  | ||||||
|             Thermal.get_cooling_level() |  | ||||||
|   | |||||||
| @@ -1,510 +0,0 @@ | |||||||
| # |  | ||||||
| # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. |  | ||||||
| # Apache-2.0 |  | ||||||
| # |  | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| # you may not use this file except in compliance with the License. |  | ||||||
| # You may obtain a copy of the License at |  | ||||||
| # |  | ||||||
| # http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| # |  | ||||||
| # Unless required by applicable law or agreed to in writing, software |  | ||||||
| # distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| # See the License for the specific language governing permissions and |  | ||||||
| # limitations under the License. |  | ||||||
| # |  | ||||||
| import os |  | ||||||
| import sys |  | ||||||
| import pytest |  | ||||||
| import json |  | ||||||
| from mock import MagicMock, patch |  | ||||||
| from .mock_platform import MockChassis, MockFan, MockFanDrawer, MockPsu |  | ||||||
|  |  | ||||||
| test_path = os.path.dirname(os.path.abspath(__file__)) |  | ||||||
| modules_path = os.path.dirname(test_path) |  | ||||||
| sys.path.insert(0, modules_path) |  | ||||||
|  |  | ||||||
| from sonic_platform.thermal_manager import ThermalManager |  | ||||||
| from sonic_platform.thermal_infos import FanInfo, PsuInfo |  | ||||||
| from sonic_platform.thermal import Thermal, MAX_COOLING_LEVEL |  | ||||||
| from sonic_platform.device_data import DeviceDataManager |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.fixture(scope='session', autouse=True) |  | ||||||
| def thermal_manager(): |  | ||||||
|     policy_file = os.path.join(test_path, 'thermal_policy.json') |  | ||||||
|     ThermalManager.load(policy_file) |  | ||||||
|     return ThermalManager |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_load_policy(thermal_manager): |  | ||||||
|     assert 'psu_info' in thermal_manager._thermal_info_dict |  | ||||||
|     assert 'fan_info' in thermal_manager._thermal_info_dict |  | ||||||
|     assert 'chassis_info' in thermal_manager._thermal_info_dict |  | ||||||
|  |  | ||||||
|     assert 'any fan absence' in thermal_manager._policy_dict |  | ||||||
|     assert 'any psu absence' in thermal_manager._policy_dict |  | ||||||
|     assert 'any fan broken' in thermal_manager._policy_dict |  | ||||||
|     assert 'all fan and psu presence' in thermal_manager._policy_dict |  | ||||||
|  |  | ||||||
|     assert thermal_manager._fan_speed_when_suspend == 60 |  | ||||||
|     assert thermal_manager._run_thermal_algorithm_at_boot_up == False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_fan_info(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_fan_absence() |  | ||||||
|     fan_info = FanInfo() |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert len(fan_info.get_absence_fans()) == 1 |  | ||||||
|     assert len(fan_info.get_presence_fans()) == 0 |  | ||||||
|     assert len(fan_info.get_fault_fans()) == 0 |  | ||||||
|     assert fan_info.is_status_changed() |  | ||||||
|  |  | ||||||
|     chassis.get_all_fan_drawers()[0].get_all_fans()[0].presence = True |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert len(fan_info.get_absence_fans()) == 0 |  | ||||||
|     assert len(fan_info.get_presence_fans()) == 1 |  | ||||||
|     assert len(fan_info.get_fault_fans()) == 0 |  | ||||||
|     assert fan_info.is_status_changed() |  | ||||||
|  |  | ||||||
|     chassis.get_all_fan_drawers()[0].get_all_fans()[0].status = False |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert len(fan_info.get_absence_fans()) == 0 |  | ||||||
|     assert len(fan_info.get_presence_fans()) == 1 |  | ||||||
|     assert len(fan_info.get_fault_fans()) == 1 |  | ||||||
|     assert fan_info.is_status_changed() |  | ||||||
|  |  | ||||||
| def test_psu_info(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_psu_absence() |  | ||||||
|     psu_info = PsuInfo() |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|     assert len(psu_info.get_absence_psus()) == 1 |  | ||||||
|     assert len(psu_info.get_presence_psus()) == 0 |  | ||||||
|     assert psu_info.is_status_changed() |  | ||||||
|  |  | ||||||
|     psu_list = chassis.get_all_psus() |  | ||||||
|     psu_list[0].presence = True |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|     assert len(psu_info.get_absence_psus()) == 0 |  | ||||||
|     assert len(psu_info.get_presence_psus()) == 1 |  | ||||||
|     assert psu_info.is_status_changed() |  | ||||||
|  |  | ||||||
|     psu_list[0].powergood = False |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|     assert len(psu_info.get_absence_psus()) == 0 |  | ||||||
|     assert len(psu_info.get_presence_psus()) == 1 |  | ||||||
|     assert not psu_info.is_status_changed() |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @patch('sonic_platform.thermal.Thermal.monitor_asic_themal_zone', MagicMock()) |  | ||||||
| @patch('sonic_platform.thermal.Thermal.get_cooling_level', MagicMock(return_value=6)) |  | ||||||
| @patch('sonic_platform.thermal.Thermal.get_min_allowed_cooling_level_by_thermal_zone', MagicMock(return_value=2)) |  | ||||||
| @patch('sonic_platform.thermal.Thermal.set_cooling_state') |  | ||||||
| @patch('sonic_platform.thermal.Thermal.set_cooling_level') |  | ||||||
| def test_fan_policy(mock_set_cooling_level, mock_set_cooling_state, thermal_manager): |  | ||||||
|     print('In test_fan_policy') |  | ||||||
|     from sonic_platform.thermal import MIN_COOLING_LEVEL_FOR_NORMAL |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_fan_absence() |  | ||||||
|     chassis.get_all_fan_drawers()[0].get_all_fans().append(MockFan()) |  | ||||||
|     chassis.platform_name = 'some_platform' |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|  |  | ||||||
|     mock_set_cooling_level.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|     mock_set_cooling_state.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|  |  | ||||||
|     Thermal.expect_cooling_level = None |  | ||||||
|     fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() |  | ||||||
|     fan_list[0].presence = True |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     mock_set_cooling_level.assert_called_with(6) |  | ||||||
|     mock_set_cooling_state.assert_called_with(6) |  | ||||||
|  |  | ||||||
|     Thermal.expect_cooling_level = None |  | ||||||
|     fan_list[0].status = False |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     mock_set_cooling_level.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|  |  | ||||||
|     Thermal.expect_cooling_level = None |  | ||||||
|     fan_list[0].status = True |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     mock_set_cooling_level.assert_called_with(6) |  | ||||||
|     mock_set_cooling_state.assert_called_with(6) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @patch('sonic_platform.thermal.Thermal.monitor_asic_themal_zone', MagicMock()) |  | ||||||
| @patch('sonic_platform.thermal.Thermal.get_min_allowed_cooling_level_by_thermal_zone', MagicMock(return_value=2)) |  | ||||||
| @patch('sonic_platform.thermal.Thermal.get_cooling_level', MagicMock(return_value=6)) |  | ||||||
| @patch('sonic_platform.thermal.Thermal.set_cooling_state') |  | ||||||
| @patch('sonic_platform.thermal.Thermal.set_cooling_level') |  | ||||||
| def test_psu_policy(mock_set_cooling_level, mock_set_cooling_state, thermal_manager): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_psu_absence() |  | ||||||
|     chassis.platform_name = 'some_platform' |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     mock_set_cooling_level.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|     mock_set_cooling_state.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|  |  | ||||||
|     psu_list = chassis.get_all_psus() |  | ||||||
|     psu_list[0].presence = True |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     mock_set_cooling_level.assert_called_with(6) |  | ||||||
|     mock_set_cooling_state.assert_called_with(6) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_any_fan_absence_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_fan_absence() |  | ||||||
|     fan_info = FanInfo() |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AnyFanAbsenceCondition |  | ||||||
|     condition = AnyFanAbsenceCondition() |  | ||||||
|     assert condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|     fan = chassis.get_all_fan_drawers()[0].get_all_fans()[0] |  | ||||||
|     fan.presence = True |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert not condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_all_fan_absence_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_fan_absence() |  | ||||||
|     fan = MockFan() |  | ||||||
|     fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() |  | ||||||
|     fan_list.append(fan) |  | ||||||
|     fan_info = FanInfo() |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AllFanAbsenceCondition |  | ||||||
|     condition = AllFanAbsenceCondition() |  | ||||||
|     assert not condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|     fan.presence = False |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_all_fan_presence_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_fan_absence() |  | ||||||
|     fan = MockFan() |  | ||||||
|     fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() |  | ||||||
|     fan_list.append(fan) |  | ||||||
|     fan_info = FanInfo() |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AllFanPresenceCondition |  | ||||||
|     condition = AllFanPresenceCondition() |  | ||||||
|     assert not condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|     fan_list[0].presence = True |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
| def test_any_fan_fault_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.get_all_fan_drawers().append(MockFanDrawer()) |  | ||||||
|     fan = MockFan() |  | ||||||
|     fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() |  | ||||||
|     fan_list.append(fan) |  | ||||||
|     fault_fan = MockFan() |  | ||||||
|     fault_fan.status = False |  | ||||||
|     fan_list.append(fault_fan) |  | ||||||
|     fan_info = FanInfo() |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AnyFanFaultCondition |  | ||||||
|     condition = AnyFanFaultCondition() |  | ||||||
|     assert condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|     fault_fan.status = True |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert not condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
| def test_all_fan_good_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.get_all_fan_drawers().append(MockFanDrawer()) |  | ||||||
|     fan = MockFan() |  | ||||||
|     fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() |  | ||||||
|     fan_list.append(fan) |  | ||||||
|     fault_fan = MockFan() |  | ||||||
|     fault_fan.status = False |  | ||||||
|     fan_list.append(fault_fan) |  | ||||||
|     fan_info = FanInfo() |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AllFanGoodCondition |  | ||||||
|     condition = AllFanGoodCondition() |  | ||||||
|     assert not condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|     fault_fan.status = True |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|     assert condition.is_match({'fan_info': fan_info}) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_any_psu_absence_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_psu_absence() |  | ||||||
|     psu_info = PsuInfo() |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AnyPsuAbsenceCondition |  | ||||||
|     condition = AnyPsuAbsenceCondition() |  | ||||||
|     assert condition.is_match({'psu_info': psu_info}) |  | ||||||
|  |  | ||||||
|     psu = chassis.get_all_psus()[0] |  | ||||||
|     psu.presence = True |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|     assert not condition.is_match({'psu_info': psu_info}) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_all_psu_absence_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_psu_absence() |  | ||||||
|     psu = MockPsu() |  | ||||||
|     psu_list = chassis.get_all_psus() |  | ||||||
|     psu_list.append(psu) |  | ||||||
|     psu_info = PsuInfo() |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AllPsuAbsenceCondition |  | ||||||
|     condition = AllPsuAbsenceCondition() |  | ||||||
|     assert not condition.is_match({'psu_info': psu_info}) |  | ||||||
|  |  | ||||||
|     psu.presence = False |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|     assert condition.is_match({'psu_info': psu_info}) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_all_fan_presence_condition(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.make_psu_absence() |  | ||||||
|     psu = MockPsu() |  | ||||||
|     psu_list = chassis.get_all_psus() |  | ||||||
|     psu_list.append(psu) |  | ||||||
|     psu_info = PsuInfo() |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     from sonic_platform.thermal_conditions import AllPsuPresenceCondition |  | ||||||
|     condition = AllPsuPresenceCondition() |  | ||||||
|     assert not condition.is_match({'psu_info': psu_info}) |  | ||||||
|  |  | ||||||
|     psu_list[0].presence = True |  | ||||||
|     psu_info.collect(chassis) |  | ||||||
|     assert condition.is_match({'psu_info': psu_info}) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_load_set_fan_speed_action(): |  | ||||||
|     from sonic_platform.thermal_actions import SetAllFanSpeedAction |  | ||||||
|     action = SetAllFanSpeedAction() |  | ||||||
|     json_str = '{\"speed\": \"50\"}' |  | ||||||
|     json_obj = json.loads(json_str) |  | ||||||
|     action.load_from_json(json_obj) |  | ||||||
|     assert action.speed == 50 |  | ||||||
|  |  | ||||||
|     json_str = '{\"speed\": \"-1\"}' |  | ||||||
|     json_obj = json.loads(json_str) |  | ||||||
|     with pytest.raises(ValueError): |  | ||||||
|         action.load_from_json(json_obj) |  | ||||||
|  |  | ||||||
|     json_str = '{\"speed\": \"101\"}' |  | ||||||
|     json_obj = json.loads(json_str) |  | ||||||
|     with pytest.raises(ValueError): |  | ||||||
|         action.load_from_json(json_obj) |  | ||||||
|  |  | ||||||
|     json_str = '{\"invalid\": \"101\"}' |  | ||||||
|     json_obj = json.loads(json_str) |  | ||||||
|     with pytest.raises(ValueError): |  | ||||||
|         action.load_from_json(json_obj) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @patch('sonic_platform.thermal.Thermal.set_cooling_level', MagicMock()) |  | ||||||
| def test_execute_set_fan_speed_action(): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     chassis.get_all_fan_drawers().append(MockFanDrawer()) |  | ||||||
|     fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() |  | ||||||
|     fan_list.append(MockFan()) |  | ||||||
|     fan_list.append(MockFan()) |  | ||||||
|     fan_info = FanInfo() |  | ||||||
|     fan_info.collect(chassis) |  | ||||||
|  |  | ||||||
|     Thermal.expect_cooling_level = None |  | ||||||
|     from sonic_platform.thermal_actions import SetAllFanSpeedAction |  | ||||||
|     action = SetAllFanSpeedAction() |  | ||||||
|     action.speed = 20 |  | ||||||
|     action.execute({'fan_info': fan_info}) |  | ||||||
|     assert Thermal.expect_cooling_level == 2 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_load_duplicate_condition(): |  | ||||||
|     from sonic_platform_base.sonic_thermal_control.thermal_policy import ThermalPolicy |  | ||||||
|     with open(os.path.join(test_path, 'duplicate_condition.json')) as f: |  | ||||||
|         json_obj = json.load(f) |  | ||||||
|         policy = ThermalPolicy() |  | ||||||
|         with pytest.raises(Exception): |  | ||||||
|             policy.load_from_json(json_obj) |  | ||||||
|  |  | ||||||
| def test_load_duplicate_action(): |  | ||||||
|     from sonic_platform_base.sonic_thermal_control.thermal_policy import ThermalPolicy |  | ||||||
|     with open(os.path.join(test_path, 'duplicate_action.json')) as f: |  | ||||||
|         json_obj = json.load(f) |  | ||||||
|         policy = ThermalPolicy() |  | ||||||
|         with pytest.raises(Exception): |  | ||||||
|             policy.load_from_json(json_obj) |  | ||||||
|  |  | ||||||
| def test_load_empty_condition(): |  | ||||||
|     from sonic_platform_base.sonic_thermal_control.thermal_policy import ThermalPolicy |  | ||||||
|     with open(os.path.join(test_path, 'empty_condition.json')) as f: |  | ||||||
|         json_obj = json.load(f) |  | ||||||
|         policy = ThermalPolicy() |  | ||||||
|         with pytest.raises(Exception): |  | ||||||
|             policy.load_from_json(json_obj) |  | ||||||
|  |  | ||||||
| def test_load_empty_action(): |  | ||||||
|     from sonic_platform_base.sonic_thermal_control.thermal_policy import ThermalPolicy |  | ||||||
|     with open(os.path.join(test_path, 'empty_action.json')) as f: |  | ||||||
|         json_obj = json.load(f) |  | ||||||
|         policy = ThermalPolicy() |  | ||||||
|         with pytest.raises(Exception): |  | ||||||
|             policy.load_from_json(json_obj) |  | ||||||
|  |  | ||||||
| def test_load_policy_with_same_conditions(): |  | ||||||
|     from sonic_platform_base.sonic_thermal_control.thermal_manager_base import ThermalManagerBase |  | ||||||
|     class MockThermalManager(ThermalManagerBase): |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     with pytest.raises(Exception): |  | ||||||
|         MockThermalManager.load(os.path.join(test_path, 'policy_with_same_conditions.json')) |  | ||||||
|  |  | ||||||
| def test_dynamic_minimum_table_data(): |  | ||||||
|     from sonic_platform.device_data import DEVICE_DATA |  | ||||||
|     for platform, platform_data in DEVICE_DATA.items(): |  | ||||||
|         if 'thermal' in platform_data and 'minimum_table' in platform_data['thermal']: |  | ||||||
|             minimum_table = platform_data['thermal']['minimum_table'] |  | ||||||
|             check_minimum_table_data(platform, minimum_table) |  | ||||||
|  |  | ||||||
| def check_minimum_table_data(platform, minimum_table): |  | ||||||
|     valid_dir = ['p2c', 'c2p', 'unk'] |  | ||||||
|     valid_trust_state = ['trust', 'untrust'] |  | ||||||
|  |  | ||||||
|     for category, data in minimum_table.items(): |  | ||||||
|         key_data = category.split('_') |  | ||||||
|         assert key_data[0] in valid_dir |  | ||||||
|         assert key_data[1] in valid_trust_state |  | ||||||
|  |  | ||||||
|         data_list = [(value, key) for key, value in data.items()] |  | ||||||
|         data_list.sort(key=lambda x : x[0]) |  | ||||||
|  |  | ||||||
|         previous_edge = None |  | ||||||
|         previous_cooling_level = None |  | ||||||
|         for item in data_list: |  | ||||||
|             cooling_level = item[0] |  | ||||||
|             range_str = item[1] |  | ||||||
|  |  | ||||||
|             ranges = range_str.split(':') |  | ||||||
|             low = int(ranges[0]) |  | ||||||
|             high = int(ranges[1]) |  | ||||||
|             assert low < high |  | ||||||
|  |  | ||||||
|             if previous_edge is None: |  | ||||||
|                 assert low == -127 |  | ||||||
|             else: |  | ||||||
|                 assert low - previous_edge == 1, '{}-{}-{} error, item={}'.format(platform, key_data[0], key_data[1], item) |  | ||||||
|             previous_edge = high |  | ||||||
|  |  | ||||||
|             assert 10 <= cooling_level <= 20 |  | ||||||
|             if previous_cooling_level is not None: |  | ||||||
|                 assert cooling_level > previous_cooling_level |  | ||||||
|             previous_cooling_level = cooling_level |  | ||||||
|  |  | ||||||
| @patch('sonic_platform.thermal.Thermal.monitor_asic_themal_zone', MagicMock()) |  | ||||||
| @patch('sonic_platform.device_data.DeviceDataManager.get_platform_name') |  | ||||||
| @patch('sonic_platform.thermal.Thermal.get_min_allowed_cooling_level_by_thermal_zone') |  | ||||||
| @patch('sonic_platform.thermal.Thermal.get_min_amb_temperature') |  | ||||||
| @patch('sonic_platform.thermal.Thermal.check_module_temperature_trustable') |  | ||||||
| def test_thermal_recover_policy(mock_check_trustable, mock_get_min_amb, moc_get_min_allowed, mock_platform_name): |  | ||||||
|     from sonic_platform.thermal_infos import ChassisInfo |  | ||||||
|     from sonic_platform.thermal_actions import ThermalRecoverAction |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     mock_platform_name.return_value = 'invalid' |  | ||||||
|     info = ChassisInfo() |  | ||||||
|     info._chassis = chassis |  | ||||||
|     thermal_info_dict = {ChassisInfo.INFO_NAME: info} |  | ||||||
|  |  | ||||||
|     Thermal.expect_cooling_level = None |  | ||||||
|     action = ThermalRecoverAction() |  | ||||||
|     moc_get_min_allowed.return_value = 2 |  | ||||||
|     action.execute(thermal_info_dict) |  | ||||||
|     assert Thermal.expect_cooling_level == 6 |  | ||||||
|     Thermal.last_set_cooling_level = Thermal.expect_cooling_level |  | ||||||
|  |  | ||||||
|     Thermal.expect_cooling_level = None |  | ||||||
|     mock_platform_name.return_value = 'x86_64-mlnx_msn2700-r0' |  | ||||||
|     mock_check_trustable.return_value = 'trust' |  | ||||||
|     mock_get_min_amb.return_value = 29999 |  | ||||||
|     moc_get_min_allowed.return_value = None |  | ||||||
|     action.execute(thermal_info_dict) |  | ||||||
|     assert Thermal.expect_cooling_level is None |  | ||||||
|  |  | ||||||
|     moc_get_min_allowed.return_value = 4 |  | ||||||
|     action.execute(thermal_info_dict) |  | ||||||
|     assert Thermal.expect_cooling_level == 4 |  | ||||||
|     Thermal.last_set_cooling_level = Thermal.expect_cooling_level |  | ||||||
|  |  | ||||||
|     mock_check_trustable.return_value = 'untrust' |  | ||||||
|     mock_get_min_amb.return_value = 31001 |  | ||||||
|     action.execute(thermal_info_dict) |  | ||||||
|     assert Thermal.expect_cooling_level == 5 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @patch('sonic_platform.thermal.Thermal.set_cooling_state') |  | ||||||
| @patch('sonic_platform.utils.read_int_from_file') |  | ||||||
| def test_monitor_asic_themal_zone(mock_read_int, mock_set_cooling_state): |  | ||||||
|     mock_read_int.side_effect = [111000, 105000] |  | ||||||
|     Thermal.monitor_asic_themal_zone() |  | ||||||
|     assert Thermal.expect_cooling_state == MAX_COOLING_LEVEL |  | ||||||
|     Thermal.commit_cooling_level({}) |  | ||||||
|     mock_set_cooling_state.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|     mock_read_int.reset() |  | ||||||
|     mock_read_int.side_effect = [104000, 105000] |  | ||||||
|     Thermal.monitor_asic_themal_zone() |  | ||||||
|     assert Thermal.expect_cooling_state is None |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_set_expect_cooling_level(): |  | ||||||
|     Thermal.set_expect_cooling_level(5) |  | ||||||
|     assert Thermal.expect_cooling_level == 5 |  | ||||||
|  |  | ||||||
|     Thermal.set_expect_cooling_level(3) |  | ||||||
|     assert Thermal.expect_cooling_level == 5 |  | ||||||
|  |  | ||||||
|     Thermal.set_expect_cooling_level(10) |  | ||||||
|     assert Thermal.expect_cooling_level == 10 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @patch('sonic_platform.thermal.Thermal.commit_cooling_level', MagicMock()) |  | ||||||
| @patch('sonic_platform.thermal_conditions.AnyFanFaultCondition.is_match') |  | ||||||
| @patch('sonic_platform.thermal_manager.ThermalManager._collect_thermal_information') |  | ||||||
| @patch('sonic_platform.thermal.Thermal.set_expect_cooling_level') |  | ||||||
| def test_run_policy(mock_expect, mock_collect_info, mock_match, thermal_manager): |  | ||||||
|     chassis = MockChassis() |  | ||||||
|     mock_collect_info.side_effect = Exception('') |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     mock_expect.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|  |  | ||||||
|     mock_collect_info.side_effect = None |  | ||||||
|     mock_expect.reset_mock() |  | ||||||
|     mock_match.side_effect = Exception('') |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     mock_expect.assert_called_with(MAX_COOLING_LEVEL) |  | ||||||
|  |  | ||||||
|     thermal_manager.stop() |  | ||||||
|     mock_expect.reset_mock() |  | ||||||
|     thermal_manager.run_policy(chassis) |  | ||||||
|     assert mock_expect.call_count == 0 |  | ||||||
|  |  | ||||||
| @@ -1,81 +0,0 @@ | |||||||
| { |  | ||||||
|     "thermal_control_algorithm": { |  | ||||||
|         "run_at_boot_up": "false", |  | ||||||
|         "fan_speed_when_suspend": "60" |  | ||||||
|     }, |  | ||||||
|     "info_types": [ |  | ||||||
|         { |  | ||||||
|             "type": "fan_info" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "psu_info" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "type": "chassis_info" |  | ||||||
|         } |  | ||||||
|     ], |  | ||||||
|     "policies": [ |  | ||||||
|         { |  | ||||||
|             "name": "any fan absence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.any.absence" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "any psu absence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "psu.any.absence" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "any fan broken", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.any.fault" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.set_speed", |  | ||||||
|                     "speed": "100" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|             "name": "all fan and psu presence", |  | ||||||
|             "conditions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.presence" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "psu.all.presence" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "fan.all.good" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "actions": [ |  | ||||||
|                 { |  | ||||||
|                     "type": "thermal.recover", |  | ||||||
|                     "status": "true" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         } |  | ||||||
|     ] |  | ||||||
| } |  | ||||||
| @@ -0,0 +1,96 @@ | |||||||
|  | From 4db801c656712234c840883b68429e6d45080ea3 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Tue, 6 Jul 2021 18:38:29 +0000 | ||||||
|  | Subject: [PATCH backport v5.10.43 49/67] leds: mlxreg: Provide conversion for | ||||||
|  |  hardware LED color code | ||||||
|  |  | ||||||
|  | In case register is set by hardware, convert hardware color code to | ||||||
|  | expose correct color to "sysfs". | ||||||
|  | For some LED color at initial state is set by hardware. Hardware | ||||||
|  | controls LED color until the first software write access to any LED | ||||||
|  | register - the first software access cancels hardware control. | ||||||
|  | If LED is under hardware control - detect the color in brightness_get() | ||||||
|  | function. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/leds/leds-mlxreg.c | 27 ++++++++++++++++++++++----- | ||||||
|  |  1 file changed, 22 insertions(+), 5 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/leds/leds-mlxreg.c b/drivers/leds/leds-mlxreg.c | ||||||
|  | index 82aea1cd0c12..aa82f6a521f8 100644 | ||||||
|  | --- a/drivers/leds/leds-mlxreg.c | ||||||
|  | +++ b/drivers/leds/leds-mlxreg.c | ||||||
|  | @@ -17,7 +17,9 @@ | ||||||
|  |  #define MLXREG_LED_OFFSET_BLINK_3HZ	0x01 /* Offset from solid: 3Hz blink */ | ||||||
|  |  #define MLXREG_LED_OFFSET_BLINK_6HZ	0x02 /* Offset from solid: 6Hz blink */ | ||||||
|  |  #define MLXREG_LED_IS_OFF		0x00 /* Off */ | ||||||
|  | -#define MLXREG_LED_RED_SOLID		0x05 /* Solid red */ | ||||||
|  | +#define MLXREG_LED_RED_SOLID_HW		0x01 /* Solid red or orange by hardware */ | ||||||
|  | +#define MLXREG_LED_RED_SOLID		0x05 /* Solid red or orange */ | ||||||
|  | +#define MLXREG_LED_GREEN_SOLID_HW	0x09 /* Solid green by hardware */ | ||||||
|  |  #define MLXREG_LED_GREEN_SOLID		0x0D /* Solid green */ | ||||||
|  |  #define MLXREG_LED_AMBER_SOLID		0x09 /* Solid amber */ | ||||||
|  |  #define MLXREG_LED_BLINK_3HZ		167 /* ~167 msec off/on - HW support */ | ||||||
|  | @@ -30,6 +32,7 @@ | ||||||
|  |   * @data: led configuration data; | ||||||
|  |   * @led_classdev: led class data; | ||||||
|  |   * @base_color: base led color (other colors have constant offset from base); | ||||||
|  | + * @base_color_hw: base led color set by hardware; | ||||||
|  |   * @led_data: led data; | ||||||
|  |   * @data_parent: pointer to private device control data of parent; | ||||||
|  |   */ | ||||||
|  | @@ -37,6 +40,7 @@ struct mlxreg_led_data { | ||||||
|  |  	struct mlxreg_core_data *data; | ||||||
|  |  	struct led_classdev led_cdev; | ||||||
|  |  	u8 base_color; | ||||||
|  | +	u8 base_color_hw; | ||||||
|  |  	void *data_parent; | ||||||
|  |  	char led_cdev_name[MLXREG_CORE_LABEL_MAX_SIZE]; | ||||||
|  |  }; | ||||||
|  | @@ -124,8 +128,17 @@ mlxreg_led_get_hw(struct mlxreg_led_data *led_data) | ||||||
|  |  	regval = regval & ~data->mask; | ||||||
|  |  	regval = (ror32(data->mask, data->bit) == 0xf0) ? ror32(regval, | ||||||
|  |  		 data->bit) : ror32(regval, data->bit + 4); | ||||||
|  | -	if (regval >= led_data->base_color && | ||||||
|  | -	    regval <= (led_data->base_color + MLXREG_LED_OFFSET_BLINK_6HZ)) | ||||||
|  | + | ||||||
|  | +	/* | ||||||
|  | +	 * For some LED color at initial state is set by hardware. Hardware controls LED color | ||||||
|  | +	 * until the first write access to any LED register. If LED is under hardware control - | ||||||
|  | +	 * convert the value to the software mask to expose correct color. The first LED set by | ||||||
|  | +	 * software cancels hardware control. | ||||||
|  | +	 */ | ||||||
|  | +	if ((regval >= led_data->base_color && | ||||||
|  | +	     regval <= (led_data->base_color + MLXREG_LED_OFFSET_BLINK_6HZ)) || | ||||||
|  | +	    (led_data->base_color_hw && regval >= led_data->base_color_hw && | ||||||
|  | +	     regval <= (led_data->base_color_hw + MLXREG_LED_OFFSET_BLINK_6HZ))) | ||||||
|  |  		return LED_FULL; | ||||||
|  |   | ||||||
|  |  	return LED_OFF; | ||||||
|  | @@ -217,16 +230,20 @@ static int mlxreg_led_config(struct mlxreg_led_priv_data *priv) | ||||||
|  |   | ||||||
|  |  		led_cdev = &led_data->led_cdev; | ||||||
|  |  		led_data->data_parent = priv; | ||||||
|  | -		if (strstr(data->label, "red") || | ||||||
|  | -		    strstr(data->label, "orange")) { | ||||||
|  | +		if (strstr(data->label, "red")) { | ||||||
|  | +			brightness = LED_OFF; | ||||||
|  | +			led_data->base_color = MLXREG_LED_RED_SOLID; | ||||||
|  | +		} else if (strstr(data->label, "orange")) { | ||||||
|  |  			brightness = LED_OFF; | ||||||
|  |  			led_data->base_color = MLXREG_LED_RED_SOLID; | ||||||
|  | +			led_data->base_color_hw = MLXREG_LED_RED_SOLID_HW; | ||||||
|  |  		} else if (strstr(data->label, "amber")) { | ||||||
|  |  			brightness = LED_OFF; | ||||||
|  |  			led_data->base_color = MLXREG_LED_AMBER_SOLID; | ||||||
|  |  		} else { | ||||||
|  |  			brightness = LED_OFF; | ||||||
|  |  			led_data->base_color = MLXREG_LED_GREEN_SOLID; | ||||||
|  | +			led_data->base_color_hw = MLXREG_LED_GREEN_SOLID_HW; | ||||||
|  |  		} | ||||||
|  |  		snprintf(led_data->led_cdev_name, sizeof(led_data->led_cdev_name), | ||||||
|  |  			 "mlxreg:%s", data->label); | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,38 @@ | |||||||
|  | From 3d0e396f29b5da17385c279946b70ee5cd373efe Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Wed, 7 Jul 2021 10:18:14 +0000 | ||||||
|  | Subject: [PATCH backport 5.10 050/182] leds: mlxreg: Skip setting LED color | ||||||
|  |  during initialization | ||||||
|  |  | ||||||
|  | Hardware controls LED through CPLD device and LED control ownership | ||||||
|  | passes to the software after it performs the first write operation for | ||||||
|  | any LED on a system. | ||||||
|  | For example, hardware sets "system" LED "green blink" during boot and | ||||||
|  | might change it to "red", in case something is went wrong from hardware | ||||||
|  | point of view. | ||||||
|  | The motivation for not setting LED during kernel initialization is for | ||||||
|  | keeping hardware settings visible for user, until user will not decide | ||||||
|  | to set LEDs according to user OS specific requirements. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/leds/leds-mlxreg.c | 3 --- | ||||||
|  |  1 file changed, 3 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/leds/leds-mlxreg.c b/drivers/leds/leds-mlxreg.c | ||||||
|  | index 82aea1cd0c12..7df4653a80d7 100644 | ||||||
|  | --- a/drivers/leds/leds-mlxreg.c | ||||||
|  | +++ b/drivers/leds/leds-mlxreg.c | ||||||
|  | @@ -243,9 +243,6 @@ static int mlxreg_led_config(struct mlxreg_led_priv_data *priv) | ||||||
|  |  		if (err) | ||||||
|  |  			return err; | ||||||
|  |   | ||||||
|  | -		if (led_cdev->brightness) | ||||||
|  | -			mlxreg_led_brightness_set(led_cdev, | ||||||
|  | -						  led_cdev->brightness); | ||||||
|  |  		dev_info(led_cdev->dev, "label: %s, mask: 0x%02x, offset:0x%02x\n", | ||||||
|  |  			 data->label, data->mask, data->reg); | ||||||
|  |  	} | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,77 @@ | |||||||
|  | From 6782d682cb0510d0fee33f456ed3492834bad97d Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Wed, 7 Jul 2021 10:29:27 +0000 | ||||||
|  | Subject: leds: mlxreg: Allow multi-instantiation of same name LED for modular | ||||||
|  |  systems | ||||||
|  |  | ||||||
|  | It could be more than one instance of LED with the same name in the | ||||||
|  | modular systems. For example, "status" or "uid" LED can be located | ||||||
|  | on chassis and on each line card of modular system. | ||||||
|  | In order to avoid conflicts with duplicated names, append platform | ||||||
|  | device Id, which is unique, to LED name after driver name. | ||||||
|  | Thus, for example, "status" LED on chassis is to be called, like it is | ||||||
|  | called now on non-modular systems, on which platform device Id is not | ||||||
|  | specified: "mlxreg:status:green". While for the line cards LEDs it will | ||||||
|  | be called like: "pcicard48:status:green", "ibcard66:status:green", | ||||||
|  | etc. Where line card prefix is specified according to the type of bus | ||||||
|  | connecting line card to the chassis. | ||||||
|  |  | ||||||
|  | LED driver works on top of register space of the programmable devices | ||||||
|  | (CPLD or FPGA), providing the logic for LED control. The programmable | ||||||
|  | devices on the line cards are connected through I2C bus and LED driver | ||||||
|  | will work over I2C. On main board programmable device is connected | ||||||
|  | through LPC, and LED driver works over LPC. | ||||||
|  |  | ||||||
|  | The motivation it to provide support for new modular systems which | ||||||
|  | could be equipped with the different types of replaceable line cards | ||||||
|  | and management board. | ||||||
|  |  | ||||||
|  | Line cards are connected to the chassis through I2C interface for the | ||||||
|  | chassis management operations and through PCIe for the networking | ||||||
|  | operations. | ||||||
|  |  | ||||||
|  | The first type of line card supports 16x100GbE QSFP28 Ethernet ports. | ||||||
|  | Those line cards equipped with the programmable devices aimed for | ||||||
|  | system control of Nvidia Ethernet switch ASIC control, Nvidia FPGA, | ||||||
|  | Nvidia gearboxes (PHYs). | ||||||
|  | The next coming  card generations are supposed to support: | ||||||
|  | - Line cards with 8x200Gbe QSFP28 Ethernet ports. | ||||||
|  | - Line cards with 4x400Gbe QSFP-DD Ethernet ports. | ||||||
|  | - Smart cards equipped with Nvidia ARM CPU for offloading and for fast | ||||||
|  |   access to the storage (EBoF). | ||||||
|  | - Fabric cards for inter-connection. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/leds/leds-mlxreg.c | 15 +++++++++++++-- | ||||||
|  |  1 file changed, 13 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/leds/leds-mlxreg.c b/drivers/leds/leds-mlxreg.c | ||||||
|  | index 0f2608a34..099ff4be2 100644 | ||||||
|  | --- a/drivers/leds/leds-mlxreg.c | ||||||
|  | +++ b/drivers/leds/leds-mlxreg.c | ||||||
|  | @@ -245,8 +245,19 @@ static int mlxreg_led_config(struct mlxreg_led_priv_data *priv) | ||||||
|  |  			led_data->base_color = MLXREG_LED_GREEN_SOLID; | ||||||
|  |  			led_data->base_color_hw = MLXREG_LED_GREEN_SOLID_HW; | ||||||
|  |  		} | ||||||
|  | -		snprintf(led_data->led_cdev_name, sizeof(led_data->led_cdev_name), | ||||||
|  | -			 "mlxreg:%s", data->label); | ||||||
|  | + | ||||||
|  | +		/* | ||||||
|  | +		 * Id greater than zero is used for LEDs located on replaceable unit, | ||||||
|  | +		 * like line card or fabric card. In this case Id is set to I2C bus | ||||||
|  | +		 * number. Otherwise LEDs located on the main board. The field "identity" | ||||||
|  | +		 * specifies the type of bus connecting line card to the chassis. | ||||||
|  | +		 */ | ||||||
|  | +		if (priv->pdev->id > 0) | ||||||
|  | +			sprintf(led_data->led_cdev_name, "%scard%d:%s", led_pdata->identity, | ||||||
|  | +				priv->pdev->id, data->label); | ||||||
|  | +		else | ||||||
|  | +			sprintf(led_data->led_cdev_name, "%s:%s", "mlxreg", | ||||||
|  | +				data->label); | ||||||
|  |  		led_cdev->name = led_data->led_cdev_name; | ||||||
|  |  		led_cdev->brightness = brightness; | ||||||
|  |  		led_cdev->max_brightness = LED_ON; | ||||||
|  | --  | ||||||
|  | 2.14.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,771 @@ | |||||||
|  | From 3a6322534307154e067d0596f52f287ecd0f599e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Ciju Rajan K <crajank@nvidia.com> | ||||||
|  | Date: Thu, 17 Aug 2023 10:00:25 +0000 | ||||||
|  | Subject: Revert "mlxsw: Use u16 for local_port field instead of u8" | ||||||
|  |  | ||||||
|  | This reverts commit 0639995c2017338c563db36f631e94d19ae45c74. | ||||||
|  | --- | ||||||
|  |  drivers/net/ethernet/mellanox/mlxsw/core.c    |  32 ++++---- | ||||||
|  |  drivers/net/ethernet/mellanox/mlxsw/core.h    |  34 ++++----- | ||||||
|  |  drivers/net/ethernet/mellanox/mlxsw/minimal.c |   6 +- | ||||||
|  |  drivers/net/ethernet/mellanox/mlxsw/reg.h     | 106 +++++++++++++------------- | ||||||
|  |  4 files changed, 89 insertions(+), 89 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
|  | index 631c19222fc4..7938bad70e37 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
|  | @@ -47,7 +47,7 @@ static struct workqueue_struct *mlxsw_owq; | ||||||
|  |  struct mlxsw_core_port { | ||||||
|  |  	struct devlink_port devlink_port; | ||||||
|  |  	void *port_driver_priv; | ||||||
|  | -	u16 local_port; | ||||||
|  | +	u8 local_port; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  void *mlxsw_core_port_driver_priv(struct mlxsw_core_port *mlxsw_core_port) | ||||||
|  | @@ -669,7 +669,7 @@ static void mlxsw_emad_process_response(struct mlxsw_core *mlxsw_core, | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /* called with rcu read lock held */ | ||||||
|  | -static void mlxsw_emad_rx_listener_func(struct sk_buff *skb, u16 local_port, | ||||||
|  | +static void mlxsw_emad_rx_listener_func(struct sk_buff *skb, u8 local_port, | ||||||
|  |  					void *priv) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_core *mlxsw_core = priv; | ||||||
|  | @@ -2094,7 +2094,7 @@ int mlxsw_core_skb_transmit(struct mlxsw_core *mlxsw_core, struct sk_buff *skb, | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_skb_transmit); | ||||||
|  |   | ||||||
|  |  void mlxsw_core_ptp_transmitted(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				struct sk_buff *skb, u16 local_port) | ||||||
|  | +				struct sk_buff *skb, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	if (mlxsw_core->driver->ptp_transmitted) | ||||||
|  |  		mlxsw_core->driver->ptp_transmitted(mlxsw_core, skb, | ||||||
|  | @@ -2172,7 +2172,7 @@ mlxsw_core_rx_listener_state_set(struct mlxsw_core *mlxsw_core, | ||||||
|  |  	rxl_item->enabled = enabled; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static void mlxsw_core_event_listener_func(struct sk_buff *skb, u16 local_port, | ||||||
|  | +static void mlxsw_core_event_listener_func(struct sk_buff *skb, u8 local_port, | ||||||
|  |  					   void *priv) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_event_listener_item *event_listener_item = priv; | ||||||
|  | @@ -2599,7 +2599,7 @@ void mlxsw_core_skb_receive(struct mlxsw_core *mlxsw_core, struct sk_buff *skb, | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_rx_listener_item *rxl_item; | ||||||
|  |  	const struct mlxsw_rx_listener *rxl; | ||||||
|  | -	u16 local_port; | ||||||
|  | +	u8 local_port; | ||||||
|  |  	bool found = false; | ||||||
|  |   | ||||||
|  |  	if (rx_info->is_lag) { | ||||||
|  | @@ -2657,7 +2657,7 @@ static int mlxsw_core_lag_mapping_index(struct mlxsw_core *mlxsw_core, | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  void mlxsw_core_lag_mapping_set(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				u16 lag_id, u8 port_index, u16 local_port) | ||||||
|  | +				u16 lag_id, u8 port_index, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	int index = mlxsw_core_lag_mapping_index(mlxsw_core, | ||||||
|  |  						 lag_id, port_index); | ||||||
|  | @@ -2677,7 +2677,7 @@ u8 mlxsw_core_lag_mapping_get(struct mlxsw_core *mlxsw_core, | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_lag_mapping_get); | ||||||
|  |   | ||||||
|  |  void mlxsw_core_lag_mapping_clear(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				  u16 lag_id, u16 local_port) | ||||||
|  | +				  u16 lag_id, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	int i; | ||||||
|  |   | ||||||
|  | @@ -2705,7 +2705,7 @@ u64 mlxsw_core_res_get(struct mlxsw_core *mlxsw_core, | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_res_get); | ||||||
|  |   | ||||||
|  | -static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  				  enum devlink_port_flavour flavour, | ||||||
|  |  				  u32 port_number, bool split, | ||||||
|  |  				  u32 split_port_subnumber, | ||||||
|  | @@ -2736,7 +2736,7 @@ static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static void __mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u16 local_port) | ||||||
|  | +static void __mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_core_port *mlxsw_core_port = | ||||||
|  |  					&mlxsw_core->ports[local_port]; | ||||||
|  | @@ -2746,7 +2746,7 @@ static void __mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u16 local_port | ||||||
|  |  	memset(mlxsw_core_port, 0, sizeof(*mlxsw_core_port)); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			 u32 port_number, bool split, | ||||||
|  |  			 u32 split_port_subnumber, | ||||||
|  |  			 bool splittable, u32 lanes, | ||||||
|  | @@ -2761,7 +2761,7 @@ int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_port_init); | ||||||
|  |   | ||||||
|  | -void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u16 local_port) | ||||||
|  | +void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	__mlxsw_core_port_fini(mlxsw_core, local_port); | ||||||
|  |  } | ||||||
|  | @@ -2794,7 +2794,7 @@ void mlxsw_core_cpu_port_fini(struct mlxsw_core *mlxsw_core) | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_cpu_port_fini); | ||||||
|  |   | ||||||
|  | -void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			     void *port_driver_priv, struct net_device *dev) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_core_port *mlxsw_core_port = | ||||||
|  | @@ -2806,7 +2806,7 @@ void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_port_eth_set); | ||||||
|  |   | ||||||
|  | -void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			    void *port_driver_priv) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_core_port *mlxsw_core_port = | ||||||
|  | @@ -2818,7 +2818,7 @@ void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_port_ib_set); | ||||||
|  |   | ||||||
|  | -void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			   void *port_driver_priv) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_core_port *mlxsw_core_port = | ||||||
|  | @@ -2831,7 +2831,7 @@ void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  |  EXPORT_SYMBOL(mlxsw_core_port_clear); | ||||||
|  |   | ||||||
|  |  enum devlink_port_type mlxsw_core_port_type_get(struct mlxsw_core *mlxsw_core, | ||||||
|  | -						u16 local_port) | ||||||
|  | +						u8 local_port) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_core_port *mlxsw_core_port = | ||||||
|  |  					&mlxsw_core->ports[local_port]; | ||||||
|  | @@ -2844,7 +2844,7 @@ EXPORT_SYMBOL(mlxsw_core_port_type_get); | ||||||
|  |   | ||||||
|  |  struct devlink_port * | ||||||
|  |  mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				 u16 local_port) | ||||||
|  | +				 u8 local_port) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_core_port *mlxsw_core_port = | ||||||
|  |  					&mlxsw_core->ports[local_port]; | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
|  | index 1fc783174292..56efb8e48022 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
|  | @@ -49,7 +49,7 @@ int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info, | ||||||
|  |  void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core, bool reload); | ||||||
|  |   | ||||||
|  |  struct mlxsw_tx_info { | ||||||
|  | -	u16 local_port; | ||||||
|  | +	u8 local_port; | ||||||
|  |  	bool is_emad; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | @@ -58,11 +58,11 @@ bool mlxsw_core_skb_transmit_busy(struct mlxsw_core *mlxsw_core, | ||||||
|  |  int mlxsw_core_skb_transmit(struct mlxsw_core *mlxsw_core, struct sk_buff *skb, | ||||||
|  |  			    const struct mlxsw_tx_info *tx_info); | ||||||
|  |  void mlxsw_core_ptp_transmitted(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				struct sk_buff *skb, u16 local_port); | ||||||
|  | +				struct sk_buff *skb, u8 local_port); | ||||||
|  |   | ||||||
|  |  struct mlxsw_rx_listener { | ||||||
|  | -	void (*func)(struct sk_buff *skb, u16 local_port, void *priv); | ||||||
|  | -	u16 local_port; | ||||||
|  | +	void (*func)(struct sk_buff *skb, u8 local_port, void *priv); | ||||||
|  | +	u8 local_port; | ||||||
|  |  	u8 mirror_reason; | ||||||
|  |  	u16 trap_id; | ||||||
|  |  }; | ||||||
|  | @@ -194,35 +194,35 @@ void mlxsw_core_skb_receive(struct mlxsw_core *mlxsw_core, struct sk_buff *skb, | ||||||
|  |  			    struct mlxsw_rx_info *rx_info); | ||||||
|  |   | ||||||
|  |  void mlxsw_core_lag_mapping_set(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				u16 lag_id, u8 port_index, u16 local_port); | ||||||
|  | +				u16 lag_id, u8 port_index, u8 local_port); | ||||||
|  |  u8 mlxsw_core_lag_mapping_get(struct mlxsw_core *mlxsw_core, | ||||||
|  |  			      u16 lag_id, u8 port_index); | ||||||
|  |  void mlxsw_core_lag_mapping_clear(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				  u16 lag_id, u16 local_port); | ||||||
|  | +				  u16 lag_id, u8 local_port); | ||||||
|  |   | ||||||
|  |  void *mlxsw_core_port_driver_priv(struct mlxsw_core_port *mlxsw_core_port); | ||||||
|  | -int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			 u32 port_number, bool split, u32 split_port_subnumber, | ||||||
|  |  			 bool splittable, u32 lanes, | ||||||
|  |  			 const unsigned char *switch_id, | ||||||
|  |  			 unsigned char switch_id_len); | ||||||
|  | -void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u16 local_port); | ||||||
|  | +void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port); | ||||||
|  |  int mlxsw_core_cpu_port_init(struct mlxsw_core *mlxsw_core, | ||||||
|  |  			     void *port_driver_priv, | ||||||
|  |  			     const unsigned char *switch_id, | ||||||
|  |  			     unsigned char switch_id_len); | ||||||
|  |  void mlxsw_core_cpu_port_fini(struct mlxsw_core *mlxsw_core); | ||||||
|  | -void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			     void *port_driver_priv, struct net_device *dev); | ||||||
|  | -void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			    void *port_driver_priv); | ||||||
|  | -void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			   void *port_driver_priv); | ||||||
|  |  enum devlink_port_type mlxsw_core_port_type_get(struct mlxsw_core *mlxsw_core, | ||||||
|  | -						u16 local_port); | ||||||
|  | +						u8 local_port); | ||||||
|  |  struct devlink_port * | ||||||
|  |  mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				 u16 local_port); | ||||||
|  | +				 u8 local_port); | ||||||
|  |  struct mlxsw_env *mlxsw_core_env(const struct mlxsw_core *mlxsw_core); | ||||||
|  |  int mlxsw_core_module_max_width(struct mlxsw_core *mlxsw_core, u8 module); | ||||||
|  |   | ||||||
|  | @@ -290,11 +290,11 @@ struct mlxsw_driver { | ||||||
|  |  		    struct netlink_ext_ack *extack); | ||||||
|  |  	void (*fini)(struct mlxsw_core *mlxsw_core); | ||||||
|  |  	int (*basic_trap_groups_set)(struct mlxsw_core *mlxsw_core); | ||||||
|  | -	int (*port_type_set)(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +	int (*port_type_set)(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			     enum devlink_port_type new_type); | ||||||
|  | -	int (*port_split)(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +	int (*port_split)(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			  unsigned int count, struct netlink_ext_ack *extack); | ||||||
|  | -	int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u16 local_port, | ||||||
|  | +	int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u8 local_port, | ||||||
|  |  			    struct netlink_ext_ack *extack); | ||||||
|  |  	int (*sb_pool_get)(struct mlxsw_core *mlxsw_core, | ||||||
|  |  			   unsigned int sb_index, u16 pool_index, | ||||||
|  | @@ -368,7 +368,7 @@ struct mlxsw_driver { | ||||||
|  |  	 * is responsible for freeing the passed-in SKB. | ||||||
|  |  	 */ | ||||||
|  |  	void (*ptp_transmitted)(struct mlxsw_core *mlxsw_core, | ||||||
|  | -				struct sk_buff *skb, u16 local_port); | ||||||
|  | +				struct sk_buff *skb, u8 local_port); | ||||||
|  |   | ||||||
|  |  	u8 txhdr_len; | ||||||
|  |  	const struct mlxsw_config_profile *profile; | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
|  | index 1ddd11320b99..3d07c2dcf08d 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
|  | @@ -38,7 +38,7 @@ struct mlxsw_m { | ||||||
|  |  struct mlxsw_m_port { | ||||||
|  |  	struct net_device *dev; | ||||||
|  |  	struct mlxsw_m *mlxsw_m; | ||||||
|  | -	u16 local_port; | ||||||
|  | +	u8 local_port; | ||||||
|  |  	u8 module; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | @@ -201,7 +201,7 @@ mlxsw_m_port_dev_addr_get(struct mlxsw_m_port *mlxsw_m_port) | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static int | ||||||
|  | -mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u16 local_port, u8 module) | ||||||
|  | +mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_m_port *mlxsw_m_port; | ||||||
|  |  	struct net_device *dev; | ||||||
|  | @@ -264,7 +264,7 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u16 local_port, u8 module) | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static void mlxsw_m_port_remove(struct mlxsw_m *mlxsw_m, u16 local_port) | ||||||
|  | +static void mlxsw_m_port_remove(struct mlxsw_m *mlxsw_m, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	struct mlxsw_m_port *mlxsw_m_port = mlxsw_m->ports[local_port]; | ||||||
|  |   | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
|  | index 2ec9ec6078e2..a9119451d999 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
|  | @@ -161,7 +161,7 @@ MLXSW_ITEM32(reg, sspr, sub_port, 0x00, 8, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, sspr, system_port, 0x04, 0, 16); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_sspr_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_sspr_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(sspr, payload); | ||||||
|  |  	mlxsw_reg_sspr_m_set(payload, 1); | ||||||
|  | @@ -407,7 +407,7 @@ static inline void mlxsw_reg_sfd_uc_pack(char *payload, int rec_index, | ||||||
|  |  					 enum mlxsw_reg_sfd_rec_policy policy, | ||||||
|  |  					 const char *mac, u16 fid_vid, | ||||||
|  |  					 enum mlxsw_reg_sfd_rec_action action, | ||||||
|  | -					 u16 local_port) | ||||||
|  | +					 u8 local_port) | ||||||
|  |  { | ||||||
|  |  	mlxsw_reg_sfd_rec_pack(payload, rec_index, | ||||||
|  |  			       MLXSW_REG_SFD_REC_TYPE_UNICAST, mac, action); | ||||||
|  | @@ -419,7 +419,7 @@ static inline void mlxsw_reg_sfd_uc_pack(char *payload, int rec_index, | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_sfd_uc_unpack(char *payload, int rec_index, | ||||||
|  |  					   char *mac, u16 *p_fid_vid, | ||||||
|  | -					   u16 *p_local_port) | ||||||
|  | +					   u8 *p_local_port) | ||||||
|  |  { | ||||||
|  |  	mlxsw_reg_sfd_rec_mac_memcpy_from(payload, rec_index, mac); | ||||||
|  |  	*p_fid_vid = mlxsw_reg_sfd_uc_fid_vid_get(payload, rec_index); | ||||||
|  | @@ -685,7 +685,7 @@ MLXSW_ITEM32_INDEXED(reg, sfn, mac_system_port, MLXSW_REG_SFN_BASE_LEN, 0, 16, | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_sfn_mac_unpack(char *payload, int rec_index, | ||||||
|  |  					    char *mac, u16 *p_vid, | ||||||
|  | -					    u16 *p_local_port) | ||||||
|  | +					    u8 *p_local_port) | ||||||
|  |  { | ||||||
|  |  	mlxsw_reg_sfn_rec_mac_memcpy_from(payload, rec_index, mac); | ||||||
|  |  	*p_vid = mlxsw_reg_sfn_mac_fid_get(payload, rec_index); | ||||||
|  | @@ -800,7 +800,7 @@ enum mlxsw_reg_spms_state { | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM_BIT_ARRAY(reg, spms, state, 0x04, 0x400, 2); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_spms_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_spms_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(spms, payload); | ||||||
|  |  	mlxsw_reg_spms_local_port_set(payload, local_port); | ||||||
|  | @@ -840,7 +840,7 @@ MLXSW_ITEM32(reg, spvid, sub_port, 0x00, 8, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, spvid, pvid, 0x04, 0, 12); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_spvid_pack(char *payload, u16 local_port, u16 pvid) | ||||||
|  | +static inline void mlxsw_reg_spvid_pack(char *payload, u8 local_port, u16 pvid) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(spvid, payload); | ||||||
|  |  	mlxsw_reg_spvid_local_port_set(payload, local_port); | ||||||
|  | @@ -929,7 +929,7 @@ MLXSW_ITEM32_INDEXED(reg, spvm, rec_vid, | ||||||
|  |  		     MLXSW_REG_SPVM_BASE_LEN, 0, 12, | ||||||
|  |  		     MLXSW_REG_SPVM_REC_LEN, 0, false); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_spvm_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_spvm_pack(char *payload, u8 local_port, | ||||||
|  |  				       u16 vid_begin, u16 vid_end, | ||||||
|  |  				       bool is_member, bool untagged) | ||||||
|  |  { | ||||||
|  | @@ -991,7 +991,7 @@ MLXSW_ITEM32(reg, spaft, allow_prio_tagged, 0x04, 30, 1); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, spaft, allow_tagged, 0x04, 29, 1); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_spaft_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_spaft_pack(char *payload, u8 local_port, | ||||||
|  |  					bool allow_untagged) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(spaft, payload); | ||||||
|  | @@ -1317,7 +1317,7 @@ MLXSW_ITEM32(reg, sldr, num_ports, 0x04, 24, 8); | ||||||
|  |  MLXSW_ITEM32_INDEXED(reg, sldr, system_port, 0x08, 0, 16, 4, 0, false); | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_sldr_lag_add_port_pack(char *payload, u8 lag_id, | ||||||
|  | -						    u16 local_port) | ||||||
|  | +						    u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(sldr, payload); | ||||||
|  |  	mlxsw_reg_sldr_op_set(payload, MLXSW_REG_SLDR_OP_LAG_ADD_PORT_LIST); | ||||||
|  | @@ -1327,7 +1327,7 @@ static inline void mlxsw_reg_sldr_lag_add_port_pack(char *payload, u8 lag_id, | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_sldr_lag_remove_port_pack(char *payload, u8 lag_id, | ||||||
|  | -						       u16 local_port) | ||||||
|  | +						       u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(sldr, payload); | ||||||
|  |  	mlxsw_reg_sldr_op_set(payload, MLXSW_REG_SLDR_OP_LAG_REMOVE_PORT_LIST); | ||||||
|  | @@ -1501,7 +1501,7 @@ MLXSW_ITEM32(reg, slcor, lag_id, 0x00, 0, 10); | ||||||
|  |  MLXSW_ITEM32(reg, slcor, port_index, 0x04, 0, 10); | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_slcor_pack(char *payload, | ||||||
|  | -					u16 local_port, u16 lag_id, | ||||||
|  | +					u8 local_port, u16 lag_id, | ||||||
|  |  					enum mlxsw_reg_slcor_col col) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(slcor, payload); | ||||||
|  | @@ -1511,7 +1511,7 @@ static inline void mlxsw_reg_slcor_pack(char *payload, | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_slcor_port_add_pack(char *payload, | ||||||
|  | -						 u16 local_port, u16 lag_id, | ||||||
|  | +						 u8 local_port, u16 lag_id, | ||||||
|  |  						 u8 port_index) | ||||||
|  |  { | ||||||
|  |  	mlxsw_reg_slcor_pack(payload, local_port, lag_id, | ||||||
|  | @@ -1520,21 +1520,21 @@ static inline void mlxsw_reg_slcor_port_add_pack(char *payload, | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_slcor_port_remove_pack(char *payload, | ||||||
|  | -						    u16 local_port, u16 lag_id) | ||||||
|  | +						    u8 local_port, u16 lag_id) | ||||||
|  |  { | ||||||
|  |  	mlxsw_reg_slcor_pack(payload, local_port, lag_id, | ||||||
|  |  			     MLXSW_REG_SLCOR_COL_LAG_REMOVE_PORT); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_slcor_col_enable_pack(char *payload, | ||||||
|  | -						   u16 local_port, u16 lag_id) | ||||||
|  | +						   u8 local_port, u16 lag_id) | ||||||
|  |  { | ||||||
|  |  	mlxsw_reg_slcor_pack(payload, local_port, lag_id, | ||||||
|  |  			     MLXSW_REG_SLCOR_COL_LAG_COLLECTOR_ENABLED); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_slcor_col_disable_pack(char *payload, | ||||||
|  | -						    u16 local_port, u16 lag_id) | ||||||
|  | +						    u8 local_port, u16 lag_id) | ||||||
|  |  { | ||||||
|  |  	mlxsw_reg_slcor_pack(payload, local_port, lag_id, | ||||||
|  |  			     MLXSW_REG_SLCOR_COL_LAG_COLLECTOR_ENABLED); | ||||||
|  | @@ -1581,7 +1581,7 @@ enum mlxsw_reg_spmlr_learn_mode { | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, spmlr, learn_mode, 0x04, 30, 2); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_spmlr_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_spmlr_pack(char *payload, u8 local_port, | ||||||
|  |  					enum mlxsw_reg_spmlr_learn_mode mode) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(spmlr, payload); | ||||||
|  | @@ -1666,7 +1666,7 @@ MLXSW_ITEM32(reg, svfa, counter_set_type, 0x08, 24, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, svfa, counter_index, 0x08, 0, 24); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_svfa_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_svfa_pack(char *payload, u8 local_port, | ||||||
|  |  				       enum mlxsw_reg_svfa_mt mt, bool valid, | ||||||
|  |  				       u16 fid, u16 vid) | ||||||
|  |  { | ||||||
|  | @@ -1705,7 +1705,7 @@ MLXSW_ITEM32(reg, svpe, local_port, 0x00, 16, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, svpe, vp_en, 0x00, 8, 1); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_svpe_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_svpe_pack(char *payload, u8 local_port, | ||||||
|  |  				       bool enable) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(svpe, payload); | ||||||
|  | @@ -1838,7 +1838,7 @@ MLXSW_ITEM32_INDEXED(reg, spvmlr, rec_learn_enable, MLXSW_REG_SPVMLR_BASE_LEN, | ||||||
|  |  MLXSW_ITEM32_INDEXED(reg, spvmlr, rec_vid, MLXSW_REG_SPVMLR_BASE_LEN, 0, 12, | ||||||
|  |  		     MLXSW_REG_SPVMLR_REC_LEN, 0x00, false); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_spvmlr_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_spvmlr_pack(char *payload, u8 local_port, | ||||||
|  |  					 u16 vid_begin, u16 vid_end, | ||||||
|  |  					 bool learn_enable) | ||||||
|  |  { | ||||||
|  | @@ -1907,7 +1907,7 @@ MLXSW_ITEM32_INDEXED(reg, cwtp, profile_max, MLXSW_REG_CWTP_BASE_LEN, | ||||||
|  |  #define MLXSW_REG_CWTP_MAX_PROFILE 2 | ||||||
|  |  #define MLXSW_REG_CWTP_DEFAULT_PROFILE 1 | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_cwtp_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_cwtp_pack(char *payload, u8 local_port, | ||||||
|  |  				       u8 traffic_class) | ||||||
|  |  { | ||||||
|  |  	int i; | ||||||
|  | @@ -2025,7 +2025,7 @@ MLXSW_ITEM32(reg, cwtpm, ntcp_r, 64, 0, 2); | ||||||
|  |   | ||||||
|  |  #define MLXSW_REG_CWTPM_RESET_PROFILE 0 | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_cwtpm_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_cwtpm_pack(char *payload, u8 local_port, | ||||||
|  |  					u8 traffic_class, u8 profile, | ||||||
|  |  					bool wred, bool ecn) | ||||||
|  |  { | ||||||
|  | @@ -2116,7 +2116,7 @@ MLXSW_ITEM32(reg, ppbt, acl_info, 0x10, 0, 16); | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_ppbt_pack(char *payload, enum mlxsw_reg_pxbt_e e, | ||||||
|  |  				       enum mlxsw_reg_pxbt_op op, | ||||||
|  | -				       u16 local_port, u16 acl_info) | ||||||
|  | +				       u8 local_port, u16 acl_info) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(ppbt, payload); | ||||||
|  |  	mlxsw_reg_ppbt_e_set(payload, e); | ||||||
|  | @@ -3260,7 +3260,7 @@ enum mlxsw_reg_qpts_trust_state { | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, qpts, trust_state, 0x04, 0, 3); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qpts_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_qpts_pack(char *payload, u8 local_port, | ||||||
|  |  				       enum mlxsw_reg_qpts_trust_state ts) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qpts, payload); | ||||||
|  | @@ -3476,7 +3476,7 @@ MLXSW_ITEM32(reg, qtct, switch_prio, 0x00, 0, 4); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, qtct, tclass, 0x04, 0, 4); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qtct_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_qtct_pack(char *payload, u8 local_port, | ||||||
|  |  				       u8 switch_prio, u8 tclass) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qtct, payload); | ||||||
|  | @@ -3643,7 +3643,7 @@ MLXSW_ITEM32(reg, qeec, max_shaper_bs, 0x1C, 0, 6); | ||||||
|  |  #define MLXSW_REG_QEEC_LOWEST_SHAPER_BS_SP2	11 | ||||||
|  |  #define MLXSW_REG_QEEC_LOWEST_SHAPER_BS_SP3	11 | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qeec_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_qeec_pack(char *payload, u8 local_port, | ||||||
|  |  				       enum mlxsw_reg_qeec_hr hr, u8 index, | ||||||
|  |  				       u8 next_index) | ||||||
|  |  { | ||||||
|  | @@ -3654,7 +3654,7 @@ static inline void mlxsw_reg_qeec_pack(char *payload, u16 local_port, | ||||||
|  |  	mlxsw_reg_qeec_next_element_index_set(payload, next_index); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qeec_ptps_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_qeec_ptps_pack(char *payload, u8 local_port, | ||||||
|  |  					    bool ptps) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qeec, payload); | ||||||
|  | @@ -3692,7 +3692,7 @@ MLXSW_ITEM32(reg, qrwe, dscp, 0x04, 1, 1); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, qrwe, pcp, 0x04, 0, 1); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qrwe_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_qrwe_pack(char *payload, u8 local_port, | ||||||
|  |  				       bool rewrite_pcp, bool rewrite_dscp) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qrwe, payload); | ||||||
|  | @@ -3772,7 +3772,7 @@ MLXSW_ITEM32_INDEXED(reg, qpdsm, prio_entry_color2_dscp, | ||||||
|  |  		     MLXSW_REG_QPDSM_BASE_LEN, 8, 6, | ||||||
|  |  		     MLXSW_REG_QPDSM_PRIO_ENTRY_REC_LEN, 0x00, false); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qpdsm_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_qpdsm_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qpdsm, payload); | ||||||
|  |  	mlxsw_reg_qpdsm_local_port_set(payload, local_port); | ||||||
|  | @@ -3813,7 +3813,7 @@ MLXSW_ITEM32(reg, qpdp, local_port, 0x00, 16, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, qpdp, switch_prio, 0x04, 0, 4); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qpdp_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_qpdp_pack(char *payload, u8 local_port, | ||||||
|  |  				       u8 switch_prio) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qpdp, payload); | ||||||
|  | @@ -3859,7 +3859,7 @@ MLXSW_ITEM16_INDEXED(reg, qpdpm, dscp_entry_prio, | ||||||
|  |  		     MLXSW_REG_QPDPM_BASE_LEN, 0, 4, | ||||||
|  |  		     MLXSW_REG_QPDPM_DSCP_ENTRY_REC_LEN, 0x00, false); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_qpdpm_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_qpdpm_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qpdpm, payload); | ||||||
|  |  	mlxsw_reg_qpdpm_local_port_set(payload, local_port); | ||||||
|  | @@ -3901,7 +3901,7 @@ MLXSW_ITEM32(reg, qtctm, local_port, 0x00, 16, 8); | ||||||
|  |  MLXSW_ITEM32(reg, qtctm, mc, 0x04, 0, 1); | ||||||
|  |   | ||||||
|  |  static inline void | ||||||
|  | -mlxsw_reg_qtctm_pack(char *payload, u16 local_port, bool mc) | ||||||
|  | +mlxsw_reg_qtctm_pack(char *payload, u8 local_port, bool mc) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(qtctm, payload); | ||||||
|  |  	mlxsw_reg_qtctm_local_port_set(payload, local_port); | ||||||
|  | @@ -4065,7 +4065,7 @@ MLXSW_ITEM32_INDEXED(reg, pmlp, tx_lane, 0x04, 16, 4, 0x04, 0x00, false); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32_INDEXED(reg, pmlp, rx_lane, 0x04, 24, 4, 0x04, 0x00, false); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pmlp_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_pmlp_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pmlp, payload); | ||||||
|  |  	mlxsw_reg_pmlp_local_port_set(payload, local_port); | ||||||
|  | @@ -4112,7 +4112,7 @@ MLXSW_ITEM32(reg, pmtu, admin_mtu, 0x08, 16, 16); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, pmtu, oper_mtu, 0x0C, 16, 16); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pmtu_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_pmtu_pack(char *payload, u8 local_port, | ||||||
|  |  				       u16 new_mtu) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pmtu, payload); | ||||||
|  | @@ -4306,7 +4306,7 @@ enum mlxsw_reg_ptys_connector_type { | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, ptys, connector_type, 0x2C, 0, 4); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_ptys_eth_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_ptys_eth_pack(char *payload, u8 local_port, | ||||||
|  |  					   u32 proto_admin, bool autoneg) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(ptys, payload); | ||||||
|  | @@ -4316,7 +4316,7 @@ static inline void mlxsw_reg_ptys_eth_pack(char *payload, u16 local_port, | ||||||
|  |  	mlxsw_reg_ptys_an_disable_admin_set(payload, !autoneg); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_ptys_ext_eth_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_ptys_ext_eth_pack(char *payload, u8 local_port, | ||||||
|  |  					       u32 proto_admin, bool autoneg) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(ptys, payload); | ||||||
|  | @@ -4358,7 +4358,7 @@ static inline void mlxsw_reg_ptys_ext_eth_unpack(char *payload, | ||||||
|  |  			mlxsw_reg_ptys_ext_eth_proto_oper_get(payload); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_ptys_ib_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_ptys_ib_pack(char *payload, u8 local_port, | ||||||
|  |  					  u16 proto_admin, u16 link_width) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(ptys, payload); | ||||||
|  | @@ -4416,7 +4416,7 @@ MLXSW_ITEM32(reg, ppad, local_port, 0x00, 16, 8); | ||||||
|  |  MLXSW_ITEM_BUF(reg, ppad, mac, 0x02, 6); | ||||||
|  |   | ||||||
|  |  static inline void mlxsw_reg_ppad_pack(char *payload, bool single_base_mac, | ||||||
|  | -				       u16 local_port) | ||||||
|  | +				       u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(ppad, payload); | ||||||
|  |  	mlxsw_reg_ppad_single_base_mac_set(payload, !!single_base_mac); | ||||||
|  | @@ -4490,7 +4490,7 @@ MLXSW_ITEM32(reg, paos, ee, 0x04, 30, 1); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, paos, e, 0x04, 0, 2); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_paos_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_paos_pack(char *payload, u8 local_port, | ||||||
|  |  				       enum mlxsw_port_admin_status status) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(paos, payload); | ||||||
|  | @@ -4633,7 +4633,7 @@ static inline void mlxsw_reg_pfcc_prio_pack(char *payload, u8 pfc_en) | ||||||
|  |  	mlxsw_reg_pfcc_pfcrx_set(payload, pfc_en); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pfcc_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_pfcc_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pfcc, payload); | ||||||
|  |  	mlxsw_reg_pfcc_local_port_set(payload, local_port); | ||||||
|  | @@ -5132,7 +5132,7 @@ MLXSW_ITEM64(reg, ppcnt, tc_no_buffer_discard_uc, | ||||||
|  |  MLXSW_ITEM64(reg, ppcnt, wred_discard, | ||||||
|  |  	     MLXSW_REG_PPCNT_COUNTERS_OFFSET + 0x00, 0, 64); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_ppcnt_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_ppcnt_pack(char *payload, u8 local_port, | ||||||
|  |  					enum mlxsw_reg_ppcnt_grp grp, | ||||||
|  |  					u8 prio_tc) | ||||||
|  |  { | ||||||
|  | @@ -5243,7 +5243,7 @@ MLXSW_ITEM_BIT_ARRAY(reg, pptb, prio_to_buff_msb, 0x0C, 0x04, 4); | ||||||
|  |   | ||||||
|  |  #define MLXSW_REG_PPTB_ALL_PRIO 0xFF | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pptb_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_pptb_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pptb, payload); | ||||||
|  |  	mlxsw_reg_pptb_mm_set(payload, MLXSW_REG_PPTB_MM_UM); | ||||||
|  | @@ -5340,7 +5340,7 @@ MLXSW_ITEM32_INDEXED(reg, pbmc, buf_xoff_threshold, 0x0C, 16, 16, | ||||||
|  |  MLXSW_ITEM32_INDEXED(reg, pbmc, buf_xon_threshold, 0x0C, 0, 16, | ||||||
|  |  		     0x08, 0x04, false); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pbmc_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_pbmc_pack(char *payload, u8 local_port, | ||||||
|  |  				       u16 xoff_timer_value, u16 xoff_refresh) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pbmc, payload); | ||||||
|  | @@ -5398,7 +5398,7 @@ MLXSW_ITEM32(reg, pspa, local_port, 0x00, 16, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, pspa, sub_port, 0x00, 8, 8); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pspa_pack(char *payload, u8 swid, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_pspa_pack(char *payload, u8 swid, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pspa, payload); | ||||||
|  |  	mlxsw_reg_pspa_swid_set(payload, swid); | ||||||
|  | @@ -5513,7 +5513,7 @@ MLXSW_ITEM32(reg, pplr, local_port, 0x00, 16, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, pplr, lb_en, 0x04, 0, 8); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pplr_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_pplr_pack(char *payload, u8 local_port, | ||||||
|  |  				       bool phy_local) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pplr, payload); | ||||||
|  | @@ -5609,7 +5609,7 @@ MLXSW_ITEM32(reg, pddr, trblsh_group_opcode, 0x08, 0, 16); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, pddr, trblsh_status_opcode, 0x0C, 0, 16); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_pddr_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_pddr_pack(char *payload, u8 local_port, | ||||||
|  |  				       u8 page_select) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(pddr, payload); | ||||||
|  | @@ -9160,7 +9160,7 @@ MLXSW_ITEM32(reg, mpar, enable, 0x04, 31, 1); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, mpar, pa_id, 0x04, 0, 4); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_mpar_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_mpar_pack(char *payload, u8 local_port, | ||||||
|  |  				       enum mlxsw_reg_mpar_i_e i_e, | ||||||
|  |  				       bool enable, u8 pa_id) | ||||||
|  |  { | ||||||
|  | @@ -9281,7 +9281,7 @@ MLXSW_ITEM32(reg, mlcr, beacon_duration, 0x04, 0, 16); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, mlcr, beacon_remain, 0x08, 0, 16); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_mlcr_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_mlcr_pack(char *payload, u8 local_port, | ||||||
|  |  				       bool active) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(mlcr, payload); | ||||||
|  | @@ -9671,7 +9671,7 @@ MLXSW_ITEM32(reg, mpsc, e, 0x04, 30, 1); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, mpsc, rate, 0x08, 0, 32); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_mpsc_pack(char *payload, u16 local_port, bool e, | ||||||
|  | +static inline void mlxsw_reg_mpsc_pack(char *payload, u8 local_port, bool e, | ||||||
|  |  				       u32 rate) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(mpsc, payload); | ||||||
|  | @@ -9904,7 +9904,7 @@ MLXSW_ITEM32(reg, momte, type, 0x04, 0, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM_BIT_ARRAY(reg, momte, tclass_en, 0x08, 0x08, 1); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_momte_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_momte_pack(char *payload, u8 local_port, | ||||||
|  |  					enum mlxsw_reg_momte_type type) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(momte, payload); | ||||||
|  | @@ -10574,7 +10574,7 @@ MLXSW_ITEM32(reg, tnqdr, local_port, 0x00, 16, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, tnqdr, dscp, 0x04, 0, 6); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_tnqdr_pack(char *payload, u16 local_port) | ||||||
|  | +static inline void mlxsw_reg_tnqdr_pack(char *payload, u8 local_port) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(tnqdr, payload); | ||||||
|  |  	mlxsw_reg_tnqdr_local_port_set(payload, local_port); | ||||||
|  | @@ -10963,7 +10963,7 @@ MLXSW_ITEM32(reg, sbcm, max_buff, 0x1C, 0, 24); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, sbcm, pool, 0x24, 0, 4); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_sbcm_pack(char *payload, u16 local_port, u8 pg_buff, | ||||||
|  | +static inline void mlxsw_reg_sbcm_pack(char *payload, u8 local_port, u8 pg_buff, | ||||||
|  |  				       enum mlxsw_reg_sbxx_dir dir, | ||||||
|  |  				       u32 min_buff, u32 max_buff, | ||||||
|  |  				       bool infi_max, u8 pool) | ||||||
|  | @@ -11049,7 +11049,7 @@ MLXSW_ITEM32(reg, sbpm, min_buff, 0x18, 0, 24); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, sbpm, max_buff, 0x1C, 0, 24); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_sbpm_pack(char *payload, u16 local_port, u8 pool, | ||||||
|  | +static inline void mlxsw_reg_sbpm_pack(char *payload, u8 local_port, u8 pool, | ||||||
|  |  				       enum mlxsw_reg_sbxx_dir dir, bool clr, | ||||||
|  |  				       u32 min_buff, u32 max_buff) | ||||||
|  |  { | ||||||
|  | @@ -11244,7 +11244,7 @@ MLXSW_ITEM32(reg, sbib, local_port, 0x00, 16, 8); | ||||||
|  |   */ | ||||||
|  |  MLXSW_ITEM32(reg, sbib, buff_size, 0x08, 0, 24); | ||||||
|  |   | ||||||
|  | -static inline void mlxsw_reg_sbib_pack(char *payload, u16 local_port, | ||||||
|  | +static inline void mlxsw_reg_sbib_pack(char *payload, u8 local_port, | ||||||
|  |  				       u32 buff_size) | ||||||
|  |  { | ||||||
|  |  	MLXSW_REG_ZERO(sbib, payload); | ||||||
|  | --  | ||||||
|  | 2.14.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,26 @@ | |||||||
|  | From 0dda3bcede5f26c2bd44edbd90c7e9f0aab9ccf0 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Ciju Rajan K <crajank@nvidia.com> | ||||||
|  | Date: Thu, 17 Aug 2023 10:00:59 +0000 | ||||||
|  | Subject: Revert "mlxsw: i2c: Fix chunk size setting in output mailbox buffer" | ||||||
|  |  | ||||||
|  | This reverts commit ac91378962238d34030bb4035308f88ba173165f. | ||||||
|  | --- | ||||||
|  |  drivers/net/ethernet/mellanox/mlxsw/i2c.c | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
|  | index cc99ec3f4e96..b8a5c0cbb6b5 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
|  | @@ -447,7 +447,7 @@ mlxsw_i2c_cmd(struct device *dev, u16 opcode, u32 in_mod, size_t in_mbox_size, | ||||||
|  |  	} else { | ||||||
|  |  		/* No input mailbox is case of initialization query command. */ | ||||||
|  |  		reg_size = MLXSW_I2C_MAX_DATA_SIZE; | ||||||
|  | -		num = DIV_ROUND_UP(reg_size, mlxsw_i2c->block_size); | ||||||
|  | +		num = reg_size / mlxsw_i2c->block_size; | ||||||
|  |   | ||||||
|  |  		if (mutex_lock_interruptible(&mlxsw_i2c->cmd.lock) < 0) { | ||||||
|  |  			dev_err(&client->dev, "Could not acquire lock"); | ||||||
|  | --  | ||||||
|  | 2.14.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,28 @@ | |||||||
|  | From e0f5c6c6572fd70ad8fa0d268ee95fb8aba1bd98 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Ciju Rajan K <crajank@nvidia.com> | ||||||
|  | Date: Thu, 17 Aug 2023 10:01:22 +0000 | ||||||
|  | Subject: Revert "mlxsw: core_hwmon: Adjust module label names based on MTCAP | ||||||
|  |  sensor counter" | ||||||
|  |  | ||||||
|  | This reverts commit 33aa62a331425d5828d417eeac7fab697eb45286. | ||||||
|  | --- | ||||||
|  |  drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | 3 +-- | ||||||
|  |  1 file changed, 1 insertion(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
|  | index 464787b10b73..d41afdfbd085 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
|  | @@ -377,8 +377,7 @@ mlxsw_hwmon_module_temp_label_show(struct device *dev, | ||||||
|  |  			container_of(attr, struct mlxsw_hwmon_attr, dev_attr); | ||||||
|  |   | ||||||
|  |  	return sprintf(buf, "front panel %03u\n", | ||||||
|  | -		       mlwsw_hwmon_attr->type_index + 1 - | ||||||
|  | -		       mlwsw_hwmon_attr->hwmon->sensor_count); | ||||||
|  | +		       mlwsw_hwmon_attr->type_index); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static ssize_t | ||||||
|  | --  | ||||||
|  | 2.14.1 | ||||||
|  |  | ||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 45dc72bca025600611d6d08e00758618ddb5d7d0 Mon Sep 17 00:00:00 2001 | From 320a964b80a8f9245da0515a26c2d41e035b3d10 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:41 +0200 | Date: Fri, 3 Dec 2021 11:48:41 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_hwmon: Fix variable names for hwmon attributes | Subject: [PATCH backport 5.10 099/182] mlxsw: core_hwmon: Fix variable names | ||||||
|  |  for hwmon attributes | ||||||
|  |  | ||||||
| Replace all local variables 'mlwsw_hwmon_attr' by 'mlxsw_hwmon_attr'. | Replace all local variables 'mlwsw_hwmon_attr' by 'mlxsw_hwmon_attr'. | ||||||
| All variable prefixes should start with 'mlxsw' according to the naming | All variable prefixes should start with 'mlxsw' according to the naming | ||||||
| @@ -15,7 +16,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 38 insertions(+), 38 deletions(-) |  1 file changed, 38 insertions(+), 38 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index d41afdfbd..3788d02b5 100644 | index d41afdfbd085..3788d02b5244 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -57,14 +57,14 @@ static ssize_t mlxsw_hwmon_temp_show(struct device *dev, | @@ -57,14 +57,14 @@ static ssize_t mlxsw_hwmon_temp_show(struct device *dev, | ||||||
| @@ -251,5 +252,5 @@ index d41afdfbd..3788d02b5 100644 | |||||||
|   |   | ||||||
|  	return sprintf(buf, "gearbox %03u\n", index); |  	return sprintf(buf, "gearbox %03u\n", index); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From d2d0080ec104f01fbf0d6b4750f70f1ebe013495 Mon Sep 17 00:00:00 2001 | From 2f12c9f7cd1d91732ee64d11611cc4cb6baf69a6 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:42 +0200 | Date: Fri, 3 Dec 2021 11:48:42 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Rename labels according to naming | Subject: [PATCH backport 5.10 100/182] mlxsw: core_thermal: Rename labels | ||||||
|  convention |  according to naming convention | ||||||
|  |  | ||||||
| Rename labels for error flow handling in order to align with naming | Rename labels for error flow handling in order to align with naming | ||||||
| convention used in rest of 'mlxsw' code. | convention used in rest of 'mlxsw' code. | ||||||
| @@ -15,10 +15,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 23 insertions(+), 20 deletions(-) |  1 file changed, 23 insertions(+), 20 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index cc4cddbdb..e5997b6a0 100644 | index 91abc7a3f7ea..f471f03e0094 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -401,11 +401,11 @@ static int mlxsw_thermal_module_bind(struct thermal_zone_device *tzdev, | @@ -393,11 +393,11 @@ static int mlxsw_thermal_module_bind(struct thermal_zone_device *tzdev, | ||||||
|  						       trip->min_state, |  						       trip->min_state, | ||||||
|  						       THERMAL_WEIGHT_DEFAULT); |  						       THERMAL_WEIGHT_DEFAULT); | ||||||
|  		if (err < 0) |  		if (err < 0) | ||||||
| @@ -32,7 +32,7 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  	for (j = i - 1; j >= 0; j--) |  	for (j = i - 1; j >= 0; j--) | ||||||
|  		thermal_zone_unbind_cooling_device(tzdev, j, cdev); |  		thermal_zone_unbind_cooling_device(tzdev, j, cdev); | ||||||
|  	return err; |  	return err; | ||||||
| @@ -807,7 +807,7 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | @@ -766,7 +766,7 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	for (i = 0; i < thermal->tz_module_num; i++) { |  	for (i = 0; i < thermal->tz_module_num; i++) { | ||||||
|  		err = mlxsw_thermal_module_init(dev, core, thermal, i); |  		err = mlxsw_thermal_module_init(dev, core, thermal, i); | ||||||
|  		if (err) |  		if (err) | ||||||
| @@ -41,7 +41,7 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	for (i = 0; i < thermal->tz_module_num; i++) { |  	for (i = 0; i < thermal->tz_module_num; i++) { | ||||||
| @@ -816,12 +816,13 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | @@ -775,12 +775,13 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  			continue; |  			continue; | ||||||
|  		err = mlxsw_thermal_module_tz_init(module_tz); |  		err = mlxsw_thermal_module_tz_init(module_tz); | ||||||
|  		if (err) |  		if (err) | ||||||
| @@ -57,7 +57,7 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  	for (i = thermal->tz_module_num - 1; i >= 0; i--) |  	for (i = thermal->tz_module_num - 1; i >= 0; i--) | ||||||
|  		mlxsw_thermal_module_fini(&thermal->tz_module_arr[i]); |  		mlxsw_thermal_module_fini(&thermal->tz_module_arr[i]); | ||||||
|  	kfree(thermal->tz_module_arr); |  	kfree(thermal->tz_module_arr); | ||||||
| @@ -912,12 +913,12 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -871,12 +872,12 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  		gearbox_tz->parent = thermal; |  		gearbox_tz->parent = thermal; | ||||||
|  		err = mlxsw_thermal_gearbox_tz_init(gearbox_tz); |  		err = mlxsw_thermal_gearbox_tz_init(gearbox_tz); | ||||||
|  		if (err) |  		if (err) | ||||||
| @@ -72,7 +72,7 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  	for (i--; i >= 0; i--) |  	for (i--; i >= 0; i--) | ||||||
|  		mlxsw_thermal_gearbox_tz_fini(&thermal->tz_gearbox_arr[i]); |  		mlxsw_thermal_gearbox_tz_fini(&thermal->tz_gearbox_arr[i]); | ||||||
|  	kfree(thermal->tz_gearbox_arr); |  	kfree(thermal->tz_gearbox_arr); | ||||||
| @@ -961,7 +962,7 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -920,7 +921,7 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfcr), mfcr_pl); |  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfcr), mfcr_pl); | ||||||
|  	if (err) { |  	if (err) { | ||||||
|  		dev_err(dev, "Failed to probe PWMs\n"); |  		dev_err(dev, "Failed to probe PWMs\n"); | ||||||
| @@ -81,7 +81,7 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  	} |  	} | ||||||
|  	mlxsw_reg_mfcr_unpack(mfcr_pl, &freq, &tacho_active, &pwm_active); |  	mlxsw_reg_mfcr_unpack(mfcr_pl, &freq, &tacho_active, &pwm_active); | ||||||
|   |   | ||||||
| @@ -975,14 +976,14 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -934,14 +935,14 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  			err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfsl), |  			err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfsl), | ||||||
|  					      mfsl_pl); |  					      mfsl_pl); | ||||||
|  			if (err) |  			if (err) | ||||||
| @@ -98,7 +98,7 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|  	for (i = 0; i < MLXSW_MFCR_PWMS_MAX; i++) { |  	for (i = 0; i < MLXSW_MFCR_PWMS_MAX; i++) { | ||||||
| @@ -995,7 +996,7 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -954,7 +955,7 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  			if (IS_ERR(cdev)) { |  			if (IS_ERR(cdev)) { | ||||||
|  				err = PTR_ERR(cdev); |  				err = PTR_ERR(cdev); | ||||||
|  				dev_err(dev, "Failed to register cooling device\n"); |  				dev_err(dev, "Failed to register cooling device\n"); | ||||||
| @@ -107,7 +107,7 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  			} |  			} | ||||||
|  			thermal->cdevs[i] = cdev; |  			thermal->cdevs[i] = cdev; | ||||||
|  		} |  		} | ||||||
| @@ -1020,38 +1021,40 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -978,38 +979,40 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  	if (IS_ERR(thermal->tzdev)) { |  	if (IS_ERR(thermal->tzdev)) { | ||||||
|  		err = PTR_ERR(thermal->tzdev); |  		err = PTR_ERR(thermal->tzdev); | ||||||
|  		dev_err(dev, "Failed to register thermal zone\n"); |  		dev_err(dev, "Failed to register thermal zone\n"); | ||||||
| @@ -158,5 +158,5 @@ index cc4cddbdb..e5997b6a0 100644 | |||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 1186332d9cbf3f7cbd2ed52dfcb594ce4e2d2df8 Mon Sep 17 00:00:00 2001 | From d0a94e237cb6d2020a0a1c27f357a9c3bfc0b1d5 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:43 +0200 | Date: Fri, 3 Dec 2021 11:48:43 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Remove obsolete API for query resource | Subject: [PATCH backport 5.10 101/182] mlxsw: core_thermal: Remove obsolete | ||||||
|  |  API for query resource | ||||||
|  |  | ||||||
| Remove obsolete API mlxsw_core_res_query_enabled(), which is only | Remove obsolete API mlxsw_core_res_query_enabled(), which is only | ||||||
| relevant for end-of-life SwitchX-2 ASICs. Support for these ASICs was | relevant for end-of-life SwitchX-2 ASICs. Support for these ASICs was | ||||||
| @@ -18,7 +19,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  4 files changed, 23 deletions(-) |  4 files changed, 23 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index 7938bad70..0b1888318 100644 | index 7938bad70e37..0b1888318ef1 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -129,12 +129,6 @@ void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core) | @@ -129,12 +129,6 @@ void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core) | ||||||
| @@ -35,7 +36,7 @@ index 7938bad70..0b1888318 100644 | |||||||
|  { |  { | ||||||
|  	return mlxsw_core->driver->temp_warn_enabled; |  	return mlxsw_core->driver->temp_warn_enabled; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index 56efb8e48..0ceb7dae9 100644 | index 56efb8e48022..0ceb7dae95f6 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -30,8 +30,6 @@ unsigned int mlxsw_core_max_ports(const struct mlxsw_core *mlxsw_core); | @@ -30,8 +30,6 @@ unsigned int mlxsw_core_max_ports(const struct mlxsw_core *mlxsw_core); | ||||||
| @@ -48,7 +49,7 @@ index 56efb8e48..0ceb7dae9 100644 | |||||||
|   |   | ||||||
|  bool |  bool | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 3788d02b5..8b170ad92 100644 | index 3788d02b5244..8b170ad92302 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -655,9 +655,6 @@ static int mlxsw_hwmon_module_init(struct mlxsw_hwmon *mlxsw_hwmon) | @@ -655,9 +655,6 @@ static int mlxsw_hwmon_module_init(struct mlxsw_hwmon *mlxsw_hwmon) | ||||||
| @@ -62,10 +63,10 @@ index 3788d02b5..8b170ad92 100644 | |||||||
|  	err = mlxsw_reg_query(mlxsw_hwmon->core, MLXSW_REG(mgpir), mgpir_pl); |  	err = mlxsw_reg_query(mlxsw_hwmon->core, MLXSW_REG(mgpir), mgpir_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index e5997b6a0..9b0cd6f79 100644 | index f471f03e0094..80942c78d9e5 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -787,9 +787,6 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | @@ -746,9 +746,6 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	char mgpir_pl[MLXSW_REG_MGPIR_LEN]; |  	char mgpir_pl[MLXSW_REG_MGPIR_LEN]; | ||||||
|  	int i, err; |  	int i, err; | ||||||
|   |   | ||||||
| @@ -75,7 +76,7 @@ index e5997b6a0..9b0cd6f79 100644 | |||||||
|  	mlxsw_reg_mgpir_pack(mgpir_pl); |  	mlxsw_reg_mgpir_pack(mgpir_pl); | ||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mgpir), mgpir_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mgpir), mgpir_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| @@ -834,9 +831,6 @@ mlxsw_thermal_modules_fini(struct mlxsw_thermal *thermal) | @@ -793,9 +790,6 @@ mlxsw_thermal_modules_fini(struct mlxsw_thermal *thermal) | ||||||
|  { |  { | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| @@ -85,7 +86,7 @@ index e5997b6a0..9b0cd6f79 100644 | |||||||
|  	for (i = thermal->tz_module_num - 1; i >= 0; i--) |  	for (i = thermal->tz_module_num - 1; i >= 0; i--) | ||||||
|  		mlxsw_thermal_module_fini(&thermal->tz_module_arr[i]); |  		mlxsw_thermal_module_fini(&thermal->tz_module_arr[i]); | ||||||
|  	kfree(thermal->tz_module_arr); |  	kfree(thermal->tz_module_arr); | ||||||
| @@ -884,9 +878,6 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -843,9 +837,6 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	int i; |  	int i; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -95,7 +96,7 @@ index e5997b6a0..9b0cd6f79 100644 | |||||||
|  	mlxsw_reg_mgpir_pack(mgpir_pl); |  	mlxsw_reg_mgpir_pack(mgpir_pl); | ||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mgpir), mgpir_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mgpir), mgpir_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| @@ -930,9 +921,6 @@ mlxsw_thermal_gearboxes_fini(struct mlxsw_thermal *thermal) | @@ -889,9 +880,6 @@ mlxsw_thermal_gearboxes_fini(struct mlxsw_thermal *thermal) | ||||||
|  { |  { | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| @@ -106,5 +107,5 @@ index e5997b6a0..9b0cd6f79 100644 | |||||||
|  		mlxsw_thermal_gearbox_tz_fini(&thermal->tz_gearbox_arr[i]); |  		mlxsw_thermal_gearbox_tz_fini(&thermal->tz_gearbox_arr[i]); | ||||||
|  	kfree(thermal->tz_gearbox_arr); |  	kfree(thermal->tz_gearbox_arr); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From ad972c6b6591023ddc7547bbcbc5c5e1941b29c5 Mon Sep 17 00:00:00 2001 | From 2e6cd3d593c0bf1cc38093a73ec7777a5b806bfe Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:44 +0200 | Date: Fri, 3 Dec 2021 11:48:44 +0200 | ||||||
| Subject: [PATCH] mlxsw: reg: Add "mgpir_" prefix to MGPIR fields comments | Subject: [PATCH backport 5.10 102/182] mlxsw: reg: Add "mgpir_" prefix to | ||||||
|  |  MGPIR fields comments | ||||||
|  |  | ||||||
| Do the same as for other registers and have "mgpir_" prefix for the | Do the same as for other registers and have "mgpir_" prefix for the | ||||||
| MGPIR fields. | MGPIR fields. | ||||||
| @@ -14,10 +15,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 4 insertions(+), 4 deletions(-) |  1 file changed, 4 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index a9119451d..7f7cdb3fc 100644 | index 7f9b902049db..c3fb2e4d4458 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10131,24 +10131,24 @@ enum mlxsw_reg_mgpir_device_type { | @@ -10130,24 +10130,24 @@ enum mlxsw_reg_mgpir_device_type { | ||||||
|  	MLXSW_REG_MGPIR_DEVICE_TYPE_GEARBOX_DIE, |  	MLXSW_REG_MGPIR_DEVICE_TYPE_GEARBOX_DIE, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -47,5 +48,5 @@ index a9119451d..7f7cdb3fc 100644 | |||||||
|   * Access: RO |   * Access: RO | ||||||
|   */ |   */ | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| From 4392d92a40328fe18d1152fae6fada74f46fa1a3 Mon Sep 17 00:00:00 2001 | From 7b7f5f88374c3377fc28e48a0bc77ae4aa783fda Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 7 Dec 2021 16:07:31 +0200 | Date: Tue, 7 Dec 2021 16:07:31 +0200 | ||||||
| Subject: [PATCH] mlxsw: core: Remove unnecessary asserts | Subject: [PATCH backport 5.10 103/182] mlxsw: core: Remove unnecessary asserts | ||||||
|  |  | ||||||
| Remove unnecessary asserts for module index validation. Leave only one | Remove unnecessary asserts for module index validation. Leave only one | ||||||
| that is actually necessary in mlxsw_env_pmpe_listener_func() where the | that is actually necessary in mlxsw_env_pmpe_listener_func() where the | ||||||
| @@ -14,10 +14,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 24 deletions(-) |  1 file changed, 24 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 61f7a40c0..4cbed2e3b 100644 | index 6dd4ae2f45f4..c1d51b4b6b36 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -416,9 +416,6 @@ int mlxsw_env_reset_module(struct net_device *netdev, | @@ -414,9 +414,6 @@ int mlxsw_env_reset_module(struct net_device *netdev, | ||||||
|  	    !(req & (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT))) |  	    !(req & (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT))) | ||||||
|  		return 0; |  		return 0; | ||||||
|   |   | ||||||
| @@ -27,7 +27,7 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|  	mutex_lock(&mlxsw_env->module_info_lock); |  	mutex_lock(&mlxsw_env->module_info_lock); | ||||||
|   |   | ||||||
|  	if (mlxsw_env->module_info[module].num_ports_up) { |  	if (mlxsw_env->module_info[module].num_ports_up) { | ||||||
| @@ -458,9 +455,6 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | @@ -456,9 +453,6 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  	u32 status_bits; |  	u32 status_bits; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -37,7 +37,7 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|  	mutex_lock(&mlxsw_env->module_info_lock); |  	mutex_lock(&mlxsw_env->module_info_lock); | ||||||
|   |   | ||||||
|  	params->policy = mlxsw_env->module_info[module].power_mode_policy; |  	params->policy = mlxsw_env->module_info[module].power_mode_policy; | ||||||
| @@ -562,9 +556,6 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | @@ -560,9 +554,6 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  	bool low_power; |  	bool low_power; | ||||||
|  	int err = 0; |  	int err = 0; | ||||||
|   |   | ||||||
| @@ -47,7 +47,7 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|  	if (policy != ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH && |  	if (policy != ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH && | ||||||
|  	    policy != ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO) { |  	    policy != ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO) { | ||||||
|  		NL_SET_ERR_MSG_MOD(extack, "Unsupported power mode policy"); |  		NL_SET_ERR_MSG_MOD(extack, "Unsupported power mode policy"); | ||||||
| @@ -903,9 +894,6 @@ mlxsw_env_module_overheat_counter_get(struct mlxsw_core *mlxsw_core, u8 module, | @@ -901,9 +892,6 @@ mlxsw_env_module_overheat_counter_get(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -57,7 +57,7 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|  	mutex_lock(&mlxsw_env->module_info_lock); |  	mutex_lock(&mlxsw_env->module_info_lock); | ||||||
|  	*p_counter = mlxsw_env->module_info[module].module_overheat_counter; |  	*p_counter = mlxsw_env->module_info[module].module_overheat_counter; | ||||||
|  	mutex_unlock(&mlxsw_env->module_info_lock); |  	mutex_unlock(&mlxsw_env->module_info_lock); | ||||||
| @@ -918,9 +906,6 @@ void mlxsw_env_module_port_map(struct mlxsw_core *mlxsw_core, u8 module) | @@ -916,9 +904,6 @@ void mlxsw_env_module_port_map(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -67,7 +67,7 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|  	mutex_lock(&mlxsw_env->module_info_lock); |  	mutex_lock(&mlxsw_env->module_info_lock); | ||||||
|  	mlxsw_env->module_info[module].num_ports_mapped++; |  	mlxsw_env->module_info[module].num_ports_mapped++; | ||||||
|  	mutex_unlock(&mlxsw_env->module_info_lock); |  	mutex_unlock(&mlxsw_env->module_info_lock); | ||||||
| @@ -931,9 +916,6 @@ void mlxsw_env_module_port_unmap(struct mlxsw_core *mlxsw_core, u8 module) | @@ -929,9 +914,6 @@ void mlxsw_env_module_port_unmap(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -77,7 +77,7 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|  	mutex_lock(&mlxsw_env->module_info_lock); |  	mutex_lock(&mlxsw_env->module_info_lock); | ||||||
|  	mlxsw_env->module_info[module].num_ports_mapped--; |  	mlxsw_env->module_info[module].num_ports_mapped--; | ||||||
|  	mutex_unlock(&mlxsw_env->module_info_lock); |  	mutex_unlock(&mlxsw_env->module_info_lock); | ||||||
| @@ -945,9 +927,6 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 module) | @@ -943,9 +925,6 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|  	int err = 0; |  	int err = 0; | ||||||
|   |   | ||||||
| @@ -87,7 +87,7 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|  	mutex_lock(&mlxsw_env->module_info_lock); |  	mutex_lock(&mlxsw_env->module_info_lock); | ||||||
|   |   | ||||||
|  	if (mlxsw_env->module_info[module].power_mode_policy != |  	if (mlxsw_env->module_info[module].power_mode_policy != | ||||||
| @@ -977,9 +956,6 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 module) | @@ -975,9 +954,6 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -98,5 +98,5 @@ index 61f7a40c0..4cbed2e3b 100644 | |||||||
|   |   | ||||||
|  	mlxsw_env->module_info[module].num_ports_up--; |  	mlxsw_env->module_info[module].num_ports_up--; | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 5c2fb60aa437b4858f15bb8bfb02d9df43b4dd95 Mon Sep 17 00:00:00 2001 | From 58426cf3ccba63cbc0b9ddc2abfc1173ca8ba368 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:45 +0200 | Date: Fri, 3 Dec 2021 11:48:45 +0200 | ||||||
| Subject: [PATCH] mlxsw: reg: Extend MTMP register with new slot number field | Subject: [PATCH backport 5.10 104/182] mlxsw: reg: Extend MTMP register with | ||||||
|  |  new slot number field | ||||||
|  |  | ||||||
| Extend MTMP (Management Temperature Register) with new field specifying | Extend MTMP (Management Temperature Register) with new field specifying | ||||||
| the slot index. The purpose of this field is to support access to MTMP | the slot index. The purpose of this field is to support access to MTMP | ||||||
| @@ -23,10 +24,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  4 files changed, 19 insertions(+), 11 deletions(-) |  4 files changed, 19 insertions(+), 11 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 4cbed2e3b..0b43029b2 100644 | index c1d51b4b6b36..32faedfd2ea8 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -143,7 +143,7 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | @@ -142,7 +142,7 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | ||||||
|  	int page; |  	int page; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -36,7 +37,7 @@ index 4cbed2e3b..0b43029b2 100644 | |||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 8b170ad92..71ca3b561 100644 | index 8b170ad92302..71ca3b561e62 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -66,7 +66,7 @@ static ssize_t mlxsw_hwmon_temp_show(struct device *dev, | @@ -66,7 +66,7 @@ static ssize_t mlxsw_hwmon_temp_show(struct device *dev, | ||||||
| @@ -79,10 +80,10 @@ index 8b170ad92..71ca3b561 100644 | |||||||
|  				      MLXSW_REG(mtmp), mtmp_pl); |  				      MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  		if (err) { |  		if (err) { | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index 9b0cd6f79..8d88633c9 100644 | index 80942c78d9e5..f4f0f8ce8597 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -280,7 +280,7 @@ static int mlxsw_thermal_get_temp(struct thermal_zone_device *tzdev, | @@ -272,7 +272,7 @@ static int mlxsw_thermal_get_temp(struct thermal_zone_device *tzdev, | ||||||
|  	int temp; |  	int temp; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -91,7 +92,7 @@ index 9b0cd6f79..8d88633c9 100644 | |||||||
|   |   | ||||||
|  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) { |  	if (err) { | ||||||
| @@ -440,7 +440,7 @@ mlxsw_thermal_module_temp_and_thresholds_get(struct mlxsw_core *core, | @@ -432,7 +432,7 @@ mlxsw_thermal_module_temp_and_thresholds_get(struct mlxsw_core *core, | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
|  	/* Read module temperature and thresholds. */ |  	/* Read module temperature and thresholds. */ | ||||||
| @@ -100,7 +101,7 @@ index 9b0cd6f79..8d88633c9 100644 | |||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) { |  	if (err) { | ||||||
|  		/* Set temperature and thresholds to zero to avoid passing |  		/* Set temperature and thresholds to zero to avoid passing | ||||||
| @@ -585,7 +585,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev, | @@ -577,7 +577,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev, | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
|  	index = MLXSW_REG_MTMP_GBOX_INDEX_MIN + tz->module; |  	index = MLXSW_REG_MTMP_GBOX_INDEX_MIN + tz->module; | ||||||
| @@ -110,7 +111,7 @@ index 9b0cd6f79..8d88633c9 100644 | |||||||
|  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 7f7cdb3fc..52cb58c6d 100644 | index c3fb2e4d4458..0428904b99d2 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -8541,6 +8541,12 @@ MLXSW_ITEM32(reg, mtcap, sensor_count, 0x00, 0, 7); | @@ -8541,6 +8541,12 @@ MLXSW_ITEM32(reg, mtcap, sensor_count, 0x00, 0, 7); | ||||||
| @@ -142,5 +143,5 @@ index 7f7cdb3fc..52cb58c6d 100644 | |||||||
|  	mlxsw_reg_mtmp_mte_set(payload, max_temp_enable); |  	mlxsw_reg_mtmp_mte_set(payload, max_temp_enable); | ||||||
|  	mlxsw_reg_mtmp_mtr_set(payload, max_temp_reset); |  	mlxsw_reg_mtmp_mtr_set(payload, max_temp_reset); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From c9c0ae28ab85836ee15920ddafaa3ba45e0dcaeb Mon Sep 17 00:00:00 2001 | From c9c07da3e3dadf102a25e27f49d0ce4f414c096c Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:46 +0200 | Date: Fri, 3 Dec 2021 11:48:46 +0200 | ||||||
| Subject: [PATCH] mlxsw: reg: Extend MTBR register with new slot number field | Subject: [PATCH backport 5.10 105/182] mlxsw: reg: Extend MTBR register with | ||||||
|  |  new slot number field | ||||||
|  |  | ||||||
| Extend MTBR (Management Temperature Bulk Register) with new field | Extend MTBR (Management Temperature Bulk Register) with new field | ||||||
| specifying the slot number. The purpose of this field is to support | specifying the slot number. The purpose of this field is to support | ||||||
| @@ -22,10 +23,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  3 files changed, 13 insertions(+), 6 deletions(-) |  3 files changed, 13 insertions(+), 6 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 0b43029b2..7feefb38b 100644 | index 32faedfd2ea8..c2aa05be5bcc 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -593,8 +593,8 @@ static int mlxsw_env_module_has_temp_sensor(struct mlxsw_core *mlxsw_core, | @@ -591,8 +591,8 @@ static int mlxsw_env_module_has_temp_sensor(struct mlxsw_core *mlxsw_core, | ||||||
|  	u16 temp; |  	u16 temp; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -37,7 +38,7 @@ index 0b43029b2..7feefb38b 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 71ca3b561..f4bc711a1 100644 | index 71ca3b561e62..f4bc711a16cf 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -271,8 +271,8 @@ static ssize_t mlxsw_hwmon_module_temp_fault_show(struct device *dev, | @@ -271,8 +271,8 @@ static ssize_t mlxsw_hwmon_module_temp_fault_show(struct device *dev, | ||||||
| @@ -52,7 +53,7 @@ index 71ca3b561..f4bc711a1 100644 | |||||||
|  	if (err) { |  	if (err) { | ||||||
|  		dev_err(dev, "Failed to query module temperature sensor\n"); |  		dev_err(dev, "Failed to query module temperature sensor\n"); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 52cb58c6d..56927c772 100644 | index 0428904b99d2..df210bd9a29c 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -8707,6 +8707,12 @@ MLXSW_ITEM_BIT_ARRAY(reg, mtwe, sensor_warning, 0x0, 0x10, 1); | @@ -8707,6 +8707,12 @@ MLXSW_ITEM_BIT_ARRAY(reg, mtwe, sensor_warning, 0x0, 0x10, 1); | ||||||
| @@ -83,5 +84,5 @@ index 52cb58c6d..56927c772 100644 | |||||||
|  	mlxsw_reg_mtbr_num_rec_set(payload, num_rec); |  	mlxsw_reg_mtbr_num_rec_set(payload, num_rec); | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From d494bb0c59dd1f6150f189e2878babf53b67e111 Mon Sep 17 00:00:00 2001 | From 4f10b61f33bdaee774b31b7fe37a76058b755561 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:47 +0200 | Date: Fri, 3 Dec 2021 11:48:47 +0200 | ||||||
| Subject: [PATCH] mlxsw: reg: Extend MCIA register with new slot number field | Subject: [PATCH backport 5.10 106/182] mlxsw: reg: Extend MCIA register with | ||||||
|  |  new slot number field | ||||||
|  |  | ||||||
| Extend MCIA (Management Cable Info Access Register) with new field | Extend MCIA (Management Cable Info Access Register) with new field | ||||||
| specifying the slot number. The purpose of this field is to support | specifying the slot number. The purpose of this field is to support | ||||||
| @@ -21,7 +22,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  2 files changed, 18 insertions(+), 9 deletions(-) |  2 files changed, 18 insertions(+), 9 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 7feefb38b..21eacbe0a 100644 | index c2aa05be5bcc..a516c04ad19b 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -35,8 +35,8 @@ static int mlxsw_env_validate_cable_ident(struct mlxsw_core *core, int id, | @@ -35,8 +35,8 @@ static int mlxsw_env_validate_cable_ident(struct mlxsw_core *core, int id, | ||||||
| @@ -35,7 +36,7 @@ index 7feefb38b..21eacbe0a 100644 | |||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mcia), mcia_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mcia), mcia_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
| @@ -111,7 +111,8 @@ mlxsw_env_query_module_eeprom(struct mlxsw_core *mlxsw_core, int module, | @@ -110,7 +110,8 @@ mlxsw_env_query_module_eeprom(struct mlxsw_core *mlxsw_core, int module, | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -45,7 +46,7 @@ index 7feefb38b..21eacbe0a 100644 | |||||||
|   |   | ||||||
|  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcia), mcia_pl); |  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcia), mcia_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| @@ -185,12 +186,12 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | @@ -184,12 +185,12 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | ||||||
|  			page = MLXSW_REG_MCIA_TH_PAGE_CMIS_NUM; |  			page = MLXSW_REG_MCIA_TH_PAGE_CMIS_NUM; | ||||||
|  		else |  		else | ||||||
|  			page = MLXSW_REG_MCIA_TH_PAGE_NUM; |  			page = MLXSW_REG_MCIA_TH_PAGE_NUM; | ||||||
| @@ -60,7 +61,7 @@ index 7feefb38b..21eacbe0a 100644 | |||||||
|  				    MLXSW_REG_MCIA_PAGE0_LO, |  				    MLXSW_REG_MCIA_PAGE0_LO, | ||||||
|  				    off, MLXSW_REG_MCIA_TH_ITEM_SIZE, |  				    off, MLXSW_REG_MCIA_TH_ITEM_SIZE, | ||||||
|  				    MLXSW_REG_MCIA_I2C_ADDR_HIGH); |  				    MLXSW_REG_MCIA_I2C_ADDR_HIGH); | ||||||
| @@ -371,7 +372,7 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, u8 module, | @@ -369,7 +370,7 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  		size = min_t(u8, page->length - bytes_read, |  		size = min_t(u8, page->length - bytes_read, | ||||||
|  			     MLXSW_REG_MCIA_EEPROM_SIZE); |  			     MLXSW_REG_MCIA_EEPROM_SIZE); | ||||||
|   |   | ||||||
| @@ -70,7 +71,7 @@ index 7feefb38b..21eacbe0a 100644 | |||||||
|  				    page->i2c_address); |  				    page->i2c_address); | ||||||
|  		mlxsw_reg_mcia_bank_number_set(mcia_pl, page->bank); |  		mlxsw_reg_mcia_bank_number_set(mcia_pl, page->bank); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 56927c772..2714e316c 100644 | index df210bd9a29c..bdbe198a9053 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -8798,6 +8798,12 @@ MLXSW_ITEM32(reg, mcia, l, 0x00, 31, 1); | @@ -8798,6 +8798,12 @@ MLXSW_ITEM32(reg, mcia, l, 0x00, 31, 1); | ||||||
| @@ -86,7 +87,7 @@ index 56927c772..2714e316c 100644 | |||||||
|  enum { |  enum { | ||||||
|  	MLXSW_REG_MCIA_STATUS_GOOD = 0, |  	MLXSW_REG_MCIA_STATUS_GOOD = 0, | ||||||
|  	/* No response from module's EEPROM. */ |  	/* No response from module's EEPROM. */ | ||||||
| @@ -8897,11 +8903,13 @@ MLXSW_ITEM_BUF(reg, mcia, eeprom, 0x10, MLXSW_REG_MCIA_EEPROM_SIZE); | @@ -8896,11 +8902,13 @@ MLXSW_ITEM_BUF(reg, mcia, eeprom, 0x10, MLXSW_REG_MCIA_EEPROM_SIZE); | ||||||
|  				MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH) / \ |  				MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH) / \ | ||||||
|  				MLXSW_REG_MCIA_EEPROM_UP_PAGE_LENGTH + 1) |  				MLXSW_REG_MCIA_EEPROM_UP_PAGE_LENGTH + 1) | ||||||
|   |   | ||||||
| @@ -104,5 +105,5 @@ index 56927c772..2714e316c 100644 | |||||||
|  	mlxsw_reg_mcia_l_set(payload, lock); |  	mlxsw_reg_mcia_l_set(payload, lock); | ||||||
|  	mlxsw_reg_mcia_page_number_set(payload, page_number); |  	mlxsw_reg_mcia_page_number_set(payload, page_number); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 9c4ce1a56515e927399a87b63deeacd77ada6b3b Mon Sep 17 00:00:00 2001 | From aba06998f55ba715e6161a427356fccc17b466fc Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:50 +0200 | Date: Fri, 3 Dec 2021 11:48:50 +0200 | ||||||
| Subject: [PATCH] mlxsw: reg: Extend MCION register with new slot number field | Subject: [PATCH backport 5.10 107/182] mlxsw: reg: Extend MCION register with | ||||||
|  |  new slot number field | ||||||
|  |  | ||||||
| Extend MCION (Management Cable IO and Notifications Register) with new | Extend MCION (Management Cable IO and Notifications Register) with new | ||||||
| field specifying the slot number. The purpose of this field is to | field specifying the slot number. The purpose of this field is to | ||||||
| @@ -22,10 +23,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  2 files changed, 9 insertions(+), 2 deletions(-) |  2 files changed, 9 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 21eacbe0a..d88033ec6 100644 | index a516c04ad19b..2ac8444aa8b2 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -460,7 +460,7 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | @@ -458,7 +458,7 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|   |   | ||||||
|  	params->policy = mlxsw_env->module_info[module].power_mode_policy; |  	params->policy = mlxsw_env->module_info[module].power_mode_policy; | ||||||
|   |   | ||||||
| @@ -35,10 +36,10 @@ index 21eacbe0a..d88033ec6 100644 | |||||||
|  	if (err) { |  	if (err) { | ||||||
|  		NL_SET_ERR_MSG_MOD(extack, "Failed to retrieve module's power mode"); |  		NL_SET_ERR_MSG_MOD(extack, "Failed to retrieve module's power mode"); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 2714e316c..243d91f1d 100644 | index bdbe198a9053..acde0cd00944 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -9328,6 +9328,12 @@ MLXSW_REG_DEFINE(mcion, MLXSW_REG_MCION_ID, MLXSW_REG_MCION_LEN); | @@ -9327,6 +9327,12 @@ MLXSW_REG_DEFINE(mcion, MLXSW_REG_MCION_ID, MLXSW_REG_MCION_LEN); | ||||||
|   */ |   */ | ||||||
|  MLXSW_ITEM32(reg, mcion, module, 0x00, 16, 8); |  MLXSW_ITEM32(reg, mcion, module, 0x00, 16, 8); | ||||||
|   |   | ||||||
| @@ -51,7 +52,7 @@ index 2714e316c..243d91f1d 100644 | |||||||
|  enum { |  enum { | ||||||
|  	MLXSW_REG_MCION_MODULE_STATUS_BITS_PRESENT_MASK = BIT(0), |  	MLXSW_REG_MCION_MODULE_STATUS_BITS_PRESENT_MASK = BIT(0), | ||||||
|  	MLXSW_REG_MCION_MODULE_STATUS_BITS_LOW_POWER_MASK = BIT(8), |  	MLXSW_REG_MCION_MODULE_STATUS_BITS_LOW_POWER_MASK = BIT(8), | ||||||
| @@ -9339,9 +9345,10 @@ enum { | @@ -9338,9 +9344,10 @@ enum { | ||||||
|   */ |   */ | ||||||
|  MLXSW_ITEM32(reg, mcion, module_status_bits, 0x04, 0, 16); |  MLXSW_ITEM32(reg, mcion, module_status_bits, 0x04, 0, 16); | ||||||
|   |   | ||||||
| @@ -64,5 +65,5 @@ index 2714e316c..243d91f1d 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From d707ce17ce596c2deb97b481dffb24b8c4537fa2 Mon Sep 17 00:00:00 2001 | From 0aebe300b70a084161c12e813396025b255d91d7 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:51 +0200 | Date: Fri, 3 Dec 2021 11:48:51 +0200 | ||||||
| Subject: [PATCH] mlxsw: reg: Extend PMMP register with new slot number field | Subject: [PATCH backport 5.10 108/182] mlxsw: reg: Extend PMMP register with | ||||||
|  |  new slot number field | ||||||
|  |  | ||||||
| Extend PMMP (Port Module Memory Map Properties Register) with new | Extend PMMP (Port Module Memory Map Properties Register) with new | ||||||
| field specifying the slot number. The purpose of this field is to | field specifying the slot number. The purpose of this field is to | ||||||
| @@ -21,10 +22,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  2 files changed, 9 insertions(+), 2 deletions(-) |  2 files changed, 9 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index d88033ec6..49c58197b 100644 | index 2ac8444aa8b2..ad27a1c90f92 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -503,7 +503,7 @@ static int mlxsw_env_module_low_power_set(struct mlxsw_core *mlxsw_core, | @@ -501,7 +501,7 @@ static int mlxsw_env_module_low_power_set(struct mlxsw_core *mlxsw_core, | ||||||
|  	u16 eeprom_override_mask, eeprom_override; |  	u16 eeprom_override_mask, eeprom_override; | ||||||
|  	char pmmp_pl[MLXSW_REG_PMMP_LEN]; |  	char pmmp_pl[MLXSW_REG_PMMP_LEN]; | ||||||
|   |   | ||||||
| @@ -34,7 +35,7 @@ index d88033ec6..49c58197b 100644 | |||||||
|  	/* Mask all the bits except low power mode. */ |  	/* Mask all the bits except low power mode. */ | ||||||
|  	eeprom_override_mask = ~MLXSW_REG_PMMP_EEPROM_OVERRIDE_LOW_POWER_MASK; |  	eeprom_override_mask = ~MLXSW_REG_PMMP_EEPROM_OVERRIDE_LOW_POWER_MASK; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 243d91f1d..c19db16bf 100644 | index acde0cd00944..aad0cb1497aa 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -5633,6 +5633,12 @@ MLXSW_REG_DEFINE(pmmp, MLXSW_REG_PMMP_ID, MLXSW_REG_PMMP_LEN); | @@ -5633,6 +5633,12 @@ MLXSW_REG_DEFINE(pmmp, MLXSW_REG_PMMP_ID, MLXSW_REG_PMMP_LEN); | ||||||
| @@ -63,5 +64,5 @@ index 243d91f1d..c19db16bf 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 1373ed22ae41e92c081bb80df4b3c4c0630edbb9 Mon Sep 17 00:00:00 2001 | From 441a7861ef61f4d0d55dee542d4704487694f68c Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 22 Dec 2021 06:11:50 +0000 | Date: Wed, 22 Dec 2021 06:11:50 +0000 | ||||||
| Subject: [PATCH] mlxsw: reg: Extend MGPIR register with new slot fields | Subject: [PATCH backport 5.10 109/182] mlxsw: reg: Extend MGPIR register with | ||||||
|  |  new slot fields | ||||||
|  |  | ||||||
| Extend MGPIR (Management General Peripheral Information Register) with | Extend MGPIR (Management General Peripheral Information Register) with | ||||||
| new fields specifying the slot number and number of the slots available | new fields specifying the slot number and number of the slots available | ||||||
| @@ -25,10 +26,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  5 files changed, 31 insertions(+), 14 deletions(-) |  5 files changed, 31 insertions(+), 14 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 49c58197b..b1a1204e7 100644 | index ad27a1c90f92..8ab15d5bd7f5 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -985,12 +985,12 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -983,12 +983,12 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  	u8 module_count; |  	u8 module_count; | ||||||
|  	int i, err; |  	int i, err; | ||||||
|   |   | ||||||
| @@ -44,7 +45,7 @@ index 49c58197b..b1a1204e7 100644 | |||||||
|  	env = kzalloc(struct_size(env, module_info, module_count), GFP_KERNEL); |  	env = kzalloc(struct_size(env, module_info, module_count), GFP_KERNEL); | ||||||
|  	if (!env) |  	if (!env) | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index f4bc711a1..2bc4c4556 100644 | index f4bc711a16cf..2bc4c4556895 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -656,13 +656,13 @@ static int mlxsw_hwmon_module_init(struct mlxsw_hwmon *mlxsw_hwmon) | @@ -656,13 +656,13 @@ static int mlxsw_hwmon_module_init(struct mlxsw_hwmon *mlxsw_hwmon) | ||||||
| @@ -80,10 +81,10 @@ index f4bc711a1..2bc4c4556 100644 | |||||||
|  	    !gbox_num) |  	    !gbox_num) | ||||||
|  		return 0; |  		return 0; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index 8d88633c9..56e0291f1 100644 | index f4f0f8ce8597..21a7415c8ef5 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -787,13 +787,13 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | @@ -746,13 +746,13 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	char mgpir_pl[MLXSW_REG_MGPIR_LEN]; |  	char mgpir_pl[MLXSW_REG_MGPIR_LEN]; | ||||||
|  	int i, err; |  	int i, err; | ||||||
|   |   | ||||||
| @@ -99,7 +100,7 @@ index 8d88633c9..56e0291f1 100644 | |||||||
|   |   | ||||||
|  	thermal->tz_module_arr = kcalloc(thermal->tz_module_num, |  	thermal->tz_module_arr = kcalloc(thermal->tz_module_num, | ||||||
|  					 sizeof(*thermal->tz_module_arr), |  					 sizeof(*thermal->tz_module_arr), | ||||||
| @@ -878,13 +878,13 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -837,13 +837,13 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	int i; |  	int i; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -116,7 +117,7 @@ index 8d88633c9..56e0291f1 100644 | |||||||
|  	    !gbox_num) |  	    !gbox_num) | ||||||
|  		return 0; |  		return 0; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| index 3d07c2dcf..b2ffcfda8 100644 | index 3d07c2dcf08d..b2ffcfda8374 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| @@ -280,13 +280,13 @@ static int mlxsw_m_ports_create(struct mlxsw_m *mlxsw_m) | @@ -280,13 +280,13 @@ static int mlxsw_m_ports_create(struct mlxsw_m *mlxsw_m) | ||||||
| @@ -136,10 +137,10 @@ index 3d07c2dcf..b2ffcfda8 100644 | |||||||
|  		return 0; |  		return 0; | ||||||
|   |   | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index c19db16bf..e981630fd 100644 | index aad0cb1497aa..a5fa25d4bd8f 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10167,6 +10167,12 @@ enum mlxsw_reg_mgpir_device_type { | @@ -10166,6 +10166,12 @@ enum mlxsw_reg_mgpir_device_type { | ||||||
|  	MLXSW_REG_MGPIR_DEVICE_TYPE_GEARBOX_DIE, |  	MLXSW_REG_MGPIR_DEVICE_TYPE_GEARBOX_DIE, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -152,7 +153,7 @@ index c19db16bf..e981630fd 100644 | |||||||
|  /* mgpir_device_type |  /* mgpir_device_type | ||||||
|   * Access: RO |   * Access: RO | ||||||
|   */ |   */ | ||||||
| @@ -10184,21 +10190,29 @@ MLXSW_ITEM32(reg, mgpir, devices_per_flash, 0x00, 16, 8); | @@ -10183,21 +10189,29 @@ MLXSW_ITEM32(reg, mgpir, devices_per_flash, 0x00, 16, 8); | ||||||
|   */ |   */ | ||||||
|  MLXSW_ITEM32(reg, mgpir, num_of_devices, 0x00, 0, 8); |  MLXSW_ITEM32(reg, mgpir, num_of_devices, 0x00, 0, 8); | ||||||
|   |   | ||||||
| @@ -184,7 +185,7 @@ index c19db16bf..e981630fd 100644 | |||||||
|  { |  { | ||||||
|  	if (num_of_devices) |  	if (num_of_devices) | ||||||
|  		*num_of_devices = mlxsw_reg_mgpir_num_of_devices_get(payload); |  		*num_of_devices = mlxsw_reg_mgpir_num_of_devices_get(payload); | ||||||
| @@ -10209,6 +10223,8 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | @@ -10208,6 +10222,8 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | ||||||
|  				mlxsw_reg_mgpir_devices_per_flash_get(payload); |  				mlxsw_reg_mgpir_devices_per_flash_get(payload); | ||||||
|  	if (num_of_modules) |  	if (num_of_modules) | ||||||
|  		*num_of_modules = mlxsw_reg_mgpir_num_of_modules_get(payload); |  		*num_of_modules = mlxsw_reg_mgpir_num_of_modules_get(payload); | ||||||
| @@ -194,5 +195,5 @@ index c19db16bf..e981630fd 100644 | |||||||
|   |   | ||||||
|  /* MFDE - Monitoring FW Debug Register |  /* MFDE - Monitoring FW Debug Register | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 562fe3c68c9dbcff172eeae8b4f0a84484b5e3e9 Mon Sep 17 00:00:00 2001 | From 7c2049bccef11b265fd4a4458b92277ea8ea97fc Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:52 +0200 | Date: Fri, 3 Dec 2021 11:48:52 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_env: Pass slot index during PMAOS register write | Subject: [PATCH backport 5.10 110/182] mlxsw: core_env: Pass slot index during | ||||||
|  call |  PMAOS register write call | ||||||
|  |  | ||||||
| Pass the slot index down to PMAOS pack helper alongside with the module. | Pass the slot index down to PMAOS pack helper alongside with the module. | ||||||
|  |  | ||||||
| @@ -15,10 +15,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  2 files changed, 5 insertions(+), 4 deletions(-) |  2 files changed, 5 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index b1a1204e7..45058d4cf 100644 | index 8ab15d5bd7f5..b7c1fd3dbf45 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -400,7 +400,7 @@ static int mlxsw_env_module_reset(struct mlxsw_core *mlxsw_core, u8 module) | @@ -398,7 +398,7 @@ static int mlxsw_env_module_reset(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  { |  { | ||||||
|  	char pmaos_pl[MLXSW_REG_PMAOS_LEN]; |  	char pmaos_pl[MLXSW_REG_PMAOS_LEN]; | ||||||
|   |   | ||||||
| @@ -27,7 +27,7 @@ index b1a1204e7..45058d4cf 100644 | |||||||
|  	mlxsw_reg_pmaos_rst_set(pmaos_pl, true); |  	mlxsw_reg_pmaos_rst_set(pmaos_pl, true); | ||||||
|   |   | ||||||
|  	return mlxsw_reg_write(mlxsw_core, MLXSW_REG(pmaos), pmaos_pl); |  	return mlxsw_reg_write(mlxsw_core, MLXSW_REG(pmaos), pmaos_pl); | ||||||
| @@ -488,7 +488,7 @@ static int mlxsw_env_module_enable_set(struct mlxsw_core *mlxsw_core, | @@ -486,7 +486,7 @@ static int mlxsw_env_module_enable_set(struct mlxsw_core *mlxsw_core, | ||||||
|  	enum mlxsw_reg_pmaos_admin_status admin_status; |  	enum mlxsw_reg_pmaos_admin_status admin_status; | ||||||
|  	char pmaos_pl[MLXSW_REG_PMAOS_LEN]; |  	char pmaos_pl[MLXSW_REG_PMAOS_LEN]; | ||||||
|   |   | ||||||
| @@ -36,7 +36,7 @@ index b1a1204e7..45058d4cf 100644 | |||||||
|  	admin_status = enable ? MLXSW_REG_PMAOS_ADMIN_STATUS_ENABLED : |  	admin_status = enable ? MLXSW_REG_PMAOS_ADMIN_STATUS_ENABLED : | ||||||
|  				MLXSW_REG_PMAOS_ADMIN_STATUS_DISABLED; |  				MLXSW_REG_PMAOS_ADMIN_STATUS_DISABLED; | ||||||
|  	mlxsw_reg_pmaos_admin_status_set(pmaos_pl, admin_status); |  	mlxsw_reg_pmaos_admin_status_set(pmaos_pl, admin_status); | ||||||
| @@ -878,7 +878,7 @@ mlxsw_env_module_oper_state_event_enable(struct mlxsw_core *mlxsw_core, | @@ -876,7 +876,7 @@ mlxsw_env_module_oper_state_event_enable(struct mlxsw_core *mlxsw_core, | ||||||
|  	for (i = 0; i < module_count; i++) { |  	for (i = 0; i < module_count; i++) { | ||||||
|  		char pmaos_pl[MLXSW_REG_PMAOS_LEN]; |  		char pmaos_pl[MLXSW_REG_PMAOS_LEN]; | ||||||
|   |   | ||||||
| @@ -46,7 +46,7 @@ index b1a1204e7..45058d4cf 100644 | |||||||
|  				      MLXSW_REG_PMAOS_E_GENERATE_EVENT); |  				      MLXSW_REG_PMAOS_E_GENERATE_EVENT); | ||||||
|  		mlxsw_reg_pmaos_ee_set(pmaos_pl, true); |  		mlxsw_reg_pmaos_ee_set(pmaos_pl, true); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index e981630fd..748a22ec4 100644 | index a5fa25d4bd8f..07f68fd1a4e5 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -5481,9 +5481,10 @@ enum mlxsw_reg_pmaos_e { | @@ -5481,9 +5481,10 @@ enum mlxsw_reg_pmaos_e { | ||||||
| @@ -62,5 +62,5 @@ index e981630fd..748a22ec4 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From fe27f006de6b428fe59acb1960373b32e59adf0b Mon Sep 17 00:00:00 2001 | From 4b630e780a6fa8b387e79e252169d5743faf5321 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:49 +0200 | Date: Fri, 3 Dec 2021 11:48:49 +0200 | ||||||
| Subject: [PATCH] mlxsw: reg: Add new field to Management General Peripheral | Subject: [PATCH backport 5.10 111/182] mlxsw: reg: Add new field to Management | ||||||
|  Information Register |  General Peripheral Information Register | ||||||
|  |  | ||||||
| Add new field 'max_modules_per_slot' to provide maximum number of | Add new field 'max_modules_per_slot' to provide maximum number of | ||||||
| modules that can be connected per slot. This field will always be zero, | modules that can be connected per slot. This field will always be zero, | ||||||
| @@ -17,10 +17,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 6 insertions(+) |  1 file changed, 6 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 748a22ec4..9de037b9a 100644 | index 07f68fd1a4e5..98c627ffe039 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10191,6 +10191,12 @@ MLXSW_ITEM32(reg, mgpir, devices_per_flash, 0x00, 16, 8); | @@ -10190,6 +10190,12 @@ MLXSW_ITEM32(reg, mgpir, devices_per_flash, 0x00, 16, 8); | ||||||
|   */ |   */ | ||||||
|  MLXSW_ITEM32(reg, mgpir, num_of_devices, 0x00, 0, 8); |  MLXSW_ITEM32(reg, mgpir, num_of_devices, 0x00, 0, 8); | ||||||
|   |   | ||||||
| @@ -34,5 +34,5 @@ index 748a22ec4..9de037b9a 100644 | |||||||
|   * Number of slots in the system. |   * Number of slots in the system. | ||||||
|   * Access: RO |   * Access: RO | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 5577988f783619b9d55f19c983ee8667f52165b7 Mon Sep 17 00:00:00 2001 | From 0b0f4813bdd0b4ed70074d616f68bb6c774662bc Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Fri, 3 Dec 2021 11:48:53 +0200 | Date: Fri, 3 Dec 2021 11:48:53 +0200 | ||||||
| Subject: [PATCH] mlxsw: core: Extend interfaces for cable info access with | Subject: [PATCH backport 5.10 112/182] mlxsw: core: Extend interfaces for | ||||||
|  slot argument |  cable info access with slot argument | ||||||
|  |  | ||||||
| Extend all cable info APIs with 'slot_index' argument. | Extend all cable info APIs with 'slot_index' argument. | ||||||
|  |  | ||||||
| @@ -24,7 +24,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  7 files changed, 155 insertions(+), 107 deletions(-) |  7 files changed, 155 insertions(+), 107 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 45058d4cf..fefb9bb02 100644 | index b7c1fd3dbf45..fc4468a6b0f6 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -27,16 +27,18 @@ struct mlxsw_env { | @@ -27,16 +27,18 @@ struct mlxsw_env { | ||||||
| @@ -50,7 +50,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mcia), mcia_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mcia), mcia_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
| @@ -65,8 +67,8 @@ static int mlxsw_env_validate_cable_ident(struct mlxsw_core *core, int id, | @@ -64,8 +66,8 @@ static int mlxsw_env_validate_cable_ident(struct mlxsw_core *core, int id, | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
| @@ -61,7 +61,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  			      bool qsfp, unsigned int *p_read_size) |  			      bool qsfp, unsigned int *p_read_size) | ||||||
|  { |  { | ||||||
|  	char mcia_pl[MLXSW_REG_MCIA_LEN]; |  	char mcia_pl[MLXSW_REG_MCIA_LEN]; | ||||||
| @@ -111,7 +113,7 @@ mlxsw_env_query_module_eeprom(struct mlxsw_core *mlxsw_core, int module, | @@ -110,7 +112,7 @@ mlxsw_env_query_module_eeprom(struct mlxsw_core *mlxsw_core, int module, | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -70,7 +70,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  			    i2c_addr); |  			    i2c_addr); | ||||||
|   |   | ||||||
|  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcia), mcia_pl); |  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcia), mcia_pl); | ||||||
| @@ -129,8 +131,9 @@ mlxsw_env_query_module_eeprom(struct mlxsw_core *mlxsw_core, int module, | @@ -128,8 +130,9 @@ mlxsw_env_query_module_eeprom(struct mlxsw_core *mlxsw_core, int module, | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -82,7 +82,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	unsigned int module_temp, module_crit, module_emerg; |  	unsigned int module_temp, module_crit, module_emerg; | ||||||
|  	union { |  	union { | ||||||
| @@ -144,8 +147,9 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | @@ -143,8 +146,9 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | ||||||
|  	int page; |  	int page; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -94,7 +94,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
| @@ -174,7 +178,8 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | @@ -173,7 +177,8 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | ||||||
|  	 */ |  	 */ | ||||||
|   |   | ||||||
|  	/* Validate module identifier value. */ |  	/* Validate module identifier value. */ | ||||||
| @@ -104,7 +104,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
|   |   | ||||||
| @@ -186,12 +191,12 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | @@ -185,12 +190,12 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | ||||||
|  			page = MLXSW_REG_MCIA_TH_PAGE_CMIS_NUM; |  			page = MLXSW_REG_MCIA_TH_PAGE_CMIS_NUM; | ||||||
|  		else |  		else | ||||||
|  			page = MLXSW_REG_MCIA_TH_PAGE_NUM; |  			page = MLXSW_REG_MCIA_TH_PAGE_NUM; | ||||||
| @@ -119,7 +119,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  				    MLXSW_REG_MCIA_PAGE0_LO, |  				    MLXSW_REG_MCIA_PAGE0_LO, | ||||||
|  				    off, MLXSW_REG_MCIA_TH_ITEM_SIZE, |  				    off, MLXSW_REG_MCIA_TH_ITEM_SIZE, | ||||||
|  				    MLXSW_REG_MCIA_I2C_ADDR_HIGH); |  				    MLXSW_REG_MCIA_I2C_ADDR_HIGH); | ||||||
| @@ -208,8 +213,8 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | @@ -207,8 +212,8 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module, | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -130,7 +130,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	u8 module_info[MLXSW_REG_MCIA_EEPROM_MODULE_INFO_SIZE]; |  	u8 module_info[MLXSW_REG_MCIA_EEPROM_MODULE_INFO_SIZE]; | ||||||
|  	u16 offset = MLXSW_REG_MCIA_EEPROM_MODULE_INFO_SIZE; |  	u16 offset = MLXSW_REG_MCIA_EEPROM_MODULE_INFO_SIZE; | ||||||
| @@ -217,8 +222,9 @@ int mlxsw_env_get_module_info(struct mlxsw_core *mlxsw_core, int module, | @@ -216,8 +221,9 @@ int mlxsw_env_get_module_info(struct mlxsw_core *mlxsw_core, int module, | ||||||
|  	unsigned int read_size; |  	unsigned int read_size; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -142,7 +142,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
|   |   | ||||||
| @@ -247,9 +253,10 @@ int mlxsw_env_get_module_info(struct mlxsw_core *mlxsw_core, int module, | @@ -246,9 +252,10 @@ int mlxsw_env_get_module_info(struct mlxsw_core *mlxsw_core, int module, | ||||||
|  		break; |  		break; | ||||||
|  	case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_SFP: |  	case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_SFP: | ||||||
|  		/* Verify if transceiver provides diagnostic monitoring page */ |  		/* Verify if transceiver provides diagnostic monitoring page */ | ||||||
| @@ -156,7 +156,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  		if (err) |  		if (err) | ||||||
|  			return err; |  			return err; | ||||||
|   |   | ||||||
| @@ -288,8 +295,9 @@ int mlxsw_env_get_module_info(struct mlxsw_core *mlxsw_core, int module, | @@ -286,8 +293,9 @@ int mlxsw_env_get_module_info(struct mlxsw_core *mlxsw_core, int module, | ||||||
|  EXPORT_SYMBOL(mlxsw_env_get_module_info); |  EXPORT_SYMBOL(mlxsw_env_get_module_info); | ||||||
|   |   | ||||||
|  int mlxsw_env_get_module_eeprom(struct net_device *netdev, |  int mlxsw_env_get_module_eeprom(struct net_device *netdev, | ||||||
| @@ -168,7 +168,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	int offset = ee->offset; |  	int offset = ee->offset; | ||||||
|  	unsigned int read_size; |  	unsigned int read_size; | ||||||
| @@ -302,12 +310,14 @@ int mlxsw_env_get_module_eeprom(struct net_device *netdev, | @@ -300,12 +308,14 @@ int mlxsw_env_get_module_eeprom(struct net_device *netdev, | ||||||
|   |   | ||||||
|  	memset(data, 0, ee->len); |  	memset(data, 0, ee->len); | ||||||
|  	/* Validate module identifier value. */ |  	/* Validate module identifier value. */ | ||||||
| @@ -185,7 +185,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  						    ee->len - i, data + i, |  						    ee->len - i, data + i, | ||||||
|  						    qsfp, &read_size); |  						    qsfp, &read_size); | ||||||
|  		if (err) { |  		if (err) { | ||||||
| @@ -353,7 +363,8 @@ static int mlxsw_env_mcia_status_process(const char *mcia_pl, | @@ -351,7 +361,8 @@ static int mlxsw_env_mcia_status_process(const char *mcia_pl, | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  int |  int | ||||||
| @@ -195,7 +195,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  				    const struct ethtool_module_eeprom *page, |  				    const struct ethtool_module_eeprom *page, | ||||||
|  				    struct netlink_ext_ack *extack) |  				    struct netlink_ext_ack *extack) | ||||||
|  { |  { | ||||||
| @@ -372,7 +383,7 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, u8 module, | @@ -370,7 +381,7 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  		size = min_t(u8, page->length - bytes_read, |  		size = min_t(u8, page->length - bytes_read, | ||||||
|  			     MLXSW_REG_MCIA_EEPROM_SIZE); |  			     MLXSW_REG_MCIA_EEPROM_SIZE); | ||||||
|   |   | ||||||
| @@ -204,7 +204,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  				    device_addr + bytes_read, size, |  				    device_addr + bytes_read, size, | ||||||
|  				    page->i2c_address); |  				    page->i2c_address); | ||||||
|  		mlxsw_reg_mcia_bank_number_set(mcia_pl, page->bank); |  		mlxsw_reg_mcia_bank_number_set(mcia_pl, page->bank); | ||||||
| @@ -396,18 +407,20 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, u8 module, | @@ -394,18 +405,20 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_get_module_eeprom_by_page); |  EXPORT_SYMBOL(mlxsw_env_get_module_eeprom_by_page); | ||||||
|   |   | ||||||
| @@ -228,7 +228,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|  	u32 req = *flags; |  	u32 req = *flags; | ||||||
| @@ -432,7 +445,7 @@ int mlxsw_env_reset_module(struct net_device *netdev, | @@ -430,7 +443,7 @@ int mlxsw_env_reset_module(struct net_device *netdev, | ||||||
|  		goto out; |  		goto out; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -237,7 +237,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	if (err) { |  	if (err) { | ||||||
|  		netdev_err(netdev, "Failed to reset module\n"); |  		netdev_err(netdev, "Failed to reset module\n"); | ||||||
|  		goto out; |  		goto out; | ||||||
| @@ -447,7 +460,8 @@ int mlxsw_env_reset_module(struct net_device *netdev, | @@ -445,7 +458,8 @@ int mlxsw_env_reset_module(struct net_device *netdev, | ||||||
|  EXPORT_SYMBOL(mlxsw_env_reset_module); |  EXPORT_SYMBOL(mlxsw_env_reset_module); | ||||||
|   |   | ||||||
|  int |  int | ||||||
| @@ -247,7 +247,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  				struct ethtool_module_power_mode_params *params, |  				struct ethtool_module_power_mode_params *params, | ||||||
|  				struct netlink_ext_ack *extack) |  				struct netlink_ext_ack *extack) | ||||||
|  { |  { | ||||||
| @@ -460,7 +474,7 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | @@ -458,7 +472,7 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|   |   | ||||||
|  	params->policy = mlxsw_env->module_info[module].power_mode_policy; |  	params->policy = mlxsw_env->module_info[module].power_mode_policy; | ||||||
|   |   | ||||||
| @@ -256,7 +256,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcion), mcion_pl); |  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcion), mcion_pl); | ||||||
|  	if (err) { |  	if (err) { | ||||||
|  		NL_SET_ERR_MSG_MOD(extack, "Failed to retrieve module's power mode"); |  		NL_SET_ERR_MSG_MOD(extack, "Failed to retrieve module's power mode"); | ||||||
| @@ -483,12 +497,12 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | @@ -481,12 +495,12 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  EXPORT_SYMBOL(mlxsw_env_get_module_power_mode); |  EXPORT_SYMBOL(mlxsw_env_get_module_power_mode); | ||||||
|   |   | ||||||
|  static int mlxsw_env_module_enable_set(struct mlxsw_core *mlxsw_core, |  static int mlxsw_env_module_enable_set(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -271,7 +271,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	admin_status = enable ? MLXSW_REG_PMAOS_ADMIN_STATUS_ENABLED : |  	admin_status = enable ? MLXSW_REG_PMAOS_ADMIN_STATUS_ENABLED : | ||||||
|  				MLXSW_REG_PMAOS_ADMIN_STATUS_DISABLED; |  				MLXSW_REG_PMAOS_ADMIN_STATUS_DISABLED; | ||||||
|  	mlxsw_reg_pmaos_admin_status_set(pmaos_pl, admin_status); |  	mlxsw_reg_pmaos_admin_status_set(pmaos_pl, admin_status); | ||||||
| @@ -498,12 +512,13 @@ static int mlxsw_env_module_enable_set(struct mlxsw_core *mlxsw_core, | @@ -496,12 +510,13 @@ static int mlxsw_env_module_enable_set(struct mlxsw_core *mlxsw_core, | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static int mlxsw_env_module_low_power_set(struct mlxsw_core *mlxsw_core, |  static int mlxsw_env_module_low_power_set(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -287,7 +287,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	mlxsw_reg_pmmp_sticky_set(pmmp_pl, true); |  	mlxsw_reg_pmmp_sticky_set(pmmp_pl, true); | ||||||
|  	/* Mask all the bits except low power mode. */ |  	/* Mask all the bits except low power mode. */ | ||||||
|  	eeprom_override_mask = ~MLXSW_REG_PMMP_EEPROM_OVERRIDE_LOW_POWER_MASK; |  	eeprom_override_mask = ~MLXSW_REG_PMMP_EEPROM_OVERRIDE_LOW_POWER_MASK; | ||||||
| @@ -516,24 +531,26 @@ static int mlxsw_env_module_low_power_set(struct mlxsw_core *mlxsw_core, | @@ -514,24 +529,26 @@ static int mlxsw_env_module_low_power_set(struct mlxsw_core *mlxsw_core, | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static int __mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, |  static int __mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -318,7 +318,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	if (err) { |  	if (err) { | ||||||
|  		NL_SET_ERR_MSG_MOD(extack, "Failed to enable module"); |  		NL_SET_ERR_MSG_MOD(extack, "Failed to enable module"); | ||||||
|  		goto err_module_enable_set; |  		goto err_module_enable_set; | ||||||
| @@ -542,14 +559,16 @@ static int __mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, | @@ -540,14 +557,16 @@ static int __mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, | ||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
|  err_module_enable_set: |  err_module_enable_set: | ||||||
| @@ -338,7 +338,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  				enum ethtool_module_power_mode_policy policy, |  				enum ethtool_module_power_mode_policy policy, | ||||||
|  				struct netlink_ext_ack *extack) |  				struct netlink_ext_ack *extack) | ||||||
|  { |  { | ||||||
| @@ -573,8 +592,8 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | @@ -571,8 +590,8 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  		goto out_set_policy; |  		goto out_set_policy; | ||||||
|   |   | ||||||
|  	low_power = policy == ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO; |  	low_power = policy == ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO; | ||||||
| @@ -349,7 +349,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		goto out; |  		goto out; | ||||||
|   |   | ||||||
| @@ -587,14 +606,14 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | @@ -585,14 +604,14 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  EXPORT_SYMBOL(mlxsw_env_set_module_power_mode); |  EXPORT_SYMBOL(mlxsw_env_set_module_power_mode); | ||||||
|   |   | ||||||
|  static int mlxsw_env_module_has_temp_sensor(struct mlxsw_core *mlxsw_core, |  static int mlxsw_env_module_has_temp_sensor(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -366,7 +366,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  			    MLXSW_REG_MTBR_BASE_MODULE_INDEX + module, 1); |  			    MLXSW_REG_MTBR_BASE_MODULE_INDEX + module, 1); | ||||||
|  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mtbr), mtbr_pl); |  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mtbr), mtbr_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| @@ -615,13 +634,15 @@ static int mlxsw_env_module_has_temp_sensor(struct mlxsw_core *mlxsw_core, | @@ -613,13 +632,15 @@ static int mlxsw_env_module_has_temp_sensor(struct mlxsw_core *mlxsw_core, | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -384,7 +384,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	mlxsw_reg_mtmp_sensor_index_set(mtmp_pl, sensor_index); |  	mlxsw_reg_mtmp_sensor_index_set(mtmp_pl, sensor_index); | ||||||
|  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| @@ -629,6 +650,7 @@ static int mlxsw_env_temp_event_set(struct mlxsw_core *mlxsw_core, | @@ -627,6 +648,7 @@ static int mlxsw_env_temp_event_set(struct mlxsw_core *mlxsw_core, | ||||||
|   |   | ||||||
|  	if (enable) { |  	if (enable) { | ||||||
|  		err = mlxsw_env_module_temp_thresholds_get(mlxsw_core, |  		err = mlxsw_env_module_temp_thresholds_get(mlxsw_core, | ||||||
| @@ -392,7 +392,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  							   sensor_index - |  							   sensor_index - | ||||||
|  							   MLXSW_REG_MTMP_MODULE_INDEX_MIN, |  							   MLXSW_REG_MTMP_MODULE_INDEX_MIN, | ||||||
|  							   SFP_TEMP_HIGH_WARN, |  							   SFP_TEMP_HIGH_WARN, | ||||||
| @@ -656,14 +678,14 @@ static int mlxsw_env_temp_event_set(struct mlxsw_core *mlxsw_core, | @@ -654,14 +676,14 @@ static int mlxsw_env_temp_event_set(struct mlxsw_core *mlxsw_core, | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static int mlxsw_env_module_temp_event_enable(struct mlxsw_core *mlxsw_core, |  static int mlxsw_env_module_temp_event_enable(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -410,7 +410,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  		if (err) |  		if (err) | ||||||
|  			return err; |  			return err; | ||||||
|   |   | ||||||
| @@ -671,7 +693,8 @@ static int mlxsw_env_module_temp_event_enable(struct mlxsw_core *mlxsw_core, | @@ -669,7 +691,8 @@ static int mlxsw_env_module_temp_event_enable(struct mlxsw_core *mlxsw_core, | ||||||
|  			continue; |  			continue; | ||||||
|   |   | ||||||
|  		sensor_index = i + MLXSW_REG_MTMP_MODULE_INDEX_MIN; |  		sensor_index = i + MLXSW_REG_MTMP_MODULE_INDEX_MIN; | ||||||
| @@ -420,7 +420,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  		if (err) |  		if (err) | ||||||
|  			return err; |  			return err; | ||||||
|  	} |  	} | ||||||
| @@ -778,6 +801,7 @@ static void mlxsw_env_temp_warn_event_unregister(struct mlxsw_env *mlxsw_env) | @@ -776,6 +799,7 @@ static void mlxsw_env_temp_warn_event_unregister(struct mlxsw_env *mlxsw_env) | ||||||
|   |   | ||||||
|  struct mlxsw_env_module_plug_unplug_event { |  struct mlxsw_env_module_plug_unplug_event { | ||||||
|  	struct mlxsw_env *mlxsw_env; |  	struct mlxsw_env *mlxsw_env; | ||||||
| @@ -428,7 +428,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	u8 module; |  	u8 module; | ||||||
|  	struct work_struct work; |  	struct work_struct work; | ||||||
|  }; |  }; | ||||||
| @@ -798,7 +822,9 @@ static void mlxsw_env_pmpe_event_work(struct work_struct *work) | @@ -796,7 +820,9 @@ static void mlxsw_env_pmpe_event_work(struct work_struct *work) | ||||||
|  	mlxsw_env->module_info[event->module].is_overheat = false; |  	mlxsw_env->module_info[event->module].is_overheat = false; | ||||||
|  	mutex_unlock(&mlxsw_env->module_info_lock); |  	mutex_unlock(&mlxsw_env->module_info_lock); | ||||||
|   |   | ||||||
| @@ -439,7 +439,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  					       &has_temp_sensor); |  					       &has_temp_sensor); | ||||||
|  	/* Do not disable events on modules without sensors or faulty sensors |  	/* Do not disable events on modules without sensors or faulty sensors | ||||||
|  	 * because FW returns errors. |  	 * because FW returns errors. | ||||||
| @@ -810,7 +836,8 @@ static void mlxsw_env_pmpe_event_work(struct work_struct *work) | @@ -808,7 +834,8 @@ static void mlxsw_env_pmpe_event_work(struct work_struct *work) | ||||||
|  		goto out; |  		goto out; | ||||||
|   |   | ||||||
|  	sensor_index = event->module + MLXSW_REG_MTMP_MODULE_INDEX_MIN; |  	sensor_index = event->module + MLXSW_REG_MTMP_MODULE_INDEX_MIN; | ||||||
| @@ -449,7 +449,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|   |   | ||||||
|  out: |  out: | ||||||
|  	kfree(event); |  	kfree(event); | ||||||
| @@ -837,6 +864,7 @@ mlxsw_env_pmpe_listener_func(const struct mlxsw_reg_info *reg, char *pmpe_pl, | @@ -835,6 +862,7 @@ mlxsw_env_pmpe_listener_func(const struct mlxsw_reg_info *reg, char *pmpe_pl, | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
|  	event->mlxsw_env = mlxsw_env; |  	event->mlxsw_env = mlxsw_env; | ||||||
| @@ -457,7 +457,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	event->module = module; |  	event->module = module; | ||||||
|  	INIT_WORK(&event->work, mlxsw_env_pmpe_event_work); |  	INIT_WORK(&event->work, mlxsw_env_pmpe_event_work); | ||||||
|  	mlxsw_core_schedule_work(&event->work); |  	mlxsw_core_schedule_work(&event->work); | ||||||
| @@ -871,14 +899,14 @@ mlxsw_env_module_plug_event_unregister(struct mlxsw_env *mlxsw_env) | @@ -869,14 +897,14 @@ mlxsw_env_module_plug_event_unregister(struct mlxsw_env *mlxsw_env) | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
|  mlxsw_env_module_oper_state_event_enable(struct mlxsw_core *mlxsw_core, |  mlxsw_env_module_oper_state_event_enable(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -474,7 +474,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  		mlxsw_reg_pmaos_e_set(pmaos_pl, |  		mlxsw_reg_pmaos_e_set(pmaos_pl, | ||||||
|  				      MLXSW_REG_PMAOS_E_GENERATE_EVENT); |  				      MLXSW_REG_PMAOS_E_GENERATE_EVENT); | ||||||
|  		mlxsw_reg_pmaos_ee_set(pmaos_pl, true); |  		mlxsw_reg_pmaos_ee_set(pmaos_pl, true); | ||||||
| @@ -890,8 +918,8 @@ mlxsw_env_module_oper_state_event_enable(struct mlxsw_core *mlxsw_core, | @@ -888,8 +916,8 @@ mlxsw_env_module_oper_state_event_enable(struct mlxsw_core *mlxsw_core, | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  int |  int | ||||||
| @@ -485,7 +485,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -903,7 +931,8 @@ mlxsw_env_module_overheat_counter_get(struct mlxsw_core *mlxsw_core, u8 module, | @@ -901,7 +929,8 @@ mlxsw_env_module_overheat_counter_get(struct mlxsw_core *mlxsw_core, u8 module, | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_module_overheat_counter_get); |  EXPORT_SYMBOL(mlxsw_env_module_overheat_counter_get); | ||||||
|   |   | ||||||
| @@ -495,7 +495,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -913,7 +942,8 @@ void mlxsw_env_module_port_map(struct mlxsw_core *mlxsw_core, u8 module) | @@ -911,7 +940,8 @@ void mlxsw_env_module_port_map(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_module_port_map); |  EXPORT_SYMBOL(mlxsw_env_module_port_map); | ||||||
|   |   | ||||||
| @@ -505,7 +505,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -923,7 +953,8 @@ void mlxsw_env_module_port_unmap(struct mlxsw_core *mlxsw_core, u8 module) | @@ -921,7 +951,8 @@ void mlxsw_env_module_port_unmap(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_module_port_unmap); |  EXPORT_SYMBOL(mlxsw_env_module_port_unmap); | ||||||
|   |   | ||||||
| @@ -515,7 +515,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|  	int err = 0; |  	int err = 0; | ||||||
| @@ -940,8 +971,8 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 module) | @@ -938,8 +969,8 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  	/* Transition to high power mode following first port using the module |  	/* Transition to high power mode following first port using the module | ||||||
|  	 * being put administratively up. |  	 * being put administratively up. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -526,7 +526,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		goto out_unlock; |  		goto out_unlock; | ||||||
|   |   | ||||||
| @@ -953,7 +984,8 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 module) | @@ -951,7 +982,8 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_module_port_up); |  EXPORT_SYMBOL(mlxsw_env_module_port_up); | ||||||
|   |   | ||||||
| @@ -536,7 +536,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
|   |   | ||||||
| @@ -971,7 +1003,8 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 module) | @@ -969,7 +1001,8 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 module) | ||||||
|  	/* Transition to low power mode following last port using the module |  	/* Transition to low power mode following last port using the module | ||||||
|  	 * being put administratively down. |  	 * being put administratively down. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -546,7 +546,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|   |   | ||||||
|  out_unlock: |  out_unlock: | ||||||
|  	mutex_unlock(&mlxsw_env->module_info_lock); |  	mutex_unlock(&mlxsw_env->module_info_lock); | ||||||
| @@ -1016,12 +1049,13 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -1014,12 +1047,13 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_module_plug_event_register; |  		goto err_module_plug_event_register; | ||||||
|   |   | ||||||
| @@ -563,7 +563,7 @@ index 45058d4cf..fefb9bb02 100644 | |||||||
|  		goto err_temp_event_enable; |  		goto err_temp_event_enable; | ||||||
|   |   | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.h b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.h b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | ||||||
| index da121b1a8..03d027870 100644 | index da121b1a84b4..03d027870d65 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | ||||||
| @@ -9,46 +9,55 @@ | @@ -9,46 +9,55 @@ | ||||||
| @@ -640,7 +640,7 @@ index da121b1a8..03d027870 100644 | |||||||
|  int mlxsw_env_init(struct mlxsw_core *core, struct mlxsw_env **p_env); |  int mlxsw_env_init(struct mlxsw_core *core, struct mlxsw_env **p_env); | ||||||
|  void mlxsw_env_fini(struct mlxsw_env *env); |  void mlxsw_env_fini(struct mlxsw_env *env); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 2bc4c4556..5df54a5bf 100644 | index 2bc4c4556895..5df54a5bf292 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -311,8 +311,9 @@ static int mlxsw_hwmon_module_temp_critical_get(struct device *dev, | @@ -311,8 +311,9 @@ static int mlxsw_hwmon_module_temp_critical_get(struct device *dev, | ||||||
| @@ -668,10 +668,10 @@ index 2bc4c4556..5df54a5bf 100644 | |||||||
|  		dev_err(dev, "Failed to query module temperature thresholds\n"); |  		dev_err(dev, "Failed to query module temperature thresholds\n"); | ||||||
|  		return err; |  		return err; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index 56e0291f1..3f9062f1c 100644 | index 21a7415c8ef5..4f84c4bb66af 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -159,13 +159,13 @@ mlxsw_thermal_module_trips_update(struct device *dev, struct mlxsw_core *core, | @@ -151,13 +151,13 @@ mlxsw_thermal_module_trips_update(struct device *dev, struct mlxsw_core *core, | ||||||
|  	 * EEPROM if we got valid thresholds from MTMP. |  	 * EEPROM if we got valid thresholds from MTMP. | ||||||
|  	 */ |  	 */ | ||||||
|  	if (!emerg_temp || !crit_temp) { |  	if (!emerg_temp || !crit_temp) { | ||||||
| @@ -688,7 +688,7 @@ index 56e0291f1..3f9062f1c 100644 | |||||||
|  							   &emerg_temp); |  							   &emerg_temp); | ||||||
|  		if (err) |  		if (err) | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| index b2ffcfda8..104f1ba02 100644 | index b2ffcfda8374..104f1ba0242f 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| @@ -59,7 +59,8 @@ static int mlxsw_m_port_open(struct net_device *dev) | @@ -59,7 +59,8 @@ static int mlxsw_m_port_open(struct net_device *dev) | ||||||
| @@ -769,7 +769,7 @@ index b2ffcfda8..104f1ba02 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| index 9f068c030..5066fcc46 100644 | index 4110e15c22c7..e0424f490c6f 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| @@ -1377,7 +1377,7 @@ static int mlxsw_sp_port_overheat_init_val_set(struct mlxsw_sp_port *mlxsw_sp_po | @@ -1377,7 +1377,7 @@ static int mlxsw_sp_port_overheat_init_val_set(struct mlxsw_sp_port *mlxsw_sp_po | ||||||
| @@ -782,7 +782,7 @@ index 9f068c030..5066fcc46 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | ||||||
| index 369b9d0dc..c9298b236 100644 | index 369b9d0dc5d4..c9298b236182 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | ||||||
| @@ -566,7 +566,7 @@ mlxsw_sp_port_get_transceiver_overheat_stats(struct mlxsw_sp_port *mlxsw_sp_port | @@ -566,7 +566,7 @@ mlxsw_sp_port_get_transceiver_overheat_stats(struct mlxsw_sp_port *mlxsw_sp_port | ||||||
| @@ -824,5 +824,5 @@ index 369b9d0dc..c9298b236 100644 | |||||||
|   |   | ||||||
|  static int |  static int | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 8e7c606209b97b89b58d21a2c33c319ade1ba867 Mon Sep 17 00:00:00 2001 | From fe0bf4454c709fa1ddb5fa105e88f2d57cb5ef5a Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:27 +0200 | Date: Tue, 14 Dec 2021 10:57:27 +0200 | ||||||
| Subject: [PATCH] mlxsw: core: Extend port module data structures for line | Subject: [PATCH backport 5.10 113/182] mlxsw: core: Extend port module data | ||||||
|  cards |  structures for line cards | ||||||
|  |  | ||||||
| The port module core is tasked with module operations such as setting | The port module core is tasked with module operations such as setting | ||||||
| power mode policy and reset. The per-module information is currently | power mode policy and reset. The per-module information is currently | ||||||
| @@ -21,7 +21,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 157 insertions(+), 66 deletions(-) |  1 file changed, 157 insertions(+), 66 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index fefb9bb02..2a6630547 100644 | index fc4468a6b0f6..606d89b6f50f 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -20,13 +20,19 @@ struct mlxsw_env_module_info { | @@ -20,13 +20,19 @@ struct mlxsw_env_module_info { | ||||||
| @@ -47,7 +47,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  static int |  static int | ||||||
|  mlxsw_env_validate_cable_ident(struct mlxsw_core *core, u8 slot_index, int id, |  mlxsw_env_validate_cable_ident(struct mlxsw_core *core, u8 slot_index, int id, | ||||||
|  			       bool *qsfp, bool *cmis) |  			       bool *qsfp, bool *cmis) | ||||||
| @@ -407,6 +413,15 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, | @@ -405,6 +411,15 @@ mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_get_module_eeprom_by_page); |  EXPORT_SYMBOL(mlxsw_env_get_module_eeprom_by_page); | ||||||
|   |   | ||||||
| @@ -63,7 +63,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  static int mlxsw_env_module_reset(struct mlxsw_core *mlxsw_core, u8 slot_index, |  static int mlxsw_env_module_reset(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  				  u8 module) |  				  u8 module) | ||||||
|  { |  { | ||||||
| @@ -423,6 +438,7 @@ int mlxsw_env_reset_module(struct net_device *netdev, | @@ -421,6 +436,7 @@ int mlxsw_env_reset_module(struct net_device *netdev, | ||||||
|  			   u8 module, u32 *flags) |  			   u8 module, u32 *flags) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -71,7 +71,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	u32 req = *flags; |  	u32 req = *flags; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -430,15 +446,16 @@ int mlxsw_env_reset_module(struct net_device *netdev, | @@ -428,15 +444,16 @@ int mlxsw_env_reset_module(struct net_device *netdev, | ||||||
|  	    !(req & (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT))) |  	    !(req & (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT))) | ||||||
|  		return 0; |  		return 0; | ||||||
|   |   | ||||||
| @@ -91,7 +91,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	    !(req & (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT))) { |  	    !(req & (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT))) { | ||||||
|  		netdev_err(netdev, "Cannot reset module without \"phy-shared\" flag when shared by multiple ports\n"); |  		netdev_err(netdev, "Cannot reset module without \"phy-shared\" flag when shared by multiple ports\n"); | ||||||
|  		err = -EINVAL; |  		err = -EINVAL; | ||||||
| @@ -454,7 +471,7 @@ int mlxsw_env_reset_module(struct net_device *netdev, | @@ -452,7 +469,7 @@ int mlxsw_env_reset_module(struct net_device *netdev, | ||||||
|  	*flags &= ~(ETH_RESET_PHY | (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT)); |  	*flags &= ~(ETH_RESET_PHY | (ETH_RESET_PHY << ETH_RESET_SHARED_SHIFT)); | ||||||
|   |   | ||||||
|  out: |  out: | ||||||
| @@ -100,7 +100,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_reset_module); |  EXPORT_SYMBOL(mlxsw_env_reset_module); | ||||||
| @@ -466,13 +483,15 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -464,13 +481,15 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  				struct netlink_ext_ack *extack) |  				struct netlink_ext_ack *extack) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -118,7 +118,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|   |   | ||||||
|  	mlxsw_reg_mcion_pack(mcion_pl, slot_index, module); |  	mlxsw_reg_mcion_pack(mcion_pl, slot_index, module); | ||||||
|  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcion), mcion_pl); |  	err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mcion), mcion_pl); | ||||||
| @@ -491,7 +510,7 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -489,7 +508,7 @@ mlxsw_env_get_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  		params->mode = ETHTOOL_MODULE_POWER_MODE_HIGH; |  		params->mode = ETHTOOL_MODULE_POWER_MODE_HIGH; | ||||||
|   |   | ||||||
|  out: |  out: | ||||||
| @@ -127,7 +127,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_get_module_power_mode); |  EXPORT_SYMBOL(mlxsw_env_get_module_power_mode); | ||||||
| @@ -573,6 +592,7 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -571,6 +590,7 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  				struct netlink_ext_ack *extack) |  				struct netlink_ext_ack *extack) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -135,7 +135,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	bool low_power; |  	bool low_power; | ||||||
|  	int err = 0; |  	int err = 0; | ||||||
|   |   | ||||||
| @@ -582,13 +602,14 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -580,13 +600,14 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  		return -EOPNOTSUPP; |  		return -EOPNOTSUPP; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -153,7 +153,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  		goto out_set_policy; |  		goto out_set_policy; | ||||||
|   |   | ||||||
|  	low_power = policy == ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO; |  	low_power = policy == ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO; | ||||||
| @@ -598,9 +619,9 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -596,9 +617,9 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  		goto out; |  		goto out; | ||||||
|   |   | ||||||
|  out_set_policy: |  out_set_policy: | ||||||
| @@ -165,7 +165,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_set_module_power_mode); |  EXPORT_SYMBOL(mlxsw_env_set_module_power_mode); | ||||||
| @@ -711,6 +732,7 @@ struct mlxsw_env_module_temp_warn_event { | @@ -709,6 +730,7 @@ struct mlxsw_env_module_temp_warn_event { | ||||||
|  static void mlxsw_env_mtwe_event_work(struct work_struct *work) |  static void mlxsw_env_mtwe_event_work(struct work_struct *work) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env_module_temp_warn_event *event; |  	struct mlxsw_env_module_temp_warn_event *event; | ||||||
| @@ -173,7 +173,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	struct mlxsw_env *mlxsw_env; |  	struct mlxsw_env *mlxsw_env; | ||||||
|  	int i, sensor_warning; |  	int i, sensor_warning; | ||||||
|  	bool is_overheat; |  	bool is_overheat; | ||||||
| @@ -719,7 +741,7 @@ static void mlxsw_env_mtwe_event_work(struct work_struct *work) | @@ -717,7 +739,7 @@ static void mlxsw_env_mtwe_event_work(struct work_struct *work) | ||||||
|  			     work); |  			     work); | ||||||
|  	mlxsw_env = event->mlxsw_env; |  	mlxsw_env = event->mlxsw_env; | ||||||
|   |   | ||||||
| @@ -182,7 +182,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  		/* 64-127 of sensor_index are mapped to the port modules |  		/* 64-127 of sensor_index are mapped to the port modules | ||||||
|  		 * sequentially (module 0 is mapped to sensor_index 64, |  		 * sequentially (module 0 is mapped to sensor_index 64, | ||||||
|  		 * module 1 to sensor_index 65 and so on) |  		 * module 1 to sensor_index 65 and so on) | ||||||
| @@ -727,9 +749,10 @@ static void mlxsw_env_mtwe_event_work(struct work_struct *work) | @@ -725,9 +747,10 @@ static void mlxsw_env_mtwe_event_work(struct work_struct *work) | ||||||
|  		sensor_warning = |  		sensor_warning = | ||||||
|  			mlxsw_reg_mtwe_sensor_warning_get(event->mtwe_pl, |  			mlxsw_reg_mtwe_sensor_warning_get(event->mtwe_pl, | ||||||
|  							  i + MLXSW_REG_MTMP_MODULE_INDEX_MIN); |  							  i + MLXSW_REG_MTMP_MODULE_INDEX_MIN); | ||||||
| @@ -196,7 +196,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|   |   | ||||||
|  		if ((is_overheat && sensor_warning) || |  		if ((is_overheat && sensor_warning) || | ||||||
|  		    (!is_overheat && !sensor_warning)) { |  		    (!is_overheat && !sensor_warning)) { | ||||||
| @@ -737,21 +760,21 @@ static void mlxsw_env_mtwe_event_work(struct work_struct *work) | @@ -735,21 +758,21 @@ static void mlxsw_env_mtwe_event_work(struct work_struct *work) | ||||||
|  			 * warning OR current state in "no warning" and MTWE |  			 * warning OR current state in "no warning" and MTWE | ||||||
|  			 * does not report warning. |  			 * does not report warning. | ||||||
|  			 */ |  			 */ | ||||||
| @@ -224,7 +224,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -809,6 +832,7 @@ struct mlxsw_env_module_plug_unplug_event { | @@ -807,6 +830,7 @@ struct mlxsw_env_module_plug_unplug_event { | ||||||
|  static void mlxsw_env_pmpe_event_work(struct work_struct *work) |  static void mlxsw_env_pmpe_event_work(struct work_struct *work) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env_module_plug_unplug_event *event; |  	struct mlxsw_env_module_plug_unplug_event *event; | ||||||
| @@ -232,7 +232,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	struct mlxsw_env *mlxsw_env; |  	struct mlxsw_env *mlxsw_env; | ||||||
|  	bool has_temp_sensor; |  	bool has_temp_sensor; | ||||||
|  	u16 sensor_index; |  	u16 sensor_index; | ||||||
| @@ -818,9 +842,12 @@ static void mlxsw_env_pmpe_event_work(struct work_struct *work) | @@ -816,9 +840,12 @@ static void mlxsw_env_pmpe_event_work(struct work_struct *work) | ||||||
|  			     work); |  			     work); | ||||||
|  	mlxsw_env = event->mlxsw_env; |  	mlxsw_env = event->mlxsw_env; | ||||||
|   |   | ||||||
| @@ -248,7 +248,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|   |   | ||||||
|  	err = mlxsw_env_module_has_temp_sensor(mlxsw_env->core, |  	err = mlxsw_env_module_has_temp_sensor(mlxsw_env->core, | ||||||
|  					       event->slot_index, |  					       event->slot_index, | ||||||
| @@ -847,12 +874,14 @@ static void | @@ -845,12 +872,14 @@ static void | ||||||
|  mlxsw_env_pmpe_listener_func(const struct mlxsw_reg_info *reg, char *pmpe_pl, |  mlxsw_env_pmpe_listener_func(const struct mlxsw_reg_info *reg, char *pmpe_pl, | ||||||
|  			     void *priv) |  			     void *priv) | ||||||
|  { |  { | ||||||
| @@ -264,7 +264,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
|  	module_status = mlxsw_reg_pmpe_module_status_get(pmpe_pl); |  	module_status = mlxsw_reg_pmpe_module_status_get(pmpe_pl); | ||||||
| @@ -864,7 +893,7 @@ mlxsw_env_pmpe_listener_func(const struct mlxsw_reg_info *reg, char *pmpe_pl, | @@ -862,7 +891,7 @@ mlxsw_env_pmpe_listener_func(const struct mlxsw_reg_info *reg, char *pmpe_pl, | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
|  	event->mlxsw_env = mlxsw_env; |  	event->mlxsw_env = mlxsw_env; | ||||||
| @@ -273,7 +273,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	event->module = module; |  	event->module = module; | ||||||
|  	INIT_WORK(&event->work, mlxsw_env_pmpe_event_work); |  	INIT_WORK(&event->work, mlxsw_env_pmpe_event_work); | ||||||
|  	mlxsw_core_schedule_work(&event->work); |  	mlxsw_core_schedule_work(&event->work); | ||||||
| @@ -922,10 +951,12 @@ mlxsw_env_module_overheat_counter_get(struct mlxsw_core *mlxsw_core, u8 slot_ind | @@ -920,10 +949,12 @@ mlxsw_env_module_overheat_counter_get(struct mlxsw_core *mlxsw_core, u8 slot_ind | ||||||
|  				      u8 module, u64 *p_counter) |  				      u8 module, u64 *p_counter) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -289,7 +289,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|   |   | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
| @@ -935,10 +966,12 @@ void mlxsw_env_module_port_map(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -933,10 +964,12 @@ void mlxsw_env_module_port_map(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  			       u8 module) |  			       u8 module) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -305,7 +305,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_module_port_map); |  EXPORT_SYMBOL(mlxsw_env_module_port_map); | ||||||
|   |   | ||||||
| @@ -946,10 +979,12 @@ void mlxsw_env_module_port_unmap(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -944,10 +977,12 @@ void mlxsw_env_module_port_unmap(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  				 u8 module) |  				 u8 module) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -321,7 +321,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_module_port_unmap); |  EXPORT_SYMBOL(mlxsw_env_module_port_unmap); | ||||||
|   |   | ||||||
| @@ -957,15 +992,17 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -955,15 +990,17 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  			     u8 module) |  			     u8 module) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -342,7 +342,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  		goto out_inc; |  		goto out_inc; | ||||||
|   |   | ||||||
|  	/* Transition to high power mode following first port using the module |  	/* Transition to high power mode following first port using the module | ||||||
| @@ -977,9 +1014,9 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -975,9 +1012,9 @@ int mlxsw_env_module_port_up(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  		goto out_unlock; |  		goto out_unlock; | ||||||
|   |   | ||||||
|  out_inc: |  out_inc: | ||||||
| @@ -354,7 +354,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_module_port_up); |  EXPORT_SYMBOL(mlxsw_env_module_port_up); | ||||||
| @@ -988,16 +1025,18 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -986,16 +1023,18 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  				u8 module) |  				u8 module) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); |  	struct mlxsw_env *mlxsw_env = mlxsw_core_env(mlxsw_core); | ||||||
| @@ -377,7 +377,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  		goto out_unlock; |  		goto out_unlock; | ||||||
|   |   | ||||||
|  	/* Transition to low power mode following last port using the module |  	/* Transition to low power mode following last port using the module | ||||||
| @@ -1007,38 +1046,83 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -1005,38 +1044,83 @@ void mlxsw_env_module_port_down(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  					  NULL); |  					  NULL); | ||||||
|   |   | ||||||
|  out_unlock: |  out_unlock: | ||||||
| @@ -475,7 +475,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	*p_env = env; |  	*p_env = env; | ||||||
|   |   | ||||||
|  	err = mlxsw_env_temp_warn_event_register(mlxsw_core); |  	err = mlxsw_env_temp_warn_event_register(mlxsw_core); | ||||||
| @@ -1049,13 +1133,17 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -1047,13 +1131,17 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_module_plug_event_register; |  		goto err_module_plug_event_register; | ||||||
|   |   | ||||||
| @@ -495,7 +495,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_temp_event_enable; |  		goto err_temp_event_enable; | ||||||
|   |   | ||||||
| @@ -1067,7 +1155,9 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -1065,7 +1153,9 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  err_module_plug_event_register: |  err_module_plug_event_register: | ||||||
|  	mlxsw_env_temp_warn_event_unregister(env); |  	mlxsw_env_temp_warn_event_unregister(env); | ||||||
|  err_temp_warn_event_register: |  err_temp_warn_event_register: | ||||||
| @@ -506,7 +506,7 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	kfree(env); |  	kfree(env); | ||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
| @@ -1078,6 +1168,7 @@ void mlxsw_env_fini(struct mlxsw_env *env) | @@ -1076,6 +1166,7 @@ void mlxsw_env_fini(struct mlxsw_env *env) | ||||||
|  	/* Make sure there is no more event work scheduled. */ |  	/* Make sure there is no more event work scheduled. */ | ||||||
|  	mlxsw_core_flush_owq(); |  	mlxsw_core_flush_owq(); | ||||||
|  	mlxsw_env_temp_warn_event_unregister(env); |  	mlxsw_env_temp_warn_event_unregister(env); | ||||||
| @@ -516,5 +516,5 @@ index fefb9bb02..2a6630547 100644 | |||||||
|  	kfree(env); |  	kfree(env); | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 9eb9b3172a238d5818d2925e2db6b0f686b31411 Mon Sep 17 00:00:00 2001 | From 3c3be37747cb938fff1178f88d611eb00159297b Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:28 +0200 | Date: Tue, 14 Dec 2021 10:57:28 +0200 | ||||||
| Subject: [PATCH] mlxsw: core: Move port module events enablement to a separate | Subject: [PATCH backport 5.10 114/182] mlxsw: core: Move port module events | ||||||
|  function |  enablement to a separate function | ||||||
|  |  | ||||||
| Use a separate function for enablement of port module events such | Use a separate function for enablement of port module events such | ||||||
| plug/unplug and temperature threshold crossing. The motivation is to | plug/unplug and temperature threshold crossing. The motivation is to | ||||||
| @@ -15,10 +15,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 34 insertions(+), 10 deletions(-) |  1 file changed, 34 insertions(+), 10 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 2a6630547..94d44db1a 100644 | index 606d89b6f50f..4553dfa68f96 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -1089,6 +1089,32 @@ static void mlxsw_env_line_cards_free(struct mlxsw_env *env) | @@ -1087,6 +1087,32 @@ static void mlxsw_env_line_cards_free(struct mlxsw_env *env) | ||||||
|  		kfree(env->line_cards[i]); |  		kfree(env->line_cards[i]); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -51,7 +51,7 @@ index 2a6630547..94d44db1a 100644 | |||||||
|  int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) |  int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  { |  { | ||||||
|  	u8 module_count, num_of_slots, max_module_count; |  	u8 module_count, num_of_slots, max_module_count; | ||||||
| @@ -1137,20 +1163,17 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -1135,20 +1161,17 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  	 * is to be set after line card is activated. |  	 * is to be set after line card is activated. | ||||||
|  	 */ |  	 */ | ||||||
|  	env->line_cards[0]->module_count = num_of_slots ? 0 : module_count; |  	env->line_cards[0]->module_count = num_of_slots ? 0 : module_count; | ||||||
| @@ -79,7 +79,7 @@ index 2a6630547..94d44db1a 100644 | |||||||
|  	mlxsw_env_module_plug_event_unregister(env); |  	mlxsw_env_module_plug_event_unregister(env); | ||||||
|  err_module_plug_event_register: |  err_module_plug_event_register: | ||||||
|  	mlxsw_env_temp_warn_event_unregister(env); |  	mlxsw_env_temp_warn_event_unregister(env); | ||||||
| @@ -1164,6 +1187,7 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -1162,6 +1185,7 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|   |   | ||||||
|  void mlxsw_env_fini(struct mlxsw_env *env) |  void mlxsw_env_fini(struct mlxsw_env *env) | ||||||
|  { |  { | ||||||
| @@ -88,5 +88,5 @@ index 2a6630547..94d44db1a 100644 | |||||||
|  	/* Make sure there is no more event work scheduled. */ |  	/* Make sure there is no more event work scheduled. */ | ||||||
|  	mlxsw_core_flush_owq(); |  	mlxsw_core_flush_owq(); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 4d15dd7f69b89a370731b08cb3f13e5dd591c189 Mon Sep 17 00:00:00 2001 | From 1a451b46c16494cfa38bb47495ad632626502681 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:29 +0200 | Date: Tue, 14 Dec 2021 10:57:29 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_hwmon: Split gearbox initialization | Subject: [PATCH backport 5.10 115/182] mlxsw: core_hwmon: Split gearbox | ||||||
|  |  initialization | ||||||
|  |  | ||||||
| Split gearbox initialization in two functions - the first one is to be | Split gearbox initialization in two functions - the first one is to be | ||||||
| used for gearbox configuration validation, the second for creation of | used for gearbox configuration validation, the second for creation of | ||||||
| @@ -24,7 +25,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 33 insertions(+), 10 deletions(-) |  1 file changed, 33 insertions(+), 10 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 5df54a5bf..7061c18b7 100644 | index 5df54a5bf292..7061c18b7edc 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -700,13 +700,11 @@ static int mlxsw_hwmon_module_init(struct mlxsw_hwmon *mlxsw_hwmon) | @@ -700,13 +700,11 @@ static int mlxsw_hwmon_module_init(struct mlxsw_hwmon *mlxsw_hwmon) | ||||||
| @@ -117,5 +118,5 @@ index 5df54a5bf..7061c18b7 100644 | |||||||
|  	kfree(mlxsw_hwmon); |  	kfree(mlxsw_hwmon); | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 9780cd7afe3455d0ee428f5009514780e858c133 Mon Sep 17 00:00:00 2001 | From a18e5112ed12150e245e275e187ecd6d87d66b0e Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:30 +0200 | Date: Tue, 14 Dec 2021 10:57:30 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_hwmon: Extend internal structures to support | Subject: [PATCH backport 5.10 116/182] mlxsw: core_hwmon: Extend internal | ||||||
|  multi hwmon objects |  structures to support multi hwmon objects | ||||||
|  |  | ||||||
| Currently, mlxsw supports a single hwmon device and registers it with | Currently, mlxsw supports a single hwmon device and registers it with | ||||||
| attributes corresponding to the various objects found on the main | attributes corresponding to the various objects found on the main | ||||||
| @@ -32,7 +32,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 112 insertions(+), 80 deletions(-) |  1 file changed, 112 insertions(+), 80 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 7061c18b7..31b370862 100644 | index 7061c18b7edc..31b370862131 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -27,7 +27,7 @@ | @@ -27,7 +27,7 @@ | ||||||
| @@ -537,5 +537,5 @@ index 7061c18b7..31b370862 100644 | |||||||
|  	kfree(mlxsw_hwmon); |  	kfree(mlxsw_hwmon); | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From aa8cdb2df37cbfb7bb37f90879d385428e32ae23 Mon Sep 17 00:00:00 2001 | From 15f2f79bffb77324a389b7e174f32406924d3a3a Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:31 +0200 | Date: Tue, 14 Dec 2021 10:57:31 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_hwmon: Introduce slot parameter in hwmon | Subject: [PATCH backport 5.10 117/182] mlxsw: core_hwmon: Introduce slot | ||||||
|  interfaces |  parameter in hwmon interfaces | ||||||
|  |  | ||||||
| Add 'slot' parameter to 'mlxsw_hwmon_dev' structure. Use this parameter | Add 'slot' parameter to 'mlxsw_hwmon_dev' structure. Use this parameter | ||||||
| in mlxsw_reg_mtmp_pack(), mlxsw_reg_mtbr_pack() and | in mlxsw_reg_mtmp_pack(), mlxsw_reg_mtbr_pack() and | ||||||
| @@ -18,7 +18,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 18 insertions(+), 8 deletions(-) |  1 file changed, 18 insertions(+), 8 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 31b370862..0d7edabf1 100644 | index 31b370862131..0d7edabf19a4 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -50,6 +50,7 @@ struct mlxsw_hwmon_dev { | @@ -50,6 +50,7 @@ struct mlxsw_hwmon_dev { | ||||||
| @@ -125,5 +125,5 @@ index 31b370862..0d7edabf1 100644 | |||||||
|  	err = mlxsw_hwmon_temp_init(mlxsw_hwmon->main); |  	err = mlxsw_hwmon_temp_init(mlxsw_hwmon->main); | ||||||
|  	if (err) |  	if (err) | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 94d3b63c64fc202bfe525cc3b500c23e92d38fbf Mon Sep 17 00:00:00 2001 | From c627292817e68e29abdf5fd9be93340251d71f7a Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:32 +0200 | Date: Tue, 14 Dec 2021 10:57:32 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_hwmon: Extend hwmon device with gearbox mapping | Subject: [PATCH backport 5.10 118/182] mlxsw: core_hwmon: Extend hwmon device | ||||||
|  field |  with gearbox mapping field | ||||||
|  |  | ||||||
| Add gearbox mapping field to 'mlxsw_hwmon_dev' structure. It should | Add gearbox mapping field to 'mlxsw_hwmon_dev' structure. It should | ||||||
| provide the mapping for gearbox sensor indexes, given gearbox number. | provide the mapping for gearbox sensor indexes, given gearbox number. | ||||||
| @@ -17,7 +17,7 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 31 insertions(+), 9 deletions(-) |  1 file changed, 31 insertions(+), 9 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 0d7edabf1..6af23f472 100644 | index 0d7edabf19a4..6af23f4724e4 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -32,10 +32,11 @@ struct mlxsw_hwmon_attr { | @@ -32,10 +32,11 @@ struct mlxsw_hwmon_attr { | ||||||
| @@ -132,5 +132,5 @@ index 0d7edabf1..6af23f472 100644 | |||||||
|  				    sensor_index, true, true); |  				    sensor_index, true, true); | ||||||
|  		err = mlxsw_reg_write(mlxsw_hwmon->core, |  		err = mlxsw_reg_write(mlxsw_hwmon->core, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From ab0f9b9dd1f7326242eee0b0a643d6d34e557ae3 Mon Sep 17 00:00:00 2001 | From 8851888004e82e73629f031e8af592c36b12c469 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:33 +0200 | Date: Tue, 14 Dec 2021 10:57:33 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Extend internal structures to support | Subject: [PATCH backport 5.10 119/182] mlxsw: core_thermal: Extend internal | ||||||
|  multi thermal areas |  structures to support multi thermal areas | ||||||
|  |  | ||||||
| Introduce intermediate level for thermal zones areas. | Introduce intermediate level for thermal zones areas. | ||||||
| Currently all thermal zones are associated with thermal objects located | Currently all thermal zones are associated with thermal objects located | ||||||
| @@ -29,10 +29,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 83 insertions(+), 51 deletions(-) |  1 file changed, 83 insertions(+), 51 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index 3f9062f1c..77a484a55 100644 | index 4f84c4bb66af..5f8b1e92475b 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -91,6 +91,15 @@ struct mlxsw_thermal_module { | @@ -83,6 +83,15 @@ struct mlxsw_thermal_module { | ||||||
|  	struct thermal_zone_device *tzdev; |  	struct thermal_zone_device *tzdev; | ||||||
|  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; |  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; | ||||||
|  	int module; /* Module or gearbox number */ |  	int module; /* Module or gearbox number */ | ||||||
| @@ -48,7 +48,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  struct mlxsw_thermal { |  struct mlxsw_thermal { | ||||||
| @@ -101,10 +110,7 @@ struct mlxsw_thermal { | @@ -93,10 +102,7 @@ struct mlxsw_thermal { | ||||||
|  	struct thermal_cooling_device *cdevs[MLXSW_MFCR_PWMS_MAX]; |  	struct thermal_cooling_device *cdevs[MLXSW_MFCR_PWMS_MAX]; | ||||||
|  	u8 cooling_levels[MLXSW_THERMAL_MAX_STATE + 1]; |  	u8 cooling_levels[MLXSW_THERMAL_MAX_STATE + 1]; | ||||||
|  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; |  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; | ||||||
| @@ -60,7 +60,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  	unsigned int tz_highest_score; |  	unsigned int tz_highest_score; | ||||||
|  	struct thermal_zone_device *tz_highest_dev; |  	struct thermal_zone_device *tz_highest_dev; | ||||||
|  }; |  }; | ||||||
| @@ -159,13 +165,15 @@ mlxsw_thermal_module_trips_update(struct device *dev, struct mlxsw_core *core, | @@ -151,13 +157,15 @@ mlxsw_thermal_module_trips_update(struct device *dev, struct mlxsw_core *core, | ||||||
|  	 * EEPROM if we got valid thresholds from MTMP. |  	 * EEPROM if we got valid thresholds from MTMP. | ||||||
|  	 */ |  	 */ | ||||||
|  	if (!emerg_temp || !crit_temp) { |  	if (!emerg_temp || !crit_temp) { | ||||||
| @@ -78,7 +78,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  							   SFP_TEMP_HIGH_ALARM, |  							   SFP_TEMP_HIGH_ALARM, | ||||||
|  							   &emerg_temp); |  							   &emerg_temp); | ||||||
|  		if (err) |  		if (err) | ||||||
| @@ -432,15 +440,16 @@ static int mlxsw_thermal_module_unbind(struct thermal_zone_device *tzdev, | @@ -424,15 +432,16 @@ static int mlxsw_thermal_module_unbind(struct thermal_zone_device *tzdev, | ||||||
|   |   | ||||||
|  static void |  static void | ||||||
|  mlxsw_thermal_module_temp_and_thresholds_get(struct mlxsw_core *core, |  mlxsw_thermal_module_temp_and_thresholds_get(struct mlxsw_core *core, | ||||||
| @@ -98,7 +98,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) { |  	if (err) { | ||||||
|  		/* Set temperature and thresholds to zero to avoid passing |  		/* Set temperature and thresholds to zero to avoid passing | ||||||
| @@ -471,6 +480,7 @@ static int mlxsw_thermal_module_temp_get(struct thermal_zone_device *tzdev, | @@ -463,6 +472,7 @@ static int mlxsw_thermal_module_temp_get(struct thermal_zone_device *tzdev, | ||||||
|   |   | ||||||
|  	/* Read module temperature and thresholds. */ |  	/* Read module temperature and thresholds. */ | ||||||
|  	mlxsw_thermal_module_temp_and_thresholds_get(thermal->core, |  	mlxsw_thermal_module_temp_and_thresholds_get(thermal->core, | ||||||
| @@ -106,7 +106,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  						     sensor_index, &temp, |  						     sensor_index, &temp, | ||||||
|  						     &crit_temp, &emerg_temp); |  						     &crit_temp, &emerg_temp); | ||||||
|  	*p_temp = temp; |  	*p_temp = temp; | ||||||
| @@ -585,7 +595,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev, | @@ -577,7 +587,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev, | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
|  	index = MLXSW_REG_MTMP_GBOX_INDEX_MIN + tz->module; |  	index = MLXSW_REG_MTMP_GBOX_INDEX_MIN + tz->module; | ||||||
| @@ -115,7 +115,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|   |   | ||||||
|  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
|  	if (err) |  	if (err) | ||||||
| @@ -745,25 +755,28 @@ static void mlxsw_thermal_module_tz_fini(struct thermal_zone_device *tzdev) | @@ -704,25 +714,28 @@ static void mlxsw_thermal_module_tz_fini(struct thermal_zone_device *tzdev) | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
|  mlxsw_thermal_module_init(struct device *dev, struct mlxsw_core *core, |  mlxsw_thermal_module_init(struct device *dev, struct mlxsw_core *core, | ||||||
| @@ -147,7 +147,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  						     &crit_temp, &emerg_temp); |  						     &crit_temp, &emerg_temp); | ||||||
|  	/* Update trip point according to the module data. */ |  	/* Update trip point according to the module data. */ | ||||||
|  	return mlxsw_thermal_module_trips_update(dev, core, module_tz, |  	return mlxsw_thermal_module_trips_update(dev, core, module_tz, | ||||||
| @@ -781,34 +794,39 @@ static void mlxsw_thermal_module_fini(struct mlxsw_thermal_module *module_tz) | @@ -740,34 +753,39 @@ static void mlxsw_thermal_module_fini(struct mlxsw_thermal_module *module_tz) | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
|  mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, |  mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | ||||||
| @@ -198,7 +198,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  		if (!module_tz->parent) |  		if (!module_tz->parent) | ||||||
|  			continue; |  			continue; | ||||||
|  		err = mlxsw_thermal_module_tz_init(module_tz); |  		err = mlxsw_thermal_module_tz_init(module_tz); | ||||||
| @@ -820,20 +838,21 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | @@ -779,20 +797,21 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core, | ||||||
|   |   | ||||||
|  err_thermal_module_tz_init: |  err_thermal_module_tz_init: | ||||||
|  err_thermal_module_init: |  err_thermal_module_init: | ||||||
| @@ -227,7 +227,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
| @@ -869,7 +888,8 @@ mlxsw_thermal_gearbox_tz_fini(struct mlxsw_thermal_module *gearbox_tz) | @@ -828,7 +847,8 @@ mlxsw_thermal_gearbox_tz_fini(struct mlxsw_thermal_module *gearbox_tz) | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
|  mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, |  mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
| @@ -237,7 +237,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  { |  { | ||||||
|  	enum mlxsw_reg_mgpir_device_type device_type; |  	enum mlxsw_reg_mgpir_device_type device_type; | ||||||
|  	struct mlxsw_thermal_module *gearbox_tz; |  	struct mlxsw_thermal_module *gearbox_tz; | ||||||
| @@ -889,19 +909,20 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -848,19 +868,20 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	    !gbox_num) |  	    !gbox_num) | ||||||
|  		return 0; |  		return 0; | ||||||
|   |   | ||||||
| @@ -265,7 +265,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  		err = mlxsw_thermal_gearbox_tz_init(gearbox_tz); |  		err = mlxsw_thermal_gearbox_tz_init(gearbox_tz); | ||||||
|  		if (err) |  		if (err) | ||||||
|  			goto err_thermal_gearbox_tz_init; |  			goto err_thermal_gearbox_tz_init; | ||||||
| @@ -911,19 +932,20 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -870,19 +891,20 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|   |   | ||||||
|  err_thermal_gearbox_tz_init: |  err_thermal_gearbox_tz_init: | ||||||
|  	for (i--; i >= 0; i--) |  	for (i--; i >= 0; i--) | ||||||
| @@ -292,7 +292,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  int mlxsw_thermal_init(struct mlxsw_core *core, |  int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
| @@ -943,9 +965,16 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -902,9 +924,16 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  	if (!thermal) |  	if (!thermal) | ||||||
|  		return -ENOMEM; |  		return -ENOMEM; | ||||||
|   |   | ||||||
| @@ -309,7 +309,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|   |   | ||||||
|  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfcr), mfcr_pl); |  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfcr), mfcr_pl); | ||||||
|  	if (err) { |  	if (err) { | ||||||
| @@ -1012,11 +1041,11 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -970,11 +999,11 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  		goto err_thermal_zone_device_register; |  		goto err_thermal_zone_device_register; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -323,7 +323,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_thermal_gearboxes_init; |  		goto err_thermal_gearboxes_init; | ||||||
|   |   | ||||||
| @@ -1028,9 +1057,9 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -986,9 +1015,9 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
|  err_thermal_zone_device_enable: |  err_thermal_zone_device_enable: | ||||||
| @@ -335,7 +335,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  err_thermal_modules_init: |  err_thermal_modules_init: | ||||||
|  	if (thermal->tzdev) { |  	if (thermal->tzdev) { | ||||||
|  		thermal_zone_device_unregister(thermal->tzdev); |  		thermal_zone_device_unregister(thermal->tzdev); | ||||||
| @@ -1043,6 +1072,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -1001,6 +1030,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  			thermal_cooling_device_unregister(thermal->cdevs[i]); |  			thermal_cooling_device_unregister(thermal->cdevs[i]); | ||||||
|  err_reg_write: |  err_reg_write: | ||||||
|  err_reg_query: |  err_reg_query: | ||||||
| @@ -344,7 +344,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  	devm_kfree(dev, thermal); |  	devm_kfree(dev, thermal); | ||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
| @@ -1051,8 +1082,8 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | @@ -1009,8 +1040,8 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | ||||||
|  { |  { | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| @@ -355,7 +355,7 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  	if (thermal->tzdev) { |  	if (thermal->tzdev) { | ||||||
|  		thermal_zone_device_unregister(thermal->tzdev); |  		thermal_zone_device_unregister(thermal->tzdev); | ||||||
|  		thermal->tzdev = NULL; |  		thermal->tzdev = NULL; | ||||||
| @@ -1065,5 +1096,6 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | @@ -1023,5 +1054,6 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -363,5 +363,5 @@ index 3f9062f1c..77a484a55 100644 | |||||||
|  	devm_kfree(thermal->bus_info->dev, thermal); |  	devm_kfree(thermal->bus_info->dev, thermal); | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 219381cde0a7294834aff7e3f30584182b26a2b6 Mon Sep 17 00:00:00 2001 | From ed83386ce79974230c5fa59245efe760046d944c Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:34 +0200 | Date: Tue, 14 Dec 2021 10:57:34 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Split gearbox initialization | Subject: [PATCH backport 5.10 120/182] mlxsw: core_thermal: Split gearbox | ||||||
|  |  initialization | ||||||
|  |  | ||||||
| Split gearbox initialization in two routines - the first one is to be | Split gearbox initialization in two routines - the first one is to be | ||||||
| used for gearbox configuration validation, the second for creation of | used for gearbox configuration validation, the second for creation of | ||||||
| @@ -26,10 +27,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 34 insertions(+), 9 deletions(-) |  1 file changed, 34 insertions(+), 9 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index 77a484a55..a8ecd8fea 100644 | index 5f8b1e92475b..313856b88f6c 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -887,15 +887,12 @@ mlxsw_thermal_gearbox_tz_fini(struct mlxsw_thermal_module *gearbox_tz) | @@ -846,15 +846,12 @@ mlxsw_thermal_gearbox_tz_fini(struct mlxsw_thermal_module *gearbox_tz) | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
| @@ -47,7 +48,7 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
|  	mlxsw_reg_mgpir_pack(mgpir_pl, 0); |  	mlxsw_reg_mgpir_pack(mgpir_pl, 0); | ||||||
| @@ -905,8 +902,11 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -864,8 +861,11 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|   |   | ||||||
|  	mlxsw_reg_mgpir_unpack(mgpir_pl, &gbox_num, &device_type, NULL, |  	mlxsw_reg_mgpir_unpack(mgpir_pl, &gbox_num, &device_type, NULL, | ||||||
|  			       NULL, NULL); |  			       NULL, NULL); | ||||||
| @@ -61,7 +62,7 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  		return 0; |  		return 0; | ||||||
|   |   | ||||||
|  	area->tz_gearbox_num = gbox_num; |  	area->tz_gearbox_num = gbox_num; | ||||||
| @@ -916,6 +916,26 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -875,6 +875,26 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	if (!area->tz_gearbox_arr) |  	if (!area->tz_gearbox_arr) | ||||||
|  		return -ENOMEM; |  		return -ENOMEM; | ||||||
|   |   | ||||||
| @@ -88,7 +89,7 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  	for (i = 0; i < area->tz_gearbox_num; i++) { |  	for (i = 0; i < area->tz_gearbox_num; i++) { | ||||||
|  		gearbox_tz = &area->tz_gearbox_arr[i]; |  		gearbox_tz = &area->tz_gearbox_arr[i]; | ||||||
|  		memcpy(gearbox_tz->trips, default_thermal_trips, |  		memcpy(gearbox_tz->trips, default_thermal_trips, | ||||||
| @@ -933,7 +953,6 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -892,7 +912,6 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  err_thermal_gearbox_tz_init: |  err_thermal_gearbox_tz_init: | ||||||
|  	for (i--; i >= 0; i--) |  	for (i--; i >= 0; i--) | ||||||
|  		mlxsw_thermal_gearbox_tz_fini(&area->tz_gearbox_arr[i]); |  		mlxsw_thermal_gearbox_tz_fini(&area->tz_gearbox_arr[i]); | ||||||
| @@ -96,7 +97,7 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  	return err; |  	return err; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -945,7 +964,6 @@ mlxsw_thermal_gearboxes_fini(struct mlxsw_thermal *thermal, | @@ -904,7 +923,6 @@ mlxsw_thermal_gearboxes_fini(struct mlxsw_thermal *thermal, | ||||||
|   |   | ||||||
|  	for (i = area->tz_gearbox_num - 1; i >= 0; i--) |  	for (i = area->tz_gearbox_num - 1; i >= 0; i--) | ||||||
|  		mlxsw_thermal_gearbox_tz_fini(&area->tz_gearbox_arr[i]); |  		mlxsw_thermal_gearbox_tz_fini(&area->tz_gearbox_arr[i]); | ||||||
| @@ -104,7 +105,7 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  int mlxsw_thermal_init(struct mlxsw_core *core, |  int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
| @@ -1045,6 +1063,10 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -1003,6 +1021,10 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_thermal_modules_init; |  		goto err_thermal_modules_init; | ||||||
|   |   | ||||||
| @@ -115,7 +116,7 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  	err = mlxsw_thermal_gearboxes_init(dev, core, thermal, thermal->main); |  	err = mlxsw_thermal_gearboxes_init(dev, core, thermal, thermal->main); | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_thermal_gearboxes_init; |  		goto err_thermal_gearboxes_init; | ||||||
| @@ -1059,6 +1081,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -1017,6 +1039,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  err_thermal_zone_device_enable: |  err_thermal_zone_device_enable: | ||||||
|  	mlxsw_thermal_gearboxes_fini(thermal, thermal->main); |  	mlxsw_thermal_gearboxes_fini(thermal, thermal->main); | ||||||
|  err_thermal_gearboxes_init: |  err_thermal_gearboxes_init: | ||||||
| @@ -124,7 +125,7 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  	mlxsw_thermal_modules_fini(thermal, thermal->main); |  	mlxsw_thermal_modules_fini(thermal, thermal->main); | ||||||
|  err_thermal_modules_init: |  err_thermal_modules_init: | ||||||
|  	if (thermal->tzdev) { |  	if (thermal->tzdev) { | ||||||
| @@ -1083,6 +1107,7 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | @@ -1041,6 +1065,7 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
|  	mlxsw_thermal_gearboxes_fini(thermal, thermal->main); |  	mlxsw_thermal_gearboxes_fini(thermal, thermal->main); | ||||||
| @@ -133,5 +134,5 @@ index 77a484a55..a8ecd8fea 100644 | |||||||
|  	if (thermal->tzdev) { |  	if (thermal->tzdev) { | ||||||
|  		thermal_zone_device_unregister(thermal->tzdev); |  		thermal_zone_device_unregister(thermal->tzdev); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 9c8482e7c487a0a19f0d6d5df06c70aa529d3023 Mon Sep 17 00:00:00 2001 | From 13a7ef7fcdc09def9d9756510f49da82283d78df Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:35 +0200 | Date: Tue, 14 Dec 2021 10:57:35 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Extend thermal area with gearbox mapping | Subject: [PATCH backport 5.10 121/182] mlxsw: core_thermal: Extend thermal | ||||||
|  field |  area with gearbox mapping field | ||||||
|  |  | ||||||
| Add gearbox mapping field 'gearbox_sensor_map' to | Add gearbox mapping field 'gearbox_sensor_map' to | ||||||
| 'mlxsw_thermal_module' structure. It should provide the mapping for | 'mlxsw_thermal_module' structure. It should provide the mapping for | ||||||
| @@ -18,10 +18,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 25 insertions(+), 8 deletions(-) |  1 file changed, 25 insertions(+), 8 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index a8ecd8fea..2efedd35b 100644 | index 313856b88f6c..bde5489d9240 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -85,9 +85,11 @@ static const struct mlxsw_thermal_trip default_thermal_trips[] = { | @@ -77,9 +77,11 @@ static const struct mlxsw_thermal_trip default_thermal_trips[] = { | ||||||
|  #define MLXSW_THERMAL_TRIP_MASK	(BIT(MLXSW_THERMAL_NUM_TRIPS) - 1) |  #define MLXSW_THERMAL_TRIP_MASK	(BIT(MLXSW_THERMAL_NUM_TRIPS) - 1) | ||||||
|   |   | ||||||
|  struct mlxsw_thermal; |  struct mlxsw_thermal; | ||||||
| @@ -33,7 +33,7 @@ index a8ecd8fea..2efedd35b 100644 | |||||||
|  	struct thermal_zone_device *tzdev; |  	struct thermal_zone_device *tzdev; | ||||||
|  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; |  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; | ||||||
|  	int module; /* Module or gearbox number */ |  	int module; /* Module or gearbox number */ | ||||||
| @@ -100,6 +102,7 @@ struct mlxsw_thermal_area { | @@ -92,6 +94,7 @@ struct mlxsw_thermal_area { | ||||||
|  	struct mlxsw_thermal_module *tz_gearbox_arr; |  	struct mlxsw_thermal_module *tz_gearbox_arr; | ||||||
|  	u8 tz_gearbox_num; |  	u8 tz_gearbox_num; | ||||||
|  	u8 slot_index; |  	u8 slot_index; | ||||||
| @@ -41,7 +41,7 @@ index a8ecd8fea..2efedd35b 100644 | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  struct mlxsw_thermal { |  struct mlxsw_thermal { | ||||||
| @@ -594,7 +597,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev, | @@ -586,7 +589,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev, | ||||||
|  	int temp; |  	int temp; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -50,7 +50,7 @@ index a8ecd8fea..2efedd35b 100644 | |||||||
|  	mlxsw_reg_mtmp_pack(mtmp_pl, tz->slot_index, index, false, false); |  	mlxsw_reg_mtmp_pack(mtmp_pl, tz->slot_index, index, false, false); | ||||||
|   |   | ||||||
|  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); |  	err = mlxsw_reg_query(thermal->core, MLXSW_REG(mtmp), mtmp_pl); | ||||||
| @@ -768,6 +771,7 @@ mlxsw_thermal_module_init(struct device *dev, struct mlxsw_core *core, | @@ -727,6 +730,7 @@ mlxsw_thermal_module_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  	if (module_tz->parent) |  	if (module_tz->parent) | ||||||
|  		return 0; |  		return 0; | ||||||
|  	module_tz->module = module; |  	module_tz->module = module; | ||||||
| @@ -58,7 +58,7 @@ index a8ecd8fea..2efedd35b 100644 | |||||||
|  	module_tz->slot_index = area->slot_index; |  	module_tz->slot_index = area->slot_index; | ||||||
|  	module_tz->parent = thermal; |  	module_tz->parent = thermal; | ||||||
|  	memcpy(module_tz->trips, default_thermal_trips, |  	memcpy(module_tz->trips, default_thermal_trips, | ||||||
| @@ -892,36 +896,48 @@ mlxsw_thermal_gearboxes_main_init(struct device *dev, struct mlxsw_core *core, | @@ -851,36 +855,48 @@ mlxsw_thermal_gearboxes_main_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  { |  { | ||||||
|  	enum mlxsw_reg_mgpir_device_type device_type; |  	enum mlxsw_reg_mgpir_device_type device_type; | ||||||
|  	char mgpir_pl[MLXSW_REG_MGPIR_LEN]; |  	char mgpir_pl[MLXSW_REG_MGPIR_LEN]; | ||||||
| @@ -114,7 +114,7 @@ index a8ecd8fea..2efedd35b 100644 | |||||||
|  	kfree(area->tz_gearbox_arr); |  	kfree(area->tz_gearbox_arr); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -942,6 +958,7 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | @@ -901,6 +917,7 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, | ||||||
|  		       sizeof(thermal->trips)); |  		       sizeof(thermal->trips)); | ||||||
|  		gearbox_tz->module = i; |  		gearbox_tz->module = i; | ||||||
|  		gearbox_tz->parent = thermal; |  		gearbox_tz->parent = thermal; | ||||||
| @@ -123,5 +123,5 @@ index a8ecd8fea..2efedd35b 100644 | |||||||
|  		err = mlxsw_thermal_gearbox_tz_init(gearbox_tz); |  		err = mlxsw_thermal_gearbox_tz_init(gearbox_tz); | ||||||
|  		if (err) |  		if (err) | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 3f3548804a89b7fbe15fa92ea8686f08b990b083 Mon Sep 17 00:00:00 2001 | From 901e0ed6354f716b23854ad2f8e4eeb9a74414ab Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:36 +0200 | Date: Tue, 14 Dec 2021 10:57:36 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Add line card id prefix to line card | Subject: [PATCH backport 5.10 122/182] mlxsw: core_thermal: Add line card id | ||||||
|  thermal zone name |  prefix to line card thermal zone name | ||||||
|  |  | ||||||
| Add prefix "lc#n" to thermal zones associated with the thermal objects | Add prefix "lc#n" to thermal zones associated with the thermal objects | ||||||
| found on line cards. | found on line cards. | ||||||
| @@ -21,10 +21,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 12 insertions(+), 4 deletions(-) |  1 file changed, 12 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index 2efedd35b..421555d3f 100644 | index bde5489d9240..4964c9164c2d 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -730,8 +730,12 @@ mlxsw_thermal_module_tz_init(struct mlxsw_thermal_module *module_tz) | @@ -689,8 +689,12 @@ mlxsw_thermal_module_tz_init(struct mlxsw_thermal_module *module_tz) | ||||||
|  	char tz_name[MLXSW_THERMAL_ZONE_MAX_NAME]; |  	char tz_name[MLXSW_THERMAL_ZONE_MAX_NAME]; | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
| @@ -39,7 +39,7 @@ index 2efedd35b..421555d3f 100644 | |||||||
|  	module_tz->tzdev = thermal_zone_device_register(tz_name, |  	module_tz->tzdev = thermal_zone_device_register(tz_name, | ||||||
|  							MLXSW_THERMAL_NUM_TRIPS, |  							MLXSW_THERMAL_NUM_TRIPS, | ||||||
|  							MLXSW_THERMAL_TRIP_MASK, |  							MLXSW_THERMAL_TRIP_MASK, | ||||||
| @@ -865,8 +869,12 @@ mlxsw_thermal_gearbox_tz_init(struct mlxsw_thermal_module *gearbox_tz) | @@ -824,8 +828,12 @@ mlxsw_thermal_gearbox_tz_init(struct mlxsw_thermal_module *gearbox_tz) | ||||||
|  	char tz_name[MLXSW_THERMAL_ZONE_MAX_NAME]; |  	char tz_name[MLXSW_THERMAL_ZONE_MAX_NAME]; | ||||||
|  	int ret; |  	int ret; | ||||||
|   |   | ||||||
| @@ -55,5 +55,5 @@ index 2efedd35b..421555d3f 100644 | |||||||
|  						MLXSW_THERMAL_NUM_TRIPS, |  						MLXSW_THERMAL_NUM_TRIPS, | ||||||
|  						MLXSW_THERMAL_TRIP_MASK, |  						MLXSW_THERMAL_TRIP_MASK, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 34251eb77f3f50ac2d574876f33c65d8d2c70e9c Mon Sep 17 00:00:00 2001 | From 7e5f922bac5153137a8b1f486728d9d95b4922bc Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:37 +0200 | Date: Tue, 14 Dec 2021 10:57:37 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Use exact name of cooling devices for | Subject: [PATCH backport 5.10 123/182] mlxsw: core_thermal: Use exact name of | ||||||
|  binding |  cooling devices for binding | ||||||
|  |  | ||||||
| Modular system supports additional cooling devices "mlxreg_fan1", | Modular system supports additional cooling devices "mlxreg_fan1", | ||||||
| "mlxreg_fan2", etcetera. Thermal zones in "mlxsw" driver should be | "mlxreg_fan2", etcetera. Thermal zones in "mlxsw" driver should be | ||||||
| @@ -17,10 +17,10 @@ Signed-off-by: Ido Schimmel <idosch@nvidia.com> | |||||||
|  1 file changed, 1 insertion(+), 2 deletions(-) |  1 file changed, 1 insertion(+), 2 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index 421555d3f..a20a91285 100644 | index 4964c9164c2d..64c6a78f3aa0 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -141,8 +141,7 @@ static int mlxsw_get_cooling_device_idx(struct mlxsw_thermal *thermal, | @@ -133,8 +133,7 @@ static int mlxsw_get_cooling_device_idx(struct mlxsw_thermal *thermal, | ||||||
|   |   | ||||||
|  	/* Allow mlxsw thermal zone binding to an external cooling device */ |  	/* Allow mlxsw thermal zone binding to an external cooling device */ | ||||||
|  	for (i = 0; i < ARRAY_SIZE(mlxsw_thermal_external_allowed_cdev); i++) { |  	for (i = 0; i < ARRAY_SIZE(mlxsw_thermal_external_allowed_cdev); i++) { | ||||||
| @@ -31,5 +31,5 @@ index 421555d3f..a20a91285 100644 | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,20 +1,21 @@ | |||||||
| From 56370efd25ad5b77b87645d779dd577674c12864 Mon Sep 17 00:00:00 2001 | From 8d06868f51917926f99299eaac26d6f86eff3593 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Tue, 14 Dec 2021 10:57:38 +0200 | Date: Wed, 13 Apr 2022 18:17:33 +0300 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Use common define for thermal zone name | Subject: [PATCH backport 5.10 124/182] mlxsw: core_thermal: Use common define | ||||||
|  length |  for thermal zone name length | ||||||
|  |  | ||||||
| Replace internal define 'MLXSW_THERMAL_ZONE_MAX_NAME' by common | Replace internal define 'MLXSW_THERMAL_ZONE_MAX_NAME' by common | ||||||
| 'THERMAL_NAME_LENGTH'. | 'THERMAL_NAME_LENGTH'. | ||||||
|  |  | ||||||
| Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Signed-off-by: Ido Schimmel <idosch@nvidia.com> | Signed-off-by: Ido Schimmel <idosch@nvidia.com> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
| --- | --- | ||||||
|  drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | 5 ++--- |  drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | 5 ++--- | ||||||
|  1 file changed, 2 insertions(+), 3 deletions(-) |  1 file changed, 2 insertions(+), 3 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index a20a91285..e860cade5 100644 | index 64c6a78f3aa0..b9253c9f70d9 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -21,7 +21,6 @@ | @@ -21,7 +21,6 @@ | ||||||
| @@ -24,8 +25,8 @@ index a20a91285..e860cade5 100644 | |||||||
| -#define MLXSW_THERMAL_ZONE_MAX_NAME	16 | -#define MLXSW_THERMAL_ZONE_MAX_NAME	16 | ||||||
|  #define MLXSW_THERMAL_TEMP_SCORE_MAX	GENMASK(31, 0) |  #define MLXSW_THERMAL_TEMP_SCORE_MAX	GENMASK(31, 0) | ||||||
|  #define MLXSW_THERMAL_MAX_STATE	10 |  #define MLXSW_THERMAL_MAX_STATE	10 | ||||||
|  #define MLXSW_THERMAL_MAX_DUTY	255 |  #define MLXSW_THERMAL_MIN_STATE	2 | ||||||
| @@ -726,7 +725,7 @@ static const struct thermal_cooling_device_ops mlxsw_cooling_ops = { | @@ -685,7 +684,7 @@ static const struct thermal_cooling_device_ops mlxsw_cooling_ops = { | ||||||
|  static int |  static int | ||||||
|  mlxsw_thermal_module_tz_init(struct mlxsw_thermal_module *module_tz) |  mlxsw_thermal_module_tz_init(struct mlxsw_thermal_module *module_tz) | ||||||
|  { |  { | ||||||
| @@ -34,7 +35,7 @@ index a20a91285..e860cade5 100644 | |||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
|  	if (module_tz->slot_index) |  	if (module_tz->slot_index) | ||||||
| @@ -865,7 +864,7 @@ mlxsw_thermal_modules_fini(struct mlxsw_thermal *thermal, | @@ -824,7 +823,7 @@ mlxsw_thermal_modules_fini(struct mlxsw_thermal *thermal, | ||||||
|  static int |  static int | ||||||
|  mlxsw_thermal_gearbox_tz_init(struct mlxsw_thermal_module *gearbox_tz) |  mlxsw_thermal_gearbox_tz_init(struct mlxsw_thermal_module *gearbox_tz) | ||||||
|  { |  { | ||||||
| @@ -44,5 +45,5 @@ index a20a91285..e860cade5 100644 | |||||||
|   |   | ||||||
|  	if (gearbox_tz->slot_index) |  	if (gearbox_tz->slot_index) | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 242d6e2b00a25ec4184a63cec76c9f7f7c235594 Mon Sep 17 00:00:00 2001 | From 36a2e4e93d7d1ca2ed670b4cf827400ba367e290 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 22 Dec 2021 08:57:27 +0000 | Date: Wed, 22 Dec 2021 08:57:27 +0000 | ||||||
| Subject: [PATCH] devlink: add support to create line card and expose to user | Subject: [PATCH backport 5.10 125/182] devlink: add support to create line | ||||||
|  |  card and expose to user | ||||||
|  |  | ||||||
| Extend the devlink API so the driver is going to be able to create and | Extend the devlink API so the driver is going to be able to create and | ||||||
| destroy linecard instances. There can be multiple line cards per devlink | destroy linecard instances. There can be multiple line cards per devlink | ||||||
| @@ -16,7 +17,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  3 files changed, 339 insertions(+), 1 deletion(-) |  3 files changed, 339 insertions(+), 1 deletion(-) | ||||||
|  |  | ||||||
| diff --git a/include/net/devlink.h b/include/net/devlink.h | diff --git a/include/net/devlink.h b/include/net/devlink.h | ||||||
| index b01bb9bca..e8f046590 100644 | index b01bb9bca5a2..e8f046590579 100644 | ||||||
| --- a/include/net/devlink.h | --- a/include/net/devlink.h | ||||||
| +++ b/include/net/devlink.h | +++ b/include/net/devlink.h | ||||||
| @@ -31,6 +31,7 @@ struct devlink_dev_stats { | @@ -31,6 +31,7 @@ struct devlink_dev_stats { | ||||||
| @@ -70,7 +71,7 @@ index b01bb9bca..e8f046590 100644 | |||||||
|  			u32 size, u16 ingress_pools_count, |  			u32 size, u16 ingress_pools_count, | ||||||
|  			u16 egress_pools_count, u16 ingress_tc_count, |  			u16 egress_pools_count, u16 ingress_tc_count, | ||||||
| diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | ||||||
| index cf89c318f..ff07ad596 100644 | index cf89c318f2ac..ff07ad596035 100644 | ||||||
| --- a/include/uapi/linux/devlink.h | --- a/include/uapi/linux/devlink.h | ||||||
| +++ b/include/uapi/linux/devlink.h | +++ b/include/uapi/linux/devlink.h | ||||||
| @@ -126,6 +126,16 @@ enum devlink_command { | @@ -126,6 +126,16 @@ enum devlink_command { | ||||||
| @@ -110,7 +111,7 @@ index cf89c318f..ff07ad596 100644 | |||||||
|   |   | ||||||
|  	__DEVLINK_ATTR_MAX, |  	__DEVLINK_ATTR_MAX, | ||||||
| diff --git a/net/core/devlink.c b/net/core/devlink.c | diff --git a/net/core/devlink.c b/net/core/devlink.c | ||||||
| index 72047750d..645fe0612 100644 | index 72047750dcd9..645fe0612b53 100644 | ||||||
| --- a/net/core/devlink.c | --- a/net/core/devlink.c | ||||||
| +++ b/net/core/devlink.c | +++ b/net/core/devlink.c | ||||||
| @@ -91,6 +91,25 @@ static const struct nla_policy devlink_function_nl_policy[DEVLINK_PORT_FUNCTION_ | @@ -91,6 +91,25 @@ static const struct nla_policy devlink_function_nl_policy[DEVLINK_PORT_FUNCTION_ | ||||||
| @@ -527,5 +528,5 @@ index 72047750d..645fe0612 100644 | |||||||
|  			u32 size, u16 ingress_pools_count, |  			u32 size, u16 ingress_pools_count, | ||||||
|  			u16 egress_pools_count, u16 ingress_tc_count, |  			u16 egress_pools_count, u16 ingress_tc_count, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From b0a30f401ca5d69f3cd78a0bf6dd1471f7aea0be Mon Sep 17 00:00:00 2001 | From 37d223fa389636092d519ca903f186d608eed3c8 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Thu, 31 Dec 2020 17:35:08 +0100 | Date: Thu, 31 Dec 2020 17:35:08 +0100 | ||||||
| Subject: [PATCH] devlink: implement line card provisioning | Subject: [PATCH backport 5.10 126/182] devlink: implement line card | ||||||
|  |  provisioning | ||||||
|  |  | ||||||
| In order to be able to configure all needed stuff on a port/netdevice | In order to be able to configure all needed stuff on a port/netdevice | ||||||
| of a line card without the line card being present, introduce line card | of a line card without the line card being present, introduce line card | ||||||
| @@ -28,7 +29,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  3 files changed, 346 insertions(+), 21 deletions(-) |  3 files changed, 346 insertions(+), 21 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/include/net/devlink.h b/include/net/devlink.h | diff --git a/include/net/devlink.h b/include/net/devlink.h | ||||||
| index e8f046590..44b60085e 100644 | index e8f046590579..44b60085ec16 100644 | ||||||
| --- a/include/net/devlink.h | --- a/include/net/devlink.h | ||||||
| +++ b/include/net/devlink.h | +++ b/include/net/devlink.h | ||||||
| @@ -142,11 +142,43 @@ struct devlink_port { | @@ -142,11 +142,43 @@ struct devlink_port { | ||||||
| @@ -93,7 +94,7 @@ index e8f046590..44b60085e 100644 | |||||||
|  			u32 size, u16 ingress_pools_count, |  			u32 size, u16 ingress_pools_count, | ||||||
|  			u16 egress_pools_count, u16 ingress_tc_count, |  			u16 egress_pools_count, u16 ingress_tc_count, | ||||||
| diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | ||||||
| index ff07ad596..d88336645 100644 | index ff07ad596035..d8833664522f 100644 | ||||||
| --- a/include/uapi/linux/devlink.h | --- a/include/uapi/linux/devlink.h | ||||||
| +++ b/include/uapi/linux/devlink.h | +++ b/include/uapi/linux/devlink.h | ||||||
| @@ -334,6 +334,18 @@ enum devlink_reload_limit { | @@ -334,6 +334,18 @@ enum devlink_reload_limit { | ||||||
| @@ -126,7 +127,7 @@ index ff07ad596..d88336645 100644 | |||||||
|  	/* add new attributes above here, update the policy in devlink.c */ |  	/* add new attributes above here, update the policy in devlink.c */ | ||||||
|   |   | ||||||
| diff --git a/net/core/devlink.c b/net/core/devlink.c | diff --git a/net/core/devlink.c b/net/core/devlink.c | ||||||
| index 645fe0612..943973ffc 100644 | index 645fe0612b53..943973ffc450 100644 | ||||||
| --- a/net/core/devlink.c | --- a/net/core/devlink.c | ||||||
| +++ b/net/core/devlink.c | +++ b/net/core/devlink.c | ||||||
| @@ -265,8 +265,10 @@ devlink_linecard_get_from_info(struct devlink *devlink, struct genl_info *info) | @@ -265,8 +265,10 @@ devlink_linecard_get_from_info(struct devlink *devlink, struct genl_info *info) | ||||||
| @@ -550,5 +551,5 @@ index 645fe0612..943973ffc 100644 | |||||||
|  			u32 size, u16 ingress_pools_count, |  			u32 size, u16 ingress_pools_count, | ||||||
|  			u16 egress_pools_count, u16 ingress_tc_count, |  			u16 egress_pools_count, u16 ingress_tc_count, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 999c148a0a19a6a6c96dbc5b6615285d80c28de9 Mon Sep 17 00:00:00 2001 | From 9edffb671d73df181e382930bda0a3870e6ac120 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Wed, 6 Jan 2021 16:03:43 +0100 | Date: Wed, 6 Jan 2021 16:03:43 +0100 | ||||||
| Subject: [PATCH] devlink: implement line card active state | Subject: [PATCH backport 5.10 127/182] devlink: implement line card active | ||||||
|  |  state | ||||||
|  |  | ||||||
| Allow driver to mark a linecard as active. Expose this state to the | Allow driver to mark a linecard as active. Expose this state to the | ||||||
| userspace over devlink netlink interface with proper notifications. | userspace over devlink netlink interface with proper notifications. | ||||||
| @@ -14,7 +15,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  3 files changed, 40 insertions(+) |  3 files changed, 40 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/include/net/devlink.h b/include/net/devlink.h | diff --git a/include/net/devlink.h b/include/net/devlink.h | ||||||
| index 44b60085e..d9b2b559c 100644 | index 44b60085ec16..d9b2b559c9a2 100644 | ||||||
| --- a/include/net/devlink.h | --- a/include/net/devlink.h | ||||||
| +++ b/include/net/devlink.h | +++ b/include/net/devlink.h | ||||||
| @@ -157,6 +157,7 @@ struct devlink_linecard { | @@ -157,6 +157,7 @@ struct devlink_linecard { | ||||||
| @@ -35,7 +36,7 @@ index 44b60085e..d9b2b559c 100644 | |||||||
|  			u32 size, u16 ingress_pools_count, |  			u32 size, u16 ingress_pools_count, | ||||||
|  			u16 egress_pools_count, u16 ingress_tc_count, |  			u16 egress_pools_count, u16 ingress_tc_count, | ||||||
| diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | ||||||
| index d88336645..5ace55666 100644 | index d8833664522f..5ace55666d27 100644 | ||||||
| --- a/include/uapi/linux/devlink.h | --- a/include/uapi/linux/devlink.h | ||||||
| +++ b/include/uapi/linux/devlink.h | +++ b/include/uapi/linux/devlink.h | ||||||
| @@ -341,6 +341,7 @@ enum devlink_linecard_state { | @@ -341,6 +341,7 @@ enum devlink_linecard_state { | ||||||
| @@ -47,7 +48,7 @@ index d88336645..5ace55666 100644 | |||||||
|  	__DEVLINK_LINECARD_STATE_MAX, |  	__DEVLINK_LINECARD_STATE_MAX, | ||||||
|  	DEVLINK_LINECARD_STATE_MAX = __DEVLINK_LINECARD_STATE_MAX - 1 |  	DEVLINK_LINECARD_STATE_MAX = __DEVLINK_LINECARD_STATE_MAX - 1 | ||||||
| diff --git a/net/core/devlink.c b/net/core/devlink.c | diff --git a/net/core/devlink.c b/net/core/devlink.c | ||||||
| index 943973ffc..724633810 100644 | index 943973ffc450..724633810758 100644 | ||||||
| --- a/net/core/devlink.c | --- a/net/core/devlink.c | ||||||
| +++ b/net/core/devlink.c | +++ b/net/core/devlink.c | ||||||
| @@ -9001,6 +9001,42 @@ void devlink_linecard_provision_fail(struct devlink_linecard *linecard) | @@ -9001,6 +9001,42 @@ void devlink_linecard_provision_fail(struct devlink_linecard *linecard) | ||||||
| @@ -94,5 +95,5 @@ index 943973ffc..724633810 100644 | |||||||
|  			u32 size, u16 ingress_pools_count, |  			u32 size, u16 ingress_pools_count, | ||||||
|  			u16 egress_pools_count, u16 ingress_tc_count, |  			u16 egress_pools_count, u16 ingress_tc_count, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From ce052dd9aec77733b55fe1285a9be5c4cbcc87b3 Mon Sep 17 00:00:00 2001 | From fb810d890bd142a7cfc14fb7e5f1519eee366208 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 22 Dec 2021 14:10:14 +0000 | Date: Wed, 22 Dec 2021 14:10:14 +0000 | ||||||
| Subject: [PATCH] devlink: add port to line card relationship set | Subject: [PATCH backport 5.10 128/182] devlink: add port to line card | ||||||
|  |  relationship set | ||||||
|  |  | ||||||
| In order to properly inform user about relationship between port and | In order to properly inform user about relationship between port and | ||||||
| line card, introduce a driver API to set line card for a port. Use this | line card, introduce a driver API to set line card for a port. Use this | ||||||
| @@ -16,7 +17,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  2 files changed, 32 insertions(+), 6 deletions(-) |  2 files changed, 32 insertions(+), 6 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/include/net/devlink.h b/include/net/devlink.h | diff --git a/include/net/devlink.h b/include/net/devlink.h | ||||||
| index d9b2b559c..3d4ceb290 100644 | index d9b2b559c9a2..3d4ceb2902b8 100644 | ||||||
| --- a/include/net/devlink.h | --- a/include/net/devlink.h | ||||||
| +++ b/include/net/devlink.h | +++ b/include/net/devlink.h | ||||||
| @@ -140,6 +140,8 @@ struct devlink_port { | @@ -140,6 +140,8 @@ struct devlink_port { | ||||||
| @@ -38,7 +39,7 @@ index d9b2b559c..3d4ceb290 100644 | |||||||
|  devlink_linecard_create(struct devlink *devlink, unsigned int linecard_index, |  devlink_linecard_create(struct devlink *devlink, unsigned int linecard_index, | ||||||
|  			const struct devlink_linecard_ops *ops, void *priv); |  			const struct devlink_linecard_ops *ops, void *priv); | ||||||
| diff --git a/net/core/devlink.c b/net/core/devlink.c | diff --git a/net/core/devlink.c b/net/core/devlink.c | ||||||
| index 724633810..b43e93ccc 100644 | index 724633810758..b43e93ccc672 100644 | ||||||
| --- a/net/core/devlink.c | --- a/net/core/devlink.c | ||||||
| +++ b/net/core/devlink.c | +++ b/net/core/devlink.c | ||||||
| @@ -905,6 +905,10 @@ static int devlink_nl_port_fill(struct sk_buff *msg, struct devlink *devlink, | @@ -905,6 +905,10 @@ static int devlink_nl_port_fill(struct sk_buff *msg, struct devlink *devlink, | ||||||
| @@ -97,5 +98,5 @@ index 724633810..b43e93ccc 100644 | |||||||
|  	case DEVLINK_PORT_FLAVOUR_CPU: |  	case DEVLINK_PORT_FLAVOUR_CPU: | ||||||
|  	case DEVLINK_PORT_FLAVOUR_DSA: |  	case DEVLINK_PORT_FLAVOUR_DSA: | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From fdc91e1289c5e491e93f7d7a872d2d656d1d0e7f Mon Sep 17 00:00:00 2001 | From 13e29cf4f38755ae717615071b07cd438e8819e6 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 19 Feb 2021 09:36:15 +0100 | Date: Fri, 19 Feb 2021 09:36:15 +0100 | ||||||
| Subject: [PATCH] devlink: introduce linecard info get message | Subject: [PATCH backport 5.10 129/182] devlink: introduce linecard info get | ||||||
|  |  message | ||||||
|  |  | ||||||
| Allow the driver to provide per line card info get op to fill-up info, | Allow the driver to provide per line card info get op to fill-up info, | ||||||
| similar to the "devlink dev info". | similar to the "devlink dev info". | ||||||
| @@ -14,7 +15,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  3 files changed, 140 insertions(+), 5 deletions(-) |  3 files changed, 140 insertions(+), 5 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/include/net/devlink.h b/include/net/devlink.h | diff --git a/include/net/devlink.h b/include/net/devlink.h | ||||||
| index 3d4ceb290..059bed6ae 100644 | index 3d4ceb2902b8..059bed6aef3c 100644 | ||||||
| --- a/include/net/devlink.h | --- a/include/net/devlink.h | ||||||
| +++ b/include/net/devlink.h | +++ b/include/net/devlink.h | ||||||
| @@ -162,6 +162,8 @@ struct devlink_linecard { | @@ -162,6 +162,8 @@ struct devlink_linecard { | ||||||
| @@ -53,7 +54,7 @@ index 3d4ceb290..059bed6ae 100644 | |||||||
|  /** |  /** | ||||||
|   * struct devlink_region_ops - Region operations |   * struct devlink_region_ops - Region operations | ||||||
| diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | ||||||
| index 5ace55666..2c9f7d584 100644 | index 5ace55666d27..2c9f7d584b48 100644 | ||||||
| --- a/include/uapi/linux/devlink.h | --- a/include/uapi/linux/devlink.h | ||||||
| +++ b/include/uapi/linux/devlink.h | +++ b/include/uapi/linux/devlink.h | ||||||
| @@ -136,6 +136,8 @@ enum devlink_command { | @@ -136,6 +136,8 @@ enum devlink_command { | ||||||
| @@ -74,7 +75,7 @@ index 5ace55666..2c9f7d584 100644 | |||||||
|  	/* add new attributes above here, update the policy in devlink.c */ |  	/* add new attributes above here, update the policy in devlink.c */ | ||||||
|   |   | ||||||
| diff --git a/net/core/devlink.c b/net/core/devlink.c | diff --git a/net/core/devlink.c b/net/core/devlink.c | ||||||
| index b43e93ccc..04f8038f8 100644 | index b43e93ccc672..04f8038f8e23 100644 | ||||||
| --- a/net/core/devlink.c | --- a/net/core/devlink.c | ||||||
| +++ b/net/core/devlink.c | +++ b/net/core/devlink.c | ||||||
| @@ -1245,6 +1245,10 @@ struct devlink_linecard_type { | @@ -1245,6 +1245,10 @@ struct devlink_linecard_type { | ||||||
| @@ -241,5 +242,5 @@ index b43e93ccc..04f8038f8 100644 | |||||||
|  		.cmd = DEVLINK_CMD_SB_GET, |  		.cmd = DEVLINK_CMD_SB_GET, | ||||||
|  		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |  		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 7a39de95203f7dc033bdc81703989d627f2ca0de Mon Sep 17 00:00:00 2001 | From b8243b5c2fdb9871cd55a864b95e197ced9ad532 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 22 Dec 2021 15:11:36 +0000 | Date: Wed, 22 Dec 2021 15:11:36 +0000 | ||||||
| Subject: [PATCH] devlink: introduce linecard info get message | Subject: [PATCH backport 5.10 130/182] devlink: introduce linecard info get | ||||||
|  |  message | ||||||
|  |  | ||||||
| Allow the driver to provide per line card info get op to fill-up info, | Allow the driver to provide per line card info get op to fill-up info, | ||||||
| similar to the "devlink dev info". | similar to the "devlink dev info". | ||||||
| @@ -23,7 +24,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  3 files changed, 182 insertions(+) |  3 files changed, 182 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/include/net/devlink.h b/include/net/devlink.h | diff --git a/include/net/devlink.h b/include/net/devlink.h | ||||||
| index 059bed6ae..06b61c1d7 100644 | index 059bed6aef3c..06b61c1d7938 100644 | ||||||
| --- a/include/net/devlink.h | --- a/include/net/devlink.h | ||||||
| +++ b/include/net/devlink.h | +++ b/include/net/devlink.h | ||||||
| @@ -160,9 +160,11 @@ struct devlink_linecard { | @@ -160,9 +160,11 @@ struct devlink_linecard { | ||||||
| @@ -63,7 +64,7 @@ index 059bed6ae..06b61c1d7 100644 | |||||||
|  				    const char *type); |  				    const char *type); | ||||||
|  void devlink_linecard_provision_clear(struct devlink_linecard *linecard); |  void devlink_linecard_provision_clear(struct devlink_linecard *linecard); | ||||||
| diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h | ||||||
| index 2c9f7d584..bac94c3c1 100644 | index 2c9f7d584b48..bac94c3c1bb0 100644 | ||||||
| --- a/include/uapi/linux/devlink.h | --- a/include/uapi/linux/devlink.h | ||||||
| +++ b/include/uapi/linux/devlink.h | +++ b/include/uapi/linux/devlink.h | ||||||
| @@ -569,6 +569,10 @@ enum devlink_attr { | @@ -569,6 +569,10 @@ enum devlink_attr { | ||||||
| @@ -78,7 +79,7 @@ index 2c9f7d584..bac94c3c1 100644 | |||||||
|  	/* add new attributes above here, update the policy in devlink.c */ |  	/* add new attributes above here, update the policy in devlink.c */ | ||||||
|   |   | ||||||
| diff --git a/net/core/devlink.c b/net/core/devlink.c | diff --git a/net/core/devlink.c b/net/core/devlink.c | ||||||
| index 04f8038f8..ca014f40a 100644 | index 04f8038f8e23..ca014f40ac02 100644 | ||||||
| --- a/net/core/devlink.c | --- a/net/core/devlink.c | ||||||
| +++ b/net/core/devlink.c | +++ b/net/core/devlink.c | ||||||
| @@ -1249,6 +1249,59 @@ struct devlink_info_req { | @@ -1249,6 +1249,59 @@ struct devlink_info_req { | ||||||
| @@ -311,5 +312,5 @@ index 04f8038f8..ca014f40a 100644 | |||||||
|  	linecard->type = NULL; |  	linecard->type = NULL; | ||||||
|  	devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); |  	devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From ec8e91d320c8cccb8ad59663d2d59810ea5aecb9 Mon Sep 17 00:00:00 2001 | From 4a49468e7fc7e94a83703215445d9b3919642eb9 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 29 Jan 2021 08:45:09 +0100 | Date: Fri, 29 Jan 2021 08:45:09 +0100 | ||||||
| Subject: [PATCH] mlxsw: reg: Add Ports Mapping event Configuration Register | Subject: [PATCH backport 5.10 131/182] mlxsw: reg: Add Ports Mapping event | ||||||
|  |  Configuration Register | ||||||
|  |  | ||||||
| The PMECR register use to enable/disable event trigger in case of | The PMECR register use to enable/disable event trigger in case of | ||||||
| local port mapping change. | local port mapping change. | ||||||
| @@ -12,7 +13,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 64 insertions(+) |  1 file changed, 64 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 9de037b9a..42169957c 100644 | index 98c627ffe039..93e3366cfcb9 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -5524,6 +5524,69 @@ static inline void mlxsw_reg_pplr_pack(char *payload, u8 local_port, | @@ -5524,6 +5524,69 @@ static inline void mlxsw_reg_pplr_pack(char *payload, u8 local_port, | ||||||
| @@ -85,7 +86,7 @@ index 9de037b9a..42169957c 100644 | |||||||
|  /* PMPE - Port Module Plug/Unplug Event Register |  /* PMPE - Port Module Plug/Unplug Event Register | ||||||
|   * --------------------------------------------- |   * --------------------------------------------- | ||||||
|   * This register reports any operational status change of a module. |   * This register reports any operational status change of a module. | ||||||
| @@ -11376,6 +11439,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | @@ -11375,6 +11438,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | ||||||
|  	MLXSW_REG(pspa), |  	MLXSW_REG(pspa), | ||||||
|  	MLXSW_REG(pmaos), |  	MLXSW_REG(pmaos), | ||||||
|  	MLXSW_REG(pplr), |  	MLXSW_REG(pplr), | ||||||
| @@ -94,5 +95,5 @@ index 9de037b9a..42169957c 100644 | |||||||
|  	MLXSW_REG(pddr), |  	MLXSW_REG(pddr), | ||||||
|  	MLXSW_REG(pmtm), |  	MLXSW_REG(pmtm), | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From e46f9bfa89b8b9caced49a74db695e86e963b35d Mon Sep 17 00:00:00 2001 | From 5d8d4899f493e3b18712fc96a45eb020985740b1 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Mon, 3 Jan 2022 10:20:49 +0000 | Date: Mon, 3 Jan 2022 10:20:49 +0000 | ||||||
| Subject: [PATCH] mlxsw: reg: Add Management DownStream Device Query Register | Subject: [PATCH backport 5.10 132/182] mlxsw: reg: Add Management DownStream | ||||||
|  |  Device Query Register | ||||||
|  |  | ||||||
| The MDDQ register allows to query the DownStream device properties. | The MDDQ register allows to query the DownStream device properties. | ||||||
|  |  | ||||||
| @@ -11,10 +12,10 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 234 insertions(+) |  1 file changed, 234 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 42169957c..d5301bd6f 100644 | index 93e3366cfcb9..ad7faeb95646 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10297,6 +10297,239 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | @@ -10296,6 +10296,239 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | ||||||
|  		*num_of_slots = mlxsw_reg_mgpir_num_of_slots_get(payload); |  		*num_of_slots = mlxsw_reg_mgpir_num_of_slots_get(payload); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -254,7 +255,7 @@ index 42169957c..d5301bd6f 100644 | |||||||
|  /* MFDE - Monitoring FW Debug Register |  /* MFDE - Monitoring FW Debug Register | ||||||
|   * ----------------------------------- |   * ----------------------------------- | ||||||
|   */ |   */ | ||||||
| @@ -11496,6 +11729,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | @@ -11495,6 +11728,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | ||||||
|  	MLXSW_REG(mtptpt), |  	MLXSW_REG(mtptpt), | ||||||
|  	MLXSW_REG(mfgd), |  	MLXSW_REG(mfgd), | ||||||
|  	MLXSW_REG(mgpir), |  	MLXSW_REG(mgpir), | ||||||
| @@ -263,5 +264,5 @@ index 42169957c..d5301bd6f 100644 | |||||||
|  	MLXSW_REG(tngcr), |  	MLXSW_REG(tngcr), | ||||||
|  	MLXSW_REG(tnumt), |  	MLXSW_REG(tnumt), | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From ab25c37ca20274cbf51ab603aa44f682cf5b51b5 Mon Sep 17 00:00:00 2001 | From 14d65a09a9b77a5ed632a73ff006042d26be3226 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Tue, 19 Jan 2021 12:16:58 +0100 | Date: Tue, 19 Jan 2021 12:16:58 +0100 | ||||||
| Subject: [PATCH] mlxsw: reg: Add Management DownStream Device Control Register | Subject: [PATCH backport 5.10 133/182] mlxsw: reg: Add Management DownStream | ||||||
|  |  Device Control Register | ||||||
|  |  | ||||||
| The MDDC register allows control downstream devices and line cards. | The MDDC register allows control downstream devices and line cards. | ||||||
|  |  | ||||||
| @@ -11,10 +12,10 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 37 insertions(+) |  1 file changed, 37 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index d5301bd6f..9cbdf407f 100644 | index ad7faeb95646..cddfe5702140 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10530,6 +10530,42 @@ mlxsw_reg_mddq_slot_name_unpack(const char *payload, char *slot_ascii_name) | @@ -10529,6 +10529,42 @@ mlxsw_reg_mddq_slot_name_unpack(const char *payload, char *slot_ascii_name) | ||||||
|  	mlxsw_reg_mddq_slot_ascii_name_memcpy_from(payload, slot_ascii_name); |  	mlxsw_reg_mddq_slot_ascii_name_memcpy_from(payload, slot_ascii_name); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -57,7 +58,7 @@ index d5301bd6f..9cbdf407f 100644 | |||||||
|  /* MFDE - Monitoring FW Debug Register |  /* MFDE - Monitoring FW Debug Register | ||||||
|   * ----------------------------------- |   * ----------------------------------- | ||||||
|   */ |   */ | ||||||
| @@ -11730,6 +11766,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | @@ -11729,6 +11765,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | ||||||
|  	MLXSW_REG(mfgd), |  	MLXSW_REG(mfgd), | ||||||
|  	MLXSW_REG(mgpir), |  	MLXSW_REG(mgpir), | ||||||
|  	MLXSW_REG(mddq), |  	MLXSW_REG(mddq), | ||||||
| @@ -66,5 +67,5 @@ index d5301bd6f..9cbdf407f 100644 | |||||||
|  	MLXSW_REG(tngcr), |  	MLXSW_REG(tngcr), | ||||||
|  	MLXSW_REG(tnumt), |  	MLXSW_REG(tnumt), | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 618665ccbf600c2838fb2e181246aef0fa90bac2 Mon Sep 17 00:00:00 2001 | From e9afbd683a14e3369ba25dcb9c8147a8b478b5c0 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Thu, 10 Dec 2020 18:27:38 +0100 | Date: Thu, 10 Dec 2020 18:27:38 +0100 | ||||||
| Subject: [PATCH] mlxsw: reg: Add Management Binary Code Transfer Register | Subject: [PATCH backport 5.10 134/182] mlxsw: reg: Add Management Binary Code | ||||||
|  |  Transfer Register | ||||||
|  |  | ||||||
| The MBCT register allows to transfer binary codes from the Host to | The MBCT register allows to transfer binary codes from the Host to | ||||||
| the management FW by transferring it by chunks of maximum 1KB. | the management FW by transferring it by chunks of maximum 1KB. | ||||||
| @@ -12,10 +13,10 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 120 insertions(+) |  1 file changed, 120 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 9cbdf407f..89b21910f 100644 | index cddfe5702140..e060f054e0a9 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10297,6 +10297,125 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | @@ -10296,6 +10296,125 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | ||||||
|  		*num_of_slots = mlxsw_reg_mgpir_num_of_slots_get(payload); |  		*num_of_slots = mlxsw_reg_mgpir_num_of_slots_get(payload); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -141,7 +142,7 @@ index 9cbdf407f..89b21910f 100644 | |||||||
|  /* MDDQ - Management DownStream Device Query Register |  /* MDDQ - Management DownStream Device Query Register | ||||||
|   * -------------------------------------------------- |   * -------------------------------------------------- | ||||||
|   * This register allows to query the DownStream device properties. The desired |   * This register allows to query the DownStream device properties. The desired | ||||||
| @@ -11765,6 +11884,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | @@ -11764,6 +11883,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | ||||||
|  	MLXSW_REG(mtptpt), |  	MLXSW_REG(mtptpt), | ||||||
|  	MLXSW_REG(mfgd), |  	MLXSW_REG(mfgd), | ||||||
|  	MLXSW_REG(mgpir), |  	MLXSW_REG(mgpir), | ||||||
| @@ -150,5 +151,5 @@ index 9cbdf407f..89b21910f 100644 | |||||||
|  	MLXSW_REG(mddc), |  	MLXSW_REG(mddc), | ||||||
|  	MLXSW_REG(mfde), |  	MLXSW_REG(mfde), | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 3c23c52a44d6f87f7caaf09babb6196e523d1e7c Mon Sep 17 00:00:00 2001 | From 59c953deed31161dc358e6d397af2b5b0f5ee61c Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 22 Dec 2021 16:06:54 +0000 | Date: Wed, 22 Dec 2021 16:06:54 +0000 | ||||||
| Subject: [PATCH] mlxsw: core_linecards: Add line card objects and implement | Subject: [PATCH backport 5.10 135/182] mlxsw: core_linecards: Add line card | ||||||
|  provisioning |  objects and implement provisioning | ||||||
|  |  | ||||||
| Introduce objects for line cards and an infrastructure around that. | Introduce objects for line cards and an infrastructure around that. | ||||||
| Use devlink_linecard_create/destroy() to register the line card with | Use devlink_linecard_create/destroy() to register the line card with | ||||||
| @@ -21,7 +21,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  create mode 100644 drivers/net/ethernet/mellanox/mlxsw/core_linecards.c |  create mode 100644 drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/Makefile b/drivers/net/ethernet/mellanox/mlxsw/Makefile | diff --git a/drivers/net/ethernet/mellanox/mlxsw/Makefile b/drivers/net/ethernet/mellanox/mlxsw/Makefile | ||||||
| index 892724380..ca7260a14 100644 | index 892724380ea2..ca7260a145f5 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/Makefile | --- a/drivers/net/ethernet/mellanox/mlxsw/Makefile | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/Makefile | +++ b/drivers/net/ethernet/mellanox/mlxsw/Makefile | ||||||
| @@ -1,7 +1,8 @@ | @@ -1,7 +1,8 @@ | ||||||
| @@ -35,7 +35,7 @@ index 892724380..ca7260a14 100644 | |||||||
|  mlxsw_core-$(CONFIG_MLXSW_CORE_THERMAL) += core_thermal.o |  mlxsw_core-$(CONFIG_MLXSW_CORE_THERMAL) += core_thermal.o | ||||||
|  obj-$(CONFIG_MLXSW_PCI)		+= mlxsw_pci.o |  obj-$(CONFIG_MLXSW_PCI)		+= mlxsw_pci.o | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index 0b1888318..246db548f 100644 | index 0b1888318ef1..246db548f011 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -82,6 +82,7 @@ struct mlxsw_core { | @@ -82,6 +82,7 @@ struct mlxsw_core { | ||||||
| @@ -112,7 +112,7 @@ index 0b1888318..246db548f 100644 | |||||||
|  	kfree(mlxsw_core->lag.mapping); |  	kfree(mlxsw_core->lag.mapping); | ||||||
|  	mlxsw_ports_fini(mlxsw_core); |  	mlxsw_ports_fini(mlxsw_core); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index 0ceb7dae9..d3c5d8289 100644 | index 0ceb7dae95f6..d3c5d8289a85 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -30,6 +30,8 @@ unsigned int mlxsw_core_max_ports(const struct mlxsw_core *mlxsw_core); | @@ -30,6 +30,8 @@ unsigned int mlxsw_core_max_ports(const struct mlxsw_core *mlxsw_core); | ||||||
| @@ -175,7 +175,7 @@ index 0ceb7dae9..d3c5d8289 100644 | |||||||
|  #endif |  #endif | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 000000000..a324ce243 | index 000000000000..a324ce2436e8 | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| @@ -0,0 +1,775 @@ | @@ -0,0 +1,775 @@ | ||||||
| @@ -955,7 +955,7 @@ index 000000000..a324ce243 | |||||||
| + | + | ||||||
| +MODULE_FIRMWARE(MLXSW_LINECARDS_INI_BUNDLE_FILE); | +MODULE_FIRMWARE(MLXSW_LINECARDS_INI_BUNDLE_FILE); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| index 5066fcc46..d7a230828 100644 | index e0424f490c6f..bc233a5c8a79 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| @@ -2076,6 +2076,72 @@ static void mlxsw_sp_pude_event_func(const struct mlxsw_reg_info *reg, | @@ -2076,6 +2076,72 @@ static void mlxsw_sp_pude_event_func(const struct mlxsw_reg_info *reg, | ||||||
| @@ -1041,7 +1041,7 @@ index 5066fcc46..d7a230828 100644 | |||||||
|  	MLXSW_SP_RXL_NO_MARK(FID_MISS, TRAP_TO_CPU, FID_MISS, false), |  	MLXSW_SP_RXL_NO_MARK(FID_MISS, TRAP_TO_CPU, FID_MISS, false), | ||||||
|  	/* L3 traps */ |  	/* L3 traps */ | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/trap.h b/drivers/net/ethernet/mellanox/mlxsw/trap.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/trap.h b/drivers/net/ethernet/mellanox/mlxsw/trap.h | ||||||
| index 57f9e2460..f3e522de2 100644 | index 57f9e24602d0..f3e522de2f68 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/trap.h | --- a/drivers/net/ethernet/mellanox/mlxsw/trap.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/trap.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/trap.h | ||||||
| @@ -132,6 +132,12 @@ enum mlxsw_event_trap_id { | @@ -132,6 +132,12 @@ enum mlxsw_event_trap_id { | ||||||
| @@ -1058,5 +1058,5 @@ index 57f9e2460..f3e522de2 100644 | |||||||
|   |   | ||||||
|  #endif /* _MLXSW_TRAP_H */ |  #endif /* _MLXSW_TRAP_H */ | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From f2ecea65348e527345e9e7a59766162eb2297a53 Mon Sep 17 00:00:00 2001 | From e7379493c9f7e30f7d20459ed07a435095e9a889 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 22 Jan 2021 14:45:06 +0100 | Date: Fri, 22 Jan 2021 14:45:06 +0100 | ||||||
| Subject: [PATCH] mlxsw: core_linecards: Implement line card activation process | Subject: [PATCH backport 5.10 136/182] mlxsw: core_linecards: Implement line | ||||||
|  |  card activation process | ||||||
|  |  | ||||||
| Allow to process events generated upon line card getting "ready" and | Allow to process events generated upon line card getting "ready" and | ||||||
| "active". | "active". | ||||||
| @@ -13,7 +14,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  2 files changed, 80 insertions(+), 8 deletions(-) |  2 files changed, 80 insertions(+), 8 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index d3c5d8289..ecd91bb8c 100644 | index d3c5d8289a85..ecd91bb8ca77 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -521,6 +521,9 @@ struct mlxsw_linecard { | @@ -521,6 +521,9 @@ struct mlxsw_linecard { | ||||||
| @@ -27,7 +28,7 @@ index d3c5d8289..ecd91bb8c 100644 | |||||||
|   |   | ||||||
|  struct mlxsw_linecard_types_info; |  struct mlxsw_linecard_types_info; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| index a324ce243..134437f49 100644 | index a324ce2436e8..134437f49219 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| @@ -67,6 +67,8 @@ static const char *mlxsw_linecard_type_name(struct mlxsw_linecard *linecard) | @@ -67,6 +67,8 @@ static const char *mlxsw_linecard_type_name(struct mlxsw_linecard *linecard) | ||||||
| @@ -201,5 +202,5 @@ index a324ce243..134437f49 100644 | |||||||
|   |   | ||||||
|  void mlxsw_linecards_fini(struct mlxsw_core *mlxsw_core, |  void mlxsw_linecards_fini(struct mlxsw_core *mlxsw_core, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 063ca0577ceb2355884555d96a24a740a2c03bdb Mon Sep 17 00:00:00 2001 | From a0e62e8df42c4ae6eabba2ea0c2d076d8c8d06fb Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 22 Dec 2021 16:26:43 +0000 | Date: Wed, 22 Dec 2021 16:26:43 +0000 | ||||||
| Subject: [PATCH] mlxsw: core: Extend driver ops by remove selected ports op | Subject: [PATCH backport 5.10 137/182] mlxsw: core: Extend driver ops by | ||||||
|  |  remove selected ports op | ||||||
|  |  | ||||||
| In case of line card implementation, the core has to have a way to | In case of line card implementation, the core has to have a way to | ||||||
| remove relevant ports manually. Extend the Spectrum driver ops by an op | remove relevant ports manually. Extend the Spectrum driver ops by an op | ||||||
| @@ -15,7 +16,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  3 files changed, 32 insertions(+) |  3 files changed, 32 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index 246db548f..2b4f9844b 100644 | index 246db548f011..2b4f9844b1d6 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -2870,6 +2870,15 @@ mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core, | @@ -2870,6 +2870,15 @@ mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -35,7 +36,7 @@ index 246db548f..2b4f9844b 100644 | |||||||
|  { |  { | ||||||
|  	return mlxsw_core->env; |  	return mlxsw_core->env; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index ecd91bb8c..70f97ef74 100644 | index ecd91bb8ca77..70f97ef74a2c 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -223,6 +223,10 @@ enum devlink_port_type mlxsw_core_port_type_get(struct mlxsw_core *mlxsw_core, | @@ -223,6 +223,10 @@ enum devlink_port_type mlxsw_core_port_type_get(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -61,7 +62,7 @@ index ecd91bb8c..70f97ef74 100644 | |||||||
|  			   unsigned int sb_index, u16 pool_index, |  			   unsigned int sb_index, u16 pool_index, | ||||||
|  			   struct devlink_sb_pool_info *pool_info); |  			   struct devlink_sb_pool_info *pool_info); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| index d7a230828..75b418fbe 100644 | index bc233a5c8a79..82acff318dcd 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| @@ -1736,6 +1736,20 @@ static void mlxsw_sp_ports_remove(struct mlxsw_sp *mlxsw_sp) | @@ -1736,6 +1736,20 @@ static void mlxsw_sp_ports_remove(struct mlxsw_sp *mlxsw_sp) | ||||||
| @@ -94,5 +95,5 @@ index d7a230828..75b418fbe 100644 | |||||||
|  	.sb_pool_set			= mlxsw_sp_sb_pool_set, |  	.sb_pool_set			= mlxsw_sp_sb_pool_set, | ||||||
|  	.sb_port_pool_get		= mlxsw_sp_sb_port_pool_get, |  	.sb_port_pool_get		= mlxsw_sp_sb_port_pool_get, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From fd68af1d7a7c58c3f7db6ec95aba528137ec4c2d Mon Sep 17 00:00:00 2001 | From 718b7aec4ec4c7e3c327b2ffbf43b27126688836 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Mon, 3 Jan 2022 11:22:42 +0000 | Date: Mon, 3 Jan 2022 11:22:42 +0000 | ||||||
| Subject: [PATCH] mlxsw: spectrum: Add port to linecard mapping | Subject: [PATCH backport 5.10 138/182] mlxsw: spectrum: Add port to linecard | ||||||
|  |  mapping | ||||||
|  |  | ||||||
| For each port get slot_index using PMLP register. For ports residing | For each port get slot_index using PMLP register. For ports residing | ||||||
| on a linecard, identify it with the linecard by setting mapping | on a linecard, identify it with the linecard by setting mapping | ||||||
| @@ -19,7 +20,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  6 files changed, 20 insertions(+), 9 deletions(-) |  6 files changed, 20 insertions(+), 9 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index 2b4f9844b..68ef007ac 100644 | index 2b4f9844b1d6..68ef007ac48c 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -48,6 +48,7 @@ struct mlxsw_core_port { | @@ -48,6 +48,7 @@ struct mlxsw_core_port { | ||||||
| @@ -82,7 +83,7 @@ index 2b4f9844b..68ef007ac 100644 | |||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index 70f97ef74..8e738ddb3 100644 | index 70f97ef74a2c..8e738ddb39c8 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -202,7 +202,8 @@ void mlxsw_core_lag_mapping_clear(struct mlxsw_core *mlxsw_core, | @@ -202,7 +202,8 @@ void mlxsw_core_lag_mapping_clear(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -96,7 +97,7 @@ index 70f97ef74..8e738ddb3 100644 | |||||||
|  			 const unsigned char *switch_id, |  			 const unsigned char *switch_id, | ||||||
|  			 unsigned char switch_id_len); |  			 unsigned char switch_id_len); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| index 104f1ba02..30925f573 100644 | index 104f1ba0242f..30925f57362e 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| @@ -210,7 +210,7 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module) | @@ -210,7 +210,7 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module) | ||||||
| @@ -109,7 +110,7 @@ index 104f1ba02..30925f573 100644 | |||||||
|  				   0, mlxsw_m->base_mac, |  				   0, mlxsw_m->base_mac, | ||||||
|  				   sizeof(mlxsw_m->base_mac)); |  				   sizeof(mlxsw_m->base_mac)); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| index 75b418fbe..31eec40a3 100644 | index 82acff318dcd..c87267d002c6 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||||||
| @@ -1399,7 +1399,7 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port, | @@ -1399,7 +1399,7 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port, | ||||||
| @@ -122,7 +123,7 @@ index 75b418fbe..31eec40a3 100644 | |||||||
|  				   port_mapping->lane / lanes, |  				   port_mapping->lane / lanes, | ||||||
|  				   splittable, lanes, |  				   splittable, lanes, | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchib.c b/drivers/net/ethernet/mellanox/mlxsw/switchib.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchib.c b/drivers/net/ethernet/mellanox/mlxsw/switchib.c | ||||||
| index 1e561132e..090b9a103 100644 | index 1e561132eb1e..090b9a103c04 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/switchib.c | --- a/drivers/net/ethernet/mellanox/mlxsw/switchib.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/switchib.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/switchib.c | ||||||
| @@ -280,7 +280,7 @@ static int mlxsw_sib_port_create(struct mlxsw_sib *mlxsw_sib, u8 local_port, | @@ -280,7 +280,7 @@ static int mlxsw_sib_port_create(struct mlxsw_sib *mlxsw_sib, u8 local_port, | ||||||
| @@ -135,7 +136,7 @@ index 1e561132e..090b9a103 100644 | |||||||
|  				   mlxsw_sib->hw_id, sizeof(mlxsw_sib->hw_id)); |  				   mlxsw_sib->hw_id, sizeof(mlxsw_sib->hw_id)); | ||||||
|  	if (err) { |  	if (err) { | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c | ||||||
| index 131b2a53d..bf8a54776 100644 | index 131b2a53d261..bf8a54776861 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c | --- a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c | ||||||
| @@ -1085,7 +1085,7 @@ static int mlxsw_sx_port_eth_create(struct mlxsw_sx *mlxsw_sx, u8 local_port, | @@ -1085,7 +1085,7 @@ static int mlxsw_sx_port_eth_create(struct mlxsw_sx *mlxsw_sx, u8 local_port, | ||||||
| @@ -148,5 +149,5 @@ index 131b2a53d..bf8a54776 100644 | |||||||
|  				   mlxsw_sx->hw_id, sizeof(mlxsw_sx->hw_id)); |  				   mlxsw_sx->hw_id, sizeof(mlxsw_sx->hw_id)); | ||||||
|  	if (err) { |  	if (err) { | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From a719653b2a7f0943e757c04dab73df324e469436 Mon Sep 17 00:00:00 2001 | From 44b270551552a48c2a0799f1660b7bfdd0c10519 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 12 May 2021 22:57:37 +0300 | Date: Wed, 12 May 2021 22:57:37 +0300 | ||||||
| Subject: [PATCH] mlxsw: reg: Introduce Management Temperature Extended | Subject: [PATCH backport 5.10 139/182] mlxsw: reg: Introduce Management | ||||||
|  Capabilities Register |  Temperature Extended Capabilities Register | ||||||
|  |  | ||||||
| Introduce new register MTECR (Management Temperature Extended | Introduce new register MTECR (Management Temperature Extended | ||||||
| Capabilities Register). This register exposes the capabilities of the | Capabilities Register). This register exposes the capabilities of the | ||||||
| @@ -16,10 +16,10 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 67 insertions(+) |  1 file changed, 67 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index 89b21910f..c1ce0b42e 100644 | index e060f054e0a9..5757c4f40277 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10297,6 +10297,72 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | @@ -10296,6 +10296,72 @@ mlxsw_reg_mgpir_unpack(char *payload, u8 *num_of_devices, | ||||||
|  		*num_of_slots = mlxsw_reg_mgpir_num_of_slots_get(payload); |  		*num_of_slots = mlxsw_reg_mgpir_num_of_slots_get(payload); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -92,7 +92,7 @@ index 89b21910f..c1ce0b42e 100644 | |||||||
|  /* MBCT - Management Binary Code Transfer Register |  /* MBCT - Management Binary Code Transfer Register | ||||||
|   * ----------------------------------------------- |   * ----------------------------------------------- | ||||||
|   * This register allows to transfer binary codes from the Host to |   * This register allows to transfer binary codes from the Host to | ||||||
| @@ -11884,6 +11950,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | @@ -11883,6 +11949,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | ||||||
|  	MLXSW_REG(mtptpt), |  	MLXSW_REG(mtptpt), | ||||||
|  	MLXSW_REG(mfgd), |  	MLXSW_REG(mfgd), | ||||||
|  	MLXSW_REG(mgpir), |  	MLXSW_REG(mgpir), | ||||||
| @@ -101,5 +101,5 @@ index 89b21910f..c1ce0b42e 100644 | |||||||
|  	MLXSW_REG(mddq), |  	MLXSW_REG(mddq), | ||||||
|  	MLXSW_REG(mddc), |  	MLXSW_REG(mddc), | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 1ea36b4966e21d9d599da7e4e3195364841d9318 Mon Sep 17 00:00:00 2001 | From 3614c1e72e48e03c64ce88d269d97ee4743f9cc4 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Mon, 13 Dec 2021 12:29:10 +0000 | Date: Mon, 13 Dec 2021 12:29:10 +0000 | ||||||
| Subject: [PATCH] mlxsw: core: Add APIs for thermal sensor mapping | Subject: [PATCH backport 5.10 140/182] mlxsw: core: Add APIs for thermal | ||||||
|  |  sensor mapping | ||||||
|  |  | ||||||
| Add APIs mlxsw_env_sensor_map_init() and mlxsw_env_sensor_map_fini((). | Add APIs mlxsw_env_sensor_map_init() and mlxsw_env_sensor_map_fini((). | ||||||
| The purpose of the first one is to allocate and create thermal sensors | The purpose of the first one is to allocate and create thermal sensors | ||||||
| @@ -21,10 +22,10 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  2 files changed, 59 insertions(+) |  2 files changed, 59 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index 94d44db1a..c27cd424b 100644 | index 4553dfa68f96..4f3fc25af013 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -626,6 +626,53 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | @@ -624,6 +624,53 @@ mlxsw_env_set_module_power_mode(struct mlxsw_core *mlxsw_core, u8 slot_index, | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(mlxsw_env_set_module_power_mode); |  EXPORT_SYMBOL(mlxsw_env_set_module_power_mode); | ||||||
|   |   | ||||||
| @@ -79,7 +80,7 @@ index 94d44db1a..c27cd424b 100644 | |||||||
|  					    u8 slot_index, u8 module, |  					    u8 slot_index, u8 module, | ||||||
|  					    bool *p_has_temp_sensor) |  					    bool *p_has_temp_sensor) | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.h b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.h b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | ||||||
| index 03d027870..336c9ee57 100644 | index 03d027870d65..336c9ee579cb 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.h | ||||||
| @@ -9,6 +9,11 @@ | @@ -9,6 +9,11 @@ | ||||||
| @@ -109,5 +110,5 @@ index 03d027870..336c9ee57 100644 | |||||||
|  mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, |  mlxsw_env_get_module_eeprom_by_page(struct mlxsw_core *mlxsw_core, | ||||||
|  				    u8 slot_index, u8 module, |  				    u8 slot_index, u8 module, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 46563dcd511270f67a9e771497ccfc73907aa4d3 Mon Sep 17 00:00:00 2001 | From d7353e41900e4d6fa44fa5e51a483b9f01432846 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Thu, 25 Feb 2021 10:17:53 +0100 | Date: Thu, 25 Feb 2021 10:17:53 +0100 | ||||||
| Subject: [PATCH] mlxsw: reg: Add Management DownStream Device Tunneling | Subject: [PATCH backport 5.10 141/182] mlxsw: reg: Add Management DownStream | ||||||
|  Register |  Device Tunneling Register | ||||||
|  |  | ||||||
| The MDDT register allows deliver query and request messages | The MDDT register allows deliver query and request messages | ||||||
| (PRM registers, commands) to a DownStream device. | (PRM registers, commands) to a DownStream device. | ||||||
| @@ -13,10 +13,10 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 91 insertions(+) |  1 file changed, 91 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| index c1ce0b42e..f8c828e05 100644 | index 5757c4f40277..7b71e9ae3d51 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h | ||||||
| @@ -10482,6 +10482,96 @@ mlxsw_reg_mbct_unpack(const char *payload, u8 *p_slot_index, | @@ -10481,6 +10481,96 @@ mlxsw_reg_mbct_unpack(const char *payload, u8 *p_slot_index, | ||||||
|  		*p_fsm_state = mlxsw_reg_mbct_fsm_state_get(payload); |  		*p_fsm_state = mlxsw_reg_mbct_fsm_state_get(payload); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -113,7 +113,7 @@ index c1ce0b42e..f8c828e05 100644 | |||||||
|  /* MDDQ - Management DownStream Device Query Register |  /* MDDQ - Management DownStream Device Query Register | ||||||
|   * -------------------------------------------------- |   * -------------------------------------------------- | ||||||
|   * This register allows to query the DownStream device properties. The desired |   * This register allows to query the DownStream device properties. The desired | ||||||
| @@ -11952,6 +12042,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | @@ -11951,6 +12041,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { | ||||||
|  	MLXSW_REG(mgpir), |  	MLXSW_REG(mgpir), | ||||||
|  	MLXSW_REG(mtecr), |  	MLXSW_REG(mtecr), | ||||||
|  	MLXSW_REG(mbct), |  	MLXSW_REG(mbct), | ||||||
| @@ -122,5 +122,5 @@ index c1ce0b42e..f8c828e05 100644 | |||||||
|  	MLXSW_REG(mddc), |  	MLXSW_REG(mddc), | ||||||
|  	MLXSW_REG(mfde), |  	MLXSW_REG(mfde), | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 70bc337251ccbfe095a89457ded233c3ad5b9bbc Mon Sep 17 00:00:00 2001 | From 51f5cf36b8b2c94d8a71bfa17d5f71257048c314 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 26 Feb 2021 13:15:09 +0100 | Date: Fri, 26 Feb 2021 13:15:09 +0100 | ||||||
| Subject: [PATCH] mlxsw: core_linecards: Probe devices for provisioned line | Subject: [PATCH backport 5.10 142/182] mlxsw: core_linecards: Probe devices | ||||||
|  card and attach them |  for provisioned line card and attach them | ||||||
|  |  | ||||||
| In case the line card is provisioned, go over all possible existing | In case the line card is provisioned, go over all possible existing | ||||||
| devices (gearboxes) on it and attach them, so devlink core is aware of | devices (gearboxes) on it and attach them, so devlink core is aware of | ||||||
| @@ -15,7 +15,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  2 files changed, 108 insertions(+), 8 deletions(-) |  2 files changed, 108 insertions(+), 8 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index 8e738ddb3..593470d14 100644 | index 8e738ddb39c8..593470d14815 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -533,6 +533,9 @@ struct mlxsw_linecard { | @@ -533,6 +533,9 @@ struct mlxsw_linecard { | ||||||
| @@ -29,7 +29,7 @@ index 8e738ddb3..593470d14 100644 | |||||||
|   |   | ||||||
|  struct mlxsw_linecard_types_info; |  struct mlxsw_linecard_types_info; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| index 134437f49..720ad6d82 100644 | index 134437f49219..720ad6d82798 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| @@ -64,27 +64,120 @@ static const char *mlxsw_linecard_type_name(struct mlxsw_linecard *linecard) | @@ -64,27 +64,120 @@ static const char *mlxsw_linecard_type_name(struct mlxsw_linecard *linecard) | ||||||
| @@ -220,5 +220,5 @@ index 134437f49..720ad6d82 100644 | |||||||
|  	mutex_destroy(&linecard->lock); |  	mutex_destroy(&linecard->lock); | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 8279b3c273fac860394fb922c70c336993e6f087 Mon Sep 17 00:00:00 2001 | From e4830f23af9d14fac42764dd077f49de8de7bff2 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Thu, 10 Jun 2021 15:32:00 +0200 | Date: Thu, 10 Jun 2021 15:32:00 +0200 | ||||||
| Subject: [PATCH] mlxsw: core_linecards: Expose device FW version over device | Subject: [PATCH backport 5.10 143/182] mlxsw: core_linecards: Expose device FW | ||||||
|  info |  version over device info | ||||||
|  |  | ||||||
| Extend MDDQ to obtain FW version of line card device and implement | Extend MDDQ to obtain FW version of line card device and implement | ||||||
| device_info_get() op to fill up the info with that. | device_info_get() op to fill up the info with that. | ||||||
| @@ -13,7 +13,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 100 insertions(+), 4 deletions(-) |  1 file changed, 100 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| index 720ad6d82..cb872f918 100644 | index 720ad6d82798..cb872f918f01 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| @@ -64,13 +64,31 @@ static const char *mlxsw_linecard_type_name(struct mlxsw_linecard *linecard) | @@ -64,13 +64,31 @@ static const char *mlxsw_linecard_type_name(struct mlxsw_linecard *linecard) | ||||||
| @@ -173,5 +173,5 @@ index 720ad6d82..cb872f918 100644 | |||||||
|   |   | ||||||
|  static int mlxsw_linecard_init(struct mlxsw_core *mlxsw_core, |  static int mlxsw_linecard_init(struct mlxsw_core *mlxsw_core, | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From a1421cadee435540d09a5526525f692821a271cd Mon Sep 17 00:00:00 2001 | From 1eb0843255d6e92aa96d0ea11a15ab1f86b20e4f Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 26 Feb 2021 18:40:28 +0100 | Date: Fri, 26 Feb 2021 18:40:28 +0100 | ||||||
| Subject: [PATCH] mlxsw: core: Introduce flash update components | Subject: [PATCH backport 5.10 144/182] mlxsw: core: Introduce flash update | ||||||
|  |  components | ||||||
|  |  | ||||||
| Introduce an infrastructure allowing to have multiple components for | Introduce an infrastructure allowing to have multiple components for | ||||||
| flashing purposes that can be registered from inside the driver. Convert | flashing purposes that can be registered from inside the driver. Convert | ||||||
| @@ -15,7 +16,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  3 files changed, 125 insertions(+), 7 deletions(-) |  3 files changed, 125 insertions(+), 7 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index 68ef007ac..f55071982 100644 | index 68ef007ac48c..f55071982271 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -91,6 +91,10 @@ struct mlxsw_core { | @@ -91,6 +91,10 @@ struct mlxsw_core { | ||||||
| @@ -188,7 +189,7 @@ index 68ef007ac..f55071982 100644 | |||||||
|  	return; |  	return; | ||||||
|   |   | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index 593470d14..30f00da0a 100644 | index 593470d14815..30f00da0a48d 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -41,6 +41,18 @@ mlxsw_core_fw_rev_minor_subminor_validate(const struct mlxsw_fw_rev *rev, | @@ -41,6 +41,18 @@ mlxsw_core_fw_rev_minor_subminor_validate(const struct mlxsw_fw_rev *rev, | ||||||
| @@ -211,7 +212,7 @@ index 593470d14..30f00da0a 100644 | |||||||
|  				   const struct mlxsw_bus *mlxsw_bus, |  				   const struct mlxsw_bus *mlxsw_bus, | ||||||
|  				   void *bus_priv, bool reload, |  				   void *bus_priv, bool reload, | ||||||
| diff --git a/include/net/devlink.h b/include/net/devlink.h | diff --git a/include/net/devlink.h b/include/net/devlink.h | ||||||
| index 06b61c1d7..fafbec26d 100644 | index 06b61c1d7938..fafbec26d2c4 100644 | ||||||
| --- a/include/net/devlink.h | --- a/include/net/devlink.h | ||||||
| +++ b/include/net/devlink.h | +++ b/include/net/devlink.h | ||||||
| @@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||||||
| @@ -239,5 +240,5 @@ index 06b61c1d7..fafbec26d 100644 | |||||||
|  	const char *component; |  	const char *component; | ||||||
|  	u32 overwrite_mask; |  	u32 overwrite_mask; | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From ecf655b1e2329f2376f014c2cad0f81ec2ac5deb Mon Sep 17 00:00:00 2001 | From 81cb237570a4d0251455d17e073337f73c1b4aa9 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 4 Jun 2021 10:25:35 +0200 | Date: Fri, 4 Jun 2021 10:25:35 +0200 | ||||||
| Subject: [PATCH] mlxfw: Get the PSID value using op instead of passing it in | Subject: [PATCH backport 5.10 145/182] mlxfw: Get the PSID value using op | ||||||
|  struct |  instead of passing it in struct | ||||||
|  |  | ||||||
| In preparation for line card device flashing, where the PSID is going to | In preparation for line card device flashing, where the PSID is going to | ||||||
| be obtained dynamically using MGIR register for each individual line | be obtained dynamically using MGIR register for each individual line | ||||||
| @@ -17,7 +17,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  4 files changed, 52 insertions(+), 12 deletions(-) |  4 files changed, 52 insertions(+), 12 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fw.c b/drivers/net/ethernet/mellanox/mlx5/core/fw.c | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fw.c b/drivers/net/ethernet/mellanox/mlx5/core/fw.c | ||||||
| index 02558ac2a..06edfd5b1 100644 | index 02558ac2ace6..06edfd5b12e0 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlx5/core/fw.c | --- a/drivers/net/ethernet/mellanox/mlx5/core/fw.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/fw.c | +++ b/drivers/net/ethernet/mellanox/mlx5/core/fw.c | ||||||
| @@ -494,6 +494,20 @@ struct mlx5_mlxfw_dev { | @@ -494,6 +494,20 @@ struct mlx5_mlxfw_dev { | ||||||
| @@ -60,7 +60,7 @@ index 02558ac2a..06edfd5b1 100644 | |||||||
|  		}, |  		}, | ||||||
|  		.mlx5_core_dev = dev |  		.mlx5_core_dev = dev | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h b/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | diff --git a/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h b/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | ||||||
| index 7654841a0..b83651246 100644 | index 7654841a05c2..b83651246c1f 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | --- a/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | +++ b/drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | ||||||
| @@ -11,8 +11,6 @@ | @@ -11,8 +11,6 @@ | ||||||
| @@ -82,7 +82,7 @@ index 7654841a0..b83651246 100644 | |||||||
|  			       u32 *p_max_size, u8 *p_align_bits, |  			       u32 *p_max_size, u8 *p_align_bits, | ||||||
|  			       u16 *p_max_write_size); |  			       u16 *p_max_write_size); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c | diff --git a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c | ||||||
| index bcd166911..329ddf1b3 100644 | index bcd166911d44..329ddf1b3b89 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c | --- a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c | +++ b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c | ||||||
| @@ -303,7 +303,8 @@ static int mlxfw_flash_component(struct mlxfw_dev *mlxfw_dev, | @@ -303,7 +303,8 @@ static int mlxfw_flash_component(struct mlxfw_dev *mlxfw_dev, | ||||||
| @@ -152,7 +152,7 @@ index bcd166911..329ddf1b3 100644 | |||||||
|  err_fsm_reactivate: |  err_fsm_reactivate: | ||||||
|  err_state_wait_idle_to_locked: |  err_state_wait_idle_to_locked: | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index f55071982..8c1280781 100644 | index f55071982271..8c128078105a 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -890,6 +890,21 @@ struct mlxsw_core_fw_info { | @@ -890,6 +890,21 @@ struct mlxsw_core_fw_info { | ||||||
| @@ -196,5 +196,5 @@ index f55071982..8c1280781 100644 | |||||||
|  		}, |  		}, | ||||||
|  		.mlxsw_core = mlxsw_core |  		.mlxsw_core = mlxsw_core | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From b721c11b90bb0ef2fcd0bfccd6334948153edea2 Mon Sep 17 00:00:00 2001 | From 0e642e558b98e1a686b39acb53f53c1fb9735b02 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 5 Mar 2021 09:33:21 +0100 | Date: Fri, 5 Mar 2021 09:33:21 +0100 | ||||||
| Subject: [PATCH] mlxsw: core_linecards: Implement line card device flashing | Subject: [PATCH backport 5.10 146/182] mlxsw: core_linecards: Implement line | ||||||
|  |  card device flashing | ||||||
|  |  | ||||||
| Generate flash component name and register it internally within mlxsw | Generate flash component name and register it internally within mlxsw | ||||||
| for flashing. Also, propagate the component name to devlink core which | for flashing. Also, propagate the component name to devlink core which | ||||||
| @@ -15,7 +16,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 334 insertions(+), 1 deletion(-) |  1 file changed, 334 insertions(+), 1 deletion(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| index cb872f918..9f9ee582f 100644 | index cb872f918f01..9f9ee582fce2 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| @@ -73,6 +73,7 @@ struct mlxsw_linecard_device_info { | @@ -73,6 +73,7 @@ struct mlxsw_linecard_device_info { | ||||||
| @@ -396,5 +397,5 @@ index cb872f918..9f9ee582f 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 19bae5f5978a43a22258843cc999b592d0e4b414 Mon Sep 17 00:00:00 2001 | From 5e3bebf1e096e4770cad3aaf3d03fa22429fe5f9 Mon Sep 17 00:00:00 2001 | ||||||
| From: Jiri Pirko <jiri@nvidia.com> | From: Jiri Pirko <jiri@nvidia.com> | ||||||
| Date: Fri, 22 Jan 2021 15:01:06 +0100 | Date: Fri, 22 Jan 2021 15:01:06 +0100 | ||||||
| Subject: [PATCH] mlxsw: core_linecards: Introduce ops for linecards status | Subject: [PATCH backport 5.10 147/182] mlxsw: core_linecards: Introduce ops | ||||||
|  change tracking |  for linecards status change tracking | ||||||
|  |  | ||||||
| Introduce an infrastructure allowing the core to register set of ops | Introduce an infrastructure allowing the core to register set of ops | ||||||
| which are called whenever line card gets provisione/unprovisioned | which are called whenever line card gets provisione/unprovisioned | ||||||
| @@ -15,7 +15,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  2 files changed, 150 insertions(+), 6 deletions(-) |  2 files changed, 150 insertions(+), 6 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index 30f00da0a..10ea541bb 100644 | index 30f00da0a48d..10ea541bb19d 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -582,4 +582,26 @@ int mlxsw_linecard_status_process(struct mlxsw_core *mlxsw_core, | @@ -582,4 +582,26 @@ int mlxsw_linecard_status_process(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -46,7 +46,7 @@ index 30f00da0a..10ea541bb 100644 | |||||||
| + | + | ||||||
|  #endif |  #endif | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| index 9f9ee582f..3a2fdd22d 100644 | index 9f9ee582fce2..3a2fdd22dc21 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
| @@ -576,6 +576,59 @@ static void mlxsw_linecard_provision_fail(struct mlxsw_core *mlxsw_core, | @@ -576,6 +576,59 @@ static void mlxsw_linecard_provision_fail(struct mlxsw_core *mlxsw_core, | ||||||
| @@ -273,5 +273,5 @@ index 9f9ee582f..3a2fdd22d 100644 | |||||||
| + | + | ||||||
|  MODULE_FIRMWARE(MLXSW_LINECARDS_INI_BUNDLE_FILE); |  MODULE_FIRMWARE(MLXSW_LINECARDS_INI_BUNDLE_FILE); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 8d6f7da411b62b4450db1ebb8b687dbc5a386300 Mon Sep 17 00:00:00 2001 | From d037308b118ee4a1ccf557dc3f1c47b81bb62c4c Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Mon, 13 Dec 2021 12:54:36 +0000 | Date: Mon, 13 Dec 2021 12:54:36 +0000 | ||||||
| Subject: [PATCH] mlxsw: core: Add interfaces for line card initialization and | Subject: [PATCH backport 5.10 148/182] mlxsw: core: Add interfaces for line | ||||||
|  de-initialization |  card initialization and de-initialization | ||||||
|  |  | ||||||
| Add callback functions for line card cables info initialization and | Add callback functions for line card cables info initialization and | ||||||
| de-initialization. | de-initialization. | ||||||
| @@ -19,10 +19,10 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  1 file changed, 78 insertions(+) |  1 file changed, 78 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| index c27cd424b..f9c770eec 100644 | index 4f3fc25af013..98f7cf672d9e 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c | ||||||
| @@ -1162,6 +1162,77 @@ mlxsw_env_module_event_disable(struct mlxsw_env *mlxsw_env, u8 slot_index) | @@ -1160,6 +1160,77 @@ mlxsw_env_module_event_disable(struct mlxsw_env *mlxsw_env, u8 slot_index) | ||||||
|  { |  { | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -100,7 +100,7 @@ index c27cd424b..f9c770eec 100644 | |||||||
|  int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) |  int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  { |  { | ||||||
|  	u8 module_count, num_of_slots, max_module_count; |  	u8 module_count, num_of_slots, max_module_count; | ||||||
| @@ -1198,6 +1269,10 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -1196,6 +1267,10 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  	mutex_init(&env->line_cards_lock); |  	mutex_init(&env->line_cards_lock); | ||||||
|  	*p_env = env; |  	*p_env = env; | ||||||
|   |   | ||||||
| @@ -111,7 +111,7 @@ index c27cd424b..f9c770eec 100644 | |||||||
|  	err = mlxsw_env_temp_warn_event_register(mlxsw_core); |  	err = mlxsw_env_temp_warn_event_register(mlxsw_core); | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_temp_warn_event_register; |  		goto err_temp_warn_event_register; | ||||||
| @@ -1225,6 +1300,8 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | @@ -1223,6 +1298,8 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core, struct mlxsw_env **p_env) | ||||||
|  err_module_plug_event_register: |  err_module_plug_event_register: | ||||||
|  	mlxsw_env_temp_warn_event_unregister(env); |  	mlxsw_env_temp_warn_event_unregister(env); | ||||||
|  err_temp_warn_event_register: |  err_temp_warn_event_register: | ||||||
| @@ -120,7 +120,7 @@ index c27cd424b..f9c770eec 100644 | |||||||
|  	mutex_destroy(&env->line_cards_lock); |  	mutex_destroy(&env->line_cards_lock); | ||||||
|  	mlxsw_env_line_cards_free(env); |  	mlxsw_env_line_cards_free(env); | ||||||
|  err_mlxsw_env_line_cards_alloc: |  err_mlxsw_env_line_cards_alloc: | ||||||
| @@ -1239,6 +1316,7 @@ void mlxsw_env_fini(struct mlxsw_env *env) | @@ -1237,6 +1314,7 @@ void mlxsw_env_fini(struct mlxsw_env *env) | ||||||
|  	/* Make sure there is no more event work scheduled. */ |  	/* Make sure there is no more event work scheduled. */ | ||||||
|  	mlxsw_core_flush_owq(); |  	mlxsw_core_flush_owq(); | ||||||
|  	mlxsw_env_temp_warn_event_unregister(env); |  	mlxsw_env_temp_warn_event_unregister(env); | ||||||
| @@ -129,5 +129,5 @@ index c27cd424b..f9c770eec 100644 | |||||||
|  	mlxsw_env_line_cards_free(env); |  	mlxsw_env_line_cards_free(env); | ||||||
|  	kfree(env); |  	kfree(env); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 62b2da593b9ee1042b0d65c7b84e9f463497ecd8 Mon Sep 17 00:00:00 2001 | From 71416a2dd1900ac8eb9b7d5cd08911d331b074ff Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 12 May 2021 22:57:39 +0300 | Date: Wed, 12 May 2021 22:57:39 +0300 | ||||||
| Subject: [PATCH] mlxsw: core_thermal: Add interfaces for line card | Subject: [PATCH backport 5.10 149/182] mlxsw: core_thermal: Add interfaces for | ||||||
|  initialization and de-initialization |  line card initialization and de-initialization | ||||||
|  |  | ||||||
| Add callback functions for line card thermal area initialization and | Add callback functions for line card thermal area initialization and | ||||||
| de-initialization. Each line card is associated with the relevant | de-initialization. Each line card is associated with the relevant | ||||||
| @@ -34,10 +34,10 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 129 insertions(+) |  1 file changed, 129 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| index e860cade5..88a2f63c8 100644 | index b9253c9f70d9..529108aea3c6 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
| @@ -96,6 +96,7 @@ struct mlxsw_thermal_module { | @@ -88,6 +88,7 @@ struct mlxsw_thermal_module { | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  struct mlxsw_thermal_area { |  struct mlxsw_thermal_area { | ||||||
| @@ -45,7 +45,7 @@ index e860cade5..88a2f63c8 100644 | |||||||
|  	struct mlxsw_thermal_module *tz_module_arr; |  	struct mlxsw_thermal_module *tz_module_arr; | ||||||
|  	u8 tz_module_num; |  	u8 tz_module_num; | ||||||
|  	struct mlxsw_thermal_module *tz_gearbox_arr; |  	struct mlxsw_thermal_module *tz_gearbox_arr; | ||||||
| @@ -113,6 +114,7 @@ struct mlxsw_thermal { | @@ -105,6 +106,7 @@ struct mlxsw_thermal { | ||||||
|  	u8 cooling_levels[MLXSW_THERMAL_MAX_STATE + 1]; |  	u8 cooling_levels[MLXSW_THERMAL_MAX_STATE + 1]; | ||||||
|  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; |  	struct mlxsw_thermal_trip trips[MLXSW_THERMAL_NUM_TRIPS]; | ||||||
|  	struct mlxsw_thermal_area *main; |  	struct mlxsw_thermal_area *main; | ||||||
| @@ -53,7 +53,7 @@ index e860cade5..88a2f63c8 100644 | |||||||
|  	unsigned int tz_highest_score; |  	unsigned int tz_highest_score; | ||||||
|  	struct thermal_zone_device *tz_highest_dev; |  	struct thermal_zone_device *tz_highest_dev; | ||||||
|  }; |  }; | ||||||
| @@ -989,6 +991,126 @@ mlxsw_thermal_gearboxes_fini(struct mlxsw_thermal *thermal, | @@ -948,6 +950,126 @@ mlxsw_thermal_gearboxes_fini(struct mlxsw_thermal *thermal, | ||||||
|  		mlxsw_thermal_gearbox_tz_fini(&area->tz_gearbox_arr[i]); |  		mlxsw_thermal_gearbox_tz_fini(&area->tz_gearbox_arr[i]); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -180,7 +180,7 @@ index e860cade5..88a2f63c8 100644 | |||||||
|  int mlxsw_thermal_init(struct mlxsw_core *core, |  int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  		       const struct mlxsw_bus_info *bus_info, |  		       const struct mlxsw_bus_info *bus_info, | ||||||
|  		       struct mlxsw_thermal **p_thermal) |  		       struct mlxsw_thermal **p_thermal) | ||||||
| @@ -1094,6 +1216,10 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -1052,6 +1174,10 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_thermal_gearboxes_init; |  		goto err_thermal_gearboxes_init; | ||||||
|   |   | ||||||
| @@ -191,7 +191,7 @@ index e860cade5..88a2f63c8 100644 | |||||||
|  	err = thermal_zone_device_enable(thermal->tzdev); |  	err = thermal_zone_device_enable(thermal->tzdev); | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto err_thermal_zone_device_enable; |  		goto err_thermal_zone_device_enable; | ||||||
| @@ -1102,6 +1228,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | @@ -1060,6 +1186,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
|  err_thermal_zone_device_enable: |  err_thermal_zone_device_enable: | ||||||
| @@ -200,7 +200,7 @@ index e860cade5..88a2f63c8 100644 | |||||||
|  	mlxsw_thermal_gearboxes_fini(thermal, thermal->main); |  	mlxsw_thermal_gearboxes_fini(thermal, thermal->main); | ||||||
|  err_thermal_gearboxes_init: |  err_thermal_gearboxes_init: | ||||||
|  	mlxsw_thermal_gearboxes_main_fini(thermal->main); |  	mlxsw_thermal_gearboxes_main_fini(thermal->main); | ||||||
| @@ -1129,6 +1257,7 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | @@ -1087,6 +1215,7 @@ void mlxsw_thermal_fini(struct mlxsw_thermal *thermal) | ||||||
|  { |  { | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| @@ -209,5 +209,5 @@ index e860cade5..88a2f63c8 100644 | |||||||
|  	mlxsw_thermal_gearboxes_main_fini(thermal->main); |  	mlxsw_thermal_gearboxes_main_fini(thermal->main); | ||||||
|  	mlxsw_thermal_modules_fini(thermal, thermal->main); |  	mlxsw_thermal_modules_fini(thermal, thermal->main); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 97f2a14ec9543588b37be8fc54aad9ed13cceec9 Mon Sep 17 00:00:00 2001 | From 7405ad4281c96aedcf879357d03487556abed05d Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 12 May 2021 22:57:42 +0300 | Date: Wed, 12 May 2021 22:57:42 +0300 | ||||||
| Subject: [PATCH] mlxsw: core_hwmon: Add interfaces for line card | Subject: [PATCH backport 5.10 150/182] mlxsw: core_hwmon: Add interfaces for | ||||||
|  initialization and de-initialization |  line card initialization and de-initialization | ||||||
|  |  | ||||||
| Add callback functions for line card 'hwmon' initialization and | Add callback functions for line card 'hwmon' initialization and | ||||||
| de-initialization. Each line card is associated with the relevant | de-initialization. Each line card is associated with the relevant | ||||||
| @@ -29,7 +29,7 @@ Signed-off-by: Jiri Pirko <jiri@nvidia.com> | |||||||
|  1 file changed, 134 insertions(+), 3 deletions(-) |  1 file changed, 134 insertions(+), 3 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| index 6af23f472..a27146cca 100644 | index 6af23f4724e4..a27146ccafc5 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | ||||||
| @@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||||||
| @@ -231,5 +231,5 @@ index 6af23f472..a27146cca 100644 | |||||||
|  	mlxsw_hwmon_gearbox_main_fini(mlxsw_hwmon->main); |  	mlxsw_hwmon_gearbox_main_fini(mlxsw_hwmon->main); | ||||||
|  	kfree(mlxsw_hwmon->main); |  	kfree(mlxsw_hwmon->main); | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From 37eabf5ec0121c1a5092f48360b3d1208a22e655 Mon Sep 17 00:00:00 2001 | From e3a3f15e69b566577c2ebe0b6f3bc019476c6879 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Thu, 30 Dec 2021 16:02:59 +0000 | Date: Thu, 30 Dec 2021 16:02:59 +0000 | ||||||
| Subject: [PATCH] mlxsw: minimal: Prepare driver for modular system support | Subject: [PATCH backport 5.10 151/182] mlxsw: minimal: Prepare driver for | ||||||
|  |  modular system support | ||||||
|  |  | ||||||
| As a preparation for line cards support: | As a preparation for line cards support: | ||||||
| - Allocate per line card array according to the queried number of slots | - Allocate per line card array according to the queried number of slots | ||||||
| @@ -23,7 +24,7 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  1 file changed, 242 insertions(+), 51 deletions(-) |  1 file changed, 242 insertions(+), 51 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| index 30925f573..59c5053dc 100644 | index 30925f57362e..59c5053dc5fd 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| @@ -24,22 +24,40 @@ static const struct mlxsw_fw_rev mlxsw_m_fw_rev = { | @@ -24,22 +24,40 @@ static const struct mlxsw_fw_rev mlxsw_m_fw_rev = { | ||||||
| @@ -491,5 +492,5 @@ index 30925f573..59c5053dc 100644 | |||||||
|   |   | ||||||
|  static const struct mlxsw_config_profile mlxsw_m_config_profile; |  static const struct mlxsw_config_profile mlxsw_m_config_profile; | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From bf88a40c8d0379e1ce8a6cc0a2bf4f935f90307c Mon Sep 17 00:00:00 2001 | From da7c615b231402e3084dae855468be117538535c Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Wed, 15 Dec 2021 08:59:14 +0000 | Date: Wed, 15 Dec 2021 08:59:14 +0000 | ||||||
| Subject: [PATCH] mlxsw: core: Extend bus init function with event handler | Subject: [PATCH backport 5.10 152/182] mlxsw: core: Extend bus init function | ||||||
|  argument |  with event handler argument | ||||||
|  |  | ||||||
| The purpose of new argument - is to introduce system event handler for | The purpose of new argument - is to introduce system event handler for | ||||||
| treating line card activation / deactivation signals on modular system. | treating line card activation / deactivation signals on modular system. | ||||||
| @@ -16,7 +16,7 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  4 files changed, 13 insertions(+), 6 deletions(-) |  4 files changed, 13 insertions(+), 6 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index 8c1280781..a9bb43837 100644 | index 8c128078105a..a9bb43837b33 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -2005,7 +2005,8 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info, | @@ -2005,7 +2005,8 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info, | ||||||
| @@ -30,7 +30,7 @@ index 8c1280781..a9bb43837 100644 | |||||||
|  		goto err_bus_init; |  		goto err_bus_init; | ||||||
|   |   | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| index 10ea541bb..b09f9013d 100644 | index 10ea541bb19d..b09f9013db77 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | --- a/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h | ||||||
| @@ -390,6 +390,7 @@ struct mlxsw_driver { | @@ -390,6 +390,7 @@ struct mlxsw_driver { | ||||||
| @@ -52,10 +52,10 @@ index 10ea541bb..b09f9013d 100644 | |||||||
|  	bool (*skb_transmit_busy)(void *bus_priv, |  	bool (*skb_transmit_busy)(void *bus_priv, | ||||||
|  				  const struct mlxsw_tx_info *tx_info); |  				  const struct mlxsw_tx_info *tx_info); | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
| index b8a5c0cbb..b75416561 100644 | index ce843ea91464..0cdb9b9d8353 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c | --- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
| @@ -530,7 +530,8 @@ static int mlxsw_i2c_skb_transmit(void *bus_priv, struct sk_buff *skb, | @@ -509,7 +509,8 @@ static int mlxsw_i2c_skb_transmit(void *bus_priv, struct sk_buff *skb, | ||||||
|  static int |  static int | ||||||
|  mlxsw_i2c_init(void *bus_priv, struct mlxsw_core *mlxsw_core, |  mlxsw_i2c_init(void *bus_priv, struct mlxsw_core *mlxsw_core, | ||||||
|  	       const struct mlxsw_config_profile *profile, |  	       const struct mlxsw_config_profile *profile, | ||||||
| @@ -66,7 +66,7 @@ index b8a5c0cbb..b75416561 100644 | |||||||
|  	struct mlxsw_i2c *mlxsw_i2c = bus_priv; |  	struct mlxsw_i2c *mlxsw_i2c = bus_priv; | ||||||
|  	char *mbox; |  	char *mbox; | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c | ||||||
| index dbb16ce25..e8e91130c 100644 | index dbb16ce25bdf..e8e91130cdf5 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/pci.c | --- a/drivers/net/ethernet/mellanox/mlxsw/pci.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c | ||||||
| @@ -1411,9 +1411,12 @@ static void mlxsw_pci_free_irq_vectors(struct mlxsw_pci *mlxsw_pci) | @@ -1411,9 +1411,12 @@ static void mlxsw_pci_free_irq_vectors(struct mlxsw_pci *mlxsw_pci) | ||||||
| @@ -86,5 +86,5 @@ index dbb16ce25..e8e91130c 100644 | |||||||
|  	struct mlxsw_pci *mlxsw_pci = bus_priv; |  	struct mlxsw_pci *mlxsw_pci = bus_priv; | ||||||
|  	struct pci_dev *pdev = mlxsw_pci->pdev; |  	struct pci_dev *pdev = mlxsw_pci->pdev; | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From c5235b3c4a8ab2b758140d75a7422117e917478c Mon Sep 17 00:00:00 2001 | From 8d7807e7b8326c537aa7db4fe31b2ca183d32248 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Sun, 19 Dec 2021 09:12:58 +0000 | Date: Sun, 19 Dec 2021 09:12:58 +0000 | ||||||
| Subject: [PATCH] mlxsw: i2c: Add support for system events handling | Subject: [PATCH backport v5.10.164 1/1] mlxsw: i2c: Add support for system | ||||||
|  |  events handling | ||||||
|  |  | ||||||
| Extend i2c bus driver with interrupt handler to support system specific | Extend i2c bus driver with interrupt handler to support system specific | ||||||
| hotplug events, related to line card state change. | hotplug events, related to line card state change. | ||||||
| @@ -17,7 +18,7 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  1 file changed, 110 insertions(+) |  1 file changed, 110 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
| index b75416561..e5883b4e8 100644 | index cc99ec3f4e96..02f5733cfcc6 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c | --- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||||||
| @@ -9,6 +9,7 @@ | @@ -9,6 +9,7 @@ | ||||||
| @@ -41,33 +42,33 @@ index b75416561..e5883b4e8 100644 | |||||||
|  /** |  /** | ||||||
|   * struct mlxsw_i2c - device private data: |   * struct mlxsw_i2c - device private data: | ||||||
|   * @cmd: command attributes; |   * @cmd: command attributes; | ||||||
| @@ -64,6 +71,12 @@ | @@ -63,6 +70,12 @@ | ||||||
|  |   * @core: switch core pointer; | ||||||
|   * @bus_info: bus info block; |   * @bus_info: bus info block; | ||||||
|   * @block_size: maximum block size allowed to pass to under layer; |   * @block_size: maximum block size allowed to pass to under layer; | ||||||
|   * @status: status to indicate chip reset or in-service update; |  | ||||||
| + * @pdata: device platform data; | + * @pdata: device platform data; | ||||||
| + * @dwork_irq: interrupts delayed work queue; | + * @dwork_irq: interrupts delayed work queue; | ||||||
| + * @lock - lock for interrupts sync; | + * @lock - lock for interrupts sync; | ||||||
| + * @sys_event_handler: system events handler callback; | + * @sys_event_handler: system events handler callback; | ||||||
| + * @irq: IRQ line number; | + * @irq: IRQ line number; | ||||||
| + * @irq_unhandled_count: number of unhandled interrupts; | + * @irq_unhandled_count: number of unhandled interrupts; | ||||||
|  |   * @status: status to indicate chip reset or in-service update; | ||||||
|   */ |   */ | ||||||
|  struct mlxsw_i2c { |  struct mlxsw_i2c { | ||||||
|  	struct { | @@ -77,6 +90,12 @@ struct mlxsw_i2c { | ||||||
| @@ -78,6 +91,12 @@ struct mlxsw_i2c { |  	struct mlxsw_core *core; | ||||||
|  	struct mlxsw_bus_info bus_info; |  	struct mlxsw_bus_info bus_info; | ||||||
|  	u16 block_size; |  	u16 block_size; | ||||||
|  	u8 status; |  | ||||||
| +	struct mlxreg_core_hotplug_platform_data *pdata; | +	struct mlxreg_core_hotplug_platform_data *pdata; | ||||||
| +	struct delayed_work dwork_irq; | +	struct delayed_work dwork_irq; | ||||||
| +	spinlock_t lock; /* sync with interrupt */ | +	spinlock_t lock; /* sync with interrupt */ | ||||||
| +	void (*sys_event_handler)(struct mlxsw_core *mlxsw_core); | +	void (*sys_event_handler)(struct mlxsw_core *mlxsw_core); | ||||||
| +	int irq; | +	int irq; | ||||||
| +	atomic_t irq_unhandled_count; | +	atomic_t irq_unhandled_count; | ||||||
|  |  	u8 status; | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  #define MLXSW_I2C_READ_MSG(_client, _addr_buf, _buf, _len) {	\ | @@ -537,6 +556,7 @@ mlxsw_i2c_init(void *bus_priv, struct mlxsw_core *mlxsw_core, | ||||||
| @@ -538,6 +557,7 @@ mlxsw_i2c_init(void *bus_priv, struct mlxsw_core *mlxsw_core, |  | ||||||
|  	int err; |  	int err; | ||||||
|   |   | ||||||
|  	mlxsw_i2c->core = mlxsw_core; |  	mlxsw_i2c->core = mlxsw_core; | ||||||
| @@ -75,7 +76,7 @@ index b75416561..e5883b4e8 100644 | |||||||
|   |   | ||||||
|  	mbox = mlxsw_cmd_mbox_alloc(); |  	mbox = mlxsw_cmd_mbox_alloc(); | ||||||
|  	if (!mbox) |  	if (!mbox) | ||||||
| @@ -568,6 +588,87 @@ static void mlxsw_i2c_fini(void *bus_priv) | @@ -567,6 +587,87 @@ static void mlxsw_i2c_fini(void *bus_priv) | ||||||
|  	mlxsw_i2c->core = NULL; |  	mlxsw_i2c->core = NULL; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -163,7 +164,7 @@ index b75416561..e5883b4e8 100644 | |||||||
|  static const struct mlxsw_bus mlxsw_i2c_bus = { |  static const struct mlxsw_bus mlxsw_i2c_bus = { | ||||||
|  	.kind			= "i2c", |  	.kind			= "i2c", | ||||||
|  	.init			= mlxsw_i2c_init, |  	.init			= mlxsw_i2c_init, | ||||||
| @@ -662,6 +763,7 @@ static int mlxsw_i2c_probe(struct i2c_client *client, | @@ -661,6 +762,7 @@ static int mlxsw_i2c_probe(struct i2c_client *client, | ||||||
|  	mlxsw_i2c->bus_info.dev = &client->dev; |  	mlxsw_i2c->bus_info.dev = &client->dev; | ||||||
|  	mlxsw_i2c->bus_info.low_frequency = true; |  	mlxsw_i2c->bus_info.low_frequency = true; | ||||||
|  	mlxsw_i2c->dev = &client->dev; |  	mlxsw_i2c->dev = &client->dev; | ||||||
| @@ -171,7 +172,7 @@ index b75416561..e5883b4e8 100644 | |||||||
|   |   | ||||||
|  	err = mlxsw_core_bus_device_register(&mlxsw_i2c->bus_info, |  	err = mlxsw_core_bus_device_register(&mlxsw_i2c->bus_info, | ||||||
|  					     &mlxsw_i2c_bus, mlxsw_i2c, false, |  					     &mlxsw_i2c_bus, mlxsw_i2c, false, | ||||||
| @@ -671,6 +773,12 @@ static int mlxsw_i2c_probe(struct i2c_client *client, | @@ -670,6 +772,12 @@ static int mlxsw_i2c_probe(struct i2c_client *client, | ||||||
|  		return err; |  		return err; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -184,7 +185,7 @@ index b75416561..e5883b4e8 100644 | |||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
|  errout: |  errout: | ||||||
| @@ -684,6 +792,8 @@ static int mlxsw_i2c_remove(struct i2c_client *client) | @@ -683,6 +791,8 @@ static int mlxsw_i2c_remove(struct i2c_client *client) | ||||||
|  { |  { | ||||||
|  	struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client); |  	struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client); | ||||||
|   |   | ||||||
| @@ -194,5 +195,5 @@ index b75416561..e5883b4e8 100644 | |||||||
|  	mutex_destroy(&mlxsw_i2c->cmd.lock); |  	mutex_destroy(&mlxsw_i2c->cmd.lock); | ||||||
|   |   | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| From 8099c3baf5f819fdf187b67cc3ed0ce25360cf88 Mon Sep 17 00:00:00 2001 | From a89d212954b74f3169e3061a3623eadfb86441e6 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Sun, 19 Dec 2021 09:31:32 +0000 | Date: Sun, 19 Dec 2021 09:31:32 +0000 | ||||||
| Subject: [PATCH] mlxsw: core: Export line card API | Subject: [PATCH backport 5.10 154/182] mlxsw: core: Export line card API | ||||||
|  |  | ||||||
| Export API mlxsw_core_linecards() for being used by 'minimal' driver. | Export API mlxsw_core_linecards() for being used by 'minimal' driver. | ||||||
|  |  | ||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  1 file changed, 1 insertion(+) |  1 file changed, 1 insertion(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| index a9bb43837..a26c6d880 100644 | index a9bb43837b33..a26c6d880928 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | --- a/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c | ||||||
| @@ -103,6 +103,7 @@ struct mlxsw_linecards *mlxsw_core_linecards(struct mlxsw_core *mlxsw_core) | @@ -103,6 +103,7 @@ struct mlxsw_linecards *mlxsw_core_linecards(struct mlxsw_core *mlxsw_core) | ||||||
| @@ -23,5 +23,5 @@ index a9bb43837..a26c6d880 100644 | |||||||
|  #define MLXSW_PORT_MAX_PORTS_DEFAULT	0x40 |  #define MLXSW_PORT_MAX_PORTS_DEFAULT	0x40 | ||||||
|   |   | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| From b526413a86afcd1d6bd3f4e05f25631c8103f617 Mon Sep 17 00:00:00 2001 | From deb4f328672850d9ac4d8d51be7e0d8e727387af Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Sun, 19 Dec 2021 09:25:35 +0000 | Date: Sun, 19 Dec 2021 09:25:35 +0000 | ||||||
| Subject: [PATCH] mlxsw: minimal: Add system event handler | Subject: [PATCH backport 5.10 155/182] mlxsw: minimal: Add system event | ||||||
|  |  handler | ||||||
|  |  | ||||||
| Add system event handler for treating line card specific signals on | Add system event handler for treating line card specific signals on | ||||||
| modular system. These signals indicate line card state changes, like | modular system. These signals indicate line card state changes, like | ||||||
| @@ -16,7 +17,7 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  1 file changed, 23 insertions(+) |  1 file changed, 23 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| index 59c5053dc..27afb28e4 100644 | index 59c5053dc5fd..27afb28e439f 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| @@ -527,6 +527,28 @@ static void mlxsw_m_line_cards_free(struct mlxsw_m *mlxsw_m) | @@ -527,6 +527,28 @@ static void mlxsw_m_line_cards_free(struct mlxsw_m *mlxsw_m) | ||||||
| @@ -57,5 +58,5 @@ index 59c5053dc..27afb28e4 100644 | |||||||
|  	.res_query_enabled	= true, |  	.res_query_enabled	= true, | ||||||
|  }; |  }; | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| From 20b2dd627f42e79a8fce30d29d4cea64f6636521 Mon Sep 17 00:00:00 2001 | From 933a623916a00d83616d653a82329750d94de0f1 Mon Sep 17 00:00:00 2001 | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
| Date: Sun, 19 Dec 2021 09:40:34 +0000 | Date: Sun, 19 Dec 2021 09:40:34 +0000 | ||||||
| Subject: [PATCH] mlxsw: minimal: Add interfaces for line card initialization | Subject: [PATCH backport 5.10 156/182] mlxsw: minimal: Add interfaces for line | ||||||
|  and de-initialization |  card initialization and de-initialization | ||||||
|  |  | ||||||
| Add callback functions for line card 'netdevice' objects initialization | Add callback functions for line card 'netdevice' objects initialization | ||||||
| and de-initialization. Each line card is associated with the set of | and de-initialization. Each line card is associated with the set of | ||||||
| @@ -18,7 +18,7 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | |||||||
|  1 file changed, 70 insertions(+) |  1 file changed, 70 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| index 27afb28e4..0b605c6aa 100644 | index 27afb28e439f..0b605c6aa637 100644 | ||||||
| --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
| @@ -549,6 +549,69 @@ static void mlxsw_m_sys_event_handler(struct mlxsw_core *mlxsw_core) | @@ -549,6 +549,69 @@ static void mlxsw_m_sys_event_handler(struct mlxsw_core *mlxsw_core) | ||||||
| @@ -115,5 +115,5 @@ index 27afb28e4..0b605c6aa 100644 | |||||||
|  	mlxsw_m_line_cards_free(mlxsw_m); |  	mlxsw_m_line_cards_free(mlxsw_m); | ||||||
|  } |  } | ||||||
| --  | --  | ||||||
| 2.30.2 | 2.20.1 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,420 +0,0 @@ | |||||||
| From bb18ddc163092447e40f8aba96140280e2201409 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Vadim Pasternak <vadimp@nvidia.com> |  | ||||||
| Date: Mon, 14 Feb 2022 13:24:44 +0200 |  | ||||||
| Subject: [PATCH] platform: mellanox: Introduce support for rack manager switch |  | ||||||
|  |  | ||||||
| The rack switch is designed to provide high bandwidth, low latency |  | ||||||
| connectivity using optical fiber as the primary interconnect. |  | ||||||
|  |  | ||||||
| System supports 32 OSFP ports, non-blocking switching capacity of |  | ||||||
| 25.6Tbps. |  | ||||||
| System equipped with: |  | ||||||
| - 2 replaceable power supplies (AC) with 1+1 redundancy model. |  | ||||||
| - 7 replaceable fan drawers with 6+1 redundancy model. |  | ||||||
| - 2 External Root of Trust or EROT (Glacier) devices for securing |  | ||||||
|   ASICs firmware. |  | ||||||
|  |  | ||||||
| Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> |  | ||||||
| --- |  | ||||||
|  drivers/platform/x86/mlx-platform.c | 259 ++++++++++++++++++++++++++++ |  | ||||||
|  1 file changed, 259 insertions(+) |  | ||||||
|  |  | ||||||
| diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c |  | ||||||
| index d0bb2becf..f1d0cc1aa 100644 |  | ||||||
| --- a/drivers/platform/x86/mlx-platform.c |  | ||||||
| +++ b/drivers/platform/x86/mlx-platform.c |  | ||||||
| @@ -90,6 +90,12 @@ |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_FAN_OFFSET		0x88 |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET	0x89 |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET	0x8a |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_EROT_OFFSET	0x91 |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET	0x92 |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET	0x93 |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET	0x94 |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET	0x95 |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET	0x96 |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET	0x9a |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET	0x9b |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET	0x9c |  | ||||||
| @@ -109,6 +115,8 @@ |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET	0xaa |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET	0xab |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_LC_PWR_ON		0xb2 |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET	0xc2 |  | ||||||
| +#define MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT	0xc3 |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET	0xc7 |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET	0xc8 |  | ||||||
|  #define MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET	0xc9 |  | ||||||
| @@ -214,6 +222,7 @@ |  | ||||||
|  #define MLXPLAT_CPLD_LED_HI_NIBBLE_MASK	GENMASK(3, 0) |  | ||||||
|  #define MLXPLAT_CPLD_VOLTREG_UPD_MASK	GENMASK(5, 4) |  | ||||||
|  #define MLXPLAT_CPLD_GWP_MASK		GENMASK(0, 0) |  | ||||||
| +#define MLXPLAT_CPLD_EROT_MASK		GENMASK(1, 0) |  | ||||||
|  #define MLXPLAT_CPLD_I2C_CAP_BIT	0x04 |  | ||||||
|  #define MLXPLAT_CPLD_I2C_CAP_MASK	GENMASK(5, MLXPLAT_CPLD_I2C_CAP_BIT) |  | ||||||
|   |  | ||||||
| @@ -243,6 +252,7 @@ |  | ||||||
|  #define MLXPLAT_CPLD_CH2_ETH_MODULAR		3 |  | ||||||
|  #define MLXPLAT_CPLD_CH3_ETH_MODULAR		43 |  | ||||||
|  #define MLXPLAT_CPLD_CH4_ETH_MODULAR		51 |  | ||||||
| +#define MLXPLAT_CPLD_CH2_RACK_SWITCH		18 |  | ||||||
|   |  | ||||||
|  /* Number of LPC attached MUX platform devices */ |  | ||||||
|  #define MLXPLAT_CPLD_LPC_MUX_DEVS		4 |  | ||||||
| @@ -280,6 +290,9 @@ |  | ||||||
|  /* Minimum power required for turning on Ethernet modular system (WATT) */ |  | ||||||
|  #define MLXPLAT_CPLD_ETH_MODULAR_PWR_MIN	50 |  | ||||||
|   |  | ||||||
| +/* Default value for PWM control register for rack switch system */ |  | ||||||
| +#define MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT 0xf4 |  | ||||||
| + |  | ||||||
|  /* mlxplat_priv - platform private data |  | ||||||
|   * @pdev_i2c - i2c controller platform device |  | ||||||
|   * @pdev_mux - array of mux platform devices |  | ||||||
| @@ -460,6 +473,36 @@ static struct i2c_mux_reg_platform_data mlxplat_modular_mux_data[] = { |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +/* Platform channels for rack swicth system family */ |  | ||||||
| +static const int mlxplat_rack_switch_channels[] = { |  | ||||||
| +	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
| +/* Platform rack switch mux data */ |  | ||||||
| +static struct i2c_mux_reg_platform_data mlxplat_rack_switch_mux_data[] = { |  | ||||||
| +	{ |  | ||||||
| +		.parent = 1, |  | ||||||
| +		.base_nr = MLXPLAT_CPLD_CH1, |  | ||||||
| +		.write_only = 1, |  | ||||||
| +		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1, |  | ||||||
| +		.reg_size = 1, |  | ||||||
| +		.idle_in_use = 1, |  | ||||||
| +		.values = mlxplat_rack_switch_channels, |  | ||||||
| +		.n_values = ARRAY_SIZE(mlxplat_rack_switch_channels), |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.parent = 1, |  | ||||||
| +		.base_nr = MLXPLAT_CPLD_CH2_RACK_SWITCH, |  | ||||||
| +		.write_only = 1, |  | ||||||
| +		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2, |  | ||||||
| +		.reg_size = 1, |  | ||||||
| +		.idle_in_use = 1, |  | ||||||
| +		.values = mlxplat_msn21xx_channels, |  | ||||||
| +		.n_values = ARRAY_SIZE(mlxplat_msn21xx_channels), |  | ||||||
| +	}, |  | ||||||
| + |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  /* Platform hotplug devices */ |  | ||||||
|  static struct i2c_board_info mlxplat_mlxcpld_pwr[] = { |  | ||||||
|  	{ |  | ||||||
| @@ -2064,6 +2107,97 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_chassis_blade_data = { |  | ||||||
|  	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +/* Platform hotplug for  switch systems family data */ |  | ||||||
| +static struct mlxreg_core_data mlxplat_mlxcpld_erot_ap_items_data[] = { |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot1_ap", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, |  | ||||||
| +		.mask = BIT(0), |  | ||||||
| +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot2_ap", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, |  | ||||||
| +		.mask = BIT(1), |  | ||||||
| +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, |  | ||||||
| +	}, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
| +static struct mlxreg_core_data mlxplat_mlxcpld_erot_error_items_data[] = { |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot1_error", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, |  | ||||||
| +		.mask = BIT(0), |  | ||||||
| +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot2_error", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, |  | ||||||
| +		.mask = BIT(1), |  | ||||||
| +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, |  | ||||||
| +	}, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
| +static struct mlxreg_core_item mlxplat_mlxcpld_rack_switch_items[] = { |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_ext_psu_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_PSU_EXT_MASK, |  | ||||||
| +		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_psu_items_data), |  | ||||||
| +		.inversed = 1, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_ext_pwr_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_PWR_EXT_MASK, |  | ||||||
| +		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_pwr_items_data), |  | ||||||
| +		.inversed = 0, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_default_ng_fan_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_FAN_NG_MASK, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), |  | ||||||
| +		.inversed = 1, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_erot_ap_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_EROT_MASK, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_ap_items_data), |  | ||||||
| +		.inversed = 1, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_erot_error_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_EROT_MASK, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_error_items_data), |  | ||||||
| +		.inversed = 1, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
| +static |  | ||||||
| +struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_rack_switch_data = { |  | ||||||
| +	.items = mlxplat_mlxcpld_rack_switch_items, |  | ||||||
| +	.counter = ARRAY_SIZE(mlxplat_mlxcpld_rack_switch_items), |  | ||||||
| +	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, |  | ||||||
| +	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, |  | ||||||
| +	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, |  | ||||||
| +	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  /* Platform led default data */ |  | ||||||
|  static struct mlxreg_core_data mlxplat_mlxcpld_default_led_data[] = { |  | ||||||
|  	{ |  | ||||||
| @@ -2947,6 +3081,42 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { |  | ||||||
|  		.mask = GENMASK(7, 0) & ~BIT(2), |  | ||||||
|  		.mode = 0444, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot1_reset", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(6), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot2_reset", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(7), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot1_recovery", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(6), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot2_recovery", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(7), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot1_wp", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(4), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot2_wp", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(5), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.label = "reset_long_pb", |  | ||||||
|  		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, |  | ||||||
| @@ -3142,6 +3312,25 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { |  | ||||||
|  		.mask = GENMASK(7, 0) & ~BIT(4), |  | ||||||
|  		.mode = 0644, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot1_ap_reset", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(0), |  | ||||||
| +		.mode = 0444, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "erot2_ap_reset", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(1), |  | ||||||
| +		.mode = 0444, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "spi_chnl_select", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT, |  | ||||||
| +		.mask = GENMASK(7, 0), |  | ||||||
| +		.bit = 1, |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.label = "config1", |  | ||||||
|  		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET, |  | ||||||
| @@ -4257,6 +4446,10 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET: |  | ||||||
| @@ -4274,6 +4467,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET: |  | ||||||
| @@ -4358,6 +4553,12 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg) |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET: |  | ||||||
| @@ -4382,6 +4583,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg) |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET: |  | ||||||
| @@ -4492,6 +4694,12 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg) |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET: |  | ||||||
| @@ -4516,6 +4724,8 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg) |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET: |  | ||||||
| +	case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET: |  | ||||||
|  	case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET: |  | ||||||
| @@ -4583,6 +4793,13 @@ static const struct reg_default mlxplat_mlxcpld_regmap_ng400[] = { |  | ||||||
|  	{ MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 }, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static const struct reg_default mlxplat_mlxcpld_regmap_rack_switch[] = { |  | ||||||
| +	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT }, |  | ||||||
| +	{ MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 0x00 }, |  | ||||||
| +	{ MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 0x00 }, |  | ||||||
| +	{ MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 }, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  static const struct reg_default mlxplat_mlxcpld_regmap_eth_modular[] = { |  | ||||||
|  	{ MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 0x61 }, |  | ||||||
|  	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 }, |  | ||||||
| @@ -4676,6 +4893,20 @@ static const struct regmap_config mlxplat_mlxcpld_regmap_config_ng400 = { |  | ||||||
|  	.reg_write = mlxplat_mlxcpld_reg_write, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static const struct regmap_config mlxplat_mlxcpld_regmap_config_rack_switch = { |  | ||||||
| +	.reg_bits = 8, |  | ||||||
| +	.val_bits = 8, |  | ||||||
| +	.max_register = 255, |  | ||||||
| +	.cache_type = REGCACHE_FLAT, |  | ||||||
| +	.writeable_reg = mlxplat_mlxcpld_writeable_reg, |  | ||||||
| +	.readable_reg = mlxplat_mlxcpld_readable_reg, |  | ||||||
| +	.volatile_reg = mlxplat_mlxcpld_volatile_reg, |  | ||||||
| +	.reg_defaults = mlxplat_mlxcpld_regmap_rack_switch, |  | ||||||
| +	.num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_rack_switch), |  | ||||||
| +	.reg_read = mlxplat_mlxcpld_reg_read, |  | ||||||
| +	.reg_write = mlxplat_mlxcpld_reg_write, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  static const struct regmap_config mlxplat_mlxcpld_regmap_config_eth_modular = { |  | ||||||
|  	.reg_bits = 8, |  | ||||||
|  	.val_bits = 8, |  | ||||||
| @@ -4957,6 +5188,27 @@ static int __init mlxplat_dmi_modular_matched(const struct dmi_system_id *dmi) |  | ||||||
|  	return 1; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +static int __init mlxplat_dmi_rack_switch_matched(const struct dmi_system_id *dmi) |  | ||||||
| +{ |  | ||||||
| +	int i; |  | ||||||
| + |  | ||||||
| +	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; |  | ||||||
| +	mlxplat_mux_num = ARRAY_SIZE(mlxplat_rack_switch_mux_data); |  | ||||||
| +	mlxplat_mux_data = mlxplat_rack_switch_mux_data; |  | ||||||
| +	mlxplat_hotplug = &mlxplat_mlxcpld_rack_switch_data; |  | ||||||
| +	mlxplat_hotplug->deferred_nr = |  | ||||||
| +		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; |  | ||||||
| +	mlxplat_led = &mlxplat_default_ng_led_data; |  | ||||||
| +	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; |  | ||||||
| +	mlxplat_fan = &mlxplat_default_fan_data; |  | ||||||
| +	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) |  | ||||||
| +		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; |  | ||||||
| +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; |  | ||||||
| +	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_rack_switch; |  | ||||||
| + |  | ||||||
| +	return 1; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { |  | ||||||
|  	{ |  | ||||||
|  		.callback = mlxplat_dmi_default_wc_matched, |  | ||||||
| @@ -5007,6 +5259,13 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { |  | ||||||
|  			DMI_MATCH(DMI_BOARD_NAME, "VMOD0009"), |  | ||||||
|  		}, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.callback = mlxplat_dmi_rack_switch_matched, |  | ||||||
| +		.matches = { |  | ||||||
| +			DMI_MATCH(DMI_BOARD_NAME, "VMOD0010"), |  | ||||||
| +			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI142"), |  | ||||||
| +		}, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.callback = mlxplat_dmi_ng400_matched, |  | ||||||
|  		.matches = { |  | ||||||
| --  |  | ||||||
| 2.30.2 |  | ||||||
|  |  | ||||||
| @@ -0,0 +1,97 @@ | |||||||
|  | From 12b2a85b4b3bb17f44611b9c320fd4e84915b122 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Fri, 6 May 2022 16:52:53 +0300 | ||||||
|  | Subject: [PATCH backport 5.10 167/182] DS: lan743x: Add support for fixed phy | ||||||
|  |  | ||||||
|  | Add support for fixed phy for non DTS architecture. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/net/ethernet/microchip/Kconfig        | 11 ++++++++ | ||||||
|  |  drivers/net/ethernet/microchip/lan743x_main.c | 26 ++++++++++++++++--- | ||||||
|  |  2 files changed, 33 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/ethernet/microchip/Kconfig b/drivers/net/ethernet/microchip/Kconfig | ||||||
|  | index d0f6dfe0dcf3..6c66b55bc811 100644 | ||||||
|  | --- a/drivers/net/ethernet/microchip/Kconfig | ||||||
|  | +++ b/drivers/net/ethernet/microchip/Kconfig | ||||||
|  | @@ -54,4 +54,15 @@ config LAN743X | ||||||
|  |  	  To compile this driver as a module, choose M here. The module will be | ||||||
|  |  	  called lan743x. | ||||||
|  |   | ||||||
|  | +config LAN743X_FIXED_PHY | ||||||
|  | +	bool "Direct R/G/MII connection without PHY" | ||||||
|  | +	default n | ||||||
|  | +	depends on LAN743X | ||||||
|  | +	select FIXED_PHY | ||||||
|  | +	help | ||||||
|  | +	 Direct R/G/MII connection to a remote MII device without PHY in between. | ||||||
|  | +	 No mdio bus will be used in this case and no auto-negotiation takes place. | ||||||
|  | +	 The configuration settings below need to mirror the configuration of the | ||||||
|  | +	 remote MII device. | ||||||
|  | + | ||||||
|  |  endif # NET_VENDOR_MICROCHIP | ||||||
|  | diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c | ||||||
|  | index 481f89d193f7..b6250a7469da 100644 | ||||||
|  | --- a/drivers/net/ethernet/microchip/lan743x_main.c | ||||||
|  | +++ b/drivers/net/ethernet/microchip/lan743x_main.c | ||||||
|  | @@ -798,6 +798,7 @@ static int lan743x_mac_init(struct lan743x_adapter *adapter) | ||||||
|  |   | ||||||
|  |  	/* disable auto duplex, and speed detection. Phylib does that */ | ||||||
|  |  	data = lan743x_csr_read(adapter, MAC_CR); | ||||||
|  | + | ||||||
|  |  	data &= ~(MAC_CR_ADD_ | MAC_CR_ASD_); | ||||||
|  |  	data |= MAC_CR_CNTR_RST_; | ||||||
|  |  	lan743x_csr_write(adapter, MAC_CR, data); | ||||||
|  | @@ -1002,7 +1003,10 @@ static void lan743x_phy_close(struct lan743x_adapter *adapter) | ||||||
|  |  	struct net_device *netdev = adapter->netdev; | ||||||
|  |   | ||||||
|  |  	phy_stop(netdev->phydev); | ||||||
|  | -	phy_disconnect(netdev->phydev); | ||||||
|  | +	if (IS_REACHABLE(CONFIG_LAN743X_FIXED_PHY)) | ||||||
|  | +		fixed_phy_unregister(netdev->phydev); | ||||||
|  | +	else | ||||||
|  | +		phy_disconnect(netdev->phydev); | ||||||
|  |  	netdev->phydev = NULL; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -1038,11 +1042,24 @@ static int lan743x_phy_open(struct lan743x_adapter *adapter) | ||||||
|  |   | ||||||
|  |  	if (!phydev) { | ||||||
|  |  		/* try internal phy */ | ||||||
|  | -		phydev = phy_find_first(adapter->mdiobus); | ||||||
|  | +		if (IS_REACHABLE(CONFIG_LAN743X_FIXED_PHY)) { | ||||||
|  | +			struct fixed_phy_status phy_status; | ||||||
|  | + | ||||||
|  | +			phy_status.link = 1; | ||||||
|  | +			phy_status.speed = 1000; | ||||||
|  | +			phy_status.duplex = DUPLEX_FULL; | ||||||
|  | +			phy_status.pause = 0; | ||||||
|  | +			phy_status.asym_pause = 0; | ||||||
|  | +			adapter->phy_mode = PHY_INTERFACE_MODE_RGMII; | ||||||
|  | +			phydev = fixed_phy_register(PHY_POLL, &phy_status, 0); | ||||||
|  | +		} else { | ||||||
|  | +			adapter->phy_mode = PHY_INTERFACE_MODE_GMII; | ||||||
|  | +			phydev = phy_find_first(adapter->mdiobus); | ||||||
|  | +		} | ||||||
|  | + | ||||||
|  |  		if (!phydev) | ||||||
|  |  			goto return_error; | ||||||
|  |   | ||||||
|  | -		adapter->phy_mode = PHY_INTERFACE_MODE_GMII; | ||||||
|  |  		ret = phy_connect_direct(netdev, phydev, | ||||||
|  |  					 lan743x_phy_link_status_change, | ||||||
|  |  					 adapter->phy_mode); | ||||||
|  | @@ -1059,7 +1076,8 @@ static int lan743x_phy_open(struct lan743x_adapter *adapter) | ||||||
|  |  	phy->fc_autoneg = phydev->autoneg; | ||||||
|  |   | ||||||
|  |  	phy_start(phydev); | ||||||
|  | -	phy_start_aneg(phydev); | ||||||
|  | +	if (!IS_REACHABLE(CONFIG_LAN743X_FIXED_PHY)) | ||||||
|  | +		phy_start_aneg(phydev); | ||||||
|  |  	return 0; | ||||||
|  |   | ||||||
|  |  return_error: | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,34 @@ | |||||||
|  | From cbb77f161d60964733f332e4ccfb9f240947c3ef Mon Sep 17 00:00:00 2001 | ||||||
|  | From: root <root@fit-build-116.mtl.labs.mlnx> | ||||||
|  | Date: Tue, 5 Apr 2022 21:35:55 +0300 | ||||||
|  | Subject: [PATCH backport 5.10 168/182] TMP: mlxsw: minimal: Ignore error | ||||||
|  |  reading SPAD register | ||||||
|  |  | ||||||
|  | WA until FW will add support for SPAD register for all systems. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/net/ethernet/mellanox/mlxsw/minimal.c | 3 ++- | ||||||
|  |  1 file changed, 2 insertions(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
|  | index 0b605c6aa637..5fd319697c94 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c | ||||||
|  | @@ -64,11 +64,12 @@ static int mlxsw_m_base_mac_get(struct mlxsw_m *mlxsw_m) | ||||||
|  |  { | ||||||
|  |  	char spad_pl[MLXSW_REG_SPAD_LEN] = {0}; | ||||||
|  |  	int err; | ||||||
|  | - | ||||||
|  | +#if 0 | ||||||
|  |  	err = mlxsw_reg_query(mlxsw_m->core, MLXSW_REG(spad), spad_pl); | ||||||
|  |  	if (err) | ||||||
|  |  		return err; | ||||||
|  |  	mlxsw_reg_spad_base_mac_memcpy_from(spad_pl, mlxsw_m->base_mac); | ||||||
|  | +#endif | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,194 @@ | |||||||
|  | From 7a45b6a2a14c292e89a09afde8fcc7d1ceb20ebd Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Wed, 22 Jun 2022 13:01:15 +0300 | ||||||
|  | Subject: [PATCH backport 5.10 171/182] platform/mellanox: mlxreg-lc: Fix | ||||||
|  |  cleanup on failure and add more verbosity in error flow | ||||||
|  |  | ||||||
|  | Clean client object in case of probing failure. | ||||||
|  | Prevent running remove routine in case probing failed. | ||||||
|  | Add error log for each kind of failures during probing. | ||||||
|  |  | ||||||
|  | Fixes: 62f9529b8d5c ("platform/mellanox: mlxreg-lc: Add initial support for Nvidia line card devices") | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/platform/mellanox/mlxreg-lc.c | 85 ++++++++++++++++++++------- | ||||||
|  |  1 file changed, 63 insertions(+), 22 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/platform/mellanox/mlxreg-lc.c b/drivers/platform/mellanox/mlxreg-lc.c | ||||||
|  | index 75c28179dd07..e3caccb1a528 100644 | ||||||
|  | --- a/drivers/platform/mellanox/mlxreg-lc.c | ||||||
|  | +++ b/drivers/platform/mellanox/mlxreg-lc.c | ||||||
|  | @@ -569,9 +569,6 @@ static int mlxreg_lc_event_handler(void *handle, enum mlxreg_hotplug_kind kind, | ||||||
|  |  	dev_info(mlxreg_lc->dev, "linecard#%d state %d event kind %d action %d\n", | ||||||
|  |  		 mlxreg_lc->data->slot, mlxreg_lc->state, kind, action); | ||||||
|  |   | ||||||
|  | -	if (!(mlxreg_lc->state & MLXREG_LC_INITIALIZED)) | ||||||
|  | -		return 0; | ||||||
|  | - | ||||||
|  |  	switch (kind) { | ||||||
|  |  	case MLXREG_HOTPLUG_LC_SYNCED: | ||||||
|  |  		/* | ||||||
|  | @@ -725,8 +722,12 @@ mlxreg_lc_config_init(struct mlxreg_lc *mlxreg_lc, void *regmap, | ||||||
|  |  	switch (regval) { | ||||||
|  |  	case MLXREG_LC_SN4800_C16: | ||||||
|  |  		err = mlxreg_lc_sn4800_c16_config_init(mlxreg_lc, regmap, data); | ||||||
|  | -		if (err) | ||||||
|  | +		if (err) { | ||||||
|  | +			dev_err(dev, "Failed to config client %s at bus %d at addr 0x%02x\n", | ||||||
|  | +				data->hpdev.brdinfo->type, data->hpdev.nr, | ||||||
|  | +				data->hpdev.brdinfo->addr); | ||||||
|  |  			return err; | ||||||
|  | +		} | ||||||
|  |  		break; | ||||||
|  |  	default: | ||||||
|  |  		return -ENODEV; | ||||||
|  | @@ -739,8 +740,11 @@ mlxreg_lc_config_init(struct mlxreg_lc *mlxreg_lc, void *regmap, | ||||||
|  |  	mlxreg_lc->mux = platform_device_register_resndata(dev, "i2c-mux-mlxcpld", data->hpdev.nr, | ||||||
|  |  							   NULL, 0, mlxreg_lc->mux_data, | ||||||
|  |  							   sizeof(*mlxreg_lc->mux_data)); | ||||||
|  | -	if (IS_ERR(mlxreg_lc->mux)) | ||||||
|  | +	if (IS_ERR(mlxreg_lc->mux)) { | ||||||
|  | +		dev_err(dev, "Failed to create mux infra for client %s at bus %d at addr 0x%02x\n", | ||||||
|  | +			data->hpdev.brdinfo->type, data->hpdev.nr, data->hpdev.brdinfo->addr); | ||||||
|  |  		return PTR_ERR(mlxreg_lc->mux); | ||||||
|  | +	} | ||||||
|  |   | ||||||
|  |  	/* Register IO access driver. */ | ||||||
|  |  	if (mlxreg_lc->io_data) { | ||||||
|  | @@ -749,6 +753,9 @@ mlxreg_lc_config_init(struct mlxreg_lc *mlxreg_lc, void *regmap, | ||||||
|  |  		platform_device_register_resndata(dev, "mlxreg-io", data->hpdev.nr, NULL, 0, | ||||||
|  |  						  mlxreg_lc->io_data, sizeof(*mlxreg_lc->io_data)); | ||||||
|  |  		if (IS_ERR(mlxreg_lc->io_regs)) { | ||||||
|  | +			dev_err(dev, "Failed to create regio for client %s at bus %d at addr 0x%02x\n", | ||||||
|  | +				data->hpdev.brdinfo->type, data->hpdev.nr, | ||||||
|  | +				data->hpdev.brdinfo->addr); | ||||||
|  |  			err = PTR_ERR(mlxreg_lc->io_regs); | ||||||
|  |  			goto fail_register_io; | ||||||
|  |  		} | ||||||
|  | @@ -762,6 +769,9 @@ mlxreg_lc_config_init(struct mlxreg_lc *mlxreg_lc, void *regmap, | ||||||
|  |  						  mlxreg_lc->led_data, | ||||||
|  |  						  sizeof(*mlxreg_lc->led_data)); | ||||||
|  |  		if (IS_ERR(mlxreg_lc->led)) { | ||||||
|  | +			dev_err(dev, "Failed to create LED objects for client %s at bus %d at addr 0x%02x\n", | ||||||
|  | +				data->hpdev.brdinfo->type, data->hpdev.nr, | ||||||
|  | +				data->hpdev.brdinfo->addr); | ||||||
|  |  			err = PTR_ERR(mlxreg_lc->led); | ||||||
|  |  			goto fail_register_led; | ||||||
|  |  		} | ||||||
|  | @@ -818,7 +828,8 @@ static int mlxreg_lc_probe(struct platform_device *pdev) | ||||||
|  |  	if (!data->hpdev.adapter) { | ||||||
|  |  		dev_err(&pdev->dev, "Failed to get adapter for bus %d\n", | ||||||
|  |  			data->hpdev.nr); | ||||||
|  | -		return -EFAULT; | ||||||
|  | +		err = -EFAULT; | ||||||
|  | +		goto i2c_get_adapter_fail; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	/* Create device at the top of line card I2C tree.*/ | ||||||
|  | @@ -827,32 +838,40 @@ static int mlxreg_lc_probe(struct platform_device *pdev) | ||||||
|  |  	if (IS_ERR(data->hpdev.client)) { | ||||||
|  |  		dev_err(&pdev->dev, "Failed to create client %s at bus %d at addr 0x%02x\n", | ||||||
|  |  			data->hpdev.brdinfo->type, data->hpdev.nr, data->hpdev.brdinfo->addr); | ||||||
|  | - | ||||||
|  | -		i2c_put_adapter(data->hpdev.adapter); | ||||||
|  | -		data->hpdev.adapter = NULL; | ||||||
|  | -		return PTR_ERR(data->hpdev.client); | ||||||
|  | +		err = PTR_ERR(data->hpdev.client); | ||||||
|  | +		goto i2c_new_device_fail; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	regmap = devm_regmap_init_i2c(data->hpdev.client, | ||||||
|  |  				      &mlxreg_lc_regmap_conf); | ||||||
|  |  	if (IS_ERR(regmap)) { | ||||||
|  | +		dev_err(&pdev->dev, "Failed to create regmap for client %s at bus %d at addr 0x%02x\n", | ||||||
|  | +			data->hpdev.brdinfo->type, data->hpdev.nr, data->hpdev.brdinfo->addr); | ||||||
|  |  		err = PTR_ERR(regmap); | ||||||
|  | -		goto mlxreg_lc_probe_fail; | ||||||
|  | +		goto devm_regmap_init_i2c_fail; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	/* Set default registers. */ | ||||||
|  |  	for (i = 0; i < mlxreg_lc_regmap_conf.num_reg_defaults; i++) { | ||||||
|  |  		err = regmap_write(regmap, mlxreg_lc_regmap_default[i].reg, | ||||||
|  |  				   mlxreg_lc_regmap_default[i].def); | ||||||
|  | -		if (err) | ||||||
|  | -			goto mlxreg_lc_probe_fail; | ||||||
|  | +		if (err) { | ||||||
|  | +			dev_err(&pdev->dev, "Failed to set default regmap %d for client %s at bus %d at addr 0x%02x\n", | ||||||
|  | +				i, data->hpdev.brdinfo->type, data->hpdev.nr, | ||||||
|  | +				data->hpdev.brdinfo->addr); | ||||||
|  | +			goto regmap_write_fail; | ||||||
|  | +		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	/* Sync registers with hardware. */ | ||||||
|  |  	regcache_mark_dirty(regmap); | ||||||
|  |  	err = regcache_sync(regmap); | ||||||
|  | -	if (err) | ||||||
|  | -		goto mlxreg_lc_probe_fail; | ||||||
|  | +	if (err) { | ||||||
|  | +		dev_err(&pdev->dev, "Failed to sync regmap for client %s at bus %d at addr 0x%02x\n", | ||||||
|  | +			data->hpdev.brdinfo->type, data->hpdev.nr, data->hpdev.brdinfo->addr); | ||||||
|  | +		err = PTR_ERR(regmap); | ||||||
|  | +		goto regcache_sync_fail; | ||||||
|  | +	} | ||||||
|  |   | ||||||
|  |  	par_pdata = data->hpdev.brdinfo->platform_data; | ||||||
|  |  	mlxreg_lc->par_regmap = par_pdata->regmap; | ||||||
|  | @@ -863,12 +882,27 @@ static int mlxreg_lc_probe(struct platform_device *pdev) | ||||||
|  |  	/* Configure line card. */ | ||||||
|  |  	err = mlxreg_lc_config_init(mlxreg_lc, regmap, data); | ||||||
|  |  	if (err) | ||||||
|  | -		goto mlxreg_lc_probe_fail; | ||||||
|  | +		goto mlxreg_lc_config_init_fail; | ||||||
|  |   | ||||||
|  |  	return err; | ||||||
|  |   | ||||||
|  | -mlxreg_lc_probe_fail: | ||||||
|  | +mlxreg_lc_config_init_fail: | ||||||
|  | +regcache_sync_fail: | ||||||
|  | +regmap_write_fail: | ||||||
|  | +devm_regmap_init_i2c_fail: | ||||||
|  | +	if (data->hpdev.client) { | ||||||
|  | +		i2c_unregister_device(data->hpdev.client); | ||||||
|  | +		data->hpdev.client = NULL; | ||||||
|  | +	} | ||||||
|  | +i2c_new_device_fail: | ||||||
|  |  	i2c_put_adapter(data->hpdev.adapter); | ||||||
|  | +	data->hpdev.adapter = NULL; | ||||||
|  | +i2c_get_adapter_fail: | ||||||
|  | +	/* Clear event notification callback and handle. */ | ||||||
|  | +	if (data->notifier) { | ||||||
|  | +		data->notifier->user_handler = NULL; | ||||||
|  | +		data->notifier->handle = NULL; | ||||||
|  | +	} | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -877,11 +911,18 @@ static int mlxreg_lc_remove(struct platform_device *pdev) | ||||||
|  |  	struct mlxreg_core_data *data = dev_get_platdata(&pdev->dev); | ||||||
|  |  	struct mlxreg_lc *mlxreg_lc = platform_get_drvdata(pdev); | ||||||
|  |   | ||||||
|  | -	/* Clear event notification callback. */ | ||||||
|  | -	if (data->notifier) { | ||||||
|  | -		data->notifier->user_handler = NULL; | ||||||
|  | -		data->notifier->handle = NULL; | ||||||
|  | -	} | ||||||
|  | +	/* | ||||||
|  | +	 * Probing and removing are invoked by hotplug events raised on line card insertion and | ||||||
|  | +	 * removing. If probing procedure fails all data is cleared. However, hotplug event still | ||||||
|  | +	 * will be raised on line card removing and activate removing procedure. In this case there | ||||||
|  | +	 * is nothing to remove. | ||||||
|  | +	 */ | ||||||
|  | +	if (!data->notifier || !data->notifier->handle) | ||||||
|  | +		return 0; | ||||||
|  | + | ||||||
|  | +	/* Clear event notification callback and handle. */ | ||||||
|  | +	data->notifier->user_handler = NULL; | ||||||
|  | +	data->notifier->handle = NULL; | ||||||
|  |   | ||||||
|  |  	/* Destroy static I2C device feeding by main power. */ | ||||||
|  |  	mlxreg_lc_destroy_static_devices(mlxreg_lc, mlxreg_lc->main_devs, | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,84 @@ | |||||||
|  | From b1e9734f4dc29c65e05a8f35ec67efb7784d321f Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Sun, 15 May 2022 14:31:10 +0300 | ||||||
|  | Subject: [PATCH backport 5.10 172/182] DS: platform: mlx-platform: Add SPI | ||||||
|  |  path for rack switch for EROT access | ||||||
|  |  | ||||||
|  | Create spidev for OOB access to External Root of Trusts devices. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/platform/x86/mlx-platform.c | 16 ++++++++++++++++ | ||||||
|  |  drivers/spi/spi.c                   |  1 + | ||||||
|  |  2 files changed, 17 insertions(+) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c | ||||||
|  | index 3ad85934d6e3..135ccea3a34e 100644 | ||||||
|  | --- a/drivers/platform/x86/mlx-platform.c | ||||||
|  | +++ b/drivers/platform/x86/mlx-platform.c | ||||||
|  | @@ -16,6 +16,7 @@ | ||||||
|  |  #include <linux/platform_data/i2c-mux-reg.h> | ||||||
|  |  #include <linux/platform_data/mlxreg.h> | ||||||
|  |  #include <linux/regmap.h> | ||||||
|  | +#include <linux/spi/spi.h> | ||||||
|  |   | ||||||
|  |  #define MLX_PLAT_DEVICE_NAME		"mlxplat" | ||||||
|  |   | ||||||
|  | @@ -2299,6 +2300,16 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_rack_switch_data = { | ||||||
|  |  	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +static struct spi_board_info rack_switch_switch_spi_board_info[] = { | ||||||
|  | +	{ | ||||||
|  | +		.modalias       = "spidev", | ||||||
|  | +		.irq            = -1, | ||||||
|  | +		.max_speed_hz   = 20000000, | ||||||
|  | +		.bus_num        = 0, | ||||||
|  | +		.chip_select    = 0, | ||||||
|  | +	}, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  /* Platform led default data */ | ||||||
|  |  static struct mlxreg_core_data mlxplat_mlxcpld_default_led_data[] = { | ||||||
|  |  	{ | ||||||
|  | @@ -5254,6 +5265,7 @@ static struct mlxreg_core_platform_data *mlxplat_fan; | ||||||
|  |  static struct mlxreg_core_platform_data | ||||||
|  |  	*mlxplat_wd_data[MLXPLAT_CPLD_WD_MAX_DEVS]; | ||||||
|  |  static const struct regmap_config *mlxplat_regmap_config; | ||||||
|  | +static struct spi_board_info *mlxplat_spi; | ||||||
|  |   | ||||||
|  |  static int __init mlxplat_dmi_default_matched(const struct dmi_system_id *dmi) | ||||||
|  |  { | ||||||
|  | @@ -5551,6 +5563,7 @@ static int __init mlxplat_dmi_rack_switch_matched(const struct dmi_system_id *dm | ||||||
|  |  		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; | ||||||
|  |  	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; | ||||||
|  |  	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_rack_switch; | ||||||
|  | +	mlxplat_spi = rack_switch_switch_spi_board_info; | ||||||
|  |   | ||||||
|  |  	return 1; | ||||||
|  |  } | ||||||
|  | @@ -5917,6 +5930,9 @@ static int __init mlxplat_init(void) | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	if (mlxplat_spi) | ||||||
|  | +		spi_register_board_info(mlxplat_spi, 1); | ||||||
|  | + | ||||||
|  |  	/* Add WD drivers. */ | ||||||
|  |  	err = mlxplat_mlxcpld_check_wd_capability(priv->regmap); | ||||||
|  |  	if (err) | ||||||
|  | diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c | ||||||
|  | index 857a1399850c..2efafa34ff22 100644 | ||||||
|  | --- a/drivers/spi/spi.c | ||||||
|  | +++ b/drivers/spi/spi.c | ||||||
|  | @@ -790,6 +790,7 @@ int spi_register_board_info(struct spi_board_info const *info, unsigned n) | ||||||
|  |   | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  | +EXPORT_SYMBOL(spi_register_board_info); | ||||||
|  |   | ||||||
|  |  /*-------------------------------------------------------------------------*/ | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,93 @@ | |||||||
|  | From 8b0f2061c6f8d799b7da9b7f50edb18208e67bb8 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Fri, 22 Jul 2022 01:15:43 +0300 | ||||||
|  | Subject: [PATCH backport 5.10 174/182] DS: mlxsw: core_linecards: Skip devlink | ||||||
|  |  and provisioning operation | ||||||
|  |  | ||||||
|  | Do not execute provisioning / unprovisioning flow in not upstream | ||||||
|  | environment. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  .../net/ethernet/mellanox/mlxsw/core_linecards.c    | 13 +++++++++++++ | ||||||
|  |  1 file changed, 13 insertions(+) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
|  | index 3a2fdd22dc21..30665a6f3e4d 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | ||||||
|  | @@ -651,8 +651,11 @@ mlxsw_linecard_provision_set(struct mlxsw_core *mlxsw_core, | ||||||
|  |  						linecard); | ||||||
|  |  	if (err) | ||||||
|  |  		goto err_cbs_call; | ||||||
|  | + | ||||||
|  |  	linecard->provisioned = true; | ||||||
|  | +#if 0 | ||||||
|  |  	devlink_linecard_provision_set(linecard->devlink_linecard, type); | ||||||
|  | +#endif | ||||||
|  |  	return 0; | ||||||
|  |   | ||||||
|  |  err_cbs_call: | ||||||
|  | @@ -670,12 +673,15 @@ static void mlxsw_linecard_provision_clear(struct mlxsw_core *mlxsw_core, | ||||||
|  |  					    linecard); | ||||||
|  |  	mlxsw_linecard_devices_detach(linecard->linecards->mlxsw_core, | ||||||
|  |  				      linecard); | ||||||
|  | +#if 0 | ||||||
|  |  	devlink_linecard_provision_clear(linecard->devlink_linecard); | ||||||
|  | +#endif | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static int mlxsw_linecard_ready_set(struct mlxsw_core *mlxsw_core, | ||||||
|  |  				    struct mlxsw_linecard *linecard) | ||||||
|  |  { | ||||||
|  | +#if 0 | ||||||
|  |  	char mddc_pl[MLXSW_REG_MDDC_LEN]; | ||||||
|  |  	int err; | ||||||
|  |   | ||||||
|  | @@ -683,6 +689,7 @@ static int mlxsw_linecard_ready_set(struct mlxsw_core *mlxsw_core, | ||||||
|  |  	err = mlxsw_reg_write(mlxsw_core, MLXSW_REG(mddc), mddc_pl); | ||||||
|  |  	if (err) | ||||||
|  |  		return err; | ||||||
|  | +#endif | ||||||
|  |  	linecard->ready = true; | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  | @@ -690,6 +697,7 @@ static int mlxsw_linecard_ready_set(struct mlxsw_core *mlxsw_core, | ||||||
|  |  static int mlxsw_linecard_ready_clear(struct mlxsw_core *mlxsw_core, | ||||||
|  |  				      struct mlxsw_linecard *linecard) | ||||||
|  |  { | ||||||
|  | +#if 0 | ||||||
|  |  	char mddc_pl[MLXSW_REG_MDDC_LEN]; | ||||||
|  |  	int err; | ||||||
|  |   | ||||||
|  | @@ -697,6 +705,7 @@ static int mlxsw_linecard_ready_clear(struct mlxsw_core *mlxsw_core, | ||||||
|  |  	err = mlxsw_reg_write(mlxsw_core, MLXSW_REG(mddc), mddc_pl); | ||||||
|  |  	if (err) | ||||||
|  |  		return err; | ||||||
|  | +#endif | ||||||
|  |  	linecard->ready = false; | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  | @@ -722,7 +731,9 @@ static int mlxsw_linecard_active_set(struct mlxsw_core *mlxsw_core, | ||||||
|  |  		item->event_ops->got_active(mlxsw_core, linecard->slot_index, | ||||||
|  |  					    linecard, item->priv); | ||||||
|  |  	} | ||||||
|  | +#if 0 | ||||||
|  |  	devlink_linecard_activate(linecard->devlink_linecard); | ||||||
|  | +#endif | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -739,7 +750,9 @@ static void mlxsw_linecard_active_clear(struct mlxsw_core *mlxsw_core, | ||||||
|  |  		item->event_ops->got_inactive(mlxsw_core, linecard->slot_index, | ||||||
|  |  					      linecard, item->priv); | ||||||
|  |  	} | ||||||
|  | +#if 0 | ||||||
|  |  	devlink_linecard_deactivate(linecard->devlink_linecard); | ||||||
|  | +#endif | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static int __mlxsw_linecard_status_process(struct mlxsw_core *mlxsw_core, | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -1,30 +0,0 @@ | |||||||
| From d3b1142ce6c3fbb02c39fc8d2e9f24ecbf466973 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Michael Shych <michaelsh@nvidia.com> |  | ||||||
| Date: Sun, 4 Sep 2022 10:41:45 +0300 |  | ||||||
| Subject: [PATCH] platform: mellanox: fix reset_pwr_converter_fail attribute. |  | ||||||
|  |  | ||||||
| Change incorrect reset_voltmon_upgrade_fail atitribute name to |  | ||||||
| reset_pwr_converter_fail. |  | ||||||
|  |  | ||||||
| Signed-off-by: Michael Shych <michaelsh@nvidia.com> |  | ||||||
| Reviewed-by: Vadim Pasternak <vadimp@nvidia.com> |  | ||||||
| --- |  | ||||||
|  drivers/platform/x86/mlx-platform.c | 2 +- |  | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  | ||||||
|  |  | ||||||
| diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c |  | ||||||
| index f1d0cc1aa..31c5cc10f 100644 |  | ||||||
| --- a/drivers/platform/x86/mlx-platform.c |  | ||||||
| +++ b/drivers/platform/x86/mlx-platform.c |  | ||||||
| @@ -3904,7 +3904,7 @@ static struct mlxreg_core_data mlxplat_mlxcpld_chassis_blade_regs_io_data[] = { |  | ||||||
|  		.mode = 0444, |  | ||||||
|  	}, |  | ||||||
|  	{ |  | ||||||
| -		.label = "reset_voltmon_upgrade_fail", |  | ||||||
| +		.label = "reset_pwr_converter_fail", |  | ||||||
|  		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, |  | ||||||
|  		.mask = GENMASK(7, 0) & ~BIT(0), |  | ||||||
|  		.mode = 0444, |  | ||||||
| --  |  | ||||||
| 2.30.2 |  | ||||||
|  |  | ||||||
| @@ -1,38 +0,0 @@ | |||||||
| From 85ac7ddf15f380460b9e17f0e2c99aa8e476ef3f Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Michael Shych <michaelsh@nvidia.com> |  | ||||||
| Date: Sun, 4 Sep 2022 10:46:01 +0300 |  | ||||||
| Subject: [PATCH] Documentation/ABI: fix description of fix |  | ||||||
|  reset_pwr_converter_fail attribute. |  | ||||||
|  |  | ||||||
| Change description of incorrect reset_voltmon_upgrade_fail atitribute |  | ||||||
| name to reset_pwr_converter_fail. |  | ||||||
|  |  | ||||||
| Signed-off-by: Michael Shych <michaelsh@nvidia.com> |  | ||||||
| Reviewed-by: Vadim Pasternak <vadimp@nvidia.com> |  | ||||||
| --- |  | ||||||
|  Documentation/ABI/stable/sysfs-driver-mlxreg-io | 4 ++-- |  | ||||||
|  1 file changed, 2 insertions(+), 2 deletions(-) |  | ||||||
|  |  | ||||||
| diff --git a/Documentation/ABI/stable/sysfs-driver-mlxreg-io b/Documentation/ABI/stable/sysfs-driver-mlxreg-io |  | ||||||
| index 0913a8daf..ac503e84e 100644 |  | ||||||
| --- a/Documentation/ABI/stable/sysfs-driver-mlxreg-io |  | ||||||
| +++ b/Documentation/ABI/stable/sysfs-driver-mlxreg-io |  | ||||||
| @@ -103,13 +103,13 @@ Description:	These files show the system reset cause, as following: power |  | ||||||
|  What:		/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_comex_pwr_fail |  | ||||||
|  What:		/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_from_comex |  | ||||||
|  What:		/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_system |  | ||||||
| -What:		/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_voltmon_upgrade_fail |  | ||||||
| +What:		/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_pwr_converter_fail |  | ||||||
|  Date:		November 2018 |  | ||||||
|  KernelVersion:	5.0 |  | ||||||
|  Contact:	Vadim Pasternak <vadimpmellanox.com> |  | ||||||
|  Description:	These files show the system reset cause, as following: ComEx |  | ||||||
|  		power fail, reset from ComEx, system platform reset, reset |  | ||||||
| -		due to voltage monitor devices upgrade failure, |  | ||||||
| +		due to power converter devices failure, |  | ||||||
|  		Value 1 in file means this is reset cause, 0 - otherwise. |  | ||||||
|  		Only one bit could be 1 at the same time, representing only |  | ||||||
|  		the last reset cause. |  | ||||||
| --  |  | ||||||
| 2.30.2 |  | ||||||
|  |  | ||||||
| @@ -1,295 +0,0 @@ | |||||||
| From 4c485e6f50001f0ea691b0ce5c0d90a118e8d360 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Michael Shych <michaelsh@nvidia.com> |  | ||||||
| Date: Sun, 4 Sep 2022 14:03:58 +0300 |  | ||||||
| Subject: [PATCH] platform: mellanox: Introduce support for next-generation |  | ||||||
|  800GB/s ethernet switch. |  | ||||||
|  |  | ||||||
| Introduce support for Nvidia next-generation 800GB/s ethernet switch - SN5600. |  | ||||||
| SN5600 is 51.2 Tbps Ethernet switch based on Nvidia Spectrum-4 ASIC. |  | ||||||
| It can provide up to 64x800Gb/s (ETH) full bidirectional bandwidth per port |  | ||||||
| using PAM-4 modulations. The system supports 64 Belly to Belly  2x4 OSFP cages. |  | ||||||
| The switch was designed to fit standard 2U racks. |  | ||||||
|  |  | ||||||
| Features: |  | ||||||
| - 64 OSFP ports support 800GbE - 10GbE speed. |  | ||||||
| - Additional 25GbE - 1GbE service port on the front panel. |  | ||||||
| - Air-cooled with 3 + 1 redundant fan units. |  | ||||||
| - 1 + 1 redundant 3000W or 3600W PSUs. |  | ||||||
| - System management board is based on Intel Coffee-lake CPU E-2276 |  | ||||||
|   with secure-boot support. |  | ||||||
|  |  | ||||||
| Signed-off-by: Michael Shych <michaelsh@nvidia.com> |  | ||||||
| Reviewed-by: Vadim Pasternak <vadimp@nvidia.com> |  | ||||||
| --- |  | ||||||
|  drivers/platform/x86/mlx-platform.c | 178 ++++++++++++++++++++++++++++ |  | ||||||
|  1 file changed, 178 insertions(+) |  | ||||||
|  |  | ||||||
| diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c |  | ||||||
| index 31c5cc10f..7e9f2a5ab 100644 |  | ||||||
| --- a/drivers/platform/x86/mlx-platform.c |  | ||||||
| +++ b/drivers/platform/x86/mlx-platform.c |  | ||||||
| @@ -253,6 +253,7 @@ |  | ||||||
|  #define MLXPLAT_CPLD_CH3_ETH_MODULAR		43 |  | ||||||
|  #define MLXPLAT_CPLD_CH4_ETH_MODULAR		51 |  | ||||||
|  #define MLXPLAT_CPLD_CH2_RACK_SWITCH		18 |  | ||||||
| +#define MLXPLAT_CPLD_CH2_NG800			34 |  | ||||||
|   |  | ||||||
|  /* Number of LPC attached MUX platform devices */ |  | ||||||
|  #define MLXPLAT_CPLD_LPC_MUX_DEVS		4 |  | ||||||
| @@ -503,6 +504,37 @@ static struct i2c_mux_reg_platform_data mlxplat_rack_switch_mux_data[] = { |  | ||||||
|   |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +/* Platform channels for ng800 system family */ |  | ||||||
| +static const int mlxplat_ng800_channels[] = { |  | ||||||
| +	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, |  | ||||||
| +	18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
| +/* Platform ng800 mux data */ |  | ||||||
| +static struct i2c_mux_reg_platform_data mlxplat_ng800_mux_data[] = { |  | ||||||
| +	{ |  | ||||||
| +		.parent = 1, |  | ||||||
| +		.base_nr = MLXPLAT_CPLD_CH1, |  | ||||||
| +		.write_only = 1, |  | ||||||
| +		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1, |  | ||||||
| +		.reg_size = 1, |  | ||||||
| +		.idle_in_use = 1, |  | ||||||
| +		.values = mlxplat_ng800_channels, |  | ||||||
| +		.n_values = ARRAY_SIZE(mlxplat_ng800_channels), |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.parent = 1, |  | ||||||
| +		.base_nr = MLXPLAT_CPLD_CH2_NG800, |  | ||||||
| +		.write_only = 1, |  | ||||||
| +		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2, |  | ||||||
| +		.reg_size = 1, |  | ||||||
| +		.idle_in_use = 1, |  | ||||||
| +		.values = mlxplat_msn21xx_channels, |  | ||||||
| +		.n_values = ARRAY_SIZE(mlxplat_msn21xx_channels), |  | ||||||
| +	}, |  | ||||||
| + |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  /* Platform hotplug devices */ |  | ||||||
|  static struct i2c_board_info mlxplat_mlxcpld_pwr[] = { |  | ||||||
|  	{ |  | ||||||
| @@ -522,6 +554,15 @@ static struct i2c_board_info mlxplat_mlxcpld_ext_pwr[] = { |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static struct i2c_board_info mlxplat_mlxcpld_pwr_ng800[] = { |  | ||||||
| +	{ |  | ||||||
| +		I2C_BOARD_INFO("dps460", 0x59), |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		I2C_BOARD_INFO("dps460", 0x5a), |  | ||||||
| +	}, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  static struct i2c_board_info mlxplat_mlxcpld_fan[] = { |  | ||||||
|  	{ |  | ||||||
|  		I2C_BOARD_INFO("24c32", 0x50), |  | ||||||
| @@ -601,6 +642,23 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_wc_items_data[] = { |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_ng800_items_data[] = { |  | ||||||
| +	{ |  | ||||||
| +		.label = "pwr1", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, |  | ||||||
| +		.mask = BIT(0), |  | ||||||
| +		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr_ng800[0], |  | ||||||
| +		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "pwr2", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, |  | ||||||
| +		.mask = BIT(1), |  | ||||||
| +		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr_ng800[1], |  | ||||||
| +		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, |  | ||||||
| +	}, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_items_data[] = { |  | ||||||
|  	{ |  | ||||||
|  		.label = "fan1", |  | ||||||
| @@ -1224,6 +1282,47 @@ static struct mlxreg_core_item mlxplat_mlxcpld_ext_items[] = { |  | ||||||
|  	} |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static struct mlxreg_core_item mlxplat_mlxcpld_ng800_items[] = { |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_default_ng_psu_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_PSU_EXT_MASK, |  | ||||||
| +		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_psu_items_data), |  | ||||||
| +		.inversed = 1, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_default_pwr_ng800_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_PWR_EXT_MASK, |  | ||||||
| +		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_ng800_items_data), |  | ||||||
| +		.inversed = 0, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_default_ng_fan_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_FAN_NG_MASK, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), |  | ||||||
| +		.inversed = 1, |  | ||||||
| +		.health = false, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.data = mlxplat_mlxcpld_default_asic_items_data, |  | ||||||
| +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, |  | ||||||
| +		.mask = MLXPLAT_CPLD_ASIC_MASK, |  | ||||||
| +		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), |  | ||||||
| +		.inversed = 0, |  | ||||||
| +		.health = true, |  | ||||||
| +	}, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  static |  | ||||||
|  struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_ext_data = { |  | ||||||
|  	.items = mlxplat_mlxcpld_ext_items, |  | ||||||
| @@ -1234,6 +1333,16 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_ext_data = { |  | ||||||
|  	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static |  | ||||||
| +struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_ng800_data = { |  | ||||||
| +	.items = mlxplat_mlxcpld_ng800_items, |  | ||||||
| +	.counter = ARRAY_SIZE(mlxplat_mlxcpld_ng800_items), |  | ||||||
| +	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, |  | ||||||
| +	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, |  | ||||||
| +	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, |  | ||||||
| +	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2, |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  static struct mlxreg_core_data mlxplat_mlxcpld_modular_pwr_items_data[] = { |  | ||||||
|  	{ |  | ||||||
|  		.label = "pwr1", |  | ||||||
| @@ -3093,6 +3202,12 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { |  | ||||||
|  		.mask = GENMASK(7, 0) & ~BIT(7), |  | ||||||
|  		.mode = 0644, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "clk_brd_prog_en", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(1), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.label = "erot1_recovery", |  | ||||||
|  		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, |  | ||||||
| @@ -3219,6 +3334,12 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { |  | ||||||
|  		.mask = GENMASK(7, 0) & ~BIT(6), |  | ||||||
|  		.mode = 0444, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "reset_ac_ok_fail", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(7), |  | ||||||
| +		.mode = 0444, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.label = "psu1_on", |  | ||||||
|  		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, |  | ||||||
| @@ -3324,6 +3445,30 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { |  | ||||||
|  		.mask = GENMASK(7, 0) & ~BIT(1), |  | ||||||
|  		.mode = 0444, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "clk_brd1_boot_fail", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(4), |  | ||||||
| +		.mode = 0444, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "clk_brd2_boot_fail", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(5), |  | ||||||
| +		.mode = 0444, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "clk_brd_fail", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(6), |  | ||||||
| +		.mode = 0444, |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "asic_pg_fail", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(7), |  | ||||||
| +		.mode = 0444, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.label = "spi_chnl_select", |  | ||||||
|  		.reg = MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT, |  | ||||||
| @@ -3621,6 +3766,12 @@ static struct mlxreg_core_data mlxplat_mlxcpld_modular_regs_io_data[] = { |  | ||||||
|  		.bit = 5, |  | ||||||
|  		.mode = 0444, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.label = "pwr_converter_prog_en", |  | ||||||
| +		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, |  | ||||||
| +		.mask = GENMASK(7, 0) & ~BIT(0), |  | ||||||
| +		.mode = 0644, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.label = "vpd_wp", |  | ||||||
|  		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, |  | ||||||
| @@ -5209,6 +5360,27 @@ static int __init mlxplat_dmi_rack_switch_matched(const struct dmi_system_id *dm |  | ||||||
|  	return 1; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +static int __init mlxplat_dmi_ng800_matched(const struct dmi_system_id *dmi) |  | ||||||
| +{ |  | ||||||
| +	int i; |  | ||||||
| + |  | ||||||
| +	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; |  | ||||||
| +	mlxplat_mux_num = ARRAY_SIZE(mlxplat_ng800_mux_data); |  | ||||||
| +	mlxplat_mux_data = mlxplat_ng800_mux_data; |  | ||||||
| +	mlxplat_hotplug = &mlxplat_mlxcpld_ng800_data; |  | ||||||
| +	mlxplat_hotplug->deferred_nr = |  | ||||||
| +		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; |  | ||||||
| +	mlxplat_led = &mlxplat_default_ng_led_data; |  | ||||||
| +	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; |  | ||||||
| +	mlxplat_fan = &mlxplat_default_fan_data; |  | ||||||
| +	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) |  | ||||||
| +		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; |  | ||||||
| +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; |  | ||||||
| +	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng400; |  | ||||||
| + |  | ||||||
| +	return 1; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { |  | ||||||
|  	{ |  | ||||||
|  		.callback = mlxplat_dmi_default_wc_matched, |  | ||||||
| @@ -5278,6 +5450,12 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { |  | ||||||
|  			DMI_MATCH(DMI_BOARD_NAME, "VMOD0011"), |  | ||||||
|  		}, |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.callback = mlxplat_dmi_ng800_matched, |  | ||||||
| +		.matches = { |  | ||||||
| +			DMI_MATCH(DMI_BOARD_NAME, "VMOD0013"), |  | ||||||
| +		}, |  | ||||||
| +	}, |  | ||||||
|  	{ |  | ||||||
|  		.callback = mlxplat_dmi_chassis_blade_matched, |  | ||||||
|  		.matches = { |  | ||||||
| --  |  | ||||||
| 2.30.2 |  | ||||||
|  |  | ||||||
| @@ -0,0 +1,99 @@ | |||||||
|  | From f2dffe0f83a05dfbf0190316f0d260f7d7ff76a8 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Mon, 23 Jan 2023 21:38:24 +0200 | ||||||
|  | Subject: [PATCH backport 5.10 181/182] Revert "mlxsw: thermal: Fix | ||||||
|  |  out-of-bounds memory accesses" | ||||||
|  |  | ||||||
|  | This reverts commit e59d839743b50cb1d3f42a786bea48cc5621d254. | ||||||
|  | --- | ||||||
|  |  .../ethernet/mellanox/mlxsw/core_thermal.c    | 52 +++++++++++++++++-- | ||||||
|  |  1 file changed, 47 insertions(+), 5 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
|  | index 529108aea3c6..88a2f63c8839 100644 | ||||||
|  | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
|  | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||||||
|  | @@ -23,8 +23,16 @@ | ||||||
|  |  #define MLXSW_THERMAL_MODULE_TEMP_SHIFT	(MLXSW_THERMAL_HYSTERESIS_TEMP * 2) | ||||||
|  |  #define MLXSW_THERMAL_TEMP_SCORE_MAX	GENMASK(31, 0) | ||||||
|  |  #define MLXSW_THERMAL_MAX_STATE	10 | ||||||
|  | -#define MLXSW_THERMAL_MIN_STATE	2 | ||||||
|  |  #define MLXSW_THERMAL_MAX_DUTY	255 | ||||||
|  | +/* Minimum and maximum fan allowed speed in percent: from 20% to 100%. Values | ||||||
|  | + * MLXSW_THERMAL_MAX_STATE + x, where x is between 2 and 10 are used for | ||||||
|  | + * setting fan speed dynamic minimum. For example, if value is set to 14 (40%) | ||||||
|  | + * cooling levels vector will be set to 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10 to | ||||||
|  | + * introduce PWM speed in percent: 40, 40, 40, 40, 40, 50, 60. 70, 80, 90, 100. | ||||||
|  | + */ | ||||||
|  | +#define MLXSW_THERMAL_SPEED_MIN		(MLXSW_THERMAL_MAX_STATE + 2) | ||||||
|  | +#define MLXSW_THERMAL_SPEED_MAX		(MLXSW_THERMAL_MAX_STATE * 2) | ||||||
|  | +#define MLXSW_THERMAL_SPEED_MIN_LEVEL	2		/* 20% */ | ||||||
|  |   | ||||||
|  |  /* External cooling devices, allowed for binding to mlxsw thermal zones. */ | ||||||
|  |  static char * const mlxsw_thermal_external_allowed_cdev[] = { | ||||||
|  | @@ -656,16 +664,49 @@ static int mlxsw_thermal_set_cur_state(struct thermal_cooling_device *cdev, | ||||||
|  |  	struct mlxsw_thermal *thermal = cdev->devdata; | ||||||
|  |  	struct device *dev = thermal->bus_info->dev; | ||||||
|  |  	char mfsc_pl[MLXSW_REG_MFSC_LEN]; | ||||||
|  | +	unsigned long cur_state, i; | ||||||
|  |  	int idx; | ||||||
|  | +	u8 duty; | ||||||
|  |  	int err; | ||||||
|  |   | ||||||
|  | -	if (state > MLXSW_THERMAL_MAX_STATE) | ||||||
|  | -		return -EINVAL; | ||||||
|  | - | ||||||
|  |  	idx = mlxsw_get_cooling_device_idx(thermal, cdev); | ||||||
|  |  	if (idx < 0) | ||||||
|  |  		return idx; | ||||||
|  |   | ||||||
|  | +	/* Verify if this request is for changing allowed fan dynamical | ||||||
|  | +	 * minimum. If it is - update cooling levels accordingly and update | ||||||
|  | +	 * state, if current state is below the newly requested minimum state. | ||||||
|  | +	 * For example, if current state is 5, and minimal state is to be | ||||||
|  | +	 * changed from 4 to 6, thermal->cooling_levels[0 to 5] will be changed | ||||||
|  | +	 * all from 4 to 6. And state 5 (thermal->cooling_levels[4]) should be | ||||||
|  | +	 * overwritten. | ||||||
|  | +	 */ | ||||||
|  | +	if (state >= MLXSW_THERMAL_SPEED_MIN && | ||||||
|  | +	    state <= MLXSW_THERMAL_SPEED_MAX) { | ||||||
|  | +		state -= MLXSW_THERMAL_MAX_STATE; | ||||||
|  | +		for (i = 0; i <= MLXSW_THERMAL_MAX_STATE; i++) | ||||||
|  | +			thermal->cooling_levels[i] = max(state, i); | ||||||
|  | + | ||||||
|  | +		mlxsw_reg_mfsc_pack(mfsc_pl, idx, 0); | ||||||
|  | +		err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfsc), mfsc_pl); | ||||||
|  | +		if (err) | ||||||
|  | +			return err; | ||||||
|  | + | ||||||
|  | +		duty = mlxsw_reg_mfsc_pwm_duty_cycle_get(mfsc_pl); | ||||||
|  | +		cur_state = mlxsw_duty_to_state(duty); | ||||||
|  | + | ||||||
|  | +		/* If current fan state is lower than requested dynamical | ||||||
|  | +		 * minimum, increase fan speed up to dynamical minimum. | ||||||
|  | +		 */ | ||||||
|  | +		if (state < cur_state) | ||||||
|  | +			return 0; | ||||||
|  | + | ||||||
|  | +		state = cur_state; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	if (state > MLXSW_THERMAL_MAX_STATE) | ||||||
|  | +		return -EINVAL; | ||||||
|  | + | ||||||
|  |  	/* Normalize the state to the valid speed range. */ | ||||||
|  |  	state = thermal->cooling_levels[state]; | ||||||
|  |  	mlxsw_reg_mfsc_pack(mfsc_pl, idx, mlxsw_state_to_duty(state)); | ||||||
|  | @@ -1143,7 +1184,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||||||
|  |   | ||||||
|  |  	/* Initialize cooling levels per PWM state. */ | ||||||
|  |  	for (i = 0; i < MLXSW_THERMAL_MAX_STATE; i++) | ||||||
|  | -		thermal->cooling_levels[i] = max(MLXSW_THERMAL_MIN_STATE, i); | ||||||
|  | +		thermal->cooling_levels[i] = max(MLXSW_THERMAL_SPEED_MIN_LEVEL, | ||||||
|  | +						 i); | ||||||
|  |   | ||||||
|  |  	thermal->polling_delay = bus_info->low_frequency ? | ||||||
|  |  				 MLXSW_THERMAL_SLOW_POLL_INT : | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,647 @@ | |||||||
|  | From 74ab8a216510df924ca88d2f3d5944eb107264d0 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Sun, 11 Dec 2022 09:26:48 +0200 | ||||||
|  | Subject: [PATCH backport 5.10 1/5] platform: mellanox: Introduce support of | ||||||
|  |  new Nvidia L1 switch | ||||||
|  |  | ||||||
|  | Add support for new L1 switch nodes providing L1 connectivity for | ||||||
|  | multi-node networking chassis. | ||||||
|  |  | ||||||
|  | The purpose is to provide compute server with full management and IO | ||||||
|  | subsystems with connections to L1 switches. | ||||||
|  |  | ||||||
|  | System contains the following components: | ||||||
|  | - COMe module based on Intel Coffee Lake CPU | ||||||
|  | - Switch baseboard with two ASICs, while | ||||||
|  |   24 ports of each ASICs are connected to one backplane connector | ||||||
|  |   32 ports of each ASIC are connected to 8 OSFPs | ||||||
|  | - Integrated 60mm dual-rotor FANs inside L1 node (N+2 redundancy) | ||||||
|  | - Support 48V or 54V DC input from the external power server. | ||||||
|  |  | ||||||
|  | Add the structures related to the new systems to allow proper activation | ||||||
|  | of the all required platform driver. | ||||||
|  |  | ||||||
|  | Add poweroff callback to support deep power cycle flow, which should | ||||||
|  | include special actions against CPLD device for performing graceful | ||||||
|  | operation. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/platform/x86/mlx-platform.c | 395 +++++++++++++++++++++++++++- | ||||||
|  |  1 file changed, 393 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c | ||||||
|  | index 4bbe1d8f0..a2addd1b3 100644 | ||||||
|  | --- a/drivers/platform/x86/mlx-platform.c | ||||||
|  | +++ b/drivers/platform/x86/mlx-platform.c | ||||||
|  | @@ -15,6 +15,7 @@ | ||||||
|  |  #include <linux/platform_device.h> | ||||||
|  |  #include <linux/platform_data/i2c-mux-reg.h> | ||||||
|  |  #include <linux/platform_data/mlxreg.h> | ||||||
|  | +#include <linux/reboot.h> | ||||||
|  |  #include <linux/regmap.h> | ||||||
|  |  #include <linux/spi/spi.h> | ||||||
|  |   | ||||||
|  | @@ -62,12 +63,19 @@ | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET	0x37 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET	0x3a | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET	0x3b | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET	0x3c | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET	0x3d | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET	0x3e | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET	0x3f | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET	0x40 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET	0x41 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET	0x42 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET	0x43 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET	0x44 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET 0x45 | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_BRD_OFFSET		0x47 | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET	0x48 | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET	0x49 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_GWP_OFFSET		0x4a | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET	0x4b | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET	0x4c | ||||||
|  | @@ -97,6 +105,9 @@ | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET	0x94 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET	0x95 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET	0x96 | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET	0x97 | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET	0x98 | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET	0x99 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET	0x9a | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET	0x9b | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET	0x9c | ||||||
|  | @@ -128,6 +139,7 @@ | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET	0xd1 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET	0xd2 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET	0xd3 | ||||||
|  | +#define MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET	0xd9 | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET	0xde | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET	0xdf | ||||||
|  |  #define MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET	0xe0 | ||||||
|  | @@ -211,6 +223,7 @@ | ||||||
|  |  					 MLXPLAT_CPLD_AGGR_MASK_LC_SDWN) | ||||||
|  |  #define MLXPLAT_CPLD_LOW_AGGR_MASK_LOW	0xc1 | ||||||
|  |  #define MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2	BIT(2) | ||||||
|  | +#define MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT	BIT(4) | ||||||
|  |  #define MLXPLAT_CPLD_LOW_AGGR_MASK_I2C	BIT(6) | ||||||
|  |  #define MLXPLAT_CPLD_PSU_MASK		GENMASK(1, 0) | ||||||
|  |  #define MLXPLAT_CPLD_PWR_MASK		GENMASK(1, 0) | ||||||
|  | @@ -225,6 +238,16 @@ | ||||||
|  |  #define MLXPLAT_CPLD_VOLTREG_UPD_MASK	GENMASK(5, 4) | ||||||
|  |  #define MLXPLAT_CPLD_GWP_MASK		GENMASK(0, 0) | ||||||
|  |  #define MLXPLAT_CPLD_EROT_MASK		GENMASK(1, 0) | ||||||
|  | +#define MLXPLAT_CPLD_PWR_BUTTON_MASK	BIT(0) | ||||||
|  | +#define MLXPLAT_CPLD_LATCH_RST_MASK	BIT(5) | ||||||
|  | +#define MLXPLAT_CPLD_THERMAL1_PDB_MASK	BIT(3) | ||||||
|  | +#define MLXPLAT_CPLD_THERMAL2_PDB_MASK	BIT(4) | ||||||
|  | +#define MLXPLAT_CPLD_INTRUSION_MASK	BIT(6) | ||||||
|  | +#define MLXPLAT_CPLD_PWM_PG_MASK	BIT(7) | ||||||
|  | +#define MLXPLAT_CPLD_L1_CHA_HEALTH_MASK (MLXPLAT_CPLD_THERMAL1_PDB_MASK | \ | ||||||
|  | +					 MLXPLAT_CPLD_THERMAL2_PDB_MASK | \ | ||||||
|  | +					 MLXPLAT_CPLD_INTRUSION_MASK |\ | ||||||
|  | +					 MLXPLAT_CPLD_PWM_PG_MASK) | ||||||
|  |  #define MLXPLAT_CPLD_I2C_CAP_BIT	0x04 | ||||||
|  |  #define MLXPLAT_CPLD_I2C_CAP_MASK	GENMASK(5, MLXPLAT_CPLD_I2C_CAP_BIT) | ||||||
|  |   | ||||||
|  | @@ -237,6 +260,8 @@ | ||||||
|  |  /* Masks for aggregation for modular systems */ | ||||||
|  |  #define MLXPLAT_CPLD_LPC_LC_MASK	GENMASK(7, 0) | ||||||
|  |   | ||||||
|  | +#define MLXPLAT_CPLD_HALT_MASK		BIT(3) | ||||||
|  | + | ||||||
|  |  /* Default I2C parent bus number */ | ||||||
|  |  #define MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR	1 | ||||||
|  |   | ||||||
|  | @@ -317,6 +342,8 @@ struct mlxplat_priv { | ||||||
|  |  	void *regmap; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +static struct platform_device *mlxplat_dev; | ||||||
|  | + | ||||||
|  |  /* Regions for LPC I2C controller and LPC base register space */ | ||||||
|  |  static const struct resource mlxplat_lpc_resources[] = { | ||||||
|  |  	[0] = DEFINE_RES_NAMED(MLXPLAT_CPLD_LPC_I2C_BASE_ADRR, | ||||||
|  | @@ -476,7 +503,7 @@ static struct i2c_mux_reg_platform_data mlxplat_modular_mux_data[] = { | ||||||
|  |  	}, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | -/* Platform channels for rack swicth system family */ | ||||||
|  | +/* Platform channels for rack switch system family */ | ||||||
|  |  static const int mlxplat_rack_switch_channels[] = { | ||||||
|  |  	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, | ||||||
|  |  }; | ||||||
|  | @@ -2409,6 +2436,156 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_rack_switch_data = { | ||||||
|  |  	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +/* Callback performs graceful shutdown after notification about power button event */ | ||||||
|  | +static int | ||||||
|  | +mlxplat_mlxcpld_l1_switch_pwr_events_handler(void *handle, enum mlxreg_hotplug_kind kind, | ||||||
|  | +					     u8 action) | ||||||
|  | +{ | ||||||
|  | +	dev_info(&mlxplat_dev->dev, "System shutdown due to short press of power button"); | ||||||
|  | +	kernel_halt(); | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_l1_switch_pwr_events_notifier = { | ||||||
|  | +	.user_handler = mlxplat_mlxcpld_l1_switch_pwr_events_handler, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +/* Platform hotplug for l1 switch systems family data  */ | ||||||
|  | +static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_pwr_events_items_data[] = { | ||||||
|  | +	{ | ||||||
|  | +		.label = "power_button", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_PWR_BUTTON_MASK, | ||||||
|  | +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||||||
|  | +		.hpdev.notifier = &mlxplat_mlxcpld_l1_switch_pwr_events_notifier, | ||||||
|  | +	}, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +/* Callback activates latch reset flow after notification about intrusion event */ | ||||||
|  | +static int | ||||||
|  | +mlxplat_mlxcpld_l1_switch_intrusion_events_handler(void *handle, enum mlxreg_hotplug_kind kind, | ||||||
|  | +						   u8 action) | ||||||
|  | +{ | ||||||
|  | +	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); | ||||||
|  | +	u32 regval; | ||||||
|  | +	int err; | ||||||
|  | + | ||||||
|  | +	err = regmap_read(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, ®val); | ||||||
|  | +	if (err) | ||||||
|  | +		goto fail_regmap_read; | ||||||
|  | + | ||||||
|  | +	if (action) { | ||||||
|  | +		dev_info(&mlxplat_dev->dev, "Detected intrusion - system latch is opened"); | ||||||
|  | +		err = regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, | ||||||
|  | +				   regval | MLXPLAT_CPLD_LATCH_RST_MASK); | ||||||
|  | +	} else { | ||||||
|  | +		dev_info(&mlxplat_dev->dev, "System latch is properly closed"); | ||||||
|  | +		err = regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, | ||||||
|  | +				   regval & ~MLXPLAT_CPLD_LATCH_RST_MASK); | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	if (err) | ||||||
|  | +		goto fail_regmap_write; | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | + | ||||||
|  | +fail_regmap_read: | ||||||
|  | +fail_regmap_write: | ||||||
|  | +	dev_err(&mlxplat_dev->dev, "Register access failed"); | ||||||
|  | +	return err; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_l1_switch_intrusion_events_notifier = { | ||||||
|  | +	.user_handler = mlxplat_mlxcpld_l1_switch_intrusion_events_handler, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_health_events_items_data[] = { | ||||||
|  | +	{ | ||||||
|  | +		.label = "thermal1_pdb", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_THERMAL1_PDB_MASK, | ||||||
|  | +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "thermal2_pdb", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_THERMAL2_PDB_MASK, | ||||||
|  | +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "intrusion", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_INTRUSION_MASK, | ||||||
|  | +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||||||
|  | +		.hpdev.notifier = &mlxplat_mlxcpld_l1_switch_intrusion_events_notifier, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "pwm_pg", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_PWM_PG_MASK, | ||||||
|  | +		.hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||||||
|  | +	}, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct mlxreg_core_item mlxplat_mlxcpld_l1_switch_events_items[] = { | ||||||
|  | +	{ | ||||||
|  | +		.data = mlxplat_mlxcpld_default_ng_fan_items_data, | ||||||
|  | +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_FAN_NG_MASK, | ||||||
|  | +		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), | ||||||
|  | +		.inversed = 1, | ||||||
|  | +		.health = false, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.data = mlxplat_mlxcpld_erot_ap_items_data, | ||||||
|  | +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_EROT_MASK, | ||||||
|  | +		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_ap_items_data), | ||||||
|  | +		.inversed = 1, | ||||||
|  | +		.health = false, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.data = mlxplat_mlxcpld_erot_error_items_data, | ||||||
|  | +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_EROT_MASK, | ||||||
|  | +		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_error_items_data), | ||||||
|  | +		.inversed = 1, | ||||||
|  | +		.health = false, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.data = mlxplat_mlxcpld_l1_switch_pwr_events_items_data, | ||||||
|  | +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_PWR_BUTTON_MASK, | ||||||
|  | +		.count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_pwr_events_items_data), | ||||||
|  | +		.inversed = 0, | ||||||
|  | +		.health = false, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.data = mlxplat_mlxcpld_l1_switch_health_events_items_data, | ||||||
|  | +		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_L1_CHA_HEALTH_MASK, | ||||||
|  | +		.count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_health_events_items_data), | ||||||
|  | +		.inversed = 0, | ||||||
|  | +		.health = false, | ||||||
|  | +		.ind = 8, | ||||||
|  | +	}, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static | ||||||
|  | +struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_l1_switch_data = { | ||||||
|  | +	.items = mlxplat_mlxcpld_l1_switch_events_items, | ||||||
|  | +	.counter = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_events_items), | ||||||
|  | +	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, | ||||||
|  | +	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, | ||||||
|  | +	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, | ||||||
|  | +	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  static struct spi_board_info rack_switch_switch_spi_board_info[] = { | ||||||
|  |  	{ | ||||||
|  |  		.modalias       = "spidev", | ||||||
|  | @@ -3066,6 +3243,114 @@ static struct mlxreg_core_platform_data mlxplat_qmb8700_led_data = { | ||||||
|  |  		.counter = ARRAY_SIZE(mlxplat_mlxcpld_qmb8700_led_data), | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +/* Platform led data for chassis system */ | ||||||
|  | +static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_led_data[] = { | ||||||
|  | +	{ | ||||||
|  | +		.label = "status:green", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "status:orange", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan1:green", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(0), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan1:orange", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(0), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan2:green", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(1), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan2:orange", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(1), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan3:green", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(2), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan3:orange", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(2), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan4:green", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(3), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan4:orange", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(3), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan5:green", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(4), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan5:orange", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(4), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan6:green", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(5), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "fan6:orange", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, | ||||||
|  | +		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, | ||||||
|  | +		.bit = BIT(5), | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "uid:blue", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET, | ||||||
|  | +		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, | ||||||
|  | +	}, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct mlxreg_core_platform_data mlxplat_l1_switch_led_data = { | ||||||
|  | +		.data = mlxplat_mlxcpld_l1_switch_led_data, | ||||||
|  | +		.counter = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_led_data), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  /* Platform register access default */ | ||||||
|  |  static struct mlxreg_core_data mlxplat_mlxcpld_default_regs_io_data[] = { | ||||||
|  |  	{ | ||||||
|  | @@ -3594,12 +3879,48 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { | ||||||
|  |  		.mask = GENMASK(7, 0) & ~BIT(3), | ||||||
|  |  		.mode = 0200, | ||||||
|  |  	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "deep_pwr_cycle", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, | ||||||
|  | +		.mask = GENMASK(7, 0) & ~BIT(5), | ||||||
|  | +		.mode = 0200, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "latch_reset", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, | ||||||
|  | +		.mask = GENMASK(7, 0) & ~BIT(5), | ||||||
|  | +		.mode = 0200, | ||||||
|  | +	}, | ||||||
|  |  	{ | ||||||
|  |  		.label = "jtag_enable", | ||||||
|  |  		.reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, | ||||||
|  |  		.mask = GENMASK(7, 0) & ~BIT(4), | ||||||
|  |  		.mode = 0644, | ||||||
|  |  	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "dbg1", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET, | ||||||
|  | +		.bit = GENMASK(7, 0), | ||||||
|  | +		.mode = 0644, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "dbg2", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET, | ||||||
|  | +		.bit = GENMASK(7, 0), | ||||||
|  | +		.mode = 0644, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "dbg3", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET, | ||||||
|  | +		.bit = GENMASK(7, 0), | ||||||
|  | +		.mode = 0644, | ||||||
|  | +	}, | ||||||
|  | +	{ | ||||||
|  | +		.label = "dbg4", | ||||||
|  | +		.reg = MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET, | ||||||
|  | +		.bit = GENMASK(7, 0), | ||||||
|  | +		.mode = 0644, | ||||||
|  | +	}, | ||||||
|  |  	{ | ||||||
|  |  		.label = "asic_health", | ||||||
|  |  		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, | ||||||
|  | @@ -4913,11 +5234,18 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET: | ||||||
|  | @@ -4932,6 +5260,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET: | ||||||
|  | @@ -4960,6 +5290,7 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET: | ||||||
|  | @@ -5010,6 +5341,10 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET: | ||||||
|  | @@ -5019,6 +5354,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET: | ||||||
|  | @@ -5040,6 +5378,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET: | ||||||
|  | @@ -5076,6 +5417,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET: | ||||||
|  | @@ -5152,6 +5494,10 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET: | ||||||
|  | @@ -5161,6 +5507,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET: | ||||||
|  | @@ -5182,6 +5531,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET: | ||||||
|  | @@ -5212,6 +5564,7 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg) | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET: | ||||||
|  | +	case MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET: | ||||||
|  |  	case MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET: | ||||||
|  | @@ -5407,7 +5760,6 @@ static struct resource mlxplat_mlxcpld_resources[] = { | ||||||
|  |  	[0] = DEFINE_RES_IRQ_NAMED(MLXPLAT_CPLD_LPC_SYSIRQ, "mlxreg-hotplug"), | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | -static struct platform_device *mlxplat_dev; | ||||||
|  |  static struct mlxreg_core_hotplug_platform_data *mlxplat_i2c; | ||||||
|  |  static struct mlxreg_core_hotplug_platform_data *mlxplat_hotplug; | ||||||
|  |  static struct mlxreg_core_platform_data *mlxplat_led; | ||||||
|  | @@ -5418,6 +5770,14 @@ static struct mlxreg_core_platform_data | ||||||
|  |  static const struct regmap_config *mlxplat_regmap_config; | ||||||
|  |  static struct spi_board_info *mlxplat_spi; | ||||||
|  |   | ||||||
|  | +/* Platform default poweroff function */ | ||||||
|  | +static void mlxplat_poweroff(void) | ||||||
|  | +{ | ||||||
|  | +	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); | ||||||
|  | + | ||||||
|  | +	regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, MLXPLAT_CPLD_HALT_MASK); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  static int __init mlxplat_dmi_default_matched(const struct dmi_system_id *dmi) | ||||||
|  |  { | ||||||
|  |  	int i; | ||||||
|  | @@ -5740,6 +6100,29 @@ static int __init mlxplat_dmi_ng800_matched(const struct dmi_system_id *dmi) | ||||||
|  |  	return 1; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static int __init mlxplat_dmi_l1_switch_matched(const struct dmi_system_id *dmi) | ||||||
|  | +{ | ||||||
|  | +	int i; | ||||||
|  | + | ||||||
|  | +	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; | ||||||
|  | +	mlxplat_mux_num = ARRAY_SIZE(mlxplat_rack_switch_mux_data); | ||||||
|  | +	mlxplat_mux_data = mlxplat_rack_switch_mux_data; | ||||||
|  | +	mlxplat_hotplug = &mlxplat_mlxcpld_l1_switch_data; | ||||||
|  | +	mlxplat_hotplug->deferred_nr = | ||||||
|  | +		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; | ||||||
|  | +	mlxplat_led = &mlxplat_l1_switch_led_data; | ||||||
|  | +	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; | ||||||
|  | +	mlxplat_fan = &mlxplat_default_fan_data; | ||||||
|  | +	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) | ||||||
|  | +		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; | ||||||
|  | +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; | ||||||
|  | +	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_rack_switch; | ||||||
|  | +	pm_power_off = mlxplat_poweroff; | ||||||
|  | +	mlxplat_spi = rack_switch_switch_spi_board_info; | ||||||
|  | + | ||||||
|  | +	return 1; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { | ||||||
|  |  	{ | ||||||
|  |  		.callback = mlxplat_dmi_default_wc_matched, | ||||||
|  | @@ -5835,6 +6218,12 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { | ||||||
|  |  			DMI_MATCH(DMI_BOARD_NAME, "VMOD0015"), | ||||||
|  |  		}, | ||||||
|  |  	}, | ||||||
|  | +	{ | ||||||
|  | +		.callback = mlxplat_dmi_l1_switch_matched, | ||||||
|  | +		.matches = { | ||||||
|  | +			DMI_MATCH(DMI_BOARD_NAME, "VMOD0017"), | ||||||
|  | +		}, | ||||||
|  | +	}, | ||||||
|  |  	{ | ||||||
|  |  		.callback = mlxplat_dmi_msn274x_matched, | ||||||
|  |  		.matches = { | ||||||
|  | @@ -6167,6 +6556,8 @@ static void __exit mlxplat_exit(void) | ||||||
|  |  	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); | ||||||
|  |  	int i; | ||||||
|  |   | ||||||
|  | +	if (pm_power_off) | ||||||
|  | +		pm_power_off = NULL; | ||||||
|  |  	for (i = MLXPLAT_CPLD_WD_MAX_DEVS - 1; i >= 0 ; i--) | ||||||
|  |  		platform_device_unregister(priv->pdev_wd[i]); | ||||||
|  |  	if (priv->pdev_fan) | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,168 @@ | |||||||
|  | From 5a2cfa144640a047ab17de5ef12dfefbe7e2f8c3 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Sun, 11 Dec 2022 10:44:43 +0200 | ||||||
|  | Subject: [PATCH backport 5.10 2/5] platform: mellanox: Split initialization | ||||||
|  |  procedure | ||||||
|  |  | ||||||
|  | Split mlxplat_init() into two by adding mlxplat_pre_init(). | ||||||
|  |  | ||||||
|  | Motivation is to prepare 'mlx-platform' driver to support systems | ||||||
|  | equipped PCIe based programming logic device. | ||||||
|  |  | ||||||
|  | Such systems are supposed to use different system resources, thus this | ||||||
|  | commit separates resources allocation related code. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/platform/x86/mlx-platform.c | 78 ++++++++++++++++++++++------- | ||||||
|  |  1 file changed, 60 insertions(+), 18 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c | ||||||
|  | index a2addd1b3..199f22d72 100644 | ||||||
|  | --- a/drivers/platform/x86/mlx-platform.c | ||||||
|  | +++ b/drivers/platform/x86/mlx-platform.c | ||||||
|  | @@ -330,6 +330,8 @@ | ||||||
|  |   * @pdev_fan - FAN platform devices | ||||||
|  |   * @pdev_wd - array of watchdog platform devices | ||||||
|  |   * @regmap: device register map | ||||||
|  | + * @hotplug_resources: system hotplug resources | ||||||
|  | + * @hotplug_resources_size: size of system hotplug resources | ||||||
|  |   */ | ||||||
|  |  struct mlxplat_priv { | ||||||
|  |  	struct platform_device *pdev_i2c; | ||||||
|  | @@ -340,6 +342,8 @@ struct mlxplat_priv { | ||||||
|  |  	struct platform_device *pdev_fan; | ||||||
|  |  	struct platform_device *pdev_wd[MLXPLAT_CPLD_WD_MAX_DEVS]; | ||||||
|  |  	void *regmap; | ||||||
|  | +	struct resource *hotplug_resources; | ||||||
|  | +	unsigned int hotplug_resources_size; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  static struct platform_device *mlxplat_dev; | ||||||
|  | @@ -6365,20 +6369,63 @@ static int mlxplat_mlxcpld_check_wd_capability(void *regmap) | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static int mlxplat_lpc_cpld_device_init(struct resource **hotplug_resources, | ||||||
|  | +					unsigned int *hotplug_resources_size) | ||||||
|  | +{ | ||||||
|  | +	int err; | ||||||
|  | + | ||||||
|  | +	mlxplat_dev = platform_device_register_simple(MLX_PLAT_DEVICE_NAME, PLATFORM_DEVID_NONE, | ||||||
|  | +						      mlxplat_lpc_resources, | ||||||
|  | +						      ARRAY_SIZE(mlxplat_lpc_resources)); | ||||||
|  | +	if (IS_ERR(mlxplat_dev)) | ||||||
|  | +		return PTR_ERR(mlxplat_dev); | ||||||
|  | + | ||||||
|  | +	mlxplat_mlxcpld_regmap_ctx.base = devm_ioport_map(&mlxplat_dev->dev, | ||||||
|  | +							  mlxplat_lpc_resources[1].start, 1); | ||||||
|  | +	if (!mlxplat_mlxcpld_regmap_ctx.base) { | ||||||
|  | +		err = -ENOMEM; | ||||||
|  | +		goto fail_devm_ioport_map; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	*hotplug_resources = mlxplat_mlxcpld_resources; | ||||||
|  | +	*hotplug_resources_size = ARRAY_SIZE(mlxplat_mlxcpld_resources); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | + | ||||||
|  | +fail_devm_ioport_map: | ||||||
|  | +	platform_device_unregister(mlxplat_dev); | ||||||
|  | +	return err; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void mlxplat_lpc_cpld_device_exit(void) | ||||||
|  | +{ | ||||||
|  | +	platform_device_unregister(mlxplat_dev); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int | ||||||
|  | +mlxplat_pre_init(struct resource **hotplug_resources, unsigned int *hotplug_resources_size) | ||||||
|  | +{ | ||||||
|  | +	return mlxplat_lpc_cpld_device_init(hotplug_resources, hotplug_resources_size); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void mlxplat_post_exit(void) | ||||||
|  | +{ | ||||||
|  | +	mlxplat_lpc_cpld_device_exit(); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  static int __init mlxplat_init(void) | ||||||
|  |  { | ||||||
|  | +	unsigned int hotplug_resources_size; | ||||||
|  | +	struct resource *hotplug_resources; | ||||||
|  |  	struct mlxplat_priv *priv; | ||||||
|  |  	int i, j, nr, err; | ||||||
|  |   | ||||||
|  |  	if (!dmi_check_system(mlxplat_dmi_table)) | ||||||
|  |  		return -ENODEV; | ||||||
|  |   | ||||||
|  | -	mlxplat_dev = platform_device_register_simple(MLX_PLAT_DEVICE_NAME, -1, | ||||||
|  | -					mlxplat_lpc_resources, | ||||||
|  | -					ARRAY_SIZE(mlxplat_lpc_resources)); | ||||||
|  | - | ||||||
|  | -	if (IS_ERR(mlxplat_dev)) | ||||||
|  | -		return PTR_ERR(mlxplat_dev); | ||||||
|  | +	err = mlxplat_pre_init(&hotplug_resources, &hotplug_resources_size); | ||||||
|  | +	if (err) | ||||||
|  | +		return err; | ||||||
|  |   | ||||||
|  |  	priv = devm_kzalloc(&mlxplat_dev->dev, sizeof(struct mlxplat_priv), | ||||||
|  |  			    GFP_KERNEL); | ||||||
|  | @@ -6388,12 +6435,8 @@ static int __init mlxplat_init(void) | ||||||
|  |  	} | ||||||
|  |  	platform_set_drvdata(mlxplat_dev, priv); | ||||||
|  |   | ||||||
|  | -	mlxplat_mlxcpld_regmap_ctx.base = devm_ioport_map(&mlxplat_dev->dev, | ||||||
|  | -			       mlxplat_lpc_resources[1].start, 1); | ||||||
|  | -	if (!mlxplat_mlxcpld_regmap_ctx.base) { | ||||||
|  | -		err = -ENOMEM; | ||||||
|  | -		goto fail_alloc; | ||||||
|  | -	} | ||||||
|  | +	priv->hotplug_resources = hotplug_resources; | ||||||
|  | +	priv->hotplug_resources_size = hotplug_resources_size; | ||||||
|  |   | ||||||
|  |  	if (!mlxplat_regmap_config) | ||||||
|  |  		mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config; | ||||||
|  | @@ -6414,8 +6457,8 @@ static int __init mlxplat_init(void) | ||||||
|  |  	if (mlxplat_i2c) | ||||||
|  |  		mlxplat_i2c->regmap = priv->regmap; | ||||||
|  |  	priv->pdev_i2c = platform_device_register_resndata(&mlxplat_dev->dev, "i2c_mlxcpld", | ||||||
|  | -							   nr, mlxplat_mlxcpld_resources, | ||||||
|  | -							   ARRAY_SIZE(mlxplat_mlxcpld_resources), | ||||||
|  | +							   nr, priv->hotplug_resources, | ||||||
|  | +							   priv->hotplug_resources_size, | ||||||
|  |  							   mlxplat_i2c, sizeof(*mlxplat_i2c)); | ||||||
|  |  	if (IS_ERR(priv->pdev_i2c)) { | ||||||
|  |  		err = PTR_ERR(priv->pdev_i2c); | ||||||
|  | @@ -6439,8 +6482,8 @@ static int __init mlxplat_init(void) | ||||||
|  |  		priv->pdev_hotplug = | ||||||
|  |  		platform_device_register_resndata(&mlxplat_dev->dev, | ||||||
|  |  						  "mlxreg-hotplug", PLATFORM_DEVID_NONE, | ||||||
|  | -						  mlxplat_mlxcpld_resources, | ||||||
|  | -						  ARRAY_SIZE(mlxplat_mlxcpld_resources), | ||||||
|  | +						  priv->hotplug_resources, | ||||||
|  | +						  priv->hotplug_resources_size, | ||||||
|  |  						  mlxplat_hotplug, sizeof(*mlxplat_hotplug)); | ||||||
|  |  		if (IS_ERR(priv->pdev_hotplug)) { | ||||||
|  |  			err = PTR_ERR(priv->pdev_hotplug); | ||||||
|  | @@ -6545,7 +6588,6 @@ static int __init mlxplat_init(void) | ||||||
|  |  		platform_device_unregister(priv->pdev_mux[i]); | ||||||
|  |  	platform_device_unregister(priv->pdev_i2c); | ||||||
|  |  fail_alloc: | ||||||
|  | -	platform_device_unregister(mlxplat_dev); | ||||||
|  |   | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  | @@ -6573,7 +6615,7 @@ static void __exit mlxplat_exit(void) | ||||||
|  |  		platform_device_unregister(priv->pdev_mux[i]); | ||||||
|  |   | ||||||
|  |  	platform_device_unregister(priv->pdev_i2c); | ||||||
|  | -	platform_device_unregister(mlxplat_dev); | ||||||
|  | +	mlxplat_post_exit(); | ||||||
|  |  } | ||||||
|  |  module_exit(mlxplat_exit); | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,455 @@ | |||||||
|  | From f00081a6e0b7af5a0b85db3121afe3cc6a62f9e7 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Sun, 11 Dec 2022 11:08:07 +0200 | ||||||
|  | Subject: [PATCH backport 5.10 072/150] platform: mellanox: Split logic in init | ||||||
|  |  and exit flow | ||||||
|  |  | ||||||
|  | Split logic in mlxplat_init()/mlxplat_exit() routines. | ||||||
|  | Separate initialization of I2C infrastructure and others platform | ||||||
|  | drivers. | ||||||
|  |  | ||||||
|  | Motivation is to provide synchronization between I2C bus and mux | ||||||
|  | drivers and other drivers using this infrastructure. | ||||||
|  | I2C main bus and MUX busses are implemented in FPGA logic. On some new | ||||||
|  | systems the numbers allocated for these busses could be variable | ||||||
|  | depending on order of initialization of I2C native busses. Since bus | ||||||
|  | numbers are passed to some other platform drivers during initialization | ||||||
|  | flow, it is necessary to synchronize completion of I2C infrastructure | ||||||
|  | drivers and activation of rest of drivers. | ||||||
|  |  | ||||||
|  | Thus initialization flow will be performed in synchronized order. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/platform/x86/mlx-platform.c | 313 ++++++++++++++++++---------- | ||||||
|  |  1 file changed, 204 insertions(+), 109 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c | ||||||
|  | index 199f22d72..05a630135 100644 | ||||||
|  | --- a/drivers/platform/x86/mlx-platform.c | ||||||
|  | +++ b/drivers/platform/x86/mlx-platform.c | ||||||
|  | @@ -321,6 +321,9 @@ | ||||||
|  |  /* Default value for PWM control register for rack switch system */ | ||||||
|  |  #define MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT 0xf4 | ||||||
|  |   | ||||||
|  | +#define MLXPLAT_I2C_MAIN_BUS_NOTIFIED 		0x01 | ||||||
|  | +#define MLXPLAT_I2C_MAIN_BUS_HANDLE_CREATED	0x02 | ||||||
|  | + | ||||||
|  |  /* mlxplat_priv - platform private data | ||||||
|  |   * @pdev_i2c - i2c controller platform device | ||||||
|  |   * @pdev_mux - array of mux platform devices | ||||||
|  | @@ -332,6 +335,7 @@ | ||||||
|  |   * @regmap: device register map | ||||||
|  |   * @hotplug_resources: system hotplug resources | ||||||
|  |   * @hotplug_resources_size: size of system hotplug resources | ||||||
|  | + * @hi2c_main_init_status: init status of I2C main bus | ||||||
|  |   */ | ||||||
|  |  struct mlxplat_priv { | ||||||
|  |  	struct platform_device *pdev_i2c; | ||||||
|  | @@ -344,9 +348,11 @@ struct mlxplat_priv { | ||||||
|  |  	void *regmap; | ||||||
|  |  	struct resource *hotplug_resources; | ||||||
|  |  	unsigned int hotplug_resources_size; | ||||||
|  | +	u8 i2c_main_init_status; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  static struct platform_device *mlxplat_dev; | ||||||
|  | +static int mlxplat_i2c_main_complition_notify(void *handle, int id); | ||||||
|  |   | ||||||
|  |  /* Regions for LPC I2C controller and LPC base register space */ | ||||||
|  |  static const struct resource mlxplat_lpc_resources[] = { | ||||||
|  | @@ -381,6 +387,7 @@ static struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_i2c_ng_data = { | ||||||
|  |  	.mask = MLXPLAT_CPLD_AGGR_MASK_COMEX, | ||||||
|  |  	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET, | ||||||
|  |  	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_I2C, | ||||||
|  | +	.completion_notify = mlxplat_i2c_main_complition_notify, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  /* Platform default channels */ | ||||||
|  | @@ -6413,68 +6420,9 @@ static void mlxplat_post_exit(void) | ||||||
|  |  	mlxplat_lpc_cpld_device_exit(); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static int __init mlxplat_init(void) | ||||||
|  | +static int mlxplat_post_init(struct mlxplat_priv *priv) | ||||||
|  |  { | ||||||
|  | -	unsigned int hotplug_resources_size; | ||||||
|  | -	struct resource *hotplug_resources; | ||||||
|  | -	struct mlxplat_priv *priv; | ||||||
|  | -	int i, j, nr, err; | ||||||
|  | - | ||||||
|  | -	if (!dmi_check_system(mlxplat_dmi_table)) | ||||||
|  | -		return -ENODEV; | ||||||
|  | - | ||||||
|  | -	err = mlxplat_pre_init(&hotplug_resources, &hotplug_resources_size); | ||||||
|  | -	if (err) | ||||||
|  | -		return err; | ||||||
|  | - | ||||||
|  | -	priv = devm_kzalloc(&mlxplat_dev->dev, sizeof(struct mlxplat_priv), | ||||||
|  | -			    GFP_KERNEL); | ||||||
|  | -	if (!priv) { | ||||||
|  | -		err = -ENOMEM; | ||||||
|  | -		goto fail_alloc; | ||||||
|  | -	} | ||||||
|  | -	platform_set_drvdata(mlxplat_dev, priv); | ||||||
|  | - | ||||||
|  | -	priv->hotplug_resources = hotplug_resources; | ||||||
|  | -	priv->hotplug_resources_size = hotplug_resources_size; | ||||||
|  | - | ||||||
|  | -	if (!mlxplat_regmap_config) | ||||||
|  | -		mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config; | ||||||
|  | - | ||||||
|  | -	priv->regmap = devm_regmap_init(&mlxplat_dev->dev, NULL, | ||||||
|  | -					&mlxplat_mlxcpld_regmap_ctx, | ||||||
|  | -					mlxplat_regmap_config); | ||||||
|  | -	if (IS_ERR(priv->regmap)) { | ||||||
|  | -		err = PTR_ERR(priv->regmap); | ||||||
|  | -		goto fail_alloc; | ||||||
|  | -	} | ||||||
|  | - | ||||||
|  | -	err = mlxplat_mlxcpld_verify_bus_topology(&nr); | ||||||
|  | -	if (nr < 0) | ||||||
|  | -		goto fail_alloc; | ||||||
|  | - | ||||||
|  | -	nr = (nr == mlxplat_max_adap_num) ? -1 : nr; | ||||||
|  | -	if (mlxplat_i2c) | ||||||
|  | -		mlxplat_i2c->regmap = priv->regmap; | ||||||
|  | -	priv->pdev_i2c = platform_device_register_resndata(&mlxplat_dev->dev, "i2c_mlxcpld", | ||||||
|  | -							   nr, priv->hotplug_resources, | ||||||
|  | -							   priv->hotplug_resources_size, | ||||||
|  | -							   mlxplat_i2c, sizeof(*mlxplat_i2c)); | ||||||
|  | -	if (IS_ERR(priv->pdev_i2c)) { | ||||||
|  | -		err = PTR_ERR(priv->pdev_i2c); | ||||||
|  | -		goto fail_alloc; | ||||||
|  | -	} | ||||||
|  | - | ||||||
|  | -	for (i = 0; i < mlxplat_mux_num; i++) { | ||||||
|  | -		priv->pdev_mux[i] = platform_device_register_resndata(&priv->pdev_i2c->dev, | ||||||
|  | -								      "i2c-mux-reg", i, NULL, 0, | ||||||
|  | -								      &mlxplat_mux_data[i], | ||||||
|  | -								      sizeof(mlxplat_mux_data[i])); | ||||||
|  | -		if (IS_ERR(priv->pdev_mux[i])) { | ||||||
|  | -			err = PTR_ERR(priv->pdev_mux[i]); | ||||||
|  | -			goto fail_platform_mux_register; | ||||||
|  | -		} | ||||||
|  | -	} | ||||||
|  | +	int i = 0, err; | ||||||
|  |   | ||||||
|  |  	/* Add hotplug driver */ | ||||||
|  |  	if (mlxplat_hotplug) { | ||||||
|  | @@ -6487,19 +6435,10 @@ static int __init mlxplat_init(void) | ||||||
|  |  						  mlxplat_hotplug, sizeof(*mlxplat_hotplug)); | ||||||
|  |  		if (IS_ERR(priv->pdev_hotplug)) { | ||||||
|  |  			err = PTR_ERR(priv->pdev_hotplug); | ||||||
|  | -			goto fail_platform_mux_register; | ||||||
|  | +			goto fail_platform_hotplug_register; | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	/* Set default registers. */ | ||||||
|  | -	for (j = 0; j <  mlxplat_regmap_config->num_reg_defaults; j++) { | ||||||
|  | -		err = regmap_write(priv->regmap, | ||||||
|  | -				   mlxplat_regmap_config->reg_defaults[j].reg, | ||||||
|  | -				   mlxplat_regmap_config->reg_defaults[j].def); | ||||||
|  | -		if (err) | ||||||
|  | -			goto fail_platform_mux_register; | ||||||
|  | -	} | ||||||
|  | - | ||||||
|  |  	/* Add LED driver. */ | ||||||
|  |  	if (mlxplat_led) { | ||||||
|  |  		mlxplat_led->regmap = priv->regmap; | ||||||
|  | @@ -6509,7 +6448,7 @@ static int __init mlxplat_init(void) | ||||||
|  |  						  sizeof(*mlxplat_led)); | ||||||
|  |  		if (IS_ERR(priv->pdev_led)) { | ||||||
|  |  			err = PTR_ERR(priv->pdev_led); | ||||||
|  | -			goto fail_platform_hotplug_register; | ||||||
|  | +			goto fail_platform_leds_register; | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | @@ -6523,7 +6462,7 @@ static int __init mlxplat_init(void) | ||||||
|  |  								       sizeof(*mlxplat_regs_io)); | ||||||
|  |  		if (IS_ERR(priv->pdev_io_regs)) { | ||||||
|  |  			err = PTR_ERR(priv->pdev_io_regs); | ||||||
|  | -			goto fail_platform_led_register; | ||||||
|  | +			goto fail_platform_io_register; | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | @@ -6536,7 +6475,7 @@ static int __init mlxplat_init(void) | ||||||
|  |  								   sizeof(*mlxplat_fan)); | ||||||
|  |  		if (IS_ERR(priv->pdev_fan)) { | ||||||
|  |  			err = PTR_ERR(priv->pdev_fan); | ||||||
|  | -			goto fail_platform_io_regs_register; | ||||||
|  | +			goto fail_platform_fan_register; | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | @@ -6547,59 +6486,42 @@ static int __init mlxplat_init(void) | ||||||
|  |  	err = mlxplat_mlxcpld_check_wd_capability(priv->regmap); | ||||||
|  |  	if (err) | ||||||
|  |  		goto fail_platform_wd_register; | ||||||
|  | -	for (j = 0; j < MLXPLAT_CPLD_WD_MAX_DEVS; j++) { | ||||||
|  | -		if (mlxplat_wd_data[j]) { | ||||||
|  | -			mlxplat_wd_data[j]->regmap = priv->regmap; | ||||||
|  | -			priv->pdev_wd[j] = | ||||||
|  | -				platform_device_register_resndata(&mlxplat_dev->dev, "mlx-wdt", j, | ||||||
|  | -								  NULL, 0, mlxplat_wd_data[j], | ||||||
|  | -								  sizeof(*mlxplat_wd_data[j])); | ||||||
|  | -			if (IS_ERR(priv->pdev_wd[j])) { | ||||||
|  | -				err = PTR_ERR(priv->pdev_wd[j]); | ||||||
|  | +	for (i = 0; i < MLXPLAT_CPLD_WD_MAX_DEVS; i++) { | ||||||
|  | +		if (mlxplat_wd_data[i]) { | ||||||
|  | +			mlxplat_wd_data[i]->regmap = priv->regmap; | ||||||
|  | +			priv->pdev_wd[i] = | ||||||
|  | +				platform_device_register_resndata(&mlxplat_dev->dev, "mlx-wdt", i, | ||||||
|  | +								  NULL, 0, mlxplat_wd_data[i], | ||||||
|  | +								  sizeof(*mlxplat_wd_data[i])); | ||||||
|  | +			if (IS_ERR(priv->pdev_wd[i])) { | ||||||
|  | +				err = PTR_ERR(priv->pdev_wd[i]); | ||||||
|  |  				goto fail_platform_wd_register; | ||||||
|  |  			} | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	/* Sync registers with hardware. */ | ||||||
|  | -	regcache_mark_dirty(priv->regmap); | ||||||
|  | -	err = regcache_sync(priv->regmap); | ||||||
|  | -	if (err) | ||||||
|  | -		goto fail_platform_wd_register; | ||||||
|  | - | ||||||
|  |  	return 0; | ||||||
|  |   | ||||||
|  |  fail_platform_wd_register: | ||||||
|  | -	while (--j >= 0) | ||||||
|  | -		platform_device_unregister(priv->pdev_wd[j]); | ||||||
|  | -	if (mlxplat_fan) | ||||||
|  | -		platform_device_unregister(priv->pdev_fan); | ||||||
|  | -fail_platform_io_regs_register: | ||||||
|  | +	while (--i >= 0) | ||||||
|  | +		platform_device_unregister(priv->pdev_wd[i]); | ||||||
|  | +fail_platform_fan_register: | ||||||
|  |  	if (mlxplat_regs_io) | ||||||
|  |  		platform_device_unregister(priv->pdev_io_regs); | ||||||
|  | -fail_platform_led_register: | ||||||
|  | +fail_platform_io_register: | ||||||
|  |  	if (mlxplat_led) | ||||||
|  |  		platform_device_unregister(priv->pdev_led); | ||||||
|  | -fail_platform_hotplug_register: | ||||||
|  | +fail_platform_leds_register: | ||||||
|  |  	if (mlxplat_hotplug) | ||||||
|  |  		platform_device_unregister(priv->pdev_hotplug); | ||||||
|  | -fail_platform_mux_register: | ||||||
|  | -	while (--i >= 0) | ||||||
|  | -		platform_device_unregister(priv->pdev_mux[i]); | ||||||
|  | -	platform_device_unregister(priv->pdev_i2c); | ||||||
|  | -fail_alloc: | ||||||
|  | - | ||||||
|  | +fail_platform_hotplug_register: | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  | -module_init(mlxplat_init); | ||||||
|  |   | ||||||
|  | -static void __exit mlxplat_exit(void) | ||||||
|  | +static void mlxplat_pre_exit(struct mlxplat_priv *priv) | ||||||
|  |  { | ||||||
|  | -	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); | ||||||
|  |  	int i; | ||||||
|  |   | ||||||
|  | -	if (pm_power_off) | ||||||
|  | -		pm_power_off = NULL; | ||||||
|  |  	for (i = MLXPLAT_CPLD_WD_MAX_DEVS - 1; i >= 0 ; i--) | ||||||
|  |  		platform_device_unregister(priv->pdev_wd[i]); | ||||||
|  |  	if (priv->pdev_fan) | ||||||
|  | @@ -6610,13 +6532,186 @@ static void __exit mlxplat_exit(void) | ||||||
|  |  		platform_device_unregister(priv->pdev_led); | ||||||
|  |  	if (priv->pdev_hotplug) | ||||||
|  |  		platform_device_unregister(priv->pdev_hotplug); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int | ||||||
|  | +mlxplat_i2c_mux_complition_notify(void *handle, struct i2c_adapter *parent, | ||||||
|  | +				  struct i2c_adapter *adapters[]) | ||||||
|  | +{ | ||||||
|  | +	struct mlxplat_priv *priv = handle; | ||||||
|  | + | ||||||
|  | +	return mlxplat_post_init(priv); | ||||||
|  | +} | ||||||
|  |   | ||||||
|  | -	for (i = mlxplat_mux_num - 1; i >= 0 ; i--) | ||||||
|  | +static int mlxplat_i2c_mux_topolgy_init(struct mlxplat_priv *priv) | ||||||
|  | +{ | ||||||
|  | +	int i, err; | ||||||
|  | + | ||||||
|  | +	if (!priv->pdev_i2c) { | ||||||
|  | +		priv->i2c_main_init_status = MLXPLAT_I2C_MAIN_BUS_NOTIFIED; | ||||||
|  | +		return 0; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	priv->i2c_main_init_status = MLXPLAT_I2C_MAIN_BUS_HANDLE_CREATED; | ||||||
|  | +	for (i = 0; i < mlxplat_mux_num; i++) { | ||||||
|  | +		priv->pdev_mux[i] = platform_device_register_resndata(&priv->pdev_i2c->dev, | ||||||
|  | +								      "i2c-mux-reg", i, NULL, 0, | ||||||
|  | +								      &mlxplat_mux_data[i], | ||||||
|  | +								      sizeof(mlxplat_mux_data[i])); | ||||||
|  | +		if (IS_ERR(priv->pdev_mux[i])) { | ||||||
|  | +			err = PTR_ERR(priv->pdev_mux[i]); | ||||||
|  | +			goto fail_platform_mux_register; | ||||||
|  | +		} | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	return mlxplat_i2c_mux_complition_notify(priv, NULL, NULL); | ||||||
|  | + | ||||||
|  | +fail_platform_mux_register: | ||||||
|  | +	while (--i >= 0) | ||||||
|  |  		platform_device_unregister(priv->pdev_mux[i]); | ||||||
|  | +	return err; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void mlxplat_i2c_mux_topolgy_exit(struct mlxplat_priv *priv) | ||||||
|  | +{ | ||||||
|  | +	int i; | ||||||
|  | + | ||||||
|  | +	for (i = mlxplat_mux_num - 1; i >= 0 ; i--) { | ||||||
|  | +		if (priv->pdev_mux[i]) | ||||||
|  | +			platform_device_unregister(priv->pdev_mux[i]); | ||||||
|  | +	} | ||||||
|  |   | ||||||
|  | -	platform_device_unregister(priv->pdev_i2c); | ||||||
|  |  	mlxplat_post_exit(); | ||||||
|  |  } | ||||||
|  | + | ||||||
|  | +static int mlxplat_i2c_main_complition_notify(void *handle, int id) | ||||||
|  | +{ | ||||||
|  | +	struct mlxplat_priv *priv = handle; | ||||||
|  | + | ||||||
|  | +	return mlxplat_i2c_mux_topolgy_init(priv); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int mlxplat_i2c_main_init(struct mlxplat_priv *priv) | ||||||
|  | +{ | ||||||
|  | +	int nr, err; | ||||||
|  | + | ||||||
|  | +	if (!mlxplat_i2c) | ||||||
|  | +		return 0; | ||||||
|  | + | ||||||
|  | +	err = mlxplat_mlxcpld_verify_bus_topology(&nr); | ||||||
|  | +	if (nr < 0) | ||||||
|  | +		goto fail_mlxplat_mlxcpld_verify_bus_topology; | ||||||
|  | + | ||||||
|  | +	nr = (nr == mlxplat_max_adap_num) ? -1 : nr; | ||||||
|  | +	mlxplat_i2c->regmap = priv->regmap; | ||||||
|  | +	mlxplat_i2c->handle = priv; | ||||||
|  | + | ||||||
|  | +	priv->pdev_i2c = platform_device_register_resndata(&mlxplat_dev->dev, "i2c_mlxcpld", | ||||||
|  | +							   nr, priv->hotplug_resources, | ||||||
|  | +							   priv->hotplug_resources_size, | ||||||
|  | +							   mlxplat_i2c, sizeof(*mlxplat_i2c)); | ||||||
|  | +	if (IS_ERR(priv->pdev_i2c)) { | ||||||
|  | +		err = PTR_ERR(priv->pdev_i2c); | ||||||
|  | +		goto fail_platform_i2c_register; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	if (priv->i2c_main_init_status == MLXPLAT_I2C_MAIN_BUS_NOTIFIED) { | ||||||
|  | +		err = mlxplat_i2c_mux_topolgy_init(priv); | ||||||
|  | +		if (err) | ||||||
|  | +			goto fail_mlxplat_i2c_mux_topolgy_init; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | + | ||||||
|  | +fail_mlxplat_i2c_mux_topolgy_init: | ||||||
|  | +fail_platform_i2c_register: | ||||||
|  | +fail_mlxplat_mlxcpld_verify_bus_topology: | ||||||
|  | +	return err; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void mlxplat_i2c_main_exit(struct mlxplat_priv *priv) | ||||||
|  | +{ | ||||||
|  | +	mlxplat_i2c_mux_topolgy_exit(priv); | ||||||
|  | +	if (priv->pdev_i2c) | ||||||
|  | +		platform_device_unregister(priv->pdev_i2c); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int __init mlxplat_init(void) | ||||||
|  | +{ | ||||||
|  | +	unsigned int hotplug_resources_size; | ||||||
|  | +	struct resource *hotplug_resources; | ||||||
|  | +	struct mlxplat_priv *priv; | ||||||
|  | +	int i, err; | ||||||
|  | + | ||||||
|  | +	if (!dmi_check_system(mlxplat_dmi_table)) | ||||||
|  | +		return -ENODEV; | ||||||
|  | + | ||||||
|  | +	err = mlxplat_pre_init(&hotplug_resources, &hotplug_resources_size); | ||||||
|  | +	if (err) | ||||||
|  | +		return err; | ||||||
|  | + | ||||||
|  | +	priv = devm_kzalloc(&mlxplat_dev->dev, sizeof(struct mlxplat_priv), | ||||||
|  | +			    GFP_KERNEL); | ||||||
|  | +	if (!priv) { | ||||||
|  | +		err = -ENOMEM; | ||||||
|  | +		goto fail_alloc; | ||||||
|  | +	} | ||||||
|  | +	platform_set_drvdata(mlxplat_dev, priv); | ||||||
|  | +	priv->hotplug_resources = hotplug_resources; | ||||||
|  | +	priv->hotplug_resources_size = hotplug_resources_size; | ||||||
|  | + | ||||||
|  | +	if (!mlxplat_regmap_config) | ||||||
|  | +		mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config; | ||||||
|  | + | ||||||
|  | +	priv->regmap = devm_regmap_init(&mlxplat_dev->dev, NULL, | ||||||
|  | +					&mlxplat_mlxcpld_regmap_ctx, | ||||||
|  | +					mlxplat_regmap_config); | ||||||
|  | +	if (IS_ERR(priv->regmap)) { | ||||||
|  | +		err = PTR_ERR(priv->regmap); | ||||||
|  | +		goto fail_alloc; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Set default registers. */ | ||||||
|  | +	for (i = 0; i <  mlxplat_regmap_config->num_reg_defaults; i++) { | ||||||
|  | +		err = regmap_write(priv->regmap, | ||||||
|  | +				   mlxplat_regmap_config->reg_defaults[i].reg, | ||||||
|  | +				   mlxplat_regmap_config->reg_defaults[i].def); | ||||||
|  | +		if (err) | ||||||
|  | +			goto fail_regmap_write; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	err = mlxplat_i2c_main_init(priv); | ||||||
|  | +	if (err) | ||||||
|  | +		goto fail_mlxplat_i2c_main_init; | ||||||
|  | + | ||||||
|  | +	/* Sync registers with hardware. */ | ||||||
|  | +	regcache_mark_dirty(priv->regmap); | ||||||
|  | +	err = regcache_sync(priv->regmap); | ||||||
|  | +	if (err) | ||||||
|  | +		goto fail_regcache_sync; | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | + | ||||||
|  | +fail_regcache_sync: | ||||||
|  | +	mlxplat_pre_exit(priv); | ||||||
|  | +fail_mlxplat_i2c_main_init: | ||||||
|  | +fail_regmap_write: | ||||||
|  | +fail_alloc: | ||||||
|  | +	mlxplat_post_exit(); | ||||||
|  | + | ||||||
|  | +	return err; | ||||||
|  | +} | ||||||
|  | +module_init(mlxplat_init); | ||||||
|  | + | ||||||
|  | +static void __exit mlxplat_exit(void) | ||||||
|  | +{ | ||||||
|  | +	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); | ||||||
|  | + | ||||||
|  | +	if (pm_power_off) | ||||||
|  | +		pm_power_off = NULL; | ||||||
|  | +	mlxplat_pre_exit(priv); | ||||||
|  | +	mlxplat_i2c_main_exit(priv); | ||||||
|  | +} | ||||||
|  |  module_exit(mlxplat_exit); | ||||||
|  |   | ||||||
|  |  MODULE_AUTHOR("Vadim Pasternak (vadimp@mellanox.com)"); | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,81 @@ | |||||||
|  | From 3a61ad447e2ec437079c86c277b80acde19e9173 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | Date: Mon, 26 Dec 2022 22:28:33 +0200 | ||||||
|  | Subject: [PATCH backport 5.10 073/150] platform: mellanox: Extend all systems | ||||||
|  |  with I2C notification callback | ||||||
|  |  | ||||||
|  | Motivation is to provide synchronization between I2C main bus and other | ||||||
|  | platform drivers using this notification callback. | ||||||
|  |  | ||||||
|  | Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> | ||||||
|  | --- | ||||||
|  |  drivers/platform/x86/mlx-platform.c | 11 +++++++++++ | ||||||
|  |  1 file changed, 11 insertions(+) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c | ||||||
|  | index 05a630135..1ef0bb975 100644 | ||||||
|  | --- a/drivers/platform/x86/mlx-platform.c | ||||||
|  | +++ b/drivers/platform/x86/mlx-platform.c | ||||||
|  | @@ -365,6 +365,11 @@ static const struct resource mlxplat_lpc_resources[] = { | ||||||
|  |  			       IORESOURCE_IO), | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +/* Platform systems default i2c data */ | ||||||
|  | +static struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_i2c_default_data = { | ||||||
|  | +	.completion_notify = mlxplat_i2c_main_complition_notify, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  /* Platform i2c next generation systems data */ | ||||||
|  |  static struct mlxreg_core_data mlxplat_mlxcpld_i2c_ng_items_data[] = { | ||||||
|  |  	{ | ||||||
|  | @@ -5807,6 +5812,7 @@ static int __init mlxplat_dmi_default_matched(const struct dmi_system_id *dmi) | ||||||
|  |  	mlxplat_led = &mlxplat_default_led_data; | ||||||
|  |  	mlxplat_regs_io = &mlxplat_default_regs_io_data; | ||||||
|  |  	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; | ||||||
|  | +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; | ||||||
|  |   | ||||||
|  |  	return 1; | ||||||
|  |  } | ||||||
|  | @@ -5829,6 +5835,7 @@ static int __init mlxplat_dmi_default_wc_matched(const struct dmi_system_id *dmi | ||||||
|  |  	mlxplat_led = &mlxplat_default_led_wc_data; | ||||||
|  |  	mlxplat_regs_io = &mlxplat_default_regs_io_data; | ||||||
|  |  	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; | ||||||
|  | +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; | ||||||
|  |   | ||||||
|  |  	return 1; | ||||||
|  |  } | ||||||
|  | @@ -5876,6 +5883,7 @@ static int __init mlxplat_dmi_msn21xx_matched(const struct dmi_system_id *dmi) | ||||||
|  |  	mlxplat_led = &mlxplat_msn21xx_led_data; | ||||||
|  |  	mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data; | ||||||
|  |  	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; | ||||||
|  | +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; | ||||||
|  |   | ||||||
|  |  	return 1; | ||||||
|  |  } | ||||||
|  | @@ -5898,6 +5906,7 @@ static int __init mlxplat_dmi_msn274x_matched(const struct dmi_system_id *dmi) | ||||||
|  |  	mlxplat_led = &mlxplat_default_led_data; | ||||||
|  |  	mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data; | ||||||
|  |  	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; | ||||||
|  | +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; | ||||||
|  |   | ||||||
|  |  	return 1; | ||||||
|  |  } | ||||||
|  | @@ -5920,6 +5929,7 @@ static int __init mlxplat_dmi_msn201x_matched(const struct dmi_system_id *dmi) | ||||||
|  |  	mlxplat_led = &mlxplat_msn21xx_led_data; | ||||||
|  |  	mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data; | ||||||
|  |  	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; | ||||||
|  | +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; | ||||||
|  |   | ||||||
|  |  	return 1; | ||||||
|  |  } | ||||||
|  | @@ -5969,6 +5979,7 @@ static int __init mlxplat_dmi_comex_matched(const struct dmi_system_id *dmi) | ||||||
|  |  	mlxplat_fan = &mlxplat_default_fan_data; | ||||||
|  |  	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) | ||||||
|  |  		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; | ||||||
|  | +	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; | ||||||
|  |  	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_comex; | ||||||
|  |   | ||||||
|  |  	return 1; | ||||||
|  | --  | ||||||
|  | 2.20.1 | ||||||
|  |  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Kebo Liu
					Kebo Liu