Linux Renesas SOC kernel development
 help / color / mirror / Atom feed
* [PATCH v4 0/4] watchdog: rzn1: clean up and drop irq requirement
@ 2026-05-07 10:24 Wolfram Sang
  2026-05-07 10:24 ` [PATCH v4 1/4] watchdog: rzn1: Fix reverse xmas tree declaration Wolfram Sang
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Wolfram Sang @ 2026-05-07 10:24 UTC (permalink / raw)
  To: linux-renesas-soc
  Cc: Herve Codina (Schneider Electric), Wolfram Sang, Conor Dooley,
	devicetree, Geert Uytterhoeven, Guenter Roeck,
	Krzysztof Kozlowski, linux-watchdog, Magnus Damm, Rob Herring,
	Wim Van Sebroeck

Changes since v3:
* rebased to v7.1-rc2
* added patches 3+4 to remove irq handling
* added tags for patches 1+2 (Thanks, Guenter!)

For easier dependency handling, I picked up Herve's v3 series and added
my patches on top. Herve's changes to the N1D syscon are now upstream,
so the watchdog can reset the system directly. Leaving only his cleanup
patches to be applied, already reviewed by Guenter. Then, my patches
remove the now unneeded irq handling and make irqs optional in DTs. All
tested on the Renesas RZ/N1D demo board.

Please apply.


Herve Codina (Schneider Electric) (2):
  watchdog: rzn1: Fix reverse xmas tree declaration
  watchdog: rzn1: Use dev_err_probe()

Wolfram Sang (2):
  watchdog: rzn1: remove now obsolete interrupt support
  dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required

 .../bindings/watchdog/renesas,rzn1-wdt.yaml   |  1 -
 drivers/watchdog/rzn1_wdt.c                   | 35 +++----------------
 2 files changed, 5 insertions(+), 31 deletions(-)

-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v4 1/4] watchdog: rzn1: Fix reverse xmas tree declaration
  2026-05-07 10:24 [PATCH v4 0/4] watchdog: rzn1: clean up and drop irq requirement Wolfram Sang
@ 2026-05-07 10:24 ` Wolfram Sang
  2026-05-08 16:29   ` Guenter Roeck
  2026-05-07 10:24 ` [PATCH v4 2/4] watchdog: rzn1: Use dev_err_probe() Wolfram Sang
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Wolfram Sang @ 2026-05-07 10:24 UTC (permalink / raw)
  To: linux-renesas-soc
  Cc: Herve Codina (Schneider Electric), Guenter Roeck, Wolfram Sang,
	Wim Van Sebroeck, linux-watchdog

From: "Herve Codina (Schneider Electric)" <herve.codina@bootlin.com>

Variables declared in probe() don't follow the reverse xmas
tree convention.

Fix the declaration in order to follow the convention.

Signed-off-by: Herve Codina (Schneider Electric) <herve.codina@bootlin.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
 drivers/watchdog/rzn1_wdt.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/watchdog/rzn1_wdt.c b/drivers/watchdog/rzn1_wdt.c
