Based on the original Amlogic-GXBB watchdog driver, support
for Amlogic-T7 watchdog is added.
[PATCH 1/4]:
V1 -> V2: Unchanged.
[PATCH 2/4]:
V1 -> V2: Rename rst_shift to rst and use the BIT() macro
to build its initial value.
[PATCH 3/4]:
V1 -> V2: Use the BIT() macro to build rst initial value.
[PATCH 4/4]:
V1 -> V2: Unchanged.
Huqiang Qin (4):
dt-bindings: watchdog: Add support for Amlogic-T7 SoCs
watchdog: Add a new struct for Amlogic-GXBB driver
watchdog: Add support for Amlogic-T7 SoCs
arm64: dts: Add watchdog node for Amlogic-T7 SoCs
.../watchdog/amlogic,meson-gxbb-wdt.yaml | 1 +
arch/arm64/boot/dts/amlogic/amlogic-t7.dtsi | 6 ++++++
drivers/watchdog/meson_gxbb_wdt.c | 21 ++++++++++++++++---
3 files changed, 25 insertions(+), 3 deletions(-)
base-commit: 6f048cc7a635b8736b4c7ae0e5230a92e3e648eb
--
2.37.1
Add watchdog device.
Signed-off-by: Huqiang Qin <[email protected]>
Reviewed-by: Dmitry Rokosov <[email protected]>
---
V1 -> V2: Unchanged.
arch/arm64/boot/dts/amlogic/amlogic-t7.dtsi | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/amlogic-t7.dtsi b/arch/arm64/boot/dts/amlogic/amlogic-t7.dtsi
index 1423d4a79156..6e34d11214b7 100644
--- a/arch/arm64/boot/dts/amlogic/amlogic-t7.dtsi
+++ b/arch/arm64/boot/dts/amlogic/amlogic-t7.dtsi
@@ -143,6 +143,12 @@ apb4: bus@fe000000 {
#size-cells = <2>;
ranges = <0x0 0x0 0x0 0xfe000000 0x0 0x480000>;
+ watchdog@2100 {
+ compatible = "amlogic,t7-wdt";
+ reg = <0x0 0x2100 0x0 0x10>;
+ clocks = <&xtal>;
+ };
+
uart_a: serial@78000 {
compatible = "amlogic,t7-uart", "amlogic,meson-s4-uart";
reg = <0x0 0x78000 0x0 0x18>;
--
2.37.1
Update dt-binding document for watchdog of Amlogic-T7 SoCs.
Signed-off-by: Huqiang Qin <[email protected]>
Acked-by: Conor Dooley <[email protected]>
---
V1 -> V2: Unchanged.
.../devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml b/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml
index f5cc7aa1b93b..443e2e7ab467 100644
--- a/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml
+++ b/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml
@@ -17,6 +17,7 @@ properties:
compatible:
enum:
- amlogic,meson-gxbb-wdt
+ - amlogic,t7-wdt
reg:
maxItems: 1
--
2.37.1
Compared with the previous Amlogic-GXBB, the watchdog of Amlogic-T7
has a different reset enable bit.
Signed-off-by: Huqiang Qin <[email protected]>
---
V1 -> V2: Use the BIT() macro to build rst initial value.
drivers/watchdog/meson_gxbb_wdt.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/watchdog/meson_gxbb_wdt.c b/drivers/watchdog/meson_gxbb_wdt.c
index 18180d91543e..a48622d11ad7 100644
--- a/drivers/watchdog/meson_gxbb_wdt.c
+++ b/drivers/watchdog/meson_gxbb_wdt.c
@@ -147,8 +147,13 @@ static const struct wdt_params gxbb_params = {
.rst = BIT(21),
};
+static const struct wdt_params t7_params = {
+ .rst = BIT(22),
+};
+
static const struct of_device_id meson_gxbb_wdt_dt_ids[] = {
{ .compatible = "amlogic,meson-gxbb-wdt", .data = &gxbb_params, },
+ { .compatible = "amlogic,t7-wdt", .data = &t7_params, },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, meson_gxbb_wdt_dt_ids);
--
2.37.1
Add a new structure wdt_params to describe the watchdog difference
of different chips.
Signed-off-by: Huqiang Qin <[email protected]>
---
V1 -> V2: Rename rst_shift to rst and use the BIT() macro to build
its initial value.
drivers/watchdog/meson_gxbb_wdt.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/watchdog/meson_gxbb_wdt.c b/drivers/watchdog/meson_gxbb_wdt.c
index 35d80cb39856..18180d91543e 100644
--- a/drivers/watchdog/meson_gxbb_wdt.c
+++ b/drivers/watchdog/meson_gxbb_wdt.c
@@ -22,7 +22,6 @@
#define GXBB_WDT_CTRL_CLKDIV_EN BIT(25)
#define GXBB_WDT_CTRL_CLK_EN BIT(24)
-#define GXBB_WDT_CTRL_EE_RESET BIT(21)
#define GXBB_WDT_CTRL_EN BIT(18)
#define GXBB_WDT_CTRL_DIV_MASK (BIT(18) - 1)
@@ -45,6 +44,10 @@ struct meson_gxbb_wdt {
struct clk *clk;
};
+struct wdt_params {
+ u32 rst;
+};
+
static int meson_gxbb_wdt_start(struct watchdog_device *wdt_dev)
{
struct meson_gxbb_wdt *data = watchdog_get_drvdata(wdt_dev);
@@ -140,8 +143,12 @@ static const struct dev_pm_ops meson_gxbb_wdt_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(meson_gxbb_wdt_suspend, meson_gxbb_wdt_resume)
};
+static const struct wdt_params gxbb_params = {
+ .rst = BIT(21),
+};
+
static const struct of_device_id meson_gxbb_wdt_dt_ids[] = {
- { .compatible = "amlogic,meson-gxbb-wdt", },
+ { .compatible = "amlogic,meson-gxbb-wdt", .data = &gxbb_params, },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, meson_gxbb_wdt_dt_ids);
@@ -150,6 +157,7 @@ static int meson_gxbb_wdt_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct meson_gxbb_wdt *data;
+ struct wdt_params *params;
u32 ctrl_reg;
data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
@@ -164,6 +172,8 @@ static int meson_gxbb_wdt_probe(struct platform_device *pdev)
if (IS_ERR(data->clk))
return PTR_ERR(data->clk);
+ params = (struct wdt_params *)of_device_get_match_data(dev);
+
platform_set_drvdata(pdev, data);
data->wdt_dev.parent = dev;
@@ -191,7 +201,7 @@ static int meson_gxbb_wdt_probe(struct platform_device *pdev)
/* Setup with 1ms timebase */
ctrl_reg |= ((clk_get_rate(data->clk) / 1000) &
GXBB_WDT_CTRL_DIV_MASK) |
- GXBB_WDT_CTRL_EE_RESET |
+ params->rst |
GXBB_WDT_CTRL_CLK_EN |
GXBB_WDT_CTRL_CLKDIV_EN;
--
2.37.1
On Wed, Aug 02, 2023 at 11:32:21AM +0800, Huqiang Qin wrote:
> Compared with the previous Amlogic-GXBB, the watchdog of Amlogic-T7
> has a different reset enable bit.
>
> Signed-off-by: Huqiang Qin <[email protected]>
Reviewed-by: Dmitry Rokosov <[email protected]>
> ---
>
> V1 -> V2: Use the BIT() macro to build rst initial value.
>
> drivers/watchdog/meson_gxbb_wdt.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/watchdog/meson_gxbb_wdt.c b/drivers/watchdog/meson_gxbb_wdt.c
> index 18180d91543e..a48622d11ad7 100644
> --- a/drivers/watchdog/meson_gxbb_wdt.c
> +++ b/drivers/watchdog/meson_gxbb_wdt.c
> @@ -147,8 +147,13 @@ static const struct wdt_params gxbb_params = {
> .rst = BIT(21),
> };
>
> +static const struct wdt_params t7_params = {
> + .rst = BIT(22),
> +};
> +
> static const struct of_device_id meson_gxbb_wdt_dt_ids[] = {
> { .compatible = "amlogic,meson-gxbb-wdt", .data = &gxbb_params, },
> + { .compatible = "amlogic,t7-wdt", .data = &t7_params, },
> { /* sentinel */ },
> };
> MODULE_DEVICE_TABLE(of, meson_gxbb_wdt_dt_ids);
> --
> 2.37.1
>
>
> _______________________________________________
> linux-amlogic mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-amlogic
--
Thank you,
Dmitry
On Wed, Aug 02, 2023 at 11:32:19AM +0800, Huqiang Qin wrote:
> Update dt-binding document for watchdog of Amlogic-T7 SoCs.
>
> Signed-off-by: Huqiang Qin <[email protected]>
> Acked-by: Conor Dooley <[email protected]>
Reviewed-by: Dmitry Rokosov <[email protected]>
> ---
>
> V1 -> V2: Unchanged.
>
> .../devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml b/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml
> index f5cc7aa1b93b..443e2e7ab467 100644
> --- a/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml
> +++ b/Documentation/devicetree/bindings/watchdog/amlogic,meson-gxbb-wdt.yaml
> @@ -17,6 +17,7 @@ properties:
> compatible:
> enum:
> - amlogic,meson-gxbb-wdt
> + - amlogic,t7-wdt
>
> reg:
> maxItems: 1
> --
> 2.37.1
>
>
> _______________________________________________
> linux-amlogic mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-amlogic
--
Thank you,
Dmitry
On Wed, Aug 02, 2023 at 11:32:20AM +0800, Huqiang Qin wrote:
> Add a new structure wdt_params to describe the watchdog difference
> of different chips.
>
> Signed-off-by: Huqiang Qin <[email protected]>
Reviewed-by: Dmitry Rokosov <[email protected]>
> ---
>
> V1 -> V2: Rename rst_shift to rst and use the BIT() macro to build
> its initial value.
>
> drivers/watchdog/meson_gxbb_wdt.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/watchdog/meson_gxbb_wdt.c b/drivers/watchdog/meson_gxbb_wdt.c
> index 35d80cb39856..18180d91543e 100644
> --- a/drivers/watchdog/meson_gxbb_wdt.c
> +++ b/drivers/watchdog/meson_gxbb_wdt.c
> @@ -22,7 +22,6 @@
>
> #define GXBB_WDT_CTRL_CLKDIV_EN BIT(25)
> #define GXBB_WDT_CTRL_CLK_EN BIT(24)
> -#define GXBB_WDT_CTRL_EE_RESET BIT(21)
> #define GXBB_WDT_CTRL_EN BIT(18)
> #define GXBB_WDT_CTRL_DIV_MASK (BIT(18) - 1)
>
> @@ -45,6 +44,10 @@ struct meson_gxbb_wdt {
> struct clk *clk;
> };
>
> +struct wdt_params {
> + u32 rst;
> +};
> +
> static int meson_gxbb_wdt_start(struct watchdog_device *wdt_dev)
> {
> struct meson_gxbb_wdt *data = watchdog_get_drvdata(wdt_dev);
> @@ -140,8 +143,12 @@ static const struct dev_pm_ops meson_gxbb_wdt_pm_ops = {
> SET_SYSTEM_SLEEP_PM_OPS(meson_gxbb_wdt_suspend, meson_gxbb_wdt_resume)
> };
>
> +static const struct wdt_params gxbb_params = {
> + .rst = BIT(21),
> +};
> +
> static const struct of_device_id meson_gxbb_wdt_dt_ids[] = {
> - { .compatible = "amlogic,meson-gxbb-wdt", },
> + { .compatible = "amlogic,meson-gxbb-wdt", .data = &gxbb_params, },
> { /* sentinel */ },
> };
> MODULE_DEVICE_TABLE(of, meson_gxbb_wdt_dt_ids);
> @@ -150,6 +157,7 @@ static int meson_gxbb_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct meson_gxbb_wdt *data;
> + struct wdt_params *params;
> u32 ctrl_reg;
>
> data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> @@ -164,6 +172,8 @@ static int meson_gxbb_wdt_probe(struct platform_device *pdev)
> if (IS_ERR(data->clk))
> return PTR_ERR(data->clk);
>
> + params = (struct wdt_params *)of_device_get_match_data(dev);
> +
> platform_set_drvdata(pdev, data);
>
> data->wdt_dev.parent = dev;
> @@ -191,7 +201,7 @@ static int meson_gxbb_wdt_probe(struct platform_device *pdev)
> /* Setup with 1ms timebase */
> ctrl_reg |= ((clk_get_rate(data->clk) / 1000) &
> GXBB_WDT_CTRL_DIV_MASK) |
> - GXBB_WDT_CTRL_EE_RESET |
> + params->rst |
> GXBB_WDT_CTRL_CLK_EN |
> GXBB_WDT_CTRL_CLKDIV_EN;
>
> --
> 2.37.1
>
>
> _______________________________________________
> linux-amlogic mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-amlogic
--
Thank you,
Dmitry