* [PATCH 1/4] dt-bindings: power: Add MT8365 power domains @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu Cc: Fabien Parent, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek Add power domains dt-bindings for MT8365. Signed-off-by: Fabien Parent <fparent@baylibre.com> --- .../power/mediatek,power-controller.yaml | 2 ++ include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 include/dt-bindings/power/mt8365-power.h diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml index 135c6f722091..2c6d3e4246b2 100644 --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml @@ -29,6 +29,7 @@ properties: - mediatek,mt8186-power-controller - mediatek,mt8192-power-controller - mediatek,mt8195-power-controller + - mediatek,mt8365-power-controller '#power-domain-cells': const: 1 @@ -67,6 +68,7 @@ patternProperties: "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. maxItems: 1 clocks: diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h new file mode 100644 index 000000000000..4f50997a13b4 --- /dev/null +++ b/include/dt-bindings/power/mt8365-power.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2022 MediaTek Inc. + */ + +#ifndef _DT_BINDINGS_POWER_MT8365_POWER_H +#define _DT_BINDINGS_POWER_MT8365_POWER_H + +#define MT8365_POWER_DOMAIN_MM 0 +#define MT8365_POWER_DOMAIN_CONN 1 +#define MT8365_POWER_DOMAIN_MFG 2 +#define MT8365_POWER_DOMAIN_AUDIO 3 +#define MT8365_POWER_DOMAIN_CAM 4 +#define MT8365_POWER_DOMAIN_DSP 5 +#define MT8365_POWER_DOMAIN_VDEC 6 +#define MT8365_POWER_DOMAIN_VENC 7 +#define MT8365_POWER_DOMAIN_APU 8 + +#endif /* _DT_BINDINGS_POWER_MT8365_POWER_H */ -- 2.36.1 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 1/4] dt-bindings: power: Add MT8365 power domains @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu Cc: Fabien Parent, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek Add power domains dt-bindings for MT8365. Signed-off-by: Fabien Parent <fparent@baylibre.com> --- .../power/mediatek,power-controller.yaml | 2 ++ include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 include/dt-bindings/power/mt8365-power.h diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml index 135c6f722091..2c6d3e4246b2 100644 --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml @@ -29,6 +29,7 @@ properties: - mediatek,mt8186-power-controller - mediatek,mt8192-power-controller - mediatek,mt8195-power-controller + - mediatek,mt8365-power-controller '#power-domain-cells': const: 1 @@ -67,6 +68,7 @@ patternProperties: "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. maxItems: 1 clocks: diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h new file mode 100644 index 000000000000..4f50997a13b4 --- /dev/null +++ b/include/dt-bindings/power/mt8365-power.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2022 MediaTek Inc. + */ + +#ifndef _DT_BINDINGS_POWER_MT8365_POWER_H +#define _DT_BINDINGS_POWER_MT8365_POWER_H + +#define MT8365_POWER_DOMAIN_MM 0 +#define MT8365_POWER_DOMAIN_CONN 1 +#define MT8365_POWER_DOMAIN_MFG 2 +#define MT8365_POWER_DOMAIN_AUDIO 3 +#define MT8365_POWER_DOMAIN_CAM 4 +#define MT8365_POWER_DOMAIN_DSP 5 +#define MT8365_POWER_DOMAIN_VDEC 6 +#define MT8365_POWER_DOMAIN_VENC 7 +#define MT8365_POWER_DOMAIN_APU 8 + +#endif /* _DT_BINDINGS_POWER_MT8365_POWER_H */ -- 2.36.1 ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 1/4] dt-bindings: power: Add MT8365 power domains @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu Cc: Fabien Parent, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek Add power domains dt-bindings for MT8365. Signed-off-by: Fabien Parent <fparent@baylibre.com> --- .../power/mediatek,power-controller.yaml | 2 ++ include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 include/dt-bindings/power/mt8365-power.h diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml index 135c6f722091..2c6d3e4246b2 100644 --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml @@ -29,6 +29,7 @@ properties: - mediatek,mt8186-power-controller - mediatek,mt8192-power-controller - mediatek,mt8195-power-controller + - mediatek,mt8365-power-controller '#power-domain-cells': const: 1 @@ -67,6 +68,7 @@ patternProperties: "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. maxItems: 1 clocks: diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h new file mode 100644 index 000000000000..4f50997a13b4 --- /dev/null +++ b/include/dt-bindings/power/mt8365-power.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2022 MediaTek Inc. + */ + +#ifndef _DT_BINDINGS_POWER_MT8365_POWER_H +#define _DT_BINDINGS_POWER_MT8365_POWER_H + +#define MT8365_POWER_DOMAIN_MM 0 +#define MT8365_POWER_DOMAIN_CONN 1 +#define MT8365_POWER_DOMAIN_MFG 2 +#define MT8365_POWER_DOMAIN_AUDIO 3 +#define MT8365_POWER_DOMAIN_CAM 4 +#define MT8365_POWER_DOMAIN_DSP 5 +#define MT8365_POWER_DOMAIN_VDEC 6 +#define MT8365_POWER_DOMAIN_VENC 7 +#define MT8365_POWER_DOMAIN_APU 8 + +#endif /* _DT_BINDINGS_POWER_MT8365_POWER_H */ -- 2.36.1 _______________________________________________ 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] 32+ messages in thread
* [PATCH 2/4] soc: mediatek: Add support of WAYEN operations 2022-05-30 20:42 ` Fabien Parent (?) @ 2022-05-30 20:42 ` Fabien Parent -1 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Alexandre Bailon, Fabien Parent, linux-arm-kernel, linux-mediatek, linux-kernel From: Alexandre Bailon <abailon@baylibre.com> This updates the power domain to support WAYEN operations. This is required by the mt8365 for the MM power domain. Signed-off-by: Alexandre Bailon <abailon@baylibre.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mtk-pm-domains.c | 64 +++++++++++++++++++++------ drivers/soc/mediatek/mtk-pm-domains.h | 27 ++++++----- 2 files changed, 67 insertions(+), 24 deletions(-) diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index 5ced254b082b..90b91b3b19a8 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -44,6 +44,7 @@ struct scpsys_domain { struct clk_bulk_data *subsys_clks; struct regmap *infracfg; struct regmap *smi; + struct regmap *infracfg_nao; struct regulator *supply; }; @@ -116,23 +117,38 @@ static int scpsys_sram_disable(struct scpsys_domain *pd) MTK_POLL_TIMEOUT); } -static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) +static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, + struct regmap *regmap, struct regmap *infracfg_nao) { int i, ret; for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { - u32 val, mask = bpd[i].bus_prot_mask; + u32 mask = bpd[i].bus_prot_mask; + u32 val = mask, sta_mask = mask; + struct regmap *ack_regmap = regmap; if (!mask) break; + if (bpd[i].wayen) { + if (!infracfg_nao) + return -ENODEV; + + val = 0; + sta_mask = bpd[i].bus_prot_sta_mask; + ack_regmap = infracfg_nao; + } + if (bpd[i].bus_prot_reg_update) - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); + regmap_update_bits(regmap, bpd[i].bus_prot_set, mask, val); else regmap_write(regmap, bpd[i].bus_prot_set, mask); - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, - val, (val & mask) == mask, + if (bpd[i].ignore_clr_ack) + continue; + + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, + val, (val & sta_mask) == sta_mask, MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); if (ret) return ret; @@ -145,34 +161,49 @@ static int scpsys_bus_protect_enable(struct scpsys_domain *pd) { int ret; - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); + ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, + pd->infracfg, pd->infracfg_nao); if (ret) return ret; - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); + return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi, NULL); } +#define mask_cond(wayen, val, mask) \ + ((wayen && ((val & mask) == mask)) || (!wayen && !(val & mask))) + static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, - struct regmap *regmap) + struct regmap *regmap, struct regmap *infracfg_nao) { int i, ret; for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { - u32 val, mask = bpd[i].bus_prot_mask; + u32 val = 0, mask = bpd[i].bus_prot_mask; + u32 sta_mask = mask; + struct regmap *ack_regmap = regmap; if (!mask) continue; + if (bpd[i].wayen) { + if (!infracfg_nao) + return -ENODEV; + + val = mask; + sta_mask = bpd[i].bus_prot_sta_mask; + ack_regmap = infracfg_nao; + } + if (bpd[i].bus_prot_reg_update) - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); + regmap_update_bits(regmap, bpd[i].bus_prot_clr, mask, val); else regmap_write(regmap, bpd[i].bus_prot_clr, mask); if (bpd[i].ignore_clr_ack) continue; - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, - val, !(val & mask), + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, + val, mask_cond(bpd[i].wayen, val, sta_mask), MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); if (ret) return ret; @@ -185,11 +216,12 @@ static int scpsys_bus_protect_disable(struct scpsys_domain *pd) { int ret; - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); + ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi, NULL); if (ret) return ret; - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); + return _scpsys_bus_protect_disable(pd->data->bp_infracfg, + pd->infracfg, pd->infracfg_nao); } static int scpsys_regulator_enable(struct regulator *supply) @@ -363,6 +395,10 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no return ERR_CAST(pd->smi); } + pd->infracfg_nao = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg_nao"); + if (IS_ERR(pd->infracfg_nao)) + return ERR_CAST(pd->infracfg_nao); + num_clks = of_clk_get_parent_count(node); if (num_clks > 0) { /* Calculate number of subsys_clks */ diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h index daa24e890dd4..a3955d960233 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.h +++ b/drivers/soc/mediatek/mtk-pm-domains.h @@ -39,23 +39,28 @@ #define SPM_MAX_BUS_PROT_DATA 6 -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ - .bus_prot_mask = (_mask), \ - .bus_prot_set = _set, \ - .bus_prot_clr = _clr, \ - .bus_prot_sta = _sta, \ - .bus_prot_reg_update = _update, \ - .ignore_clr_ack = _ignore, \ +#define _BUS_PROT(_mask, _sta_mask, _set, _clr, _sta, _update, _ignore, _wayen) { \ + .bus_prot_mask = (_mask), \ + .bus_prot_set = _set, \ + .bus_prot_clr = _clr, \ + .bus_prot_sta = _sta, \ + .bus_prot_sta_mask = _sta_mask, \ + .bus_prot_reg_update = _update, \ + .ignore_clr_ack = _ignore, \ + .wayen = _wayen, \ } #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, false, false) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, false, false) #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, false, true) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, true, false) #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, true, false) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, true, false, false) + +#define BUS_PROT_WAYEN(_en_mask, _sta_mask, _set, _sta) \ + _BUS_PROT(_en_mask, _sta_mask, _set, _set, _sta, true, false, true) #define BUS_PROT_UPDATE_TOPAXI(_mask) \ BUS_PROT_UPDATE(_mask, \ @@ -68,8 +73,10 @@ struct scpsys_bus_prot_data { u32 bus_prot_set; u32 bus_prot_clr; u32 bus_prot_sta; + u32 bus_prot_sta_mask; bool bus_prot_reg_update; bool ignore_clr_ack; + bool wayen; }; /** -- 2.36.1 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 2/4] soc: mediatek: Add support of WAYEN operations @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Alexandre Bailon, Fabien Parent, linux-arm-kernel, linux-mediatek, linux-kernel From: Alexandre Bailon <abailon@baylibre.com> This updates the power domain to support WAYEN operations. This is required by the mt8365 for the MM power domain. Signed-off-by: Alexandre Bailon <abailon@baylibre.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mtk-pm-domains.c | 64 +++++++++++++++++++++------ drivers/soc/mediatek/mtk-pm-domains.h | 27 ++++++----- 2 files changed, 67 insertions(+), 24 deletions(-) diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index 5ced254b082b..90b91b3b19a8 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -44,6 +44,7 @@ struct scpsys_domain { struct clk_bulk_data *subsys_clks; struct regmap *infracfg; struct regmap *smi; + struct regmap *infracfg_nao; struct regulator *supply; }; @@ -116,23 +117,38 @@ static int scpsys_sram_disable(struct scpsys_domain *pd) MTK_POLL_TIMEOUT); } -static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) +static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, + struct regmap *regmap, struct regmap *infracfg_nao) { int i, ret; for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { - u32 val, mask = bpd[i].bus_prot_mask; + u32 mask = bpd[i].bus_prot_mask; + u32 val = mask, sta_mask = mask; + struct regmap *ack_regmap = regmap; if (!mask) break; + if (bpd[i].wayen) { + if (!infracfg_nao) + return -ENODEV; + + val = 0; + sta_mask = bpd[i].bus_prot_sta_mask; + ack_regmap = infracfg_nao; + } + if (bpd[i].bus_prot_reg_update) - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); + regmap_update_bits(regmap, bpd[i].bus_prot_set, mask, val); else regmap_write(regmap, bpd[i].bus_prot_set, mask); - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, - val, (val & mask) == mask, + if (bpd[i].ignore_clr_ack) + continue; + + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, + val, (val & sta_mask) == sta_mask, MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); if (ret) return ret; @@ -145,34 +161,49 @@ static int scpsys_bus_protect_enable(struct scpsys_domain *pd) { int ret; - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); + ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, + pd->infracfg, pd->infracfg_nao); if (ret) return ret; - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); + return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi, NULL); } +#define mask_cond(wayen, val, mask) \ + ((wayen && ((val & mask) == mask)) || (!wayen && !(val & mask))) + static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, - struct regmap *regmap) + struct regmap *regmap, struct regmap *infracfg_nao) { int i, ret; for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { - u32 val, mask = bpd[i].bus_prot_mask; + u32 val = 0, mask = bpd[i].bus_prot_mask; + u32 sta_mask = mask; + struct regmap *ack_regmap = regmap; if (!mask) continue; + if (bpd[i].wayen) { + if (!infracfg_nao) + return -ENODEV; + + val = mask; + sta_mask = bpd[i].bus_prot_sta_mask; + ack_regmap = infracfg_nao; + } + if (bpd[i].bus_prot_reg_update) - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); + regmap_update_bits(regmap, bpd[i].bus_prot_clr, mask, val); else regmap_write(regmap, bpd[i].bus_prot_clr, mask); if (bpd[i].ignore_clr_ack) continue; - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, - val, !(val & mask), + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, + val, mask_cond(bpd[i].wayen, val, sta_mask), MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); if (ret) return ret; @@ -185,11 +216,12 @@ static int scpsys_bus_protect_disable(struct scpsys_domain *pd) { int ret; - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); + ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi, NULL); if (ret) return ret; - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); + return _scpsys_bus_protect_disable(pd->data->bp_infracfg, + pd->infracfg, pd->infracfg_nao); } static int scpsys_regulator_enable(struct regulator *supply) @@ -363,6 +395,10 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no return ERR_CAST(pd->smi); } + pd->infracfg_nao = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg_nao"); + if (IS_ERR(pd->infracfg_nao)) + return ERR_CAST(pd->infracfg_nao); + num_clks = of_clk_get_parent_count(node); if (num_clks > 0) { /* Calculate number of subsys_clks */ diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h index daa24e890dd4..a3955d960233 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.h +++ b/drivers/soc/mediatek/mtk-pm-domains.h @@ -39,23 +39,28 @@ #define SPM_MAX_BUS_PROT_DATA 6 -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ - .bus_prot_mask = (_mask), \ - .bus_prot_set = _set, \ - .bus_prot_clr = _clr, \ - .bus_prot_sta = _sta, \ - .bus_prot_reg_update = _update, \ - .ignore_clr_ack = _ignore, \ +#define _BUS_PROT(_mask, _sta_mask, _set, _clr, _sta, _update, _ignore, _wayen) { \ + .bus_prot_mask = (_mask), \ + .bus_prot_set = _set, \ + .bus_prot_clr = _clr, \ + .bus_prot_sta = _sta, \ + .bus_prot_sta_mask = _sta_mask, \ + .bus_prot_reg_update = _update, \ + .ignore_clr_ack = _ignore, \ + .wayen = _wayen, \ } #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, false, false) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, false, false) #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, false, true) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, true, false) #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, true, false) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, true, false, false) + +#define BUS_PROT_WAYEN(_en_mask, _sta_mask, _set, _sta) \ + _BUS_PROT(_en_mask, _sta_mask, _set, _set, _sta, true, false, true) #define BUS_PROT_UPDATE_TOPAXI(_mask) \ BUS_PROT_UPDATE(_mask, \ @@ -68,8 +73,10 @@ struct scpsys_bus_prot_data { u32 bus_prot_set; u32 bus_prot_clr; u32 bus_prot_sta; + u32 bus_prot_sta_mask; bool bus_prot_reg_update; bool ignore_clr_ack; + bool wayen; }; /** -- 2.36.1 ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 2/4] soc: mediatek: Add support of WAYEN operations @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Alexandre Bailon, Fabien Parent, linux-arm-kernel, linux-mediatek, linux-kernel From: Alexandre Bailon <abailon@baylibre.com> This updates the power domain to support WAYEN operations. This is required by the mt8365 for the MM power domain. Signed-off-by: Alexandre Bailon <abailon@baylibre.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mtk-pm-domains.c | 64 +++++++++++++++++++++------ drivers/soc/mediatek/mtk-pm-domains.h | 27 ++++++----- 2 files changed, 67 insertions(+), 24 deletions(-) diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index 5ced254b082b..90b91b3b19a8 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -44,6 +44,7 @@ struct scpsys_domain { struct clk_bulk_data *subsys_clks; struct regmap *infracfg; struct regmap *smi; + struct regmap *infracfg_nao; struct regulator *supply; }; @@ -116,23 +117,38 @@ static int scpsys_sram_disable(struct scpsys_domain *pd) MTK_POLL_TIMEOUT); } -static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) +static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, + struct regmap *regmap, struct regmap *infracfg_nao) { int i, ret; for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { - u32 val, mask = bpd[i].bus_prot_mask; + u32 mask = bpd[i].bus_prot_mask; + u32 val = mask, sta_mask = mask; + struct regmap *ack_regmap = regmap; if (!mask) break; + if (bpd[i].wayen) { + if (!infracfg_nao) + return -ENODEV; + + val = 0; + sta_mask = bpd[i].bus_prot_sta_mask; + ack_regmap = infracfg_nao; + } + if (bpd[i].bus_prot_reg_update) - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); + regmap_update_bits(regmap, bpd[i].bus_prot_set, mask, val); else regmap_write(regmap, bpd[i].bus_prot_set, mask); - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, - val, (val & mask) == mask, + if (bpd[i].ignore_clr_ack) + continue; + + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, + val, (val & sta_mask) == sta_mask, MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); if (ret) return ret; @@ -145,34 +161,49 @@ static int scpsys_bus_protect_enable(struct scpsys_domain *pd) { int ret; - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); + ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, + pd->infracfg, pd->infracfg_nao); if (ret) return ret; - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); + return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi, NULL); } +#define mask_cond(wayen, val, mask) \ + ((wayen && ((val & mask) == mask)) || (!wayen && !(val & mask))) + static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, - struct regmap *regmap) + struct regmap *regmap, struct regmap *infracfg_nao) { int i, ret; for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { - u32 val, mask = bpd[i].bus_prot_mask; + u32 val = 0, mask = bpd[i].bus_prot_mask; + u32 sta_mask = mask; + struct regmap *ack_regmap = regmap; if (!mask) continue; + if (bpd[i].wayen) { + if (!infracfg_nao) + return -ENODEV; + + val = mask; + sta_mask = bpd[i].bus_prot_sta_mask; + ack_regmap = infracfg_nao; + } + if (bpd[i].bus_prot_reg_update) - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); + regmap_update_bits(regmap, bpd[i].bus_prot_clr, mask, val); else regmap_write(regmap, bpd[i].bus_prot_clr, mask); if (bpd[i].ignore_clr_ack) continue; - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, - val, !(val & mask), + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, + val, mask_cond(bpd[i].wayen, val, sta_mask), MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); if (ret) return ret; @@ -185,11 +216,12 @@ static int scpsys_bus_protect_disable(struct scpsys_domain *pd) { int ret; - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); + ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi, NULL); if (ret) return ret; - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); + return _scpsys_bus_protect_disable(pd->data->bp_infracfg, + pd->infracfg, pd->infracfg_nao); } static int scpsys_regulator_enable(struct regulator *supply) @@ -363,6 +395,10 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no return ERR_CAST(pd->smi); } + pd->infracfg_nao = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg_nao"); + if (IS_ERR(pd->infracfg_nao)) + return ERR_CAST(pd->infracfg_nao); + num_clks = of_clk_get_parent_count(node); if (num_clks > 0) { /* Calculate number of subsys_clks */ diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h index daa24e890dd4..a3955d960233 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.h +++ b/drivers/soc/mediatek/mtk-pm-domains.h @@ -39,23 +39,28 @@ #define SPM_MAX_BUS_PROT_DATA 6 -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ - .bus_prot_mask = (_mask), \ - .bus_prot_set = _set, \ - .bus_prot_clr = _clr, \ - .bus_prot_sta = _sta, \ - .bus_prot_reg_update = _update, \ - .ignore_clr_ack = _ignore, \ +#define _BUS_PROT(_mask, _sta_mask, _set, _clr, _sta, _update, _ignore, _wayen) { \ + .bus_prot_mask = (_mask), \ + .bus_prot_set = _set, \ + .bus_prot_clr = _clr, \ + .bus_prot_sta = _sta, \ + .bus_prot_sta_mask = _sta_mask, \ + .bus_prot_reg_update = _update, \ + .ignore_clr_ack = _ignore, \ + .wayen = _wayen, \ } #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, false, false) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, false, false) #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, false, true) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, true, false) #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, true, false) + _BUS_PROT(_mask, _mask, _set, _clr, _sta, true, false, false) + +#define BUS_PROT_WAYEN(_en_mask, _sta_mask, _set, _sta) \ + _BUS_PROT(_en_mask, _sta_mask, _set, _set, _sta, true, false, true) #define BUS_PROT_UPDATE_TOPAXI(_mask) \ BUS_PROT_UPDATE(_mask, \ @@ -68,8 +73,10 @@ struct scpsys_bus_prot_data { u32 bus_prot_set; u32 bus_prot_clr; u32 bus_prot_sta; + u32 bus_prot_sta_mask; bool bus_prot_reg_update; bool ignore_clr_ack; + bool wayen; }; /** -- 2.36.1 _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 2/4] soc: mediatek: Add support of WAYEN operations 2022-05-30 20:42 ` Fabien Parent @ 2022-06-17 14:20 ` Matthias Brugger -1 siblings, 0 replies; 32+ messages in thread From: Matthias Brugger @ 2022-06-17 14:20 UTC (permalink / raw) To: Fabien Parent Cc: Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel On 30/05/2022 22:42, Fabien Parent wrote: > From: Alexandre Bailon <abailon@baylibre.com> > > This updates the power domain to support WAYEN operations. Please explain better what the WAYEN operation is. Never heard of that word. Regards, Matthias > This is required by the mt8365 for the MM power domain. > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > drivers/soc/mediatek/mtk-pm-domains.c | 64 +++++++++++++++++++++------ > drivers/soc/mediatek/mtk-pm-domains.h | 27 ++++++----- > 2 files changed, 67 insertions(+), 24 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > index 5ced254b082b..90b91b3b19a8 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.c > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > @@ -44,6 +44,7 @@ struct scpsys_domain { > struct clk_bulk_data *subsys_clks; > struct regmap *infracfg; > struct regmap *smi; > + struct regmap *infracfg_nao; > struct regulator *supply; > }; > > @@ -116,23 +117,38 @@ static int scpsys_sram_disable(struct scpsys_domain *pd) > MTK_POLL_TIMEOUT); > } > > -static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) > +static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, > + struct regmap *regmap, struct regmap *infracfg_nao) > { > int i, ret; > > for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { > - u32 val, mask = bpd[i].bus_prot_mask; > + u32 mask = bpd[i].bus_prot_mask; > + u32 val = mask, sta_mask = mask; > + struct regmap *ack_regmap = regmap; > > if (!mask) > break; > > + if (bpd[i].wayen) { > + if (!infracfg_nao) > + return -ENODEV; > + > + val = 0; > + sta_mask = bpd[i].bus_prot_sta_mask; > + ack_regmap = infracfg_nao; > + } > + > if (bpd[i].bus_prot_reg_update) > - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); > + regmap_update_bits(regmap, bpd[i].bus_prot_set, mask, val); > else > regmap_write(regmap, bpd[i].bus_prot_set, mask); > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > - val, (val & mask) == mask, > + if (bpd[i].ignore_clr_ack) > + continue; > + > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > + val, (val & sta_mask) == sta_mask, > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > if (ret) > return ret; > @@ -145,34 +161,49 @@ static int scpsys_bus_protect_enable(struct scpsys_domain *pd) > { > int ret; > > - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); > + ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, > + pd->infracfg, pd->infracfg_nao); > if (ret) > return ret; > > - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); > + return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi, NULL); > } > > +#define mask_cond(wayen, val, mask) \ > + ((wayen && ((val & mask) == mask)) || (!wayen && !(val & mask))) > + > static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, > - struct regmap *regmap) > + struct regmap *regmap, struct regmap *infracfg_nao) > { > int i, ret; > > for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { > - u32 val, mask = bpd[i].bus_prot_mask; > + u32 val = 0, mask = bpd[i].bus_prot_mask; > + u32 sta_mask = mask; > + struct regmap *ack_regmap = regmap; > > if (!mask) > continue; > > + if (bpd[i].wayen) { > + if (!infracfg_nao) > + return -ENODEV; > + > + val = mask; > + sta_mask = bpd[i].bus_prot_sta_mask; > + ack_regmap = infracfg_nao; > + } > + > if (bpd[i].bus_prot_reg_update) > - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); > + regmap_update_bits(regmap, bpd[i].bus_prot_clr, mask, val); > else > regmap_write(regmap, bpd[i].bus_prot_clr, mask); > > if (bpd[i].ignore_clr_ack) > continue; > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > - val, !(val & mask), > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > + val, mask_cond(bpd[i].wayen, val, sta_mask), > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > if (ret) > return ret; > @@ -185,11 +216,12 @@ static int scpsys_bus_protect_disable(struct scpsys_domain *pd) > { > int ret; > > - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); > + ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi, NULL); > if (ret) > return ret; > > - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); > + return _scpsys_bus_protect_disable(pd->data->bp_infracfg, > + pd->infracfg, pd->infracfg_nao); > } > > static int scpsys_regulator_enable(struct regulator *supply) > @@ -363,6 +395,10 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no > return ERR_CAST(pd->smi); > } > > + pd->infracfg_nao = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg_nao"); > + if (IS_ERR(pd->infracfg_nao)) > + return ERR_CAST(pd->infracfg_nao); > + > num_clks = of_clk_get_parent_count(node); > if (num_clks > 0) { > /* Calculate number of subsys_clks */ > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > index daa24e890dd4..a3955d960233 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.h > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > @@ -39,23 +39,28 @@ > > #define SPM_MAX_BUS_PROT_DATA 6 > > -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ > - .bus_prot_mask = (_mask), \ > - .bus_prot_set = _set, \ > - .bus_prot_clr = _clr, \ > - .bus_prot_sta = _sta, \ > - .bus_prot_reg_update = _update, \ > - .ignore_clr_ack = _ignore, \ > +#define _BUS_PROT(_mask, _sta_mask, _set, _clr, _sta, _update, _ignore, _wayen) { \ > + .bus_prot_mask = (_mask), \ > + .bus_prot_set = _set, \ > + .bus_prot_clr = _clr, \ > + .bus_prot_sta = _sta, \ > + .bus_prot_sta_mask = _sta_mask, \ > + .bus_prot_reg_update = _update, \ > + .ignore_clr_ack = _ignore, \ > + .wayen = _wayen, \ > } > > #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ > - _BUS_PROT(_mask, _set, _clr, _sta, false, false) > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, false, false) > > #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ > - _BUS_PROT(_mask, _set, _clr, _sta, false, true) > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, true, false) > > #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ > - _BUS_PROT(_mask, _set, _clr, _sta, true, false) > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, true, false, false) > + > +#define BUS_PROT_WAYEN(_en_mask, _sta_mask, _set, _sta) \ > + _BUS_PROT(_en_mask, _sta_mask, _set, _set, _sta, true, false, true) > > #define BUS_PROT_UPDATE_TOPAXI(_mask) \ > BUS_PROT_UPDATE(_mask, \ > @@ -68,8 +73,10 @@ struct scpsys_bus_prot_data { > u32 bus_prot_set; > u32 bus_prot_clr; > u32 bus_prot_sta; > + u32 bus_prot_sta_mask; > bool bus_prot_reg_update; > bool ignore_clr_ack; > + bool wayen; > }; > > /** ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 2/4] soc: mediatek: Add support of WAYEN operations @ 2022-06-17 14:20 ` Matthias Brugger 0 siblings, 0 replies; 32+ messages in thread From: Matthias Brugger @ 2022-06-17 14:20 UTC (permalink / raw) To: Fabien Parent Cc: Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel On 30/05/2022 22:42, Fabien Parent wrote: > From: Alexandre Bailon <abailon@baylibre.com> > > This updates the power domain to support WAYEN operations. Please explain better what the WAYEN operation is. Never heard of that word. Regards, Matthias > This is required by the mt8365 for the MM power domain. > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > drivers/soc/mediatek/mtk-pm-domains.c | 64 +++++++++++++++++++++------ > drivers/soc/mediatek/mtk-pm-domains.h | 27 ++++++----- > 2 files changed, 67 insertions(+), 24 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > index 5ced254b082b..90b91b3b19a8 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.c > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > @@ -44,6 +44,7 @@ struct scpsys_domain { > struct clk_bulk_data *subsys_clks; > struct regmap *infracfg; > struct regmap *smi; > + struct regmap *infracfg_nao; > struct regulator *supply; > }; > > @@ -116,23 +117,38 @@ static int scpsys_sram_disable(struct scpsys_domain *pd) > MTK_POLL_TIMEOUT); > } > > -static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) > +static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, > + struct regmap *regmap, struct regmap *infracfg_nao) > { > int i, ret; > > for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { > - u32 val, mask = bpd[i].bus_prot_mask; > + u32 mask = bpd[i].bus_prot_mask; > + u32 val = mask, sta_mask = mask; > + struct regmap *ack_regmap = regmap; > > if (!mask) > break; > > + if (bpd[i].wayen) { > + if (!infracfg_nao) > + return -ENODEV; > + > + val = 0; > + sta_mask = bpd[i].bus_prot_sta_mask; > + ack_regmap = infracfg_nao; > + } > + > if (bpd[i].bus_prot_reg_update) > - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); > + regmap_update_bits(regmap, bpd[i].bus_prot_set, mask, val); > else > regmap_write(regmap, bpd[i].bus_prot_set, mask); > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > - val, (val & mask) == mask, > + if (bpd[i].ignore_clr_ack) > + continue; > + > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > + val, (val & sta_mask) == sta_mask, > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > if (ret) > return ret; > @@ -145,34 +161,49 @@ static int scpsys_bus_protect_enable(struct scpsys_domain *pd) > { > int ret; > > - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); > + ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, > + pd->infracfg, pd->infracfg_nao); > if (ret) > return ret; > > - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); > + return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi, NULL); > } > > +#define mask_cond(wayen, val, mask) \ > + ((wayen && ((val & mask) == mask)) || (!wayen && !(val & mask))) > + > static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, > - struct regmap *regmap) > + struct regmap *regmap, struct regmap *infracfg_nao) > { > int i, ret; > > for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { > - u32 val, mask = bpd[i].bus_prot_mask; > + u32 val = 0, mask = bpd[i].bus_prot_mask; > + u32 sta_mask = mask; > + struct regmap *ack_regmap = regmap; > > if (!mask) > continue; > > + if (bpd[i].wayen) { > + if (!infracfg_nao) > + return -ENODEV; > + > + val = mask; > + sta_mask = bpd[i].bus_prot_sta_mask; > + ack_regmap = infracfg_nao; > + } > + > if (bpd[i].bus_prot_reg_update) > - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); > + regmap_update_bits(regmap, bpd[i].bus_prot_clr, mask, val); > else > regmap_write(regmap, bpd[i].bus_prot_clr, mask); > > if (bpd[i].ignore_clr_ack) > continue; > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > - val, !(val & mask), > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > + val, mask_cond(bpd[i].wayen, val, sta_mask), > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > if (ret) > return ret; > @@ -185,11 +216,12 @@ static int scpsys_bus_protect_disable(struct scpsys_domain *pd) > { > int ret; > > - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); > + ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi, NULL); > if (ret) > return ret; > > - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); > + return _scpsys_bus_protect_disable(pd->data->bp_infracfg, > + pd->infracfg, pd->infracfg_nao); > } > > static int scpsys_regulator_enable(struct regulator *supply) > @@ -363,6 +395,10 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no > return ERR_CAST(pd->smi); > } > > + pd->infracfg_nao = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg_nao"); > + if (IS_ERR(pd->infracfg_nao)) > + return ERR_CAST(pd->infracfg_nao); > + > num_clks = of_clk_get_parent_count(node); > if (num_clks > 0) { > /* Calculate number of subsys_clks */ > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > index daa24e890dd4..a3955d960233 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.h > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > @@ -39,23 +39,28 @@ > > #define SPM_MAX_BUS_PROT_DATA 6 > > -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ > - .bus_prot_mask = (_mask), \ > - .bus_prot_set = _set, \ > - .bus_prot_clr = _clr, \ > - .bus_prot_sta = _sta, \ > - .bus_prot_reg_update = _update, \ > - .ignore_clr_ack = _ignore, \ > +#define _BUS_PROT(_mask, _sta_mask, _set, _clr, _sta, _update, _ignore, _wayen) { \ > + .bus_prot_mask = (_mask), \ > + .bus_prot_set = _set, \ > + .bus_prot_clr = _clr, \ > + .bus_prot_sta = _sta, \ > + .bus_prot_sta_mask = _sta_mask, \ > + .bus_prot_reg_update = _update, \ > + .ignore_clr_ack = _ignore, \ > + .wayen = _wayen, \ > } > > #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ > - _BUS_PROT(_mask, _set, _clr, _sta, false, false) > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, false, false) > > #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ > - _BUS_PROT(_mask, _set, _clr, _sta, false, true) > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, true, false) > > #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ > - _BUS_PROT(_mask, _set, _clr, _sta, true, false) > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, true, false, false) > + > +#define BUS_PROT_WAYEN(_en_mask, _sta_mask, _set, _sta) \ > + _BUS_PROT(_en_mask, _sta_mask, _set, _set, _sta, true, false, true) > > #define BUS_PROT_UPDATE_TOPAXI(_mask) \ > BUS_PROT_UPDATE(_mask, \ > @@ -68,8 +73,10 @@ struct scpsys_bus_prot_data { > u32 bus_prot_set; > u32 bus_prot_clr; > u32 bus_prot_sta; > + u32 bus_prot_sta_mask; > bool bus_prot_reg_update; > bool ignore_clr_ack; > + bool wayen; > }; > > /** _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 2/4] soc: mediatek: Add support of WAYEN operations 2022-06-17 14:20 ` Matthias Brugger @ 2022-07-22 9:13 ` Markus Schneider-Pargmann -1 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-07-22 9:13 UTC (permalink / raw) To: Matthias Brugger Cc: Fabien Parent, Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Hi Matthias, On Fri, Jun 17, 2022 at 04:20:55PM +0200, Matthias Brugger wrote: > > > On 30/05/2022 22:42, Fabien Parent wrote: > > From: Alexandre Bailon <abailon@baylibre.com> > > > > This updates the power domain to support WAYEN operations. > > Please explain better what the WAYEN operation is. Never heard of that word. Thanks, I will clarify this in v2. I had to look it up myself. It is basically called 'way_en' in the documents and controls the output paths of the different units. You can select which 'ways' are enabled with these bits. This is a bit that is present in many registers and it is necessary for mt8365 to control it for the power domains. Best, Markus > > Regards, > Matthias > > > This is required by the mt8365 for the MM power domain. > > > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > drivers/soc/mediatek/mtk-pm-domains.c | 64 +++++++++++++++++++++------ > > drivers/soc/mediatek/mtk-pm-domains.h | 27 ++++++----- > > 2 files changed, 67 insertions(+), 24 deletions(-) > > > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > > index 5ced254b082b..90b91b3b19a8 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.c > > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > > @@ -44,6 +44,7 @@ struct scpsys_domain { > > struct clk_bulk_data *subsys_clks; > > struct regmap *infracfg; > > struct regmap *smi; > > + struct regmap *infracfg_nao; > > struct regulator *supply; > > }; > > @@ -116,23 +117,38 @@ static int scpsys_sram_disable(struct scpsys_domain *pd) > > MTK_POLL_TIMEOUT); > > } > > -static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) > > +static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, > > + struct regmap *regmap, struct regmap *infracfg_nao) > > { > > int i, ret; > > for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { > > - u32 val, mask = bpd[i].bus_prot_mask; > > + u32 mask = bpd[i].bus_prot_mask; > > + u32 val = mask, sta_mask = mask; > > + struct regmap *ack_regmap = regmap; > > if (!mask) > > break; > > + if (bpd[i].wayen) { > > + if (!infracfg_nao) > > + return -ENODEV; > > + > > + val = 0; > > + sta_mask = bpd[i].bus_prot_sta_mask; > > + ack_regmap = infracfg_nao; > > + } > > + > > if (bpd[i].bus_prot_reg_update) > > - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); > > + regmap_update_bits(regmap, bpd[i].bus_prot_set, mask, val); > > else > > regmap_write(regmap, bpd[i].bus_prot_set, mask); > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > > - val, (val & mask) == mask, > > + if (bpd[i].ignore_clr_ack) > > + continue; > > + > > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > > + val, (val & sta_mask) == sta_mask, > > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > > if (ret) > > return ret; > > @@ -145,34 +161,49 @@ static int scpsys_bus_protect_enable(struct scpsys_domain *pd) > > { > > int ret; > > - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); > > + ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, > > + pd->infracfg, pd->infracfg_nao); > > if (ret) > > return ret; > > - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); > > + return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi, NULL); > > } > > +#define mask_cond(wayen, val, mask) \ > > + ((wayen && ((val & mask) == mask)) || (!wayen && !(val & mask))) > > + > > static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, > > - struct regmap *regmap) > > + struct regmap *regmap, struct regmap *infracfg_nao) > > { > > int i, ret; > > for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { > > - u32 val, mask = bpd[i].bus_prot_mask; > > + u32 val = 0, mask = bpd[i].bus_prot_mask; > > + u32 sta_mask = mask; > > + struct regmap *ack_regmap = regmap; > > if (!mask) > > continue; > > + if (bpd[i].wayen) { > > + if (!infracfg_nao) > > + return -ENODEV; > > + > > + val = mask; > > + sta_mask = bpd[i].bus_prot_sta_mask; > > + ack_regmap = infracfg_nao; > > + } > > + > > if (bpd[i].bus_prot_reg_update) > > - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); > > + regmap_update_bits(regmap, bpd[i].bus_prot_clr, mask, val); > > else > > regmap_write(regmap, bpd[i].bus_prot_clr, mask); > > if (bpd[i].ignore_clr_ack) > > continue; > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > > - val, !(val & mask), > > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > > + val, mask_cond(bpd[i].wayen, val, sta_mask), > > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > > if (ret) > > return ret; > > @@ -185,11 +216,12 @@ static int scpsys_bus_protect_disable(struct scpsys_domain *pd) > > { > > int ret; > > - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); > > + ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi, NULL); > > if (ret) > > return ret; > > - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); > > + return _scpsys_bus_protect_disable(pd->data->bp_infracfg, > > + pd->infracfg, pd->infracfg_nao); > > } > > static int scpsys_regulator_enable(struct regulator *supply) > > @@ -363,6 +395,10 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no > > return ERR_CAST(pd->smi); > > } > > + pd->infracfg_nao = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg_nao"); > > + if (IS_ERR(pd->infracfg_nao)) > > + return ERR_CAST(pd->infracfg_nao); > > + > > num_clks = of_clk_get_parent_count(node); > > if (num_clks > 0) { > > /* Calculate number of subsys_clks */ > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > > index daa24e890dd4..a3955d960233 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.h > > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > > @@ -39,23 +39,28 @@ > > #define SPM_MAX_BUS_PROT_DATA 6 > > -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ > > - .bus_prot_mask = (_mask), \ > > - .bus_prot_set = _set, \ > > - .bus_prot_clr = _clr, \ > > - .bus_prot_sta = _sta, \ > > - .bus_prot_reg_update = _update, \ > > - .ignore_clr_ack = _ignore, \ > > +#define _BUS_PROT(_mask, _sta_mask, _set, _clr, _sta, _update, _ignore, _wayen) { \ > > + .bus_prot_mask = (_mask), \ > > + .bus_prot_set = _set, \ > > + .bus_prot_clr = _clr, \ > > + .bus_prot_sta = _sta, \ > > + .bus_prot_sta_mask = _sta_mask, \ > > + .bus_prot_reg_update = _update, \ > > + .ignore_clr_ack = _ignore, \ > > + .wayen = _wayen, \ > > } > > #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ > > - _BUS_PROT(_mask, _set, _clr, _sta, false, false) > > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, false, false) > > #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ > > - _BUS_PROT(_mask, _set, _clr, _sta, false, true) > > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, true, false) > > #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ > > - _BUS_PROT(_mask, _set, _clr, _sta, true, false) > > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, true, false, false) > > + > > +#define BUS_PROT_WAYEN(_en_mask, _sta_mask, _set, _sta) \ > > + _BUS_PROT(_en_mask, _sta_mask, _set, _set, _sta, true, false, true) > > #define BUS_PROT_UPDATE_TOPAXI(_mask) \ > > BUS_PROT_UPDATE(_mask, \ > > @@ -68,8 +73,10 @@ struct scpsys_bus_prot_data { > > u32 bus_prot_set; > > u32 bus_prot_clr; > > u32 bus_prot_sta; > > + u32 bus_prot_sta_mask; > > bool bus_prot_reg_update; > > bool ignore_clr_ack; > > + bool wayen; > > }; > > /** > ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 2/4] soc: mediatek: Add support of WAYEN operations @ 2022-07-22 9:13 ` Markus Schneider-Pargmann 0 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-07-22 9:13 UTC (permalink / raw) To: Matthias Brugger Cc: Fabien Parent, Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Hi Matthias, On Fri, Jun 17, 2022 at 04:20:55PM +0200, Matthias Brugger wrote: > > > On 30/05/2022 22:42, Fabien Parent wrote: > > From: Alexandre Bailon <abailon@baylibre.com> > > > > This updates the power domain to support WAYEN operations. > > Please explain better what the WAYEN operation is. Never heard of that word. Thanks, I will clarify this in v2. I had to look it up myself. It is basically called 'way_en' in the documents and controls the output paths of the different units. You can select which 'ways' are enabled with these bits. This is a bit that is present in many registers and it is necessary for mt8365 to control it for the power domains. Best, Markus > > Regards, > Matthias > > > This is required by the mt8365 for the MM power domain. > > > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > drivers/soc/mediatek/mtk-pm-domains.c | 64 +++++++++++++++++++++------ > > drivers/soc/mediatek/mtk-pm-domains.h | 27 ++++++----- > > 2 files changed, 67 insertions(+), 24 deletions(-) > > > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > > index 5ced254b082b..90b91b3b19a8 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.c > > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > > @@ -44,6 +44,7 @@ struct scpsys_domain { > > struct clk_bulk_data *subsys_clks; > > struct regmap *infracfg; > > struct regmap *smi; > > + struct regmap *infracfg_nao; > > struct regulator *supply; > > }; > > @@ -116,23 +117,38 @@ static int scpsys_sram_disable(struct scpsys_domain *pd) > > MTK_POLL_TIMEOUT); > > } > > -static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) > > +static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, > > + struct regmap *regmap, struct regmap *infracfg_nao) > > { > > int i, ret; > > for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { > > - u32 val, mask = bpd[i].bus_prot_mask; > > + u32 mask = bpd[i].bus_prot_mask; > > + u32 val = mask, sta_mask = mask; > > + struct regmap *ack_regmap = regmap; > > if (!mask) > > break; > > + if (bpd[i].wayen) { > > + if (!infracfg_nao) > > + return -ENODEV; > > + > > + val = 0; > > + sta_mask = bpd[i].bus_prot_sta_mask; > > + ack_regmap = infracfg_nao; > > + } > > + > > if (bpd[i].bus_prot_reg_update) > > - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); > > + regmap_update_bits(regmap, bpd[i].bus_prot_set, mask, val); > > else > > regmap_write(regmap, bpd[i].bus_prot_set, mask); > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > > - val, (val & mask) == mask, > > + if (bpd[i].ignore_clr_ack) > > + continue; > > + > > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > > + val, (val & sta_mask) == sta_mask, > > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > > if (ret) > > return ret; > > @@ -145,34 +161,49 @@ static int scpsys_bus_protect_enable(struct scpsys_domain *pd) > > { > > int ret; > > - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); > > + ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, > > + pd->infracfg, pd->infracfg_nao); > > if (ret) > > return ret; > > - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); > > + return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi, NULL); > > } > > +#define mask_cond(wayen, val, mask) \ > > + ((wayen && ((val & mask) == mask)) || (!wayen && !(val & mask))) > > + > > static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, > > - struct regmap *regmap) > > + struct regmap *regmap, struct regmap *infracfg_nao) > > { > > int i, ret; > > for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { > > - u32 val, mask = bpd[i].bus_prot_mask; > > + u32 val = 0, mask = bpd[i].bus_prot_mask; > > + u32 sta_mask = mask; > > + struct regmap *ack_regmap = regmap; > > if (!mask) > > continue; > > + if (bpd[i].wayen) { > > + if (!infracfg_nao) > > + return -ENODEV; > > + > > + val = mask; > > + sta_mask = bpd[i].bus_prot_sta_mask; > > + ack_regmap = infracfg_nao; > > + } > > + > > if (bpd[i].bus_prot_reg_update) > > - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); > > + regmap_update_bits(regmap, bpd[i].bus_prot_clr, mask, val); > > else > > regmap_write(regmap, bpd[i].bus_prot_clr, mask); > > if (bpd[i].ignore_clr_ack) > > continue; > > - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, > > - val, !(val & mask), > > + ret = regmap_read_poll_timeout(ack_regmap, bpd[i].bus_prot_sta, > > + val, mask_cond(bpd[i].wayen, val, sta_mask), > > MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > > if (ret) > > return ret; > > @@ -185,11 +216,12 @@ static int scpsys_bus_protect_disable(struct scpsys_domain *pd) > > { > > int ret; > > - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); > > + ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi, NULL); > > if (ret) > > return ret; > > - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); > > + return _scpsys_bus_protect_disable(pd->data->bp_infracfg, > > + pd->infracfg, pd->infracfg_nao); > > } > > static int scpsys_regulator_enable(struct regulator *supply) > > @@ -363,6 +395,10 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no > > return ERR_CAST(pd->smi); > > } > > + pd->infracfg_nao = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg_nao"); > > + if (IS_ERR(pd->infracfg_nao)) > > + return ERR_CAST(pd->infracfg_nao); > > + > > num_clks = of_clk_get_parent_count(node); > > if (num_clks > 0) { > > /* Calculate number of subsys_clks */ > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > > index daa24e890dd4..a3955d960233 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.h > > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > > @@ -39,23 +39,28 @@ > > #define SPM_MAX_BUS_PROT_DATA 6 > > -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ > > - .bus_prot_mask = (_mask), \ > > - .bus_prot_set = _set, \ > > - .bus_prot_clr = _clr, \ > > - .bus_prot_sta = _sta, \ > > - .bus_prot_reg_update = _update, \ > > - .ignore_clr_ack = _ignore, \ > > +#define _BUS_PROT(_mask, _sta_mask, _set, _clr, _sta, _update, _ignore, _wayen) { \ > > + .bus_prot_mask = (_mask), \ > > + .bus_prot_set = _set, \ > > + .bus_prot_clr = _clr, \ > > + .bus_prot_sta = _sta, \ > > + .bus_prot_sta_mask = _sta_mask, \ > > + .bus_prot_reg_update = _update, \ > > + .ignore_clr_ack = _ignore, \ > > + .wayen = _wayen, \ > > } > > #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ > > - _BUS_PROT(_mask, _set, _clr, _sta, false, false) > > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, false, false) > > #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ > > - _BUS_PROT(_mask, _set, _clr, _sta, false, true) > > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, false, true, false) > > #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ > > - _BUS_PROT(_mask, _set, _clr, _sta, true, false) > > + _BUS_PROT(_mask, _mask, _set, _clr, _sta, true, false, false) > > + > > +#define BUS_PROT_WAYEN(_en_mask, _sta_mask, _set, _sta) \ > > + _BUS_PROT(_en_mask, _sta_mask, _set, _set, _sta, true, false, true) > > #define BUS_PROT_UPDATE_TOPAXI(_mask) \ > > BUS_PROT_UPDATE(_mask, \ > > @@ -68,8 +73,10 @@ struct scpsys_bus_prot_data { > > u32 bus_prot_set; > > u32 bus_prot_clr; > > u32 bus_prot_sta; > > + u32 bus_prot_sta_mask; > > bool bus_prot_reg_update; > > bool ignore_clr_ack; > > + bool wayen; > > }; > > /** > _______________________________________________ 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] 32+ messages in thread
* [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap 2022-05-30 20:42 ` Fabien Parent (?) @ 2022-05-30 20:42 ` Fabien Parent -1 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Alexandre Bailon, Fabien Parent, linux-arm-kernel, linux-mediatek, linux-kernel From: Alexandre Bailon <abailon@baylibre.com> This adds support of MTK_SCPD_STRICT_BUSP cap. This is required by the mt8365, for the MM power domain. Signed-off-by: Alexandre Bailon <abailon@baylibre.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- drivers/soc/mediatek/mtk-pm-domains.h | 1 + 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index 90b91b3b19a8..beaa5785fda2 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); - if (ret) - goto err_pwr_ack; + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { + /* + * In few Mediatek platforms(e.g. MT6779), the bus protect + * policy is stricter, which leads to bus protect release must + * be prior to bus access. + */ + ret = scpsys_sram_enable(pd); + if (ret < 0) + goto err_pwr_ack; - ret = scpsys_sram_enable(pd); - if (ret < 0) - goto err_disable_subsys_clks; + ret = scpsys_bus_protect_disable(pd); + if (ret < 0) + goto err_pwr_ack; - ret = scpsys_bus_protect_disable(pd); - if (ret < 0) - goto err_disable_sram; + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); + if (ret < 0) + goto err_pwr_ack; + } else { + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); + if (ret) + goto err_pwr_ack; + + ret = scpsys_sram_enable(pd); + if (ret < 0) + goto err_disable_subsys_clks; + + ret = scpsys_bus_protect_disable(pd); + if (ret < 0) + goto err_disable_sram; + } return 0; diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h index a3955d960233..5347471bc3c4 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.h +++ b/drivers/soc/mediatek/mtk-pm-domains.h @@ -8,6 +8,7 @@ #define MTK_SCPD_SRAM_ISO BIT(2) #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) +#define MTK_SCPD_STRICT_BUSP BIT(5) #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) #define SPM_VDE_PWR_CON 0x0210 -- 2.36.1 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Alexandre Bailon, Fabien Parent, linux-arm-kernel, linux-mediatek, linux-kernel From: Alexandre Bailon <abailon@baylibre.com> This adds support of MTK_SCPD_STRICT_BUSP cap. This is required by the mt8365, for the MM power domain. Signed-off-by: Alexandre Bailon <abailon@baylibre.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- drivers/soc/mediatek/mtk-pm-domains.h | 1 + 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index 90b91b3b19a8..beaa5785fda2 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); - if (ret) - goto err_pwr_ack; + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { + /* + * In few Mediatek platforms(e.g. MT6779), the bus protect + * policy is stricter, which leads to bus protect release must + * be prior to bus access. + */ + ret = scpsys_sram_enable(pd); + if (ret < 0) + goto err_pwr_ack; - ret = scpsys_sram_enable(pd); - if (ret < 0) - goto err_disable_subsys_clks; + ret = scpsys_bus_protect_disable(pd); + if (ret < 0) + goto err_pwr_ack; - ret = scpsys_bus_protect_disable(pd); - if (ret < 0) - goto err_disable_sram; + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); + if (ret < 0) + goto err_pwr_ack; + } else { + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); + if (ret) + goto err_pwr_ack; + + ret = scpsys_sram_enable(pd); + if (ret < 0) + goto err_disable_subsys_clks; + + ret = scpsys_bus_protect_disable(pd); + if (ret < 0) + goto err_disable_sram; + } return 0; diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h index a3955d960233..5347471bc3c4 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.h +++ b/drivers/soc/mediatek/mtk-pm-domains.h @@ -8,6 +8,7 @@ #define MTK_SCPD_SRAM_ISO BIT(2) #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) +#define MTK_SCPD_STRICT_BUSP BIT(5) #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) #define SPM_VDE_PWR_CON 0x0210 -- 2.36.1 ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Alexandre Bailon, Fabien Parent, linux-arm-kernel, linux-mediatek, linux-kernel From: Alexandre Bailon <abailon@baylibre.com> This adds support of MTK_SCPD_STRICT_BUSP cap. This is required by the mt8365, for the MM power domain. Signed-off-by: Alexandre Bailon <abailon@baylibre.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- drivers/soc/mediatek/mtk-pm-domains.h | 1 + 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index 90b91b3b19a8..beaa5785fda2 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); - if (ret) - goto err_pwr_ack; + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { + /* + * In few Mediatek platforms(e.g. MT6779), the bus protect + * policy is stricter, which leads to bus protect release must + * be prior to bus access. + */ + ret = scpsys_sram_enable(pd); + if (ret < 0) + goto err_pwr_ack; - ret = scpsys_sram_enable(pd); - if (ret < 0) - goto err_disable_subsys_clks; + ret = scpsys_bus_protect_disable(pd); + if (ret < 0) + goto err_pwr_ack; - ret = scpsys_bus_protect_disable(pd); - if (ret < 0) - goto err_disable_sram; + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); + if (ret < 0) + goto err_pwr_ack; + } else { + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); + if (ret) + goto err_pwr_ack; + + ret = scpsys_sram_enable(pd); + if (ret < 0) + goto err_disable_subsys_clks; + + ret = scpsys_bus_protect_disable(pd); + if (ret < 0) + goto err_disable_sram; + } return 0; diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h index a3955d960233..5347471bc3c4 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.h +++ b/drivers/soc/mediatek/mtk-pm-domains.h @@ -8,6 +8,7 @@ #define MTK_SCPD_SRAM_ISO BIT(2) #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) +#define MTK_SCPD_STRICT_BUSP BIT(5) #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) #define SPM_VDE_PWR_CON 0x0210 -- 2.36.1 _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap 2022-05-30 20:42 ` Fabien Parent (?) @ 2022-05-31 17:17 ` Christophe JAILLET -1 siblings, 0 replies; 32+ messages in thread From: Christophe JAILLET @ 2022-05-31 17:17 UTC (permalink / raw) To: Fabien Parent, Matthias Brugger Cc: Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Le 30/05/2022 à 22:42, Fabien Parent a écrit : > From: Alexandre Bailon <abailon@baylibre.com> > > This adds support of MTK_SCPD_STRICT_BUSP cap. > This is required by the mt8365, for the MM power domain. > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > 2 files changed, 29 insertions(+), 9 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > index 90b91b3b19a8..beaa5785fda2 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.c > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > - if (ret) > - goto err_pwr_ack; > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > + /* > + * In few Mediatek platforms(e.g. MT6779), the bus protect > + * policy is stricter, which leads to bus protect release must > + * be prior to bus access. > + */ > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_pwr_ack; Hi, with this new path, the error handling path looks odd because the order of operation is not the same. > > - ret = scpsys_sram_enable(pd); > - if (ret < 0) > - goto err_disable_subsys_clks; > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_pwr_ack; Here... > > - ret = scpsys_bus_protect_disable(pd); > - if (ret < 0) > - goto err_disable_sram; > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret < 0) > + goto err_pwr_ack; ... and here as well. CJ > + } else { > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret) > + goto err_pwr_ack; > + > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_disable_subsys_clks; > + > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_disable_sram; > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > index a3955d960233..5347471bc3c4 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.h > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > @@ -8,6 +8,7 @@ > #define MTK_SCPD_SRAM_ISO BIT(2) > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > +#define MTK_SCPD_STRICT_BUSP BIT(5) > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-05-31 17:17 ` Christophe JAILLET 0 siblings, 0 replies; 32+ messages in thread From: Christophe JAILLET @ 2022-05-31 17:17 UTC (permalink / raw) To: Fabien Parent, Matthias Brugger Cc: Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Le 30/05/2022 à 22:42, Fabien Parent a écrit : > From: Alexandre Bailon <abailon@baylibre.com> > > This adds support of MTK_SCPD_STRICT_BUSP cap. > This is required by the mt8365, for the MM power domain. > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > 2 files changed, 29 insertions(+), 9 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > index 90b91b3b19a8..beaa5785fda2 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.c > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > - if (ret) > - goto err_pwr_ack; > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > + /* > + * In few Mediatek platforms(e.g. MT6779), the bus protect > + * policy is stricter, which leads to bus protect release must > + * be prior to bus access. > + */ > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_pwr_ack; Hi, with this new path, the error handling path looks odd because the order of operation is not the same. > > - ret = scpsys_sram_enable(pd); > - if (ret < 0) > - goto err_disable_subsys_clks; > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_pwr_ack; Here... > > - ret = scpsys_bus_protect_disable(pd); > - if (ret < 0) > - goto err_disable_sram; > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret < 0) > + goto err_pwr_ack; ... and here as well. CJ > + } else { > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret) > + goto err_pwr_ack; > + > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_disable_subsys_clks; > + > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_disable_sram; > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > index a3955d960233..5347471bc3c4 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.h > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > @@ -8,6 +8,7 @@ > #define MTK_SCPD_SRAM_ISO BIT(2) > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > +#define MTK_SCPD_STRICT_BUSP BIT(5) > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-05-31 17:17 ` Christophe JAILLET 0 siblings, 0 replies; 32+ messages in thread From: Christophe JAILLET @ 2022-05-31 17:17 UTC (permalink / raw) To: Fabien Parent, Matthias Brugger Cc: Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Le 30/05/2022 à 22:42, Fabien Parent a écrit : > From: Alexandre Bailon <abailon@baylibre.com> > > This adds support of MTK_SCPD_STRICT_BUSP cap. > This is required by the mt8365, for the MM power domain. > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > 2 files changed, 29 insertions(+), 9 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > index 90b91b3b19a8..beaa5785fda2 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.c > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > - if (ret) > - goto err_pwr_ack; > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > + /* > + * In few Mediatek platforms(e.g. MT6779), the bus protect > + * policy is stricter, which leads to bus protect release must > + * be prior to bus access. > + */ > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_pwr_ack; Hi, with this new path, the error handling path looks odd because the order of operation is not the same. > > - ret = scpsys_sram_enable(pd); > - if (ret < 0) > - goto err_disable_subsys_clks; > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_pwr_ack; Here... > > - ret = scpsys_bus_protect_disable(pd); > - if (ret < 0) > - goto err_disable_sram; > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret < 0) > + goto err_pwr_ack; ... and here as well. CJ > + } else { > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret) > + goto err_pwr_ack; > + > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_disable_subsys_clks; > + > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_disable_sram; > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > index a3955d960233..5347471bc3c4 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.h > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > @@ -8,6 +8,7 @@ > #define MTK_SCPD_SRAM_ISO BIT(2) > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > +#define MTK_SCPD_STRICT_BUSP BIT(5) > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap 2022-05-31 17:17 ` Christophe JAILLET (?) @ 2022-06-09 16:12 ` Markus Schneider-Pargmann -1 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-06-09 16:12 UTC (permalink / raw) To: Christophe JAILLET Cc: Fabien Parent, Matthias Brugger, Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Hi Christophe, On Tue, May 31, 2022 at 07:17:08PM +0200, Christophe JAILLET wrote: > Le 30/05/2022 à 22:42, Fabien Parent a écrit : > > From: Alexandre Bailon <abailon@baylibre.com> > > > > This adds support of MTK_SCPD_STRICT_BUSP cap. > > This is required by the mt8365, for the MM power domain. > > > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > > 2 files changed, 29 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > > index 90b91b3b19a8..beaa5785fda2 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.c > > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > - if (ret) > > - goto err_pwr_ack; > > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > > + /* > > + * In few Mediatek platforms(e.g. MT6779), the bus protect > > + * policy is stricter, which leads to bus protect release must > > + * be prior to bus access. > > + */ > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > Hi, > with this new path, the error handling path looks odd because the order of > operation is not the same. True, thank you. I am taking over this series and will fix it for v2. Best, Markus > > > - ret = scpsys_sram_enable(pd); > > - if (ret < 0) > > - goto err_disable_subsys_clks; > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > Here... > > > - ret = scpsys_bus_protect_disable(pd); > > - if (ret < 0) > > - goto err_disable_sram; > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret < 0) > > + goto err_pwr_ack; > > ... and here as well. > > CJ > > > + } else { > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret) > > + goto err_pwr_ack; > > + > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_disable_subsys_clks; > > + > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_disable_sram; > > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > > index a3955d960233..5347471bc3c4 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.h > > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > > @@ -8,6 +8,7 @@ > > #define MTK_SCPD_SRAM_ISO BIT(2) > > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > > +#define MTK_SCPD_STRICT_BUSP BIT(5) > > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-06-09 16:12 ` Markus Schneider-Pargmann 0 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-06-09 16:12 UTC (permalink / raw) To: Christophe JAILLET Cc: Fabien Parent, Matthias Brugger, Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Hi Christophe, On Tue, May 31, 2022 at 07:17:08PM +0200, Christophe JAILLET wrote: > Le 30/05/2022 à 22:42, Fabien Parent a écrit : > > From: Alexandre Bailon <abailon@baylibre.com> > > > > This adds support of MTK_SCPD_STRICT_BUSP cap. > > This is required by the mt8365, for the MM power domain. > > > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > > 2 files changed, 29 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > > index 90b91b3b19a8..beaa5785fda2 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.c > > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > - if (ret) > > - goto err_pwr_ack; > > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > > + /* > > + * In few Mediatek platforms(e.g. MT6779), the bus protect > > + * policy is stricter, which leads to bus protect release must > > + * be prior to bus access. > > + */ > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > Hi, > with this new path, the error handling path looks odd because the order of > operation is not the same. True, thank you. I am taking over this series and will fix it for v2. Best, Markus > > > - ret = scpsys_sram_enable(pd); > > - if (ret < 0) > > - goto err_disable_subsys_clks; > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > Here... > > > - ret = scpsys_bus_protect_disable(pd); > > - if (ret < 0) > > - goto err_disable_sram; > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret < 0) > > + goto err_pwr_ack; > > ... and here as well. > > CJ > > > + } else { > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret) > > + goto err_pwr_ack; > > + > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_disable_subsys_clks; > > + > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_disable_sram; > > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > > index a3955d960233..5347471bc3c4 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.h > > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > > @@ -8,6 +8,7 @@ > > #define MTK_SCPD_SRAM_ISO BIT(2) > > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > > +#define MTK_SCPD_STRICT_BUSP BIT(5) > > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 > ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-06-09 16:12 ` Markus Schneider-Pargmann 0 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-06-09 16:12 UTC (permalink / raw) To: Christophe JAILLET Cc: Fabien Parent, Matthias Brugger, Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Hi Christophe, On Tue, May 31, 2022 at 07:17:08PM +0200, Christophe JAILLET wrote: > Le 30/05/2022 à 22:42, Fabien Parent a écrit : > > From: Alexandre Bailon <abailon@baylibre.com> > > > > This adds support of MTK_SCPD_STRICT_BUSP cap. > > This is required by the mt8365, for the MM power domain. > > > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > > 2 files changed, 29 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > > index 90b91b3b19a8..beaa5785fda2 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.c > > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > - if (ret) > > - goto err_pwr_ack; > > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > > + /* > > + * In few Mediatek platforms(e.g. MT6779), the bus protect > > + * policy is stricter, which leads to bus protect release must > > + * be prior to bus access. > > + */ > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > Hi, > with this new path, the error handling path looks odd because the order of > operation is not the same. True, thank you. I am taking over this series and will fix it for v2. Best, Markus > > > - ret = scpsys_sram_enable(pd); > > - if (ret < 0) > > - goto err_disable_subsys_clks; > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > Here... > > > - ret = scpsys_bus_protect_disable(pd); > > - if (ret < 0) > > - goto err_disable_sram; > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret < 0) > > + goto err_pwr_ack; > > ... and here as well. > > CJ > > > + } else { > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret) > > + goto err_pwr_ack; > > + > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_disable_subsys_clks; > > + > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_disable_sram; > > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > > index a3955d960233..5347471bc3c4 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.h > > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > > @@ -8,6 +8,7 @@ > > #define MTK_SCPD_SRAM_ISO BIT(2) > > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > > +#define MTK_SCPD_STRICT_BUSP BIT(5) > > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 > _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap 2022-05-30 20:42 ` Fabien Parent @ 2022-06-17 14:20 ` Matthias Brugger -1 siblings, 0 replies; 32+ messages in thread From: Matthias Brugger @ 2022-06-17 14:20 UTC (permalink / raw) To: Fabien Parent Cc: Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel On 30/05/2022 22:42, Fabien Parent wrote: > From: Alexandre Bailon <abailon@baylibre.com> > > This adds support of MTK_SCPD_STRICT_BUSP cap. > This is required by the mt8365, for the MM power domain. > Please explain better waht this flag is doing. > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > 2 files changed, 29 insertions(+), 9 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > index 90b91b3b19a8..beaa5785fda2 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.c > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > - if (ret) > - goto err_pwr_ack; I think it would help readability if we would enable the clocks only in the case that MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP) is false. Then we would only need to add the same if to the error path of err_disable_subsys_clks, correct? Regards, Matthias > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > + /* > + * In few Mediatek platforms(e.g. MT6779), the bus protect > + * policy is stricter, which leads to bus protect release must > + * be prior to bus access. > + */ > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_pwr_ack; > > - ret = scpsys_sram_enable(pd); > - if (ret < 0) > - goto err_disable_subsys_clks; > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_pwr_ack; > > - ret = scpsys_bus_protect_disable(pd); > - if (ret < 0) > - goto err_disable_sram; > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret < 0) > + goto err_pwr_ack; > + } else { > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret) > + goto err_pwr_ack; > + > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_disable_subsys_clks; > + > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_disable_sram; > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > index a3955d960233..5347471bc3c4 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.h > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > @@ -8,6 +8,7 @@ > #define MTK_SCPD_SRAM_ISO BIT(2) > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > +#define MTK_SCPD_STRICT_BUSP BIT(5) > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-06-17 14:20 ` Matthias Brugger 0 siblings, 0 replies; 32+ messages in thread From: Matthias Brugger @ 2022-06-17 14:20 UTC (permalink / raw) To: Fabien Parent Cc: Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel On 30/05/2022 22:42, Fabien Parent wrote: > From: Alexandre Bailon <abailon@baylibre.com> > > This adds support of MTK_SCPD_STRICT_BUSP cap. > This is required by the mt8365, for the MM power domain. > Please explain better waht this flag is doing. > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > 2 files changed, 29 insertions(+), 9 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > index 90b91b3b19a8..beaa5785fda2 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.c > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > - if (ret) > - goto err_pwr_ack; I think it would help readability if we would enable the clocks only in the case that MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP) is false. Then we would only need to add the same if to the error path of err_disable_subsys_clks, correct? Regards, Matthias > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > + /* > + * In few Mediatek platforms(e.g. MT6779), the bus protect > + * policy is stricter, which leads to bus protect release must > + * be prior to bus access. > + */ > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_pwr_ack; > > - ret = scpsys_sram_enable(pd); > - if (ret < 0) > - goto err_disable_subsys_clks; > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_pwr_ack; > > - ret = scpsys_bus_protect_disable(pd); > - if (ret < 0) > - goto err_disable_sram; > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret < 0) > + goto err_pwr_ack; > + } else { > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > + if (ret) > + goto err_pwr_ack; > + > + ret = scpsys_sram_enable(pd); > + if (ret < 0) > + goto err_disable_subsys_clks; > + > + ret = scpsys_bus_protect_disable(pd); > + if (ret < 0) > + goto err_disable_sram; > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > index a3955d960233..5347471bc3c4 100644 > --- a/drivers/soc/mediatek/mtk-pm-domains.h > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > @@ -8,6 +8,7 @@ > #define MTK_SCPD_SRAM_ISO BIT(2) > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > +#define MTK_SCPD_STRICT_BUSP BIT(5) > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap 2022-06-17 14:20 ` Matthias Brugger @ 2022-07-21 8:55 ` Markus Schneider-Pargmann -1 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-07-21 8:55 UTC (permalink / raw) To: Matthias Brugger Cc: Fabien Parent, Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Hi Matthias, sorry, took a long time to respond. On Fri, Jun 17, 2022 at 04:20:10PM +0200, Matthias Brugger wrote: > > > On 30/05/2022 22:42, Fabien Parent wrote: > > From: Alexandre Bailon <abailon@baylibre.com> > > > > This adds support of MTK_SCPD_STRICT_BUSP cap. > > This is required by the mt8365, for the MM power domain. > > > > Please explain better waht this flag is doing. I will update the commit message as well. The flag basically tells the code that there is a strict bus protection policy in place which means that bus protect release must be before bus access. This is not on all platforms the case. > > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > > 2 files changed, 29 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > > index 90b91b3b19a8..beaa5785fda2 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.c > > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > - if (ret) > > - goto err_pwr_ack; > > I think it would help readability if we would enable the clocks only in the > case that MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP) is false. Then we would > only need to add the same if to the error path of err_disable_subsys_clks, > correct? I already rearranged the code to have a cleaner flow for v2. Thanks, Markus > > Regards, > Matthias > > > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > > + /* > > + * In few Mediatek platforms(e.g. MT6779), the bus protect > > + * policy is stricter, which leads to bus protect release must > > + * be prior to bus access. > > + */ > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > - ret = scpsys_sram_enable(pd); > > - if (ret < 0) > > - goto err_disable_subsys_clks; > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > - ret = scpsys_bus_protect_disable(pd); > > - if (ret < 0) > > - goto err_disable_sram; > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret < 0) > > + goto err_pwr_ack; > > + } else { > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret) > > + goto err_pwr_ack; > > + > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_disable_subsys_clks; > > + > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_disable_sram; > > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > > index a3955d960233..5347471bc3c4 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.h > > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > > @@ -8,6 +8,7 @@ > > #define MTK_SCPD_SRAM_ISO BIT(2) > > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > > +#define MTK_SCPD_STRICT_BUSP BIT(5) > > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 > ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap @ 2022-07-21 8:55 ` Markus Schneider-Pargmann 0 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-07-21 8:55 UTC (permalink / raw) To: Matthias Brugger Cc: Fabien Parent, Alexandre Bailon, linux-arm-kernel, linux-mediatek, linux-kernel Hi Matthias, sorry, took a long time to respond. On Fri, Jun 17, 2022 at 04:20:10PM +0200, Matthias Brugger wrote: > > > On 30/05/2022 22:42, Fabien Parent wrote: > > From: Alexandre Bailon <abailon@baylibre.com> > > > > This adds support of MTK_SCPD_STRICT_BUSP cap. > > This is required by the mt8365, for the MM power domain. > > > > Please explain better waht this flag is doing. I will update the commit message as well. The flag basically tells the code that there is a strict bus protection policy in place which means that bus protect release must be before bus access. This is not on all platforms the case. > > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > drivers/soc/mediatek/mtk-pm-domains.c | 37 ++++++++++++++++++++------- > > drivers/soc/mediatek/mtk-pm-domains.h | 1 + > > 2 files changed, 29 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c > > index 90b91b3b19a8..beaa5785fda2 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.c > > +++ b/drivers/soc/mediatek/mtk-pm-domains.c > > @@ -263,17 +263,36 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > > regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); > > regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); > > - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > - if (ret) > > - goto err_pwr_ack; > > I think it would help readability if we would enable the clocks only in the > case that MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP) is false. Then we would > only need to add the same if to the error path of err_disable_subsys_clks, > correct? I already rearranged the code to have a cleaner flow for v2. Thanks, Markus > > Regards, > Matthias > > > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUSP)) { > > + /* > > + * In few Mediatek platforms(e.g. MT6779), the bus protect > > + * policy is stricter, which leads to bus protect release must > > + * be prior to bus access. > > + */ > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > - ret = scpsys_sram_enable(pd); > > - if (ret < 0) > > - goto err_disable_subsys_clks; > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_pwr_ack; > > - ret = scpsys_bus_protect_disable(pd); > > - if (ret < 0) > > - goto err_disable_sram; > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret < 0) > > + goto err_pwr_ack; > > + } else { > > + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); > > + if (ret) > > + goto err_pwr_ack; > > + > > + ret = scpsys_sram_enable(pd); > > + if (ret < 0) > > + goto err_disable_subsys_clks; > > + > > + ret = scpsys_bus_protect_disable(pd); > > + if (ret < 0) > > + goto err_disable_sram; > > + } > > return 0; > > diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h > > index a3955d960233..5347471bc3c4 100644 > > --- a/drivers/soc/mediatek/mtk-pm-domains.h > > +++ b/drivers/soc/mediatek/mtk-pm-domains.h > > @@ -8,6 +8,7 @@ > > #define MTK_SCPD_SRAM_ISO BIT(2) > > #define MTK_SCPD_KEEP_DEFAULT_OFF BIT(3) > > #define MTK_SCPD_DOMAIN_SUPPLY BIT(4) > > +#define MTK_SCPD_STRICT_BUSP BIT(5) > > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) > > #define SPM_VDE_PWR_CON 0x0210 > _______________________________________________ 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] 32+ messages in thread
* [PATCH 4/4] soc: mediatek: pm-domains: Add support for MT8365 2022-05-30 20:42 ` Fabien Parent (?) @ 2022-05-30 20:42 ` Fabien Parent -1 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Fabien Parent, linux-kernel, linux-arm-kernel, linux-mediatek Add the needed board data to support MT8365 SoC. Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mt8365-pm-domains.h | 147 +++++++++++++++++++++++ drivers/soc/mediatek/mtk-pm-domains.c | 5 + 2 files changed, 152 insertions(+) create mode 100644 drivers/soc/mediatek/mt8365-pm-domains.h diff --git a/drivers/soc/mediatek/mt8365-pm-domains.h b/drivers/soc/mediatek/mt8365-pm-domains.h new file mode 100644 index 000000000000..d5097d0741f7 --- /dev/null +++ b/drivers/soc/mediatek/mt8365-pm-domains.h @@ -0,0 +1,147 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __SOC_MEDIATEK_MT8365_PM_DOMAINS_H +#define __SOC_MEDIATEK_MT8365_PM_DOMAINS_H + +#include "mtk-pm-domains.h" +#include <dt-bindings/power/mt8365-power.h> + +/* + * MT8365 power domain support + */ + +static const struct scpsys_domain_data scpsys_domain_data_mt8365[] = { + [MT8365_POWER_DOMAIN_MM] = { + .name = "mm", + .sta_mask = PWR_STATUS_DISP, + .ctl_offs = 0x30c, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .caps = MTK_SCPD_STRICT_BUSP, + .bp_infracfg = { + BUS_PROT_WR(BIT(16) | BIT(17), 0x2a8, 0x2ac, 0x258), + BUS_PROT_WR(BIT(1) | BIT(2) | BIT(10) | BIT(11), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WAYEN(BIT(6), BIT(24), 0x200, 0x0), + BUS_PROT_WAYEN(BIT(5), BIT(14), 0x234, 0x28), + BUS_PROT_WR(BIT(6), 0x2a0, 0x2a4, 0x228), + }, + }, + [MT8365_POWER_DOMAIN_VENC] = { + .name = "venc", + .sta_mask = PWR_STATUS_VENC, + .ctl_offs = 0x0304, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .bp_smi = { + BUS_PROT_WR(BIT(1), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_AUDIO] = { + .name = "audio", + .sta_mask = PWR_STATUS_AUDIO, + .ctl_offs = 0x0314, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(12, 8), + .sram_pdn_ack_bits = GENMASK(17, 13), + .bp_infracfg = { + BUS_PROT_WR(BIT(27) | BIT(28), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP, + }, + [MT8365_POWER_DOMAIN_CONN] = { + .name = "conn", + .sta_mask = PWR_STATUS_CONN, + .ctl_offs = 0x032c, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = 0, + .sram_pdn_ack_bits = 0, + .bp_infracfg = { + BUS_PROT_WR(BIT(13), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(18), 0x2a8, 0x2ac, 0x258), + BUS_PROT_WR(BIT(14), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(21), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_KEEP_DEFAULT_OFF, + }, + [MT8365_POWER_DOMAIN_MFG] = { + .name = "mfg", + .sta_mask = PWR_STATUS_MFG, + .ctl_offs = 0x0338, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(9, 8), + .sram_pdn_ack_bits = GENMASK(13, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(25), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(21) | BIT(22), 0x2a0, 0x2a4, 0x228), + }, + }, + [MT8365_POWER_DOMAIN_CAM] = { + .name = "cam", + .sta_mask = BIT(25), + .ctl_offs = 0x0344, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(9, 8), + .sram_pdn_ack_bits = GENMASK(13, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(19), 0x2a8, 0x2ac, 0x258), + }, + .bp_smi = { + BUS_PROT_WR(BIT(2), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_VDEC] = { + .name = "vdec", + .sta_mask = BIT(31), + .ctl_offs = 0x0370, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .bp_smi = { + BUS_PROT_WR(BIT(3), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_APU] = { + .name = "apu", + .sta_mask = BIT(16), + .ctl_offs = 0x0378, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(14, 8), + .sram_pdn_ack_bits = GENMASK(21, 15), + .bp_infracfg = { + BUS_PROT_WR(BIT(2) | BIT(20), 0x2a8, 0x2ac, 0x258), + }, + .bp_smi = { + BUS_PROT_WR(BIT(4), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_DSP] = { + .name = "dsp", + .sta_mask = BIT(17), + .ctl_offs = 0x037C, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(11, 8), + .sram_pdn_ack_bits = GENMASK(15, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(24) | BIT(30) | BIT(31), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP, + }, +}; + +static const struct scpsys_soc_data mt8365_scpsys_data = { + .domains_data = scpsys_domain_data_mt8365, + .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8365), +}; + +#endif /* __SOC_MEDIATEK_MT8365_PM_DOMAINS_H */ diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index beaa5785fda2..1f922db7eddf 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -22,6 +22,7 @@ #include "mt8186-pm-domains.h" #include "mt8192-pm-domains.h" #include "mt8195-pm-domains.h" +#include "mt8365-pm-domains.h" #define MTK_POLL_DELAY_US 10 #define MTK_POLL_TIMEOUT USEC_PER_SEC @@ -634,6 +635,10 @@ static const struct of_device_id scpsys_of_match[] = { .compatible = "mediatek,mt8195-power-controller", .data = &mt8195_scpsys_data, }, + { + .compatible = "mediatek,mt8365-power-controller", + .data = &mt8365_scpsys_data, + }, { } }; -- 2.36.1 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 4/4] soc: mediatek: pm-domains: Add support for MT8365 @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Fabien Parent, linux-kernel, linux-arm-kernel, linux-mediatek Add the needed board data to support MT8365 SoC. Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mt8365-pm-domains.h | 147 +++++++++++++++++++++++ drivers/soc/mediatek/mtk-pm-domains.c | 5 + 2 files changed, 152 insertions(+) create mode 100644 drivers/soc/mediatek/mt8365-pm-domains.h diff --git a/drivers/soc/mediatek/mt8365-pm-domains.h b/drivers/soc/mediatek/mt8365-pm-domains.h new file mode 100644 index 000000000000..d5097d0741f7 --- /dev/null +++ b/drivers/soc/mediatek/mt8365-pm-domains.h @@ -0,0 +1,147 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __SOC_MEDIATEK_MT8365_PM_DOMAINS_H +#define __SOC_MEDIATEK_MT8365_PM_DOMAINS_H + +#include "mtk-pm-domains.h" +#include <dt-bindings/power/mt8365-power.h> + +/* + * MT8365 power domain support + */ + +static const struct scpsys_domain_data scpsys_domain_data_mt8365[] = { + [MT8365_POWER_DOMAIN_MM] = { + .name = "mm", + .sta_mask = PWR_STATUS_DISP, + .ctl_offs = 0x30c, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .caps = MTK_SCPD_STRICT_BUSP, + .bp_infracfg = { + BUS_PROT_WR(BIT(16) | BIT(17), 0x2a8, 0x2ac, 0x258), + BUS_PROT_WR(BIT(1) | BIT(2) | BIT(10) | BIT(11), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WAYEN(BIT(6), BIT(24), 0x200, 0x0), + BUS_PROT_WAYEN(BIT(5), BIT(14), 0x234, 0x28), + BUS_PROT_WR(BIT(6), 0x2a0, 0x2a4, 0x228), + }, + }, + [MT8365_POWER_DOMAIN_VENC] = { + .name = "venc", + .sta_mask = PWR_STATUS_VENC, + .ctl_offs = 0x0304, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .bp_smi = { + BUS_PROT_WR(BIT(1), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_AUDIO] = { + .name = "audio", + .sta_mask = PWR_STATUS_AUDIO, + .ctl_offs = 0x0314, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(12, 8), + .sram_pdn_ack_bits = GENMASK(17, 13), + .bp_infracfg = { + BUS_PROT_WR(BIT(27) | BIT(28), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP, + }, + [MT8365_POWER_DOMAIN_CONN] = { + .name = "conn", + .sta_mask = PWR_STATUS_CONN, + .ctl_offs = 0x032c, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = 0, + .sram_pdn_ack_bits = 0, + .bp_infracfg = { + BUS_PROT_WR(BIT(13), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(18), 0x2a8, 0x2ac, 0x258), + BUS_PROT_WR(BIT(14), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(21), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_KEEP_DEFAULT_OFF, + }, + [MT8365_POWER_DOMAIN_MFG] = { + .name = "mfg", + .sta_mask = PWR_STATUS_MFG, + .ctl_offs = 0x0338, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(9, 8), + .sram_pdn_ack_bits = GENMASK(13, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(25), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(21) | BIT(22), 0x2a0, 0x2a4, 0x228), + }, + }, + [MT8365_POWER_DOMAIN_CAM] = { + .name = "cam", + .sta_mask = BIT(25), + .ctl_offs = 0x0344, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(9, 8), + .sram_pdn_ack_bits = GENMASK(13, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(19), 0x2a8, 0x2ac, 0x258), + }, + .bp_smi = { + BUS_PROT_WR(BIT(2), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_VDEC] = { + .name = "vdec", + .sta_mask = BIT(31), + .ctl_offs = 0x0370, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .bp_smi = { + BUS_PROT_WR(BIT(3), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_APU] = { + .name = "apu", + .sta_mask = BIT(16), + .ctl_offs = 0x0378, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(14, 8), + .sram_pdn_ack_bits = GENMASK(21, 15), + .bp_infracfg = { + BUS_PROT_WR(BIT(2) | BIT(20), 0x2a8, 0x2ac, 0x258), + }, + .bp_smi = { + BUS_PROT_WR(BIT(4), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_DSP] = { + .name = "dsp", + .sta_mask = BIT(17), + .ctl_offs = 0x037C, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(11, 8), + .sram_pdn_ack_bits = GENMASK(15, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(24) | BIT(30) | BIT(31), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP, + }, +}; + +static const struct scpsys_soc_data mt8365_scpsys_data = { + .domains_data = scpsys_domain_data_mt8365, + .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8365), +}; + +#endif /* __SOC_MEDIATEK_MT8365_PM_DOMAINS_H */ diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index beaa5785fda2..1f922db7eddf 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -22,6 +22,7 @@ #include "mt8186-pm-domains.h" #include "mt8192-pm-domains.h" #include "mt8195-pm-domains.h" +#include "mt8365-pm-domains.h" #define MTK_POLL_DELAY_US 10 #define MTK_POLL_TIMEOUT USEC_PER_SEC @@ -634,6 +635,10 @@ static const struct of_device_id scpsys_of_match[] = { .compatible = "mediatek,mt8195-power-controller", .data = &mt8195_scpsys_data, }, + { + .compatible = "mediatek,mt8365-power-controller", + .data = &mt8365_scpsys_data, + }, { } }; -- 2.36.1 ^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 4/4] soc: mediatek: pm-domains: Add support for MT8365 @ 2022-05-30 20:42 ` Fabien Parent 0 siblings, 0 replies; 32+ messages in thread From: Fabien Parent @ 2022-05-30 20:42 UTC (permalink / raw) To: Matthias Brugger Cc: Fabien Parent, linux-kernel, linux-arm-kernel, linux-mediatek Add the needed board data to support MT8365 SoC. Signed-off-by: Fabien Parent <fparent@baylibre.com> --- drivers/soc/mediatek/mt8365-pm-domains.h | 147 +++++++++++++++++++++++ drivers/soc/mediatek/mtk-pm-domains.c | 5 + 2 files changed, 152 insertions(+) create mode 100644 drivers/soc/mediatek/mt8365-pm-domains.h diff --git a/drivers/soc/mediatek/mt8365-pm-domains.h b/drivers/soc/mediatek/mt8365-pm-domains.h new file mode 100644 index 000000000000..d5097d0741f7 --- /dev/null +++ b/drivers/soc/mediatek/mt8365-pm-domains.h @@ -0,0 +1,147 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __SOC_MEDIATEK_MT8365_PM_DOMAINS_H +#define __SOC_MEDIATEK_MT8365_PM_DOMAINS_H + +#include "mtk-pm-domains.h" +#include <dt-bindings/power/mt8365-power.h> + +/* + * MT8365 power domain support + */ + +static const struct scpsys_domain_data scpsys_domain_data_mt8365[] = { + [MT8365_POWER_DOMAIN_MM] = { + .name = "mm", + .sta_mask = PWR_STATUS_DISP, + .ctl_offs = 0x30c, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .caps = MTK_SCPD_STRICT_BUSP, + .bp_infracfg = { + BUS_PROT_WR(BIT(16) | BIT(17), 0x2a8, 0x2ac, 0x258), + BUS_PROT_WR(BIT(1) | BIT(2) | BIT(10) | BIT(11), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WAYEN(BIT(6), BIT(24), 0x200, 0x0), + BUS_PROT_WAYEN(BIT(5), BIT(14), 0x234, 0x28), + BUS_PROT_WR(BIT(6), 0x2a0, 0x2a4, 0x228), + }, + }, + [MT8365_POWER_DOMAIN_VENC] = { + .name = "venc", + .sta_mask = PWR_STATUS_VENC, + .ctl_offs = 0x0304, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .bp_smi = { + BUS_PROT_WR(BIT(1), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_AUDIO] = { + .name = "audio", + .sta_mask = PWR_STATUS_AUDIO, + .ctl_offs = 0x0314, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(12, 8), + .sram_pdn_ack_bits = GENMASK(17, 13), + .bp_infracfg = { + BUS_PROT_WR(BIT(27) | BIT(28), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP, + }, + [MT8365_POWER_DOMAIN_CONN] = { + .name = "conn", + .sta_mask = PWR_STATUS_CONN, + .ctl_offs = 0x032c, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = 0, + .sram_pdn_ack_bits = 0, + .bp_infracfg = { + BUS_PROT_WR(BIT(13), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(18), 0x2a8, 0x2ac, 0x258), + BUS_PROT_WR(BIT(14), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(21), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_KEEP_DEFAULT_OFF, + }, + [MT8365_POWER_DOMAIN_MFG] = { + .name = "mfg", + .sta_mask = PWR_STATUS_MFG, + .ctl_offs = 0x0338, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(9, 8), + .sram_pdn_ack_bits = GENMASK(13, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(25), 0x2a0, 0x2a4, 0x228), + BUS_PROT_WR(BIT(21) | BIT(22), 0x2a0, 0x2a4, 0x228), + }, + }, + [MT8365_POWER_DOMAIN_CAM] = { + .name = "cam", + .sta_mask = BIT(25), + .ctl_offs = 0x0344, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(9, 8), + .sram_pdn_ack_bits = GENMASK(13, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(19), 0x2a8, 0x2ac, 0x258), + }, + .bp_smi = { + BUS_PROT_WR(BIT(2), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_VDEC] = { + .name = "vdec", + .sta_mask = BIT(31), + .ctl_offs = 0x0370, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(8, 8), + .sram_pdn_ack_bits = GENMASK(12, 12), + .bp_smi = { + BUS_PROT_WR(BIT(3), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_APU] = { + .name = "apu", + .sta_mask = BIT(16), + .ctl_offs = 0x0378, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(14, 8), + .sram_pdn_ack_bits = GENMASK(21, 15), + .bp_infracfg = { + BUS_PROT_WR(BIT(2) | BIT(20), 0x2a8, 0x2ac, 0x258), + }, + .bp_smi = { + BUS_PROT_WR(BIT(4), 0x3c4, 0x3c8, 0x3c0), + }, + }, + [MT8365_POWER_DOMAIN_DSP] = { + .name = "dsp", + .sta_mask = BIT(17), + .ctl_offs = 0x037C, + .pwr_sta_offs = 0x0180, + .pwr_sta2nd_offs = 0x0184, + .sram_pdn_bits = GENMASK(11, 8), + .sram_pdn_ack_bits = GENMASK(15, 12), + .bp_infracfg = { + BUS_PROT_WR(BIT(24) | BIT(30) | BIT(31), 0x2a8, 0x2ac, 0x258), + }, + .caps = MTK_SCPD_ACTIVE_WAKEUP, + }, +}; + +static const struct scpsys_soc_data mt8365_scpsys_data = { + .domains_data = scpsys_domain_data_mt8365, + .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8365), +}; + +#endif /* __SOC_MEDIATEK_MT8365_PM_DOMAINS_H */ diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c index beaa5785fda2..1f922db7eddf 100644 --- a/drivers/soc/mediatek/mtk-pm-domains.c +++ b/drivers/soc/mediatek/mtk-pm-domains.c @@ -22,6 +22,7 @@ #include "mt8186-pm-domains.h" #include "mt8192-pm-domains.h" #include "mt8195-pm-domains.h" +#include "mt8365-pm-domains.h" #define MTK_POLL_DELAY_US 10 #define MTK_POLL_TIMEOUT USEC_PER_SEC @@ -634,6 +635,10 @@ static const struct of_device_id scpsys_of_match[] = { .compatible = "mediatek,mt8195-power-controller", .data = &mt8195_scpsys_data, }, + { + .compatible = "mediatek,mt8365-power-controller", + .data = &mt8365_scpsys_data, + }, { } }; -- 2.36.1 _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 1/4] dt-bindings: power: Add MT8365 power domains 2022-05-30 20:42 ` Fabien Parent (?) @ 2022-06-05 21:22 ` Rob Herring -1 siblings, 0 replies; 32+ messages in thread From: Rob Herring @ 2022-06-05 21:22 UTC (permalink / raw) To: Fabien Parent Cc: Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek On Mon, May 30, 2022 at 10:42:11PM +0200, Fabien Parent wrote: > Add power domains dt-bindings for MT8365. > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > .../power/mediatek,power-controller.yaml | 2 ++ > include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ > 2 files changed, 21 insertions(+) > create mode 100644 include/dt-bindings/power/mt8365-power.h > > diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > index 135c6f722091..2c6d3e4246b2 100644 > --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > @@ -29,6 +29,7 @@ properties: > - mediatek,mt8186-power-controller > - mediatek,mt8192-power-controller > - mediatek,mt8195-power-controller > + - mediatek,mt8365-power-controller > > '#power-domain-cells': > const: 1 > @@ -67,6 +68,7 @@ patternProperties: > "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. > "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. > "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. > + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. > maxItems: 1 > > clocks: > diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h > new file mode 100644 > index 000000000000..4f50997a13b4 > --- /dev/null > +++ b/include/dt-bindings/power/mt8365-power.h > @@ -0,0 +1,19 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ Dual license please. Rob _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 1/4] dt-bindings: power: Add MT8365 power domains @ 2022-06-05 21:22 ` Rob Herring 0 siblings, 0 replies; 32+ messages in thread From: Rob Herring @ 2022-06-05 21:22 UTC (permalink / raw) To: Fabien Parent Cc: Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek On Mon, May 30, 2022 at 10:42:11PM +0200, Fabien Parent wrote: > Add power domains dt-bindings for MT8365. > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > .../power/mediatek,power-controller.yaml | 2 ++ > include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ > 2 files changed, 21 insertions(+) > create mode 100644 include/dt-bindings/power/mt8365-power.h > > diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > index 135c6f722091..2c6d3e4246b2 100644 > --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > @@ -29,6 +29,7 @@ properties: > - mediatek,mt8186-power-controller > - mediatek,mt8192-power-controller > - mediatek,mt8195-power-controller > + - mediatek,mt8365-power-controller > > '#power-domain-cells': > const: 1 > @@ -67,6 +68,7 @@ patternProperties: > "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. > "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. > "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. > + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. > maxItems: 1 > > clocks: > diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h > new file mode 100644 > index 000000000000..4f50997a13b4 > --- /dev/null > +++ b/include/dt-bindings/power/mt8365-power.h > @@ -0,0 +1,19 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ Dual license please. Rob ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 1/4] dt-bindings: power: Add MT8365 power domains @ 2022-06-05 21:22 ` Rob Herring 0 siblings, 0 replies; 32+ messages in thread From: Rob Herring @ 2022-06-05 21:22 UTC (permalink / raw) To: Fabien Parent Cc: Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek On Mon, May 30, 2022 at 10:42:11PM +0200, Fabien Parent wrote: > Add power domains dt-bindings for MT8365. > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > --- > .../power/mediatek,power-controller.yaml | 2 ++ > include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ > 2 files changed, 21 insertions(+) > create mode 100644 include/dt-bindings/power/mt8365-power.h > > diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > index 135c6f722091..2c6d3e4246b2 100644 > --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > @@ -29,6 +29,7 @@ properties: > - mediatek,mt8186-power-controller > - mediatek,mt8192-power-controller > - mediatek,mt8195-power-controller > + - mediatek,mt8365-power-controller > > '#power-domain-cells': > const: 1 > @@ -67,6 +68,7 @@ patternProperties: > "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. > "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. > "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. > + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. > maxItems: 1 > > clocks: > diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h > new file mode 100644 > index 000000000000..4f50997a13b4 > --- /dev/null > +++ b/include/dt-bindings/power/mt8365-power.h > @@ -0,0 +1,19 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ Dual license please. Rob _______________________________________________ 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] 32+ messages in thread
* Re: [PATCH 1/4] dt-bindings: power: Add MT8365 power domains 2022-06-05 21:22 ` Rob Herring (?) @ 2022-06-09 16:12 ` Markus Schneider-Pargmann -1 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-06-09 16:12 UTC (permalink / raw) To: Rob Herring Cc: Fabien Parent, Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek On Sun, Jun 05, 2022 at 04:22:00PM -0500, Rob Herring wrote: > On Mon, May 30, 2022 at 10:42:11PM +0200, Fabien Parent wrote: > > Add power domains dt-bindings for MT8365. > > > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > .../power/mediatek,power-controller.yaml | 2 ++ > > include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ > > 2 files changed, 21 insertions(+) > > create mode 100644 include/dt-bindings/power/mt8365-power.h > > > > diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > index 135c6f722091..2c6d3e4246b2 100644 > > --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > @@ -29,6 +29,7 @@ properties: > > - mediatek,mt8186-power-controller > > - mediatek,mt8192-power-controller > > - mediatek,mt8195-power-controller > > + - mediatek,mt8365-power-controller > > > > '#power-domain-cells': > > const: 1 > > @@ -67,6 +68,7 @@ patternProperties: > > "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. > > "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. > > "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. > > + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. > > maxItems: 1 > > > > clocks: > > diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h > > new file mode 100644 > > index 000000000000..4f50997a13b4 > > --- /dev/null > > +++ b/include/dt-bindings/power/mt8365-power.h > > @@ -0,0 +1,19 @@ > > +/* SPDX-License-Identifier: GPL-2.0 */ > > Dual license please. Thanks Rob, fixed for v2. > > Rob _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 1/4] dt-bindings: power: Add MT8365 power domains @ 2022-06-09 16:12 ` Markus Schneider-Pargmann 0 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-06-09 16:12 UTC (permalink / raw) To: Rob Herring Cc: Fabien Parent, Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek On Sun, Jun 05, 2022 at 04:22:00PM -0500, Rob Herring wrote: > On Mon, May 30, 2022 at 10:42:11PM +0200, Fabien Parent wrote: > > Add power domains dt-bindings for MT8365. > > > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > .../power/mediatek,power-controller.yaml | 2 ++ > > include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ > > 2 files changed, 21 insertions(+) > > create mode 100644 include/dt-bindings/power/mt8365-power.h > > > > diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > index 135c6f722091..2c6d3e4246b2 100644 > > --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > @@ -29,6 +29,7 @@ properties: > > - mediatek,mt8186-power-controller > > - mediatek,mt8192-power-controller > > - mediatek,mt8195-power-controller > > + - mediatek,mt8365-power-controller > > > > '#power-domain-cells': > > const: 1 > > @@ -67,6 +68,7 @@ patternProperties: > > "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. > > "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. > > "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. > > + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. > > maxItems: 1 > > > > clocks: > > diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h > > new file mode 100644 > > index 000000000000..4f50997a13b4 > > --- /dev/null > > +++ b/include/dt-bindings/power/mt8365-power.h > > @@ -0,0 +1,19 @@ > > +/* SPDX-License-Identifier: GPL-2.0 */ > > Dual license please. Thanks Rob, fixed for v2. > > Rob ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 1/4] dt-bindings: power: Add MT8365 power domains @ 2022-06-09 16:12 ` Markus Schneider-Pargmann 0 siblings, 0 replies; 32+ messages in thread From: Markus Schneider-Pargmann @ 2022-06-09 16:12 UTC (permalink / raw) To: Rob Herring Cc: Fabien Parent, Krzysztof Kozlowski, Matthias Brugger, Weiyi Lu, Matthias Brugger, devicetree, linux-kernel, linux-arm-kernel, linux-mediatek On Sun, Jun 05, 2022 at 04:22:00PM -0500, Rob Herring wrote: > On Mon, May 30, 2022 at 10:42:11PM +0200, Fabien Parent wrote: > > Add power domains dt-bindings for MT8365. > > > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > > --- > > .../power/mediatek,power-controller.yaml | 2 ++ > > include/dt-bindings/power/mt8365-power.h | 19 +++++++++++++++++++ > > 2 files changed, 21 insertions(+) > > create mode 100644 include/dt-bindings/power/mt8365-power.h > > > > diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > index 135c6f722091..2c6d3e4246b2 100644 > > --- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > +++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml > > @@ -29,6 +29,7 @@ properties: > > - mediatek,mt8186-power-controller > > - mediatek,mt8192-power-controller > > - mediatek,mt8195-power-controller > > + - mediatek,mt8365-power-controller > > > > '#power-domain-cells': > > const: 1 > > @@ -67,6 +68,7 @@ patternProperties: > > "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. > > "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. > > "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. > > + "include/dt-bindings/power/mt8365-power.h" - for MT8365 type power domain. > > maxItems: 1 > > > > clocks: > > diff --git a/include/dt-bindings/power/mt8365-power.h b/include/dt-bindings/power/mt8365-power.h > > new file mode 100644 > > index 000000000000..4f50997a13b4 > > --- /dev/null > > +++ b/include/dt-bindings/power/mt8365-power.h > > @@ -0,0 +1,19 @@ > > +/* SPDX-License-Identifier: GPL-2.0 */ > > Dual license please. Thanks Rob, fixed for v2. > > Rob _______________________________________________ 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] 32+ messages in thread
end of thread, other threads:[~2022-07-22 9:15 UTC | newest] Thread overview: 32+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-05-30 20:42 [PATCH 1/4] dt-bindings: power: Add MT8365 power domains Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-05-30 20:42 ` [PATCH 2/4] soc: mediatek: Add support of WAYEN operations Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-06-17 14:20 ` Matthias Brugger 2022-06-17 14:20 ` Matthias Brugger 2022-07-22 9:13 ` Markus Schneider-Pargmann 2022-07-22 9:13 ` Markus Schneider-Pargmann 2022-05-30 20:42 ` [PATCH 3/4] soc: mediatek: add support of MTK_SCPD_STRICT_BUSP cap Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-05-31 17:17 ` Christophe JAILLET 2022-05-31 17:17 ` Christophe JAILLET 2022-05-31 17:17 ` Christophe JAILLET 2022-06-09 16:12 ` Markus Schneider-Pargmann 2022-06-09 16:12 ` Markus Schneider-Pargmann 2022-06-09 16:12 ` Markus Schneider-Pargmann 2022-06-17 14:20 ` Matthias Brugger 2022-06-17 14:20 ` Matthias Brugger 2022-07-21 8:55 ` Markus Schneider-Pargmann 2022-07-21 8:55 ` Markus Schneider-Pargmann 2022-05-30 20:42 ` [PATCH 4/4] soc: mediatek: pm-domains: Add support for MT8365 Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-05-30 20:42 ` Fabien Parent 2022-06-05 21:22 ` [PATCH 1/4] dt-bindings: power: Add MT8365 power domains Rob Herring 2022-06-05 21:22 ` Rob Herring 2022-06-05 21:22 ` Rob Herring 2022-06-09 16:12 ` Markus Schneider-Pargmann 2022-06-09 16:12 ` Markus Schneider-Pargmann 2022-06-09 16:12 ` Markus Schneider-Pargmann
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.