[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.