1- From 66ca083593adc27abc9741afb9ec79da8af1aafe Mon Sep 17 00:00:00 2001
1+ From f63b398112d63d42535526a6e6775c32b71d5902 Mon Sep 17 00:00:00 2001
22From: Vadim Pasternak <vadimp@nvidia.com>
33Date: Sun, 15 Jun 2025 13:13:26 +0300
44Subject: [PATCH] platform/mellanox: nvsw-bmc: Add system control and
@@ -22,11 +22,11 @@ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>
2222 drivers/platform/mellanox/Kconfig | 29 +
2323 drivers/platform/mellanox/Makefile | 3 +
2424 drivers/platform/mellanox/nvsw-bmc-hid162.c | 2831 +++++++++++++++++
25- drivers/platform/mellanox/nvsw-core.c | 678 ++++
25+ drivers/platform/mellanox/nvsw-core.c | 685 ++++
2626 drivers/platform/mellanox/nvsw-host-l1.c | 710 +++++
27- drivers/platform/mellanox/nvsw-host-spc5.c | 938 ++++++
27+ drivers/platform/mellanox/nvsw-host-spc5.c | 944 ++++++
2828 drivers/platform/mellanox/nvsw.h | 293 ++
29- 8 files changed, 5486 insertions(+), 4 deletions(-)
29+ 8 files changed, 5499 insertions(+), 4 deletions(-)
3030 create mode 100644 drivers/platform/mellanox/nvsw-bmc-hid162.c
3131 create mode 100644 drivers/platform/mellanox/nvsw-core.c
3232 create mode 100644 drivers/platform/mellanox/nvsw-host-l1.c
@@ -2944,10 +2944,10 @@ index 000000000..96908494c
29442944+ MODULE_LICENSE("Dual BSD/GPL");
29452945diff --git a/drivers/platform/mellanox/nvsw-core.c b/drivers/platform/mellanox/nvsw-core.c
29462946new file mode 100644
2947- index 000000000..048ec3bd2
2947+ index 000000000..1012da6a6
29482948--- /dev/null
29492949+++ b/drivers/platform/mellanox/nvsw-core.c
2950- @@ -0,0 +1,678 @@
2950+ @@ -0,0 +1,685 @@
29512951+ // SPDX-License-Identifier: GPL-2.0+
29522952+ /*
29532953+ * Nvidia BMC platform driver
@@ -3440,6 +3440,7 @@ index 000000000..048ec3bd2
34403440+ sizeof(*nvsw_core->regio_data));
34413441+ if (IS_ERR(nvsw_core->regio)) {
34423442+ err = PTR_ERR(nvsw_core->regio);
3443+ + dev_err(nvsw_core->dev, "Failed to register mlxreg-io driver\n");
34433444+ goto fail_platform_io_register;
34443445+ }
34453446+ }
@@ -3451,8 +3452,9 @@ index 000000000..048ec3bd2
34513452+ PLATFORM_DEVID_NONE, NULL, 0,
34523453+ nvsw_core->fan_data,
34533454+ sizeof(*nvsw_core->fan_data));
3454- + if (IS_ERR(nvsw_core->fan_data)) {
3455- + err = PTR_ERR(nvsw_core->fan_data);
3455+ + if (IS_ERR(nvsw_core->fan)) {
3456+ + err = PTR_ERR(nvsw_core->fan);
3457+ + dev_err(nvsw_core->dev, "Failed to register mlxreg-fan driver\n");
34563458+ goto fail_platform_fan_register;
34573459+ }
34583460+ }
@@ -3466,6 +3468,7 @@ index 000000000..048ec3bd2
34663468+ sizeof(*nvsw_core->led_data));
34673469+ if (IS_ERR(nvsw_core->led)) {
34683470+ err = PTR_ERR(nvsw_core->led);
3471+ + dev_err(nvsw_core->dev, "Failed to register leds-mlxreg driver\n");
34693472+ goto fail_platform_leds_register;
34703473+ }
34713474+ }
@@ -3482,6 +3485,7 @@ index 000000000..048ec3bd2
34823485+ sizeof(*nvsw_core->hotplug_data));
34833486+ if (IS_ERR(nvsw_core->hotplug)) {
34843487+ err = PTR_ERR(nvsw_core->hotplug);
3488+ + dev_err(nvsw_core->dev, "Failed to register mlxreg-hotplug driver\n");
34853489+ goto fail_platform_hotplug_register;
34863490+ }
34873491+ }
@@ -3495,6 +3499,7 @@ index 000000000..048ec3bd2
34953499+ sizeof(*nvsw_core->wd_data[i]));
34963500+ if (IS_ERR(nvsw_core->wd[i])) {
34973501+ err = PTR_ERR(nvsw_core->wd[i]);
3502+ + dev_err(nvsw_core->dev, "Failed to register mlx-wdt driver\n");
34983503+ goto fail_platform_wd_register;
34993504+ }
35003505+ }
@@ -3505,6 +3510,8 @@ index 000000000..048ec3bd2
35053510+ fail_platform_wd_register:
35063511+ while (i--)
35073512+ platform_device_unregister(nvsw_core->wd[i]);
3513+ + if (nvsw_core->hotplug_data)
3514+ + platform_device_unregister(nvsw_core->hotplug);
35083515+ fail_platform_hotplug_register:
35093516+ if (nvsw_core->led_data)
35103517+ platform_device_unregister(nvsw_core->led);
@@ -3566,23 +3573,23 @@ index 000000000..048ec3bd2
35663573+ }
35673574+
35683575+ if (IS_ERR(nvsw_core->regmap)) {
3569- + dev_err(nvsw_core->dev, "Failed to create regmap");
3576+ + dev_err(nvsw_core->dev, "Failed to create regmap\n ");
35703577+ return PTR_ERR(nvsw_core->regmap);
35713578+ }
35723579+
35733580+ /* Sync registers with hardware. */
35743581+ regcache_mark_dirty(nvsw_core->regmap);
35753582+ err = regcache_sync(nvsw_core->regmap);
35763583+ if (err) {
3577- + dev_err(nvsw_core->dev, "Failed to sync regmap");
3584+ + dev_err(nvsw_core->dev, "Failed to sync regmap\n ");
35783585+ return err;
35793586+ }
35803587+
35813588+ /* Set registers default values. */
35823589+ if (nvsw_core->set_reg_default) {
35833590+ err = nvsw_core->set_reg_default(nvsw_core->regmap);
35843591+ if (err) {
3585- + dev_err(nvsw_core->dev, "Failed to set default regmap");
3592+ + dev_err(nvsw_core->dev, "Failed to set default regmap\n ");
35863593+ return err;
35873594+ }
35883595+ }
@@ -4344,10 +4351,10 @@ index 000000000..bf12509b2
43444351+
43454352diff --git a/drivers/platform/mellanox/nvsw-host-spc5.c b/drivers/platform/mellanox/nvsw-host-spc5.c
43464353new file mode 100644
4347- index 000000000..90b07ea21
4354+ index 000000000..70c58b57c
43484355--- /dev/null
43494356+++ b/drivers/platform/mellanox/nvsw-host-spc5.c
4350- @@ -0,0 +1,938 @@
4357+ @@ -0,0 +1,944 @@
43514358+ // SPDX-License-Identifier: GPL-2.0+
43524359+ /*
43534360+ * Nvidia BMC platform driver
@@ -4902,6 +4909,12 @@ index 000000000..90b07ea21
49024909+ .mode = 0444,
49034910+ },
49044911+ {
4912+ + .label = "bios_active_image",
4913+ + .reg = NVSW_REG_GPCOM0_OFFSET,
4914+ + .mask = GENMASK(7, 0) & ~BIT(5),
4915+ + .mode = 0444,
4916+ + },
4917+ + {
49054918+ .label = "jtag_cap",
49064919+ .reg = NVSW_REG_FU_CAP_OFFSET,
49074920+ .mask = NVSW_FU_CAP_MASK,
0 commit comments