|
25 | 25 | #include <soc/rockchip/rockchip_sip.h> |
26 | 26 | #include <dt-bindings/power/px30-power.h> |
27 | 27 | #include <dt-bindings/power/rockchip,rv1126-power.h> |
| 28 | +#include <dt-bindings/power/rockchip,rv1126b-power-controller.h> |
28 | 29 | #include <dt-bindings/power/rk3036-power.h> |
29 | 30 | #include <dt-bindings/power/rk3066-power.h> |
30 | 31 | #include <dt-bindings/power/rk3128-power.h> |
@@ -137,6 +138,20 @@ struct rockchip_pmu { |
137 | 138 | .active_wakeup = wakeup, \ |
138 | 139 | } |
139 | 140 |
|
| 141 | +#define DOMAIN_M_G(_name, pwr, status, req, idle, ack, g_mask, wakeup, keepon) \ |
| 142 | +{ \ |
| 143 | + .name = _name, \ |
| 144 | + .pwr_w_mask = (pwr) << 16, \ |
| 145 | + .pwr_mask = (pwr), \ |
| 146 | + .status_mask = (status), \ |
| 147 | + .req_w_mask = (req) << 16, \ |
| 148 | + .req_mask = (req), \ |
| 149 | + .idle_mask = (idle), \ |
| 150 | + .ack_mask = (ack), \ |
| 151 | + .clk_ungate_mask = (g_mask), \ |
| 152 | + .active_wakeup = wakeup, \ |
| 153 | +} |
| 154 | + |
140 | 155 | #define DOMAIN_M_G_SD(_name, pwr, status, req, idle, ack, g_mask, mem, wakeup, keepon) \ |
141 | 156 | { \ |
142 | 157 | .name = _name, \ |
@@ -205,6 +220,9 @@ struct rockchip_pmu { |
205 | 220 | #define DOMAIN_RV1126(name, pwr, req, idle, wakeup) \ |
206 | 221 | DOMAIN_M(name, pwr, pwr, req, idle, idle, wakeup) |
207 | 222 |
|
| 223 | +#define DOMAIN_RV1126B(name, pwr, req, wakeup) \ |
| 224 | + DOMAIN_M_G(name, pwr, pwr, req, req, req, req, wakeup, true) |
| 225 | + |
208 | 226 | #define DOMAIN_RK3288(name, pwr, status, req, wakeup) \ |
209 | 227 | DOMAIN(name, pwr, status, req, req, (req) << 16, wakeup) |
210 | 228 |
|
@@ -1104,6 +1122,13 @@ static const struct rockchip_domain_info rv1126_pm_domains[] = { |
1104 | 1122 | [RV1126_PD_USB] = DOMAIN_RV1126("usb", BIT(9), BIT(15), BIT(15), false), |
1105 | 1123 | }; |
1106 | 1124 |
|
| 1125 | +static const struct rockchip_domain_info rv1126b_pm_domains[] = { |
| 1126 | + /* name pwr req wakeup */ |
| 1127 | + [RV1126B_PD_NPU] = DOMAIN_RV1126B("npu", BIT(0), BIT(8), false), |
| 1128 | + [RV1126B_PD_VDO] = DOMAIN_RV1126B("vdo", BIT(1), BIT(9), false), |
| 1129 | + [RV1126B_PD_AIISP] = DOMAIN_RV1126B("aiisp", BIT(2), BIT(10), false), |
| 1130 | +}; |
| 1131 | + |
1107 | 1132 | static const struct rockchip_domain_info rk3036_pm_domains[] = { |
1108 | 1133 | [RK3036_PD_MSCH] = DOMAIN_RK3036("msch", BIT(14), BIT(23), BIT(30), true), |
1109 | 1134 | [RK3036_PD_CORE] = DOMAIN_RK3036("core", BIT(13), BIT(17), BIT(24), false), |
@@ -1516,6 +1541,18 @@ static const struct rockchip_pmu_info rv1126_pmu = { |
1516 | 1541 | .domain_info = rv1126_pm_domains, |
1517 | 1542 | }; |
1518 | 1543 |
|
| 1544 | +static const struct rockchip_pmu_info rv1126b_pmu = { |
| 1545 | + .pwr_offset = 0x210, |
| 1546 | + .status_offset = 0x230, |
| 1547 | + .req_offset = 0x110, |
| 1548 | + .idle_offset = 0x128, |
| 1549 | + .ack_offset = 0x120, |
| 1550 | + .clk_ungate_offset = 0x140, |
| 1551 | + |
| 1552 | + .num_domains = ARRAY_SIZE(rv1126b_pm_domains), |
| 1553 | + .domain_info = rv1126b_pm_domains, |
| 1554 | +}; |
| 1555 | + |
1519 | 1556 | static const struct of_device_id rockchip_pm_domain_dt_match[] = { |
1520 | 1557 | { |
1521 | 1558 | .compatible = "rockchip,px30-power-controller", |
@@ -1585,6 +1622,10 @@ static const struct of_device_id rockchip_pm_domain_dt_match[] = { |
1585 | 1622 | .compatible = "rockchip,rv1126-power-controller", |
1586 | 1623 | .data = (void *)&rv1126_pmu, |
1587 | 1624 | }, |
| 1625 | + { |
| 1626 | + .compatible = "rockchip,rv1126b-power-controller", |
| 1627 | + .data = (void *)&rv1126b_pmu, |
| 1628 | + }, |
1588 | 1629 | { /* sentinel */ }, |
1589 | 1630 | }; |
1590 | 1631 |
|
|
0 commit comments