[PATCH 1/4] power: domain: mtk: add bus_prot_sta_mask field
David Lechner <[email protected]>
| Newsgroups | org.u-boot-project.lists.u-boot |
|---|---|
| Message-ID | <[email protected]> |
Add a bus_prot_sta_mask field to the mtk_bus_prot structure. This will be used by power domains that have a separate status mask compared to the bus_prot_mask. Signed-off-by: David Lechner <[email protected]> --- drivers/power/domain/mtk-power-domain.c | 8 ++++++-- drivers/power/domain/mtk-power-domain.h | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/power/domain/mtk-power-domain.c b/drivers/power/domain/mtk-power-domain.c index 9eef58d2d57..76f86b65f91 100644 --- a/drivers/power/domain/mtk-power-domain.c +++ b/drivers/power/domain/mtk-power-domain.c @@ -47,6 +47,7 @@ static int _scpsys_bus_protect_enable(const struct mtk_scpsys_bus_prot_data *bpd void __iomem *reg) { u32 val = 0, mask = bpd->bus_prot_mask; + u32 sta_mask = bpd->bus_prot_sta_mask; if (!mask) return 0; @@ -56,13 +57,15 @@ static int _scpsys_bus_protect_enable(const struct mtk_scpsys_bus_prot_data *bpd else writel(mask, reg + bpd->bus_prot_set); - return readl_poll_timeout(reg + bpd->bus_prot_sta, val, (val & mask) == mask, 1000); + return readl_poll_timeout(reg + bpd->bus_prot_sta, val, + (val & sta_mask) == sta_mask, 1000); } static int _scpsys_bus_protect_disable(const struct mtk_scpsys_bus_prot_data *bpd, void __iomem *reg) { u32 val = 0, mask = bpd->bus_prot_mask; + u32 sta_mask = bpd->bus_prot_sta_mask; if (!mask) return 0; @@ -75,7 +78,8 @@ static int _scpsys_bus_protect_disable(const struct mtk_scpsys_bus_prot_data *bp if (bpd->ignore_clr_ack) return 0; - return readl_poll_timeout(reg + bpd->bus_prot_sta, val, !(val & mask), 1000); + return readl_poll_timeout(reg + bpd->bus_prot_sta, val, + !(val & sta_mask), 1000); } static int scpsys_bus_protect_enable(const struct mtk_scpsys_bus_prot_data *bpd, diff --git a/drivers/power/domain/mtk-power-domain.h b/drivers/power/domain/mtk-power-domain.h index 5bf0ca850ec..da7ffa7b722 100644 --- a/drivers/power/domain/mtk-power-domain.h +++ b/drivers/power/domain/mtk-power-domain.h @@ -68,6 +68,7 @@ struct mtk_scpsys_bus_prot_data { u32 bus_prot_mask; u32 bus_prot_set; u32 bus_prot_clr; + u32 bus_prot_sta_mask; u32 bus_prot_sta; bool bus_prot_reg_update; bool ignore_clr_ack; @@ -111,17 +112,21 @@ struct mtk_scpsys { struct mtk_scp_domain *domains; }; -#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ +#define _BUS_PROT(_mask, _set, _clr, _sta_mask, _sta, _update, _ignore) { \ .bus_prot_mask = (_mask), \ .bus_prot_set = (_set), \ .bus_prot_clr = (_clr), \ + .bus_prot_sta_mask = (_sta_mask), \ .bus_prot_sta = (_sta), \ .bus_prot_reg_update = (_update), \ .ignore_clr_ack = (_ignore), \ } #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ - _BUS_PROT(_mask, _set, _clr, _sta, false, false) + _BUS_PROT(_mask, _set, _clr, _mask, _sta, false, false) + +#define BUS_PROT_WR_STA_MASK(_mask, _sta_mask, _set, _clr, _sta) \ + _BUS_PROT(_mask, _set, _clr, _sta_mask, _sta, false, false) int mtk_scpsys_probe(struct udevice *dev); int mtk_power_controller_probe(struct udevice *dev); -- 2.43.0