watchdog: qcom: fine tune the max timeout value calculation
authorKathiravan Thirumoorthy <quic_kathirav@quicinc.com>
Tue, 16 Jan 2024 08:22:43 +0000 (13:52 +0530)
committerWim Van Sebroeck <wim@linux-watchdog.org>
Sun, 3 Mar 2024 13:17:28 +0000 (14:17 +0100)
commit975e4b273ed2c801a0354a7cdd7d89e1fe1aa842
treed574b9655d1365756f3dea0758c0530a3e0a3feb
parentd2f656dc4969e765de2db8564c4c38d135d9152b
watchdog: qcom: fine tune the max timeout value calculation

To determine the max_timeout value, the below calculation is used.

max_timeout = 0x10000000 / clk_rate

cat /sys/devices/platform/soc@0/b017000.watchdog/watchdog/watchdog0/max_timeout
8388

However, this is not valid for all the platforms. IPQ SoCs starting from
IPQ40xx and recent Snapdragron SoCs also has the bark and bite time field
length of 20bits, which can hold max up to 32 seconds if the clk_rate is
32KHz.

If the user tries to configure the timeout more than 32s, then the value
will be truncated and the actual value will not be reflected in the HW.

To avoid this, lets add a variable called max_tick_count in the device data,
which defines max counter value of the WDT controller. Using this, max-timeout
will be calculated in runtime for various WDT contorllers.

With this change, we get the proper max_timeout as below and restricts
the user from configuring the timeout higher than this.

cat /sys/devices/platform/soc@0/b017000.watchdog/watchdog/watchdog0/max_timeout
32

Signed-off-by: Kathiravan Thirumoorthy <quic_kathirav@quicinc.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20240116-wdt-v2-1-501c7694c3f0@quicinc.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
drivers/watchdog/qcom-wdt.c