[PATCH] drivers: w83627hf_wdt: Add IPC227G, IPC277G, BX-39A, and PX-39A support

8 views
Skip to first unread message

Jan Kiszka

unread,
Mar 16, 2026, 4:28:32 AMMar 16
to EFI Boot Guard, Benedikt Niedermayr, Cedric Hombourger
From: Jan Kiszka <jan.k...@siemens.com>

These models use the same Super I/O chip as the BX-5xA. We only need to
add their station IDs.

Signed-off-by: Jan Kiszka <jan.k...@siemens.com>
---

I would appreciate testing on all the variants, detection and if the
watchdog triggers (you could use "--with-boot-delay=1000" for that).
Note that some devices may need disabling of the watchdog that is WDAT-
described in the BIOS.

drivers/watchdog/w83627hf_wdt.c | 35 +++++++++++++++++++++++++--------
include/simatic.h | 4 ++++
2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/drivers/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c
index dd6787c..e88182e 100644
--- a/drivers/watchdog/w83627hf_wdt.c
+++ b/drivers/watchdog/w83627hf_wdt.c
@@ -181,6 +181,7 @@ static EFI_STATUS init(EFI_PCI_IO *pci_io, UINT16 pci_vendor_id,
UINT16 __attribute__((unused)) pci_device_id,
UINTN timeout)
{
+ const char *device;
int chip;

if (!pci_io || pci_vendor_id != PCI_VENDOR_ID_INTEL) {
@@ -188,17 +189,35 @@ static EFI_STATUS init(EFI_PCI_IO *pci_io, UINT16 pci_vendor_id,
}

switch (simatic_station_id()) {
+ case SIMATIC_IPC227G:
+ device = "IPC227G";
+ break;
+ case SIMATIC_IPC277G:
+ device = "IPC277G";
+ break;
+ case SIMATIC_IPCBX_39A:
+ device = "IPC BX-39A";
+ break;
+ case SIMATIC_IPCPX_39A:
+ device = "IPC PX-39A";
+ break;
case SIMATIC_IPCBX_56A:
+ device = "IPC BX-56A";
+ break;
case SIMATIC_IPCBX_59A:
- chip = wdt_find(0x2e);
- if (chip < 0)
- return EFI_UNSUPPORTED;
- INFO(L"Detected SIMATIC BX5xA watchdog\n");
- w83627hf_init(chip);
- wdt_set_time(timeout);
- return EFI_SUCCESS;
+ device = "IPC BX-59A";
+ break;
+ default:
+ return EFI_UNSUPPORTED;
}
- return EFI_UNSUPPORTED;
+
+ chip = wdt_find(0x2e);
+ if (chip < 0)
+ return EFI_UNSUPPORTED;
+ INFO(L"Detected SIMATIC %s watchdog\n", device);
+ w83627hf_init(chip);
+ wdt_set_time(timeout);
+ return EFI_SUCCESS;
}

WATCHDOG_REGISTER(init);
diff --git a/include/simatic.h b/include/simatic.h
index eed82da..7e41e78 100644
--- a/include/simatic.h
+++ b/include/simatic.h
@@ -25,7 +25,11 @@

#define SIMATIC_IPC427E 0x0a01
#define SIMATIC_IPC477E 0x0a02
+#define SIMATIC_IPC227G 0x0f01
+#define SIMATIC_IPC277G 0x0f02
#define SIMATIC_IPCBX_21A 0x1101
+#define SIMATIC_IPCBX_39A 0x1001
+#define SIMATIC_IPCPX_39A 0x1002
#define SIMATIC_IPCBX_56A 0x1201
#define SIMATIC_IPCBX_59A 0x1202

--
2.47.3
Reply all
Reply to author
Forward
0 new messages