* [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
@ 2020-07-28 10:42 ` Crystal Guo
0 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: srv_heupstream, linux-mediatek, linux-arm-kernel, linux-kernel,
linux-watchdog, seiya.wang, Crystal Guo
mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
of reset bits from dtsi is more easier to maintain.
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
1 file changed, 5 insertions(+), 21 deletions(-)
diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
index d6a6393..adc88c2 100644
--- a/drivers/watchdog/mtk_wdt.c
+++ b/drivers/watchdog/mtk_wdt.c
@@ -9,8 +9,6 @@
* Based on sunxi_wdt.c
*/
-#include <dt-bindings/reset-controller/mt2712-resets.h>
-#include <dt-bindings/reset-controller/mt8183-resets.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/init.h>
@@ -64,18 +62,6 @@ struct mtk_wdt_dev {
struct reset_controller_dev rcdev;
};
-struct mtk_wdt_data {
- int toprgu_sw_rst_num;
-};
-
-static const struct mtk_wdt_data mt2712_data = {
- .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
-};
-
-static const struct mtk_wdt_data mt8183_data = {
- .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
-};
-
static int toprgu_reset_update(struct reset_controller_dev *rcdev,
unsigned long id, bool assert)
{
@@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct mtk_wdt_dev *mtk_wdt;
- const struct mtk_wdt_data *wdt_data;
+ u32 toprgu_sw_rst_num;
int err;
mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
@@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
mtk_wdt->wdt_dev.timeout, nowayout);
- wdt_data = of_device_get_match_data(dev);
- if (wdt_data) {
- err = toprgu_register_reset_controller(pdev,
- wdt_data->toprgu_sw_rst_num);
+ err = of_property_read_u32(pdev->dev.of_node, "rst-num",
+ &toprgu_sw_rst_num);
+ if (!err) {
+ err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
if (err)
return err;
}
@@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
#endif
static const struct of_device_id mtk_wdt_dt_ids[] = {
- { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
{ .compatible = "mediatek,mt6589-wdt" },
- { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
--
1.8.1.1.dirty
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
@ 2020-07-28 10:42 ` Crystal Guo
0 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, Crystal Guo, linux-arm-kernel
mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
of reset bits from dtsi is more easier to maintain.
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
1 file changed, 5 insertions(+), 21 deletions(-)
diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
index d6a6393..adc88c2 100644
--- a/drivers/watchdog/mtk_wdt.c
+++ b/drivers/watchdog/mtk_wdt.c
@@ -9,8 +9,6 @@
* Based on sunxi_wdt.c
*/
-#include <dt-bindings/reset-controller/mt2712-resets.h>
-#include <dt-bindings/reset-controller/mt8183-resets.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/init.h>
@@ -64,18 +62,6 @@ struct mtk_wdt_dev {
struct reset_controller_dev rcdev;
};
-struct mtk_wdt_data {
- int toprgu_sw_rst_num;
-};
-
-static const struct mtk_wdt_data mt2712_data = {
- .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
-};
-
-static const struct mtk_wdt_data mt8183_data = {
- .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
-};
-
static int toprgu_reset_update(struct reset_controller_dev *rcdev,
unsigned long id, bool assert)
{
@@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct mtk_wdt_dev *mtk_wdt;
- const struct mtk_wdt_data *wdt_data;
+ u32 toprgu_sw_rst_num;
int err;
mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
@@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
mtk_wdt->wdt_dev.timeout, nowayout);
- wdt_data = of_device_get_match_data(dev);
- if (wdt_data) {
- err = toprgu_register_reset_controller(pdev,
- wdt_data->toprgu_sw_rst_num);
+ err = of_property_read_u32(pdev->dev.of_node, "rst-num",
+ &toprgu_sw_rst_num);
+ if (!err) {
+ err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
if (err)
return err;
}
@@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
#endif
static const struct of_device_id mtk_wdt_dt_ids[] = {
- { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
{ .compatible = "mediatek,mt6589-wdt" },
- { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
--
1.8.1.1.dirty
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
@ 2020-07-28 10:42 ` Crystal Guo
0 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, Crystal Guo, linux-arm-kernel
mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
of reset bits from dtsi is more easier to maintain.
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
1 file changed, 5 insertions(+), 21 deletions(-)
diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
index d6a6393..adc88c2 100644
--- a/drivers/watchdog/mtk_wdt.c
+++ b/drivers/watchdog/mtk_wdt.c
@@ -9,8 +9,6 @@
* Based on sunxi_wdt.c
*/
-#include <dt-bindings/reset-controller/mt2712-resets.h>
-#include <dt-bindings/reset-controller/mt8183-resets.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/init.h>
@@ -64,18 +62,6 @@ struct mtk_wdt_dev {
struct reset_controller_dev rcdev;
};
-struct mtk_wdt_data {
- int toprgu_sw_rst_num;
-};
-
-static const struct mtk_wdt_data mt2712_data = {
- .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
-};
-
-static const struct mtk_wdt_data mt8183_data = {
- .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
-};
-
static int toprgu_reset_update(struct reset_controller_dev *rcdev,
unsigned long id, bool assert)
{
@@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct mtk_wdt_dev *mtk_wdt;
- const struct mtk_wdt_data *wdt_data;
+ u32 toprgu_sw_rst_num;
int err;
mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
@@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
mtk_wdt->wdt_dev.timeout, nowayout);
- wdt_data = of_device_get_match_data(dev);
- if (wdt_data) {
- err = toprgu_register_reset_controller(pdev,
- wdt_data->toprgu_sw_rst_num);
+ err = of_property_read_u32(pdev->dev.of_node, "rst-num",
+ &toprgu_sw_rst_num);
+ if (!err) {
+ err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
if (err)
return err;
}
@@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
#endif
static const struct of_device_id mtk_wdt_dt_ids[] = {
- { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
{ .compatible = "mediatek,mt6589-wdt" },
- { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
--
1.8.1.1.dirty
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/3] dt-bindings: watchdog: Add rst-num property
2020-07-28 10:42 ` Crystal Guo
(?)
@ 2020-07-28 10:42 ` Crystal Guo
-1 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: srv_heupstream, linux-mediatek, linux-arm-kernel, linux-kernel,
linux-watchdog, seiya.wang, Crystal Guo
Add rst-num property and update example
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
Documentation/devicetree/bindings/watchdog/mtk-wdt.txt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
index 4dd36bd..df19a4d 100644
--- a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
@@ -18,6 +18,7 @@ Required properties:
Optional properties:
- timeout-sec: contains the watchdog timeout in seconds.
- #reset-cells: Should be 1.
+- rst-num: the number of reset bits in toprgu.
Example:
@@ -26,5 +27,6 @@ watchdog: watchdog@10007000 {
"mediatek,mt6589-wdt";
reg = <0 0x10007000 0 0x100>;
timeout-sec = <10>;
+ rst-num = <23>;
#reset-cells = <1>;
};
--
1.8.1.1.dirty
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/3] dt-bindings: watchdog: Add rst-num property
@ 2020-07-28 10:42 ` Crystal Guo
0 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, Crystal Guo, linux-arm-kernel
Add rst-num property and update example
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
Documentation/devicetree/bindings/watchdog/mtk-wdt.txt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
index 4dd36bd..df19a4d 100644
--- a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
@@ -18,6 +18,7 @@ Required properties:
Optional properties:
- timeout-sec: contains the watchdog timeout in seconds.
- #reset-cells: Should be 1.
+- rst-num: the number of reset bits in toprgu.
Example:
@@ -26,5 +27,6 @@ watchdog: watchdog@10007000 {
"mediatek,mt6589-wdt";
reg = <0 0x10007000 0 0x100>;
timeout-sec = <10>;
+ rst-num = <23>;
#reset-cells = <1>;
};
--
1.8.1.1.dirty
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/3] dt-bindings: watchdog: Add rst-num property
@ 2020-07-28 10:42 ` Crystal Guo
0 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, Crystal Guo, linux-arm-kernel
Add rst-num property and update example
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
Documentation/devicetree/bindings/watchdog/mtk-wdt.txt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
index 4dd36bd..df19a4d 100644
--- a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
@@ -18,6 +18,7 @@ Required properties:
Optional properties:
- timeout-sec: contains the watchdog timeout in seconds.
- #reset-cells: Should be 1.
+- rst-num: the number of reset bits in toprgu.
Example:
@@ -26,5 +27,6 @@ watchdog: watchdog@10007000 {
"mediatek,mt6589-wdt";
reg = <0 0x10007000 0 0x100>;
timeout-sec = <10>;
+ rst-num = <23>;
#reset-cells = <1>;
};
--
1.8.1.1.dirty
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/3] arm64: dts: mt8183: Add rst-num property
2020-07-28 10:42 ` Crystal Guo
(?)
@ 2020-07-28 10:42 ` Crystal Guo
-1 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: srv_heupstream, linux-mediatek, linux-arm-kernel, linux-kernel,
linux-watchdog, seiya.wang, Crystal Guo
Add rst-num property in watchdog node
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
arch/arm64/boot/dts/mediatek/mt8183.dtsi | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
index 7b781eb..decf156 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
@@ -332,6 +332,7 @@
compatible = "mediatek,mt8183-wdt",
"mediatek,mt6589-wdt";
reg = <0 0x10007000 0 0x100>;
+ rst-num = <19>;
#reset-cells = <1>;
};
--
1.8.1.1.dirty
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/3] arm64: dts: mt8183: Add rst-num property
@ 2020-07-28 10:42 ` Crystal Guo
0 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, Crystal Guo, linux-arm-kernel
Add rst-num property in watchdog node
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
arch/arm64/boot/dts/mediatek/mt8183.dtsi | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
index 7b781eb..decf156 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
@@ -332,6 +332,7 @@
compatible = "mediatek,mt8183-wdt",
"mediatek,mt6589-wdt";
reg = <0 0x10007000 0 0x100>;
+ rst-num = <19>;
#reset-cells = <1>;
};
--
1.8.1.1.dirty
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/3] arm64: dts: mt8183: Add rst-num property
@ 2020-07-28 10:42 ` Crystal Guo
0 siblings, 0 replies; 15+ messages in thread
From: Crystal Guo @ 2020-07-28 10:42 UTC (permalink / raw)
To: linux, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, Crystal Guo, linux-arm-kernel
Add rst-num property in watchdog node
Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
---
arch/arm64/boot/dts/mediatek/mt8183.dtsi | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
index 7b781eb..decf156 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
@@ -332,6 +332,7 @@
compatible = "mediatek,mt8183-wdt",
"mediatek,mt6589-wdt";
reg = <0 0x10007000 0 0x100>;
+ rst-num = <19>;
#reset-cells = <1>;
};
--
1.8.1.1.dirty
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
2020-07-28 10:42 ` Crystal Guo
(?)
@ 2020-07-28 11:43 ` Matthias Brugger
-1 siblings, 0 replies; 15+ messages in thread
From: Matthias Brugger @ 2020-07-28 11:43 UTC (permalink / raw)
To: Crystal Guo, linux, robh+dt
Cc: srv_heupstream, linux-mediatek, linux-arm-kernel, linux-kernel,
linux-watchdog, seiya.wang
On 28/07/2020 12:42, Crystal Guo wrote:
> mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
> Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
> of reset bits from dtsi is more easier to maintain.
>
We want to have all the reset numbers in one header file. It makes no sense to
pass the reset number in one driver via DTS and in the rest through the header file.
Sorry but from my side this is NACK.
Regards,
Matthias
> Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
> ---
> drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
> index d6a6393..adc88c2 100644
> --- a/drivers/watchdog/mtk_wdt.c
> +++ b/drivers/watchdog/mtk_wdt.c
> @@ -9,8 +9,6 @@
> * Based on sunxi_wdt.c
> */
>
> -#include <dt-bindings/reset-controller/mt2712-resets.h>
> -#include <dt-bindings/reset-controller/mt8183-resets.h>
> #include <linux/delay.h>
> #include <linux/err.h>
> #include <linux/init.h>
> @@ -64,18 +62,6 @@ struct mtk_wdt_dev {
> struct reset_controller_dev rcdev;
> };
>
> -struct mtk_wdt_data {
> - int toprgu_sw_rst_num;
> -};
> -
> -static const struct mtk_wdt_data mt2712_data = {
> - .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
> -};
> -
> -static const struct mtk_wdt_data mt8183_data = {
> - .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
> -};
> -
> static int toprgu_reset_update(struct reset_controller_dev *rcdev,
> unsigned long id, bool assert)
> {
> @@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct mtk_wdt_dev *mtk_wdt;
> - const struct mtk_wdt_data *wdt_data;
> + u32 toprgu_sw_rst_num;
> int err;
>
> mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
> @@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
> mtk_wdt->wdt_dev.timeout, nowayout);
>
> - wdt_data = of_device_get_match_data(dev);
> - if (wdt_data) {
> - err = toprgu_register_reset_controller(pdev,
> - wdt_data->toprgu_sw_rst_num);
> + err = of_property_read_u32(pdev->dev.of_node, "rst-num",
> + &toprgu_sw_rst_num);
> + if (!err) {
> + err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
> if (err)
> return err;
> }
> @@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
> #endif
>
> static const struct of_device_id mtk_wdt_dt_ids[] = {
> - { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
> { .compatible = "mediatek,mt6589-wdt" },
> - { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
@ 2020-07-28 11:43 ` Matthias Brugger
0 siblings, 0 replies; 15+ messages in thread
From: Matthias Brugger @ 2020-07-28 11:43 UTC (permalink / raw)
To: Crystal Guo, linux, robh+dt
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, linux-arm-kernel
On 28/07/2020 12:42, Crystal Guo wrote:
> mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
> Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
> of reset bits from dtsi is more easier to maintain.
>
We want to have all the reset numbers in one header file. It makes no sense to
pass the reset number in one driver via DTS and in the rest through the header file.
Sorry but from my side this is NACK.
Regards,
Matthias
> Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
> ---
> drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
> index d6a6393..adc88c2 100644
> --- a/drivers/watchdog/mtk_wdt.c
> +++ b/drivers/watchdog/mtk_wdt.c
> @@ -9,8 +9,6 @@
> * Based on sunxi_wdt.c
> */
>
> -#include <dt-bindings/reset-controller/mt2712-resets.h>
> -#include <dt-bindings/reset-controller/mt8183-resets.h>
> #include <linux/delay.h>
> #include <linux/err.h>
> #include <linux/init.h>
> @@ -64,18 +62,6 @@ struct mtk_wdt_dev {
> struct reset_controller_dev rcdev;
> };
>
> -struct mtk_wdt_data {
> - int toprgu_sw_rst_num;
> -};
> -
> -static const struct mtk_wdt_data mt2712_data = {
> - .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
> -};
> -
> -static const struct mtk_wdt_data mt8183_data = {
> - .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
> -};
> -
> static int toprgu_reset_update(struct reset_controller_dev *rcdev,
> unsigned long id, bool assert)
> {
> @@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct mtk_wdt_dev *mtk_wdt;
> - const struct mtk_wdt_data *wdt_data;
> + u32 toprgu_sw_rst_num;
> int err;
>
> mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
> @@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
> mtk_wdt->wdt_dev.timeout, nowayout);
>
> - wdt_data = of_device_get_match_data(dev);
> - if (wdt_data) {
> - err = toprgu_register_reset_controller(pdev,
> - wdt_data->toprgu_sw_rst_num);
> + err = of_property_read_u32(pdev->dev.of_node, "rst-num",
> + &toprgu_sw_rst_num);
> + if (!err) {
> + err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
> if (err)
> return err;
> }
> @@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
> #endif
>
> static const struct of_device_id mtk_wdt_dt_ids[] = {
> - { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
> { .compatible = "mediatek,mt6589-wdt" },
> - { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
>
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
@ 2020-07-28 11:43 ` Matthias Brugger
0 siblings, 0 replies; 15+ messages in thread
From: Matthias Brugger @ 2020-07-28 11:43 UTC (permalink / raw)
To: Crystal Guo, linux, robh+dt
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, linux-arm-kernel
On 28/07/2020 12:42, Crystal Guo wrote:
> mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
> Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
> of reset bits from dtsi is more easier to maintain.
>
We want to have all the reset numbers in one header file. It makes no sense to
pass the reset number in one driver via DTS and in the rest through the header file.
Sorry but from my side this is NACK.
Regards,
Matthias
> Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
> ---
> drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
> index d6a6393..adc88c2 100644
> --- a/drivers/watchdog/mtk_wdt.c
> +++ b/drivers/watchdog/mtk_wdt.c
> @@ -9,8 +9,6 @@
> * Based on sunxi_wdt.c
> */
>
> -#include <dt-bindings/reset-controller/mt2712-resets.h>
> -#include <dt-bindings/reset-controller/mt8183-resets.h>
> #include <linux/delay.h>
> #include <linux/err.h>
> #include <linux/init.h>
> @@ -64,18 +62,6 @@ struct mtk_wdt_dev {
> struct reset_controller_dev rcdev;
> };
>
> -struct mtk_wdt_data {
> - int toprgu_sw_rst_num;
> -};
> -
> -static const struct mtk_wdt_data mt2712_data = {
> - .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
> -};
> -
> -static const struct mtk_wdt_data mt8183_data = {
> - .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
> -};
> -
> static int toprgu_reset_update(struct reset_controller_dev *rcdev,
> unsigned long id, bool assert)
> {
> @@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct mtk_wdt_dev *mtk_wdt;
> - const struct mtk_wdt_data *wdt_data;
> + u32 toprgu_sw_rst_num;
> int err;
>
> mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
> @@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
> mtk_wdt->wdt_dev.timeout, nowayout);
>
> - wdt_data = of_device_get_match_data(dev);
> - if (wdt_data) {
> - err = toprgu_register_reset_controller(pdev,
> - wdt_data->toprgu_sw_rst_num);
> + err = of_property_read_u32(pdev->dev.of_node, "rst-num",
> + &toprgu_sw_rst_num);
> + if (!err) {
> + err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
> if (err)
> return err;
> }
> @@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
> #endif
>
> static const struct of_device_id mtk_wdt_dt_ids[] = {
> - { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
> { .compatible = "mediatek,mt6589-wdt" },
> - { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
2020-07-28 10:42 ` Crystal Guo
(?)
@ 2020-07-28 14:42 ` Guenter Roeck
-1 siblings, 0 replies; 15+ messages in thread
From: Guenter Roeck @ 2020-07-28 14:42 UTC (permalink / raw)
To: Crystal Guo, robh+dt, matthias.bgg
Cc: srv_heupstream, linux-mediatek, linux-arm-kernel, linux-kernel,
linux-watchdog, seiya.wang
On 7/28/20 3:42 AM, Crystal Guo wrote:
> mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
> Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
> of reset bits from dtsi is more easier to maintain.
> > Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
> ---
> drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
> index d6a6393..adc88c2 100644
> --- a/drivers/watchdog/mtk_wdt.c
> +++ b/drivers/watchdog/mtk_wdt.c
> @@ -9,8 +9,6 @@
> * Based on sunxi_wdt.c
> */
>
> -#include <dt-bindings/reset-controller/mt2712-resets.h>
> -#include <dt-bindings/reset-controller/mt8183-resets.h>
> #include <linux/delay.h>
> #include <linux/err.h>
> #include <linux/init.h>
> @@ -64,18 +62,6 @@ struct mtk_wdt_dev {
> struct reset_controller_dev rcdev;
> };
>
> -struct mtk_wdt_data {
> - int toprgu_sw_rst_num;
> -};
> -
> -static const struct mtk_wdt_data mt2712_data = {
> - .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
> -};
> -
> -static const struct mtk_wdt_data mt8183_data = {
> - .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
> -};
> -
> static int toprgu_reset_update(struct reset_controller_dev *rcdev,
> unsigned long id, bool assert)
> {
> @@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct mtk_wdt_dev *mtk_wdt;
> - const struct mtk_wdt_data *wdt_data;
> + u32 toprgu_sw_rst_num;
toprgu_sw_ is a completely unnecessary prefix for a local variable.
> int err;
>
> mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
> @@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
> mtk_wdt->wdt_dev.timeout, nowayout);
>
> - wdt_data = of_device_get_match_data(dev);
> - if (wdt_data) {
> - err = toprgu_register_reset_controller(pdev,
> - wdt_data->toprgu_sw_rst_num);
> + err = of_property_read_u32(pdev->dev.of_node, "rst-num",
> + &toprgu_sw_rst_num);
There is no such property. Maybe that is added with a subsequent patch or
preceding patch, but that is not in -next. If this patch is applied without
rst-num already present in affected devicetree files, the code will no longer
work. That means this patch requires context, and can not be applied without it.
That in turn means it can not be patch 1 of 3.
Guenter
> + if (!err) {
> + err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
> if (err)
> return err;
> }
> @@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
> #endif
>
> static const struct of_device_id mtk_wdt_dt_ids[] = {
> - { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
> { .compatible = "mediatek,mt6589-wdt" },
> - { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
I don't see the point of removing the mediatek,mt2712-wdt and mediatek,mt8183-wdt
compatible lines.
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
@ 2020-07-28 14:42 ` Guenter Roeck
0 siblings, 0 replies; 15+ messages in thread
From: Guenter Roeck @ 2020-07-28 14:42 UTC (permalink / raw)
To: Crystal Guo, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, linux-arm-kernel
On 7/28/20 3:42 AM, Crystal Guo wrote:
> mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
> Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
> of reset bits from dtsi is more easier to maintain.
> > Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
> ---
> drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
> index d6a6393..adc88c2 100644
> --- a/drivers/watchdog/mtk_wdt.c
> +++ b/drivers/watchdog/mtk_wdt.c
> @@ -9,8 +9,6 @@
> * Based on sunxi_wdt.c
> */
>
> -#include <dt-bindings/reset-controller/mt2712-resets.h>
> -#include <dt-bindings/reset-controller/mt8183-resets.h>
> #include <linux/delay.h>
> #include <linux/err.h>
> #include <linux/init.h>
> @@ -64,18 +62,6 @@ struct mtk_wdt_dev {
> struct reset_controller_dev rcdev;
> };
>
> -struct mtk_wdt_data {
> - int toprgu_sw_rst_num;
> -};
> -
> -static const struct mtk_wdt_data mt2712_data = {
> - .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
> -};
> -
> -static const struct mtk_wdt_data mt8183_data = {
> - .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
> -};
> -
> static int toprgu_reset_update(struct reset_controller_dev *rcdev,
> unsigned long id, bool assert)
> {
> @@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct mtk_wdt_dev *mtk_wdt;
> - const struct mtk_wdt_data *wdt_data;
> + u32 toprgu_sw_rst_num;
toprgu_sw_ is a completely unnecessary prefix for a local variable.
> int err;
>
> mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
> @@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
> mtk_wdt->wdt_dev.timeout, nowayout);
>
> - wdt_data = of_device_get_match_data(dev);
> - if (wdt_data) {
> - err = toprgu_register_reset_controller(pdev,
> - wdt_data->toprgu_sw_rst_num);
> + err = of_property_read_u32(pdev->dev.of_node, "rst-num",
> + &toprgu_sw_rst_num);
There is no such property. Maybe that is added with a subsequent patch or
preceding patch, but that is not in -next. If this patch is applied without
rst-num already present in affected devicetree files, the code will no longer
work. That means this patch requires context, and can not be applied without it.
That in turn means it can not be patch 1 of 3.
Guenter
> + if (!err) {
> + err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
> if (err)
> return err;
> }
> @@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
> #endif
>
> static const struct of_device_id mtk_wdt_dt_ids[] = {
> - { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
> { .compatible = "mediatek,mt6589-wdt" },
> - { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
I don't see the point of removing the mediatek,mt2712-wdt and mediatek,mt8183-wdt
compatible lines.
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
>
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h
@ 2020-07-28 14:42 ` Guenter Roeck
0 siblings, 0 replies; 15+ messages in thread
From: Guenter Roeck @ 2020-07-28 14:42 UTC (permalink / raw)
To: Crystal Guo, robh+dt, matthias.bgg
Cc: linux-watchdog, srv_heupstream, seiya.wang, linux-kernel,
linux-mediatek, linux-arm-kernel
On 7/28/20 3:42 AM, Crystal Guo wrote:
> mt8xxx-resets.h actually just used to define TOPRGU_SW_RST_NUM.
> Instead of resubmit the mt8xxx-reset.h for a new IC, get the number
> of reset bits from dtsi is more easier to maintain.
> > Signed-off-by: Crystal Guo <crystal.guo@mediatek.com>
> ---
> drivers/watchdog/mtk_wdt.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
> index d6a6393..adc88c2 100644
> --- a/drivers/watchdog/mtk_wdt.c
> +++ b/drivers/watchdog/mtk_wdt.c
> @@ -9,8 +9,6 @@
> * Based on sunxi_wdt.c
> */
>
> -#include <dt-bindings/reset-controller/mt2712-resets.h>
> -#include <dt-bindings/reset-controller/mt8183-resets.h>
> #include <linux/delay.h>
> #include <linux/err.h>
> #include <linux/init.h>
> @@ -64,18 +62,6 @@ struct mtk_wdt_dev {
> struct reset_controller_dev rcdev;
> };
>
> -struct mtk_wdt_data {
> - int toprgu_sw_rst_num;
> -};
> -
> -static const struct mtk_wdt_data mt2712_data = {
> - .toprgu_sw_rst_num = MT2712_TOPRGU_SW_RST_NUM,
> -};
> -
> -static const struct mtk_wdt_data mt8183_data = {
> - .toprgu_sw_rst_num = MT8183_TOPRGU_SW_RST_NUM,
> -};
> -
> static int toprgu_reset_update(struct reset_controller_dev *rcdev,
> unsigned long id, bool assert)
> {
> @@ -248,7 +234,7 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct mtk_wdt_dev *mtk_wdt;
> - const struct mtk_wdt_data *wdt_data;
> + u32 toprgu_sw_rst_num;
toprgu_sw_ is a completely unnecessary prefix for a local variable.
> int err;
>
> mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL);
> @@ -284,10 +270,10 @@ static int mtk_wdt_probe(struct platform_device *pdev)
> dev_info(dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)\n",
> mtk_wdt->wdt_dev.timeout, nowayout);
>
> - wdt_data = of_device_get_match_data(dev);
> - if (wdt_data) {
> - err = toprgu_register_reset_controller(pdev,
> - wdt_data->toprgu_sw_rst_num);
> + err = of_property_read_u32(pdev->dev.of_node, "rst-num",
> + &toprgu_sw_rst_num);
There is no such property. Maybe that is added with a subsequent patch or
preceding patch, but that is not in -next. If this patch is applied without
rst-num already present in affected devicetree files, the code will no longer
work. That means this patch requires context, and can not be applied without it.
That in turn means it can not be patch 1 of 3.
Guenter
> + if (!err) {
> + err = toprgu_register_reset_controller(pdev, toprgu_sw_rst_num);
> if (err)
> return err;
> }
> @@ -319,9 +305,7 @@ static int mtk_wdt_resume(struct device *dev)
> #endif
>
> static const struct of_device_id mtk_wdt_dt_ids[] = {
> - { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
> { .compatible = "mediatek,mt6589-wdt" },
> - { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
I don't see the point of removing the mediatek,mt2712-wdt and mediatek,mt8183-wdt
compatible lines.
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2020-07-28 14:44 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-28 10:42 [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h Crystal Guo
2020-07-28 10:42 ` Crystal Guo
2020-07-28 10:42 ` Crystal Guo
2020-07-28 10:42 ` [PATCH 2/3] dt-bindings: watchdog: Add rst-num property Crystal Guo
2020-07-28 10:42 ` Crystal Guo
2020-07-28 10:42 ` Crystal Guo
2020-07-28 10:42 ` [PATCH 3/3] arm64: dts: mt8183: " Crystal Guo
2020-07-28 10:42 ` Crystal Guo
2020-07-28 10:42 ` Crystal Guo
2020-07-28 11:43 ` [PATCH 1/3] watchdog: mtk_wdt: remove mt8xxx-resets.h Matthias Brugger
2020-07-28 11:43 ` Matthias Brugger
2020-07-28 11:43 ` Matthias Brugger
2020-07-28 14:42 ` Guenter Roeck
2020-07-28 14:42 ` Guenter Roeck
2020-07-28 14:42 ` Guenter Roeck
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.