From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Roese Date: Fri, 31 Jul 2020 16:25:38 +0200 Subject: [PATCH v1 22/24] watchdog: Add reset support for OcteonTX / TX2 In-Reply-To: References: <20200724100856.1482324-1-sr@denx.de> <20200724100856.1482324-23-sr@denx.de> Message-ID: <0b677a8b-0a7d-710d-b68d-e3102ea4d774@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Simon, On 28.07.20 21:01, Simon Glass wrote: > On Fri, 24 Jul 2020 at 04:09, Stefan Roese wrote: >> >> From: Suneel Garapati >> >> Adds support for Core 0 watchdog poke on OcteonTX and OcteonTX2 >> platforms. >> >> Signed-off-by: Suneel Garapati >> Signed-off-by: Stefan Roese >> >> --- >> >> Changes in v1: >> - Change patch subject >> - Remove inclusion of common.h >> - Remove global wdt_dev as its unused >> - Remove #ifdef's >> - Remove optional fixed register access - only use address passed via >> DT while probing >> - Use dev_remap_addr() instead of dev_read_addr_index() >> >> drivers/watchdog/Kconfig | 10 ++++++ >> drivers/watchdog/Makefile | 1 + >> drivers/watchdog/octeontx_wdt.c | 57 +++++++++++++++++++++++++++++++++ >> 3 files changed, 68 insertions(+) >> create mode 100644 drivers/watchdog/octeontx_wdt.c > > Reviewed-by: Simon Glass > >> >> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig >> index bf06180cdd..981b33355d 100644 >> --- a/drivers/watchdog/Kconfig >> +++ b/drivers/watchdog/Kconfig >> @@ -139,6 +139,16 @@ config WDT_MTK >> The watchdog timer is stopped when initialized. >> It performs full SoC reset. >> >> +config WDT_OCTEONTX >> + bool "OcteonTX core watchdog support" >> + depends on WDT && (ARCH_OCTEONTX || ARCH_OCTEONTX2) >> + default y if WDT && ARCH_OCTEONTX || ARCH_OCTEONTX2 >> + imply WATCHDOG >> + help >> + This enables OcteonTX watchdog driver, which can be >> + found on OcteonTX/TX2 chipsets and inline with driver model. >> + Only supports watchdog reset. >> + >> config WDT_OMAP3 >> bool "TI OMAP watchdog timer support" >> depends on WDT && ARCH_OMAP2PLUS >> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile >> index 519bbd3a40..fbba0ca386 100644 >> --- a/drivers/watchdog/Makefile >> +++ b/drivers/watchdog/Makefile >> @@ -26,6 +26,7 @@ obj-$(CONFIG_WDT_CDNS) += cdns_wdt.o >> obj-$(CONFIG_WDT_MPC8xx) += mpc8xx_wdt.o >> obj-$(CONFIG_WDT_MT7621) += mt7621_wdt.o >> obj-$(CONFIG_WDT_MTK) += mtk_wdt.o >> +obj-$(CONFIG_WDT_OCTEONTX) += octeontx_wdt.o >> obj-$(CONFIG_WDT_OMAP3) += omap_wdt.o >> obj-$(CONFIG_WDT_SP805) += sp805_wdt.o >> obj-$(CONFIG_WDT_STM32MP) += stm32mp_wdt.o >> diff --git a/drivers/watchdog/octeontx_wdt.c b/drivers/watchdog/octeontx_wdt.c >> new file mode 100644 >> index 0000000000..a9c29ef26a >> --- /dev/null >> +++ b/drivers/watchdog/octeontx_wdt.c >> @@ -0,0 +1,57 @@ >> +// SPDX-License-Identifier: GPL-2.0+ >> +/* >> + * Copyright (C) 2019 Marvell International Ltd. >> + * >> + * https://spdx.org/licenses >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> + >> +DECLARE_GLOBAL_DATA_PTR; >> + >> +#define CORE0_POKE_OFFSET 0x50000 >> + >> +struct octeontx_wdt { >> + void __iomem *reg; >> +}; >> + >> +static int octeontx_wdt_reset(struct udevice *dev) >> +{ >> + struct octeontx_wdt *priv = dev_get_priv(dev); >> + >> + writeq(~0ULL, ((u64)priv->reg & ~0xfffffULL) | CORE0_POKE_OFFSET); > > Do you actually need the mask? It seems odd that ->reg is part-way > through the register set. Frankly, I was wondering the same thing. I will double-check before submitting the next patchset version. Thanks, Stefan