index 96fd04fbc2a2..b7034eac91d0 100644
--- a/drivers/watchdog/rzn1_wdt.c
+++ b/drivers/watchdog/rzn1_wdt.c
@@ -101,10 +101,10 @@ static const struct watchdog_ops rzn1_wdt_ops = {
 static int rzn1_wdt_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
-	struct rzn1_watchdog *wdt;
 	struct device_node *np = dev->of_node;
-	struct clk *clk;
+	struct rzn1_watchdog *wdt;
 	unsigned long clk_rate;
+	struct clk *clk;
 	int ret;
 	int irq;
 
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v4 2/4] watchdog: rzn1: Use dev_err_probe()
  2026-05-07 10:24 [PATCH v4 0/4] watchdog: rzn1: clean up and drop irq requirement Wolfram Sang
  2026-05-07 10:24 ` [PATCH v4 1/4] watchdog: rzn1: Fix reverse xmas tree declaration Wolfram Sang
@ 2026-05-07 10:24 ` Wolfram Sang
  2026-05-08 16:30   ` Guenter Roeck
  2026-05-07 10:24 ` [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support Wolfram Sang
  2026-05-07 10:24 ` [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required Wolfram Sang
  3 siblings, 1 reply; 12+ messages in thread
From: Wolfram Sang @ 2026-05-07 10:24 UTC (permalink / raw)
  To: linux-renesas-soc
  Cc: Herve Codina (Schneider Electric), Guenter Roeck, Wolfram Sang,
	Wim Van Sebroeck, linux-watchdog

From: "Herve Codina (Schneider Electric)" <herve.codina@bootlin.com>

In the probe() function the following pattern is present several times:
	if (err) {
		dev_err(dev, ...);
		return err;
	}

Replace them by dev_err_probe() calls.

Signed-off-by: Herve Codina (Schneider Electric) <herve.codina@bootlin.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
 drivers/watchdog/rzn1_wdt.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/watchdog/rzn1_wdt.c b/drivers/watchdog/rzn1_wdt.c
index b7034eac91d0..48d5afef62a5 100644
--- a/drivers/watchdog/rzn1_wdt.c
+++ b/drivers/watchdog/rzn1_wdt.c
@@ -122,22 +122,16 @@ static int rzn1_wdt_probe(struct platform_device *pdev)
 
 	ret = devm_request_irq(dev, irq, rzn1_wdt_irq, 0,
 			       np->name, wdt);
-	if (ret) {
-		dev_err(dev, "failed to request irq %d\n", irq);
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to request irq %d\n", irq);
 
 	clk = devm_clk_get_enabled(dev, NULL);
-	if (IS_ERR(clk)) {
-		dev_err(dev, "failed to get the clock\n");
-		return PTR_ERR(clk);
-	}
+	if (IS_ERR(clk))
+		return dev_err_probe(dev, PTR_ERR(clk), "failed to get the clock\n");
 
 	clk_rate = clk_get_rate(clk);
-	if (!clk_rate) {
-		dev_err(dev, "failed to get the clock rate\n");
-		return -EINVAL;
-	}
+	if (!clk_rate)
+		return dev_err_probe(dev, -EINVAL, "failed to get the clock rate\n");
 
 	wdt->clk_rate_khz = clk_rate / 1000;
 	wdt->wdtdev.info = &rzn1_wdt_info;
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support
  2026-05-07 10:24 [PATCH v4 0/4] watchdog: rzn1: clean up and drop irq requirement Wolfram Sang
  2026-05-07 10:24 ` [PATCH v4 1/4] watchdog: rzn1: Fix reverse xmas tree declaration Wolfram Sang
  2026-05-07 10:24 ` [PATCH v4 2/4] watchdog: rzn1: Use dev_err_probe() Wolfram Sang
@ 2026-05-07 10:24 ` Wolfram Sang
  2026-05-07 11:20   ` Herve Codina
  2026-05-08 16:31   ` Guenter Roeck
  2026-05-07 10:24 ` [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required Wolfram Sang
  3 siblings, 2 replies; 12+ messages in thread
From: Wolfram Sang @ 2026-05-07 10:24 UTC (permalink / raw)
  To: linux-renesas-soc
  Cc: Herve Codina (Schneider Electric), Wolfram Sang, Wim Van Sebroeck,
	Guenter Roeck, linux-watchdog

Previously, it was overlooked that the watchdog could reset the system
directly. So, a workaround using the interrupt which called
emergency_restart() was implemented. We now configure the controller
when booting properly to allow watchdog resets directly. Thus, remove
the interrupt workaround.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
 drivers/watchdog/rzn1_wdt.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/drivers/watchdog/rzn1_wdt.c b/drivers/watchdog/rzn1_wdt.c
index 48d5afef62a5..4fdc5363ba98 100644
--- a/drivers/watchdog/rzn1_wdt.c
+++ b/drivers/watchdog/rzn1_wdt.c
@@ -79,14 +79,6 @@ static int rzn1_wdt_start(struct watchdog_device *w)
 	return 0;
 }
 
-static irqreturn_t rzn1_wdt_irq(int irq, void *_wdt)
-{
-	pr_crit("RZN1 Watchdog. Initiating system reboot\n");
-	emergency_restart();
-
-	return IRQ_HANDLED;
-}
-
 static struct watchdog_info rzn1_wdt_info = {
 	.identity = "RZ/N1 Watchdog",
 	.options = WDIOF_MAGICCLOSE | WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING,
@@ -101,12 +93,10 @@ static const struct watchdog_ops rzn1_wdt_ops = {
 static int rzn1_wdt_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
-	struct device_node *np = dev->of_node;
 	struct rzn1_watchdog *wdt;
 	unsigned long clk_rate;
 	struct clk *clk;
 	int ret;
-	int irq;
 
 	wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL);
 	if (!wdt)
@@ -116,15 +106,6 @@ static int rzn1_wdt_probe(struct platform_device *pdev)
 	if (IS_ERR(wdt->base))
 		return PTR_ERR(wdt->base);
 
-	irq = platform_get_irq(pdev, 0);
-	if (irq < 0)
-		return irq;
-
-	ret = devm_request_irq(dev, irq, rzn1_wdt_irq, 0,
-			       np->name, wdt);
-	if (ret)
-		return dev_err_probe(dev, ret, "failed to request irq %d\n", irq);
-
 	clk = devm_clk_get_enabled(dev, NULL);
 	if (IS_ERR(clk))
 		return dev_err_probe(dev, PTR_ERR(clk), "failed to get the clock\n");
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required
  2026-05-07 10:24 [PATCH v4 0/4] watchdog: rzn1: clean up and drop irq requirement Wolfram Sang
                   ` (2 preceding siblings ...)
  2026-05-07 10:24 ` [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support Wolfram Sang
@ 2026-05-07 10:24 ` Wolfram Sang
  2026-05-07 11:22   ` Herve Codina
  2026-05-08 16:32   ` Guenter Roeck
  3 siblings, 2 replies; 12+ messages in thread
From: Wolfram Sang @ 2026-05-07 10:24 UTC (permalink / raw)
  To: linux-renesas-soc
  Cc: Herve Codina (Schneider Electric), Wolfram Sang, Wim Van Sebroeck,
	Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Geert Uytterhoeven, Magnus Damm, linux-watchdog, devicetree

It is now understood how the watchdog can do its job without the need of
an interrupt. So, it is not required anymore but optional.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
 Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml b/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml
index 7e3ee533cd56..0e4b5b529e9c 100644
--- a/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml
+++ b/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml
@@ -29,7 +29,6 @@ properties:
 required:
   - compatible
   - reg
-  - interrupts
   - clocks
 
 allOf:
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support
  2026-05-07 10:24 ` [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support Wolfram Sang
@ 2026-05-07 11:20   ` Herve Codina
  2026-05-08 16:31   ` Guenter Roeck
  1 sibling, 0 replies; 12+ messages in thread
From: Herve Codina @ 2026-05-07 11:20 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-renesas-soc, Wim Van Sebroeck, Guenter Roeck,
	linux-watchdog

Hi Wolfram,

On Thu,  7 May 2026 12:24:08 +0200
Wolfram Sang <wsa+renesas@sang-engineering.com> wrote:

> Previously, it was overlooked that the watchdog could reset the system
> directly. So, a workaround using the interrupt which called
> emergency_restart() was implemented. We now configure the controller
> when booting properly to allow watchdog resets directly. Thus, remove
> the interrupt workaround.
> 
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> ---
>  drivers/watchdog/rzn1_wdt.c | 19 -------------------
>  1 file changed, 19 deletions(-)

Reviewed-by: Herve Codina <herve.codina@bootlin.com>

Best regards,
Hervé

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required
  2026-05-07 10:24 ` [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required Wolfram Sang
@ 2026-05-07 11:22   ` Herve Codina
  2026-05-08 16:32   ` Guenter Roeck
  1 sibling, 0 replies; 12+ messages in thread
From: Herve Codina @ 2026-05-07 11:22 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-renesas-soc, Wim Van Sebroeck, Guenter Roeck, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
	Magnus Damm, linux-watchdog, devicetree

Hi Wolfram,

On Thu,  7 May 2026 12:24:09 +0200
Wolfram Sang <wsa+renesas@sang-engineering.com> wrote:

> It is now understood how the watchdog can do its job without the need of
> an interrupt. So, it is not required anymore but optional.
> 
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> ---
>  Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml | 1 -
>  1 file changed, 1 deletion(-)
> 

Reviewed-by: Herve Codina <herve.codina@bootlin.com>

Best regards,
Hervé

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4 1/4] watchdog: rzn1: Fix reverse xmas tree declaration
  2026-05-07 10:24 ` [PATCH v4 1/4] watchdog: rzn1: Fix reverse xmas tree declaration Wolfram Sang
@ 2026-05-08 16:29   ` Guenter Roeck
  0 siblings, 0 replies; 12+ messages in thread
From: Guenter Roeck @ 2026-05-08 16:29 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-renesas-soc, Herve Codina (Schneider Electric),
	Wim Van Sebroeck, linux-watchdog

On Thu, May 07, 2026 at 12:24:06PM +0200, Wolfram Sang wrote:
> From: "Herve Codina (Schneider Electric)" <herve.codina@bootlin.com>
> 
> Variables declared in probe() don't follow the reverse xmas
> tree convention.
> 
> Fix the declaration in order to follow the convention.
> 
> Signed-off-by: Herve Codina (Schneider Electric) <herve.codina@bootlin.com>
> Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>

Applied.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4 2/4] watchdog: rzn1: Use dev_err_probe()
  2026-05-07 10:24 ` [PATCH v4 2/4] watchdog: rzn1: Use dev_err_probe() Wolfram Sang
@ 2026-05-08 16:30   ` Guenter Roeck
  0 siblings, 0 replies; 12+ messages in thread
From: Guenter Roeck @ 2026-05-08 16:30 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-renesas-soc, Herve Codina (Schneider Electric),
	Wim Van Sebroeck, linux-watchdog

On Thu, May 07, 2026 at 12:24:07PM +0200, Wolfram Sang wrote:
> From: "Herve Codina (Schneider Electric)" <herve.codina@bootlin.com>
> 
> In the probe() function the following pattern is present several times:
> 	if (err) {
> 		dev_err(dev, ...);
> 		return err;
> 	}
> 
> Replace them by dev_err_probe() calls.
> 
> Signed-off-by: Herve Codina (Schneider Electric) <herve.codina@bootlin.com>
> Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>

Applied.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support
  2026-05-07 10:24 ` [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support Wolfram Sang
  2026-05-07 11:20   ` Herve Codina
@ 2026-05-08 16:31   ` Guenter Roeck
  2026-05-08 20:05     ` Wolfram Sang
  1 sibling, 1 reply; 12+ messages in thread
From: Guenter Roeck @ 2026-05-08 16:31 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-renesas-soc, Herve Codina (Schneider Electric),
	Wim Van Sebroeck, linux-watchdog

On Thu, May 07, 2026 at 12:24:08PM +0200, Wolfram Sang wrote:
> Previously, it was overlooked that the watchdog could reset the system
> directly. So, a workaround using the interrupt which called
> emergency_restart() was implemented. We now configure the controller
> when booting properly to allow watchdog resets directly. Thus, remove
> the interrupt workaround.
> 
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Reviewed-by: Herve Codina <herve.codina@bootlin.com>

I don't think Sashiko's concern is warranted. Applied.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required
  2026-05-07 10:24 ` [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required Wolfram Sang
  2026-05-07 11:22   ` Herve Codina
@ 2026-05-08 16:32   ` Guenter Roeck
  1 sibling, 0 replies; 12+ messages in thread
From: Guenter Roeck @ 2026-05-08 16:32 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-renesas-soc, Herve Codina (Schneider Electric),
	Wim Van Sebroeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Geert Uytterhoeven, Magnus Damm, linux-watchdog, devicetree

On Thu, May 07, 2026 at 12:24:09PM +0200, Wolfram Sang wrote:
> It is now understood how the watchdog can do its job without the need of
> an interrupt. So, it is not required anymore but optional.
> 
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Reviewed-by: Herve Codina <herve.codina@bootlin.com>

Waiting for DT maintainer approval.

For my reference:

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

Thanks,
Guenter

> ---
>  Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml b/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml
> index 7e3ee533cd56..0e4b5b529e9c 100644
> --- a/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml
> +++ b/Documentation/devicetree/bindings/watchdog/renesas,rzn1-wdt.yaml
> @@ -29,7 +29,6 @@ properties:
>  required:
>    - compatible
>    - reg
> -  - interrupts
>    - clocks
>  
>  allOf:

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support
  2026-05-08 16:31   ` Guenter Roeck
@ 2026-05-08 20:05     ` Wolfram Sang
  0 siblings, 0 replies; 12+ messages in thread
From: Wolfram Sang @ 2026-05-08 20:05 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: linux-renesas-soc, Herve Codina (Schneider Electric),
	Wim Van Sebroeck, linux-watchdog

[-- Attachment #1: Type: text/plain, Size: 377 bytes --]


> > Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> > Reviewed-by: Herve Codina <herve.codina@bootlin.com>
> 
> I don't think Sashiko's concern is warranted. Applied.

Sashiko missed that it is not the bootloader but Linux which sets the
syscon bits correctly. As this code is already upstream, there is no
more dependency.

Thanks for applying!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-05-08 20:05 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-07 10:24 [PATCH v4 0/4] watchdog: rzn1: clean up and drop irq requirement Wolfram Sang
2026-05-07 10:24 ` [PATCH v4 1/4] watchdog: rzn1: Fix reverse xmas tree declaration Wolfram Sang
2026-05-08 16:29   ` Guenter Roeck
2026-05-07 10:24 ` [PATCH v4 2/4] watchdog: rzn1: Use dev_err_probe() Wolfram Sang
2026-05-08 16:30   ` Guenter Roeck
2026-05-07 10:24 ` [PATCH v4 3/4] watchdog: rzn1: remove now obsolete interrupt support Wolfram Sang
2026-05-07 11:20   ` Herve Codina
2026-05-08 16:31   ` Guenter Roeck
2026-05-08 20:05     ` Wolfram Sang
2026-05-07 10:24 ` [PATCH v4 4/4] dt-bindings: watchdog: renesas,rzn1-wdt: interrupts are not required Wolfram Sang
2026-05-07 11:22   ` Herve Codina
2026-05-08 16:32   ` Guenter Roeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox