2022-08-19 09:56:03

by Chin-Ting Kuo

[permalink] [raw]
Subject: [PATCH] watchdog: aspeed_wdt: Reorder output signal register configuration

If the output driving type is push-pull mode, the output
polarity should be selected in advance. Otherwise, an unexpected
value will be output at the moment of changing to push-pull mode.
Thus, output polarity, WDT18[31], must be configured before
changing driving type, WDT18[30].

Signed-off-by: Chin-Ting Kuo <[email protected]>
---
drivers/watchdog/aspeed_wdt.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/watchdog/aspeed_wdt.c b/drivers/watchdog/aspeed_wdt.c
index 436571b6fc79..a03e4ff812a2 100644
--- a/drivers/watchdog/aspeed_wdt.c
+++ b/drivers/watchdog/aspeed_wdt.c
@@ -325,18 +325,18 @@ static int aspeed_wdt_probe(struct platform_device *pdev)
u32 reg = readl(wdt->base + WDT_RESET_WIDTH);

reg &= config->ext_pulse_width_mask;
- if (of_property_read_bool(np, "aspeed,ext-push-pull"))
- reg |= WDT_PUSH_PULL_MAGIC;
+ if (of_property_read_bool(np, "aspeed,ext-active-high"))
+ reg |= WDT_ACTIVE_HIGH_MAGIC;
else
- reg |= WDT_OPEN_DRAIN_MAGIC;
+ reg |= WDT_ACTIVE_LOW_MAGIC;

writel(reg, wdt->base + WDT_RESET_WIDTH);

reg &= config->ext_pulse_width_mask;
- if (of_property_read_bool(np, "aspeed,ext-active-high"))
- reg |= WDT_ACTIVE_HIGH_MAGIC;
+ if (of_property_read_bool(np, "aspeed,ext-push-pull"))
+ reg |= WDT_PUSH_PULL_MAGIC;
else
- reg |= WDT_ACTIVE_LOW_MAGIC;
+ reg |= WDT_OPEN_DRAIN_MAGIC;

writel(reg, wdt->base + WDT_RESET_WIDTH);
}
--
2.25.1


2022-08-19 11:52:31

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] watchdog: aspeed_wdt: Reorder output signal register configuration

On Fri, Aug 19, 2022 at 05:49:05PM +0800, Chin-Ting Kuo wrote:
> If the output driving type is push-pull mode, the output
> polarity should be selected in advance. Otherwise, an unexpected
> value will be output at the moment of changing to push-pull mode.
> Thus, output polarity, WDT18[31], must be configured before
> changing driving type, WDT18[30].
>
> Signed-off-by: Chin-Ting Kuo <[email protected]>

Reviewed-by: Guenter Roeck <[email protected]>

> ---
> drivers/watchdog/aspeed_wdt.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/watchdog/aspeed_wdt.c b/drivers/watchdog/aspeed_wdt.c
> index 436571b6fc79..a03e4ff812a2 100644
> --- a/drivers/watchdog/aspeed_wdt.c
> +++ b/drivers/watchdog/aspeed_wdt.c
> @@ -325,18 +325,18 @@ static int aspeed_wdt_probe(struct platform_device *pdev)
> u32 reg = readl(wdt->base + WDT_RESET_WIDTH);
>
> reg &= config->ext_pulse_width_mask;
> - if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> - reg |= WDT_PUSH_PULL_MAGIC;
> + if (of_property_read_bool(np, "aspeed,ext-active-high"))
> + reg |= WDT_ACTIVE_HIGH_MAGIC;
> else
> - reg |= WDT_OPEN_DRAIN_MAGIC;
> + reg |= WDT_ACTIVE_LOW_MAGIC;
>
> writel(reg, wdt->base + WDT_RESET_WIDTH);
>
> reg &= config->ext_pulse_width_mask;
> - if (of_property_read_bool(np, "aspeed,ext-active-high"))
> - reg |= WDT_ACTIVE_HIGH_MAGIC;
> + if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> + reg |= WDT_PUSH_PULL_MAGIC;
> else
> - reg |= WDT_ACTIVE_LOW_MAGIC;
> + reg |= WDT_OPEN_DRAIN_MAGIC;
>
> writel(reg, wdt->base + WDT_RESET_WIDTH);
> }
> --
> 2.25.1
>

2022-08-24 00:44:15

by Bonnie Lo/WYHQ/Wiwynn

[permalink] [raw]
Subject: RE: [PATCH] watchdog: aspeed_wdt: Reorder output signal register configuration

> -----Original Message-----
> From: Guenter Roeck <[email protected]> On Behalf Of Guenter Roeck
> Sent: Friday, August 19, 2022 7:45 PM
> To: Chin-Ting Kuo <[email protected]>
> Cc: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; Bonnie Lo/WYHQ/Wiwynn
> <[email protected]>
> Subject: Re: [PATCH] watchdog: aspeed_wdt: Reorder output signal register
> configuration
>
> Security Reminder: Please be aware that this email was sent by an
> external sender.
>
> On Fri, Aug 19, 2022 at 05:49:05PM +0800, Chin-Ting Kuo wrote:
> > If the output driving type is push-pull mode, the output polarity
> > should be selected in advance. Otherwise, an unexpected value will be
> > output at the moment of changing to push-pull mode.
> > Thus, output polarity, WDT18[31], must be configured before changing
> > driving type, WDT18[30].
> >
> > Signed-off-by: Chin-Ting Kuo <[email protected]>
>
> Reviewed-by: Guenter Roeck <[email protected]>
>

Tested-by: Bonnie Lo <[email protected]>

> > ---
> > drivers/watchdog/aspeed_wdt.c | 12 ++++++------
> > 1 file changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/watchdog/aspeed_wdt.c
> > b/drivers/watchdog/aspeed_wdt.c index 436571b6fc79..a03e4ff812a2
> > 100644
> > --- a/drivers/watchdog/aspeed_wdt.c
> > +++ b/drivers/watchdog/aspeed_wdt.c
> > @@ -325,18 +325,18 @@ static int aspeed_wdt_probe(struct
> platform_device *pdev)
> > u32 reg = readl(wdt->base + WDT_RESET_WIDTH);
> >
> > reg &= config->ext_pulse_width_mask;
> > - if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> > - reg |= WDT_PUSH_PULL_MAGIC;
> > + if (of_property_read_bool(np, "aspeed,ext-active-high"))
> > + reg |= WDT_ACTIVE_HIGH_MAGIC;
> > else
> > - reg |= WDT_OPEN_DRAIN_MAGIC;
> > + reg |= WDT_ACTIVE_LOW_MAGIC;
> >
> > writel(reg, wdt->base + WDT_RESET_WIDTH);
> >
> > reg &= config->ext_pulse_width_mask;
> > - if (of_property_read_bool(np, "aspeed,ext-active-high"))
> > - reg |= WDT_ACTIVE_HIGH_MAGIC;
> > + if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> > + reg |= WDT_PUSH_PULL_MAGIC;
> > else
> > - reg |= WDT_ACTIVE_LOW_MAGIC;
> > + reg |= WDT_OPEN_DRAIN_MAGIC;
> >
> > writel(reg, wdt->base + WDT_RESET_WIDTH);
> > }
> > --
> > 2.25.1
> >
WIWYNN PROPRIETARY This email (and any attachments) contains proprietary or confidential information and is for the sole use of its intended recipient. Any unauthorized review, use, copying or distribution of this email or the content of this email is strictly prohibited. If you are not the intended recipient, please notify the sender and delete this email immediately.

2022-08-24 01:24:56

by Joel Stanley

[permalink] [raw]
Subject: Re: [PATCH] watchdog: aspeed_wdt: Reorder output signal register configuration

On Fri, 19 Aug 2022 at 09:49, Chin-Ting Kuo
<[email protected]> wrote:
>
> If the output driving type is push-pull mode, the output
> polarity should be selected in advance. Otherwise, an unexpected
> value will be output at the moment of changing to push-pull mode.
> Thus, output polarity, WDT18[31], must be configured before
> changing driving type, WDT18[30].
>
> Signed-off-by: Chin-Ting Kuo <[email protected]>

Thanks Chin-Ting.

Fixes: 012c04601f9d ("watchdog: aspeed: Support configuration of
external signal properties")
Reviewed-by: Joel Stanley <[email protected]>

I wonder if any of these machines hit the bug:

$ git grep -l aspeed,ext-push-pull arch/arm/boot/dts/
arch/arm/boot/dts/aspeed-bmc-ibm-everest.dts
arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
arch/arm/boot/dts/aspeed-bmc-inspur-fp5280g2.dts
arch/arm/boot/dts/aspeed-bmc-opp-mihawk.dts
arch/arm/boot/dts/aspeed-bmc-opp-mowgli.dts
arch/arm/boot/dts/aspeed-bmc-opp-swift.dts
arch/arm/boot/dts/aspeed-bmc-opp-tacoma.dts
arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts


> ---
> drivers/watchdog/aspeed_wdt.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/watchdog/aspeed_wdt.c b/drivers/watchdog/aspeed_wdt.c
> index 436571b6fc79..a03e4ff812a2 100644
> --- a/drivers/watchdog/aspeed_wdt.c
> +++ b/drivers/watchdog/aspeed_wdt.c
> @@ -325,18 +325,18 @@ static int aspeed_wdt_probe(struct platform_device *pdev)
> u32 reg = readl(wdt->base + WDT_RESET_WIDTH);
>
> reg &= config->ext_pulse_width_mask;
> - if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> - reg |= WDT_PUSH_PULL_MAGIC;
> + if (of_property_read_bool(np, "aspeed,ext-active-high"))
> + reg |= WDT_ACTIVE_HIGH_MAGIC;
> else
> - reg |= WDT_OPEN_DRAIN_MAGIC;
> + reg |= WDT_ACTIVE_LOW_MAGIC;
>
> writel(reg, wdt->base + WDT_RESET_WIDTH);
>
> reg &= config->ext_pulse_width_mask;
> - if (of_property_read_bool(np, "aspeed,ext-active-high"))
> - reg |= WDT_ACTIVE_HIGH_MAGIC;
> + if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> + reg |= WDT_PUSH_PULL_MAGIC;
> else
> - reg |= WDT_ACTIVE_LOW_MAGIC;
> + reg |= WDT_OPEN_DRAIN_MAGIC;
>
> writel(reg, wdt->base + WDT_RESET_WIDTH);
> }
> --
> 2.25.1
>

2022-08-24 02:14:34

by Chin-Ting Kuo

[permalink] [raw]
Subject: RE: [PATCH] watchdog: aspeed_wdt: Reorder output signal register configuration

Hi Joel,

Thanks for the review.

> -----Original Message-----
> From: Joel Stanley <[email protected]>
> Sent: Wednesday, August 24, 2022 8:46 AM
> To: Chin-Ting Kuo <[email protected]>
> Subject: Re: [PATCH] watchdog: aspeed_wdt: Reorder output signal register
> configuration
>
> On Fri, 19 Aug 2022 at 09:49, Chin-Ting Kuo <[email protected]>
> wrote:
> >
> > If the output driving type is push-pull mode, the output polarity
> > should be selected in advance. Otherwise, an unexpected value will be
> > output at the moment of changing to push-pull mode.
> > Thus, output polarity, WDT18[31], must be configured before changing
> > driving type, WDT18[30].
> >
> > Signed-off-by: Chin-Ting Kuo <[email protected]>
>
> Thanks Chin-Ting.
>
> Fixes: 012c04601f9d ("watchdog: aspeed: Support configuration of external
> signal properties")
> Reviewed-by: Joel Stanley <[email protected]>
>
> I wonder if any of these machines hit the bug:
>

Unexpected output pin value may not always appear at the moment of changing driving type.
It depends on the output status of that pin at that time.
But, with this patch, the output pin value can be confirmed.


Chin-Ting

> $ git grep -l aspeed,ext-push-pull arch/arm/boot/dts/
> arch/arm/boot/dts/aspeed-bmc-ibm-everest.dts
> arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> arch/arm/boot/dts/aspeed-bmc-inspur-fp5280g2.dts
> arch/arm/boot/dts/aspeed-bmc-opp-mihawk.dts
> arch/arm/boot/dts/aspeed-bmc-opp-mowgli.dts
> arch/arm/boot/dts/aspeed-bmc-opp-swift.dts
> arch/arm/boot/dts/aspeed-bmc-opp-tacoma.dts
> arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts
>
>
> > ---
> > drivers/watchdog/aspeed_wdt.c | 12 ++++++------
> > 1 file changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/watchdog/aspeed_wdt.c
> > b/drivers/watchdog/aspeed_wdt.c index 436571b6fc79..a03e4ff812a2
> > 100644
> > --- a/drivers/watchdog/aspeed_wdt.c
> > +++ b/drivers/watchdog/aspeed_wdt.c
> > @@ -325,18 +325,18 @@ static int aspeed_wdt_probe(struct
> platform_device *pdev)
> > u32 reg = readl(wdt->base + WDT_RESET_WIDTH);
> >
> > reg &= config->ext_pulse_width_mask;
> > - if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> > - reg |= WDT_PUSH_PULL_MAGIC;
> > + if (of_property_read_bool(np, "aspeed,ext-active-high"))
> > + reg |= WDT_ACTIVE_HIGH_MAGIC;
> > else
> > - reg |= WDT_OPEN_DRAIN_MAGIC;
> > + reg |= WDT_ACTIVE_LOW_MAGIC;
> >
> > writel(reg, wdt->base + WDT_RESET_WIDTH);
> >
> > reg &= config->ext_pulse_width_mask;
> > - if (of_property_read_bool(np, "aspeed,ext-active-high"))
> > - reg |= WDT_ACTIVE_HIGH_MAGIC;
> > + if (of_property_read_bool(np, "aspeed,ext-push-pull"))
> > + reg |= WDT_PUSH_PULL_MAGIC;
> > else
> > - reg |= WDT_ACTIVE_LOW_MAGIC;
> > + reg |= WDT_OPEN_DRAIN_MAGIC;
> >
> > writel(reg, wdt->base + WDT_RESET_WIDTH);
> > }
> > --
> > 2.25.1
> >