|
19 | 19 | #include <linux/clk.h> |
20 | 20 | #include <linux/regmap.h> |
21 | 21 | #include <linux/mfd/syscon.h> |
| 22 | +#include <dt-bindings/power/rk3036-power.h> |
22 | 23 | #include <dt-bindings/power/rk3128-power.h> |
23 | 24 | #include <dt-bindings/power/rk3288-power.h> |
24 | 25 | #include <dt-bindings/power/rk3328-power.h> |
@@ -109,6 +110,15 @@ static struct rockchip_pmu *dmc_pmu; |
109 | 110 | .active_wakeup = wakeup, \ |
110 | 111 | } |
111 | 112 |
|
| 113 | +#define DOMAIN_RK3036(req, ack, idle, wakeup) \ |
| 114 | +{ \ |
| 115 | + .req_mask = (req >= 0) ? BIT(req) : 0, \ |
| 116 | + .req_w_mask = (req >= 0) ? BIT(req + 16) : 0, \ |
| 117 | + .ack_mask = (ack >= 0) ? BIT(ack) : 0, \ |
| 118 | + .idle_mask = (idle >= 0) ? BIT(idle) : 0, \ |
| 119 | + .active_wakeup = wakeup, \ |
| 120 | +} |
| 121 | + |
112 | 122 | #define DOMAIN_RK3288(pwr, status, req, wakeup) \ |
113 | 123 | DOMAIN(pwr, status, req, req, (req) + 16, wakeup) |
114 | 124 |
|
@@ -754,6 +764,16 @@ static int rockchip_pm_domain_probe(struct platform_device *pdev) |
754 | 764 | return error; |
755 | 765 | } |
756 | 766 |
|
| 767 | +static const struct rockchip_domain_info rk3036_pm_domains[] = { |
| 768 | + [RK3036_PD_MSCH] = DOMAIN_RK3036(14, 23, 30, true), |
| 769 | + [RK3036_PD_CORE] = DOMAIN_RK3036(13, 17, 24, false), |
| 770 | + [RK3036_PD_PERI] = DOMAIN_RK3036(12, 18, 25, false), |
| 771 | + [RK3036_PD_VIO] = DOMAIN_RK3036(11, 19, 26, false), |
| 772 | + [RK3036_PD_VPU] = DOMAIN_RK3036(10, 20, 27, false), |
| 773 | + [RK3036_PD_GPU] = DOMAIN_RK3036(9, 21, 28, false), |
| 774 | + [RK3036_PD_SYS] = DOMAIN_RK3036(8, 22, 29, false), |
| 775 | +}; |
| 776 | + |
757 | 777 | static const struct rockchip_domain_info rk3128_pm_domains[] = { |
758 | 778 | [RK3128_PD_CORE] = DOMAIN_RK3288(0, 0, 4, false), |
759 | 779 | [RK3128_PD_MSCH] = DOMAIN_RK3288(-1, -1, 6, true), |
@@ -829,6 +849,15 @@ static const struct rockchip_domain_info rk3399_pm_domains[] = { |
829 | 849 | [RK3399_PD_SDIOAUDIO] = DOMAIN_RK3399(31, 31, 29, true), |
830 | 850 | }; |
831 | 851 |
|
| 852 | +static const struct rockchip_pmu_info rk3036_pmu = { |
| 853 | + .req_offset = 0x148, |
| 854 | + .idle_offset = 0x14c, |
| 855 | + .ack_offset = 0x14c, |
| 856 | + |
| 857 | + .num_domains = ARRAY_SIZE(rk3036_pm_domains), |
| 858 | + .domain_info = rk3036_pm_domains, |
| 859 | +}; |
| 860 | + |
832 | 861 | static const struct rockchip_pmu_info rk3128_pmu = { |
833 | 862 | .pwr_offset = 0x04, |
834 | 863 | .status_offset = 0x08, |
@@ -918,6 +947,10 @@ static const struct rockchip_pmu_info rk3399_pmu = { |
918 | 947 | }; |
919 | 948 |
|
920 | 949 | static const struct of_device_id rockchip_pm_domain_dt_match[] = { |
| 950 | + { |
| 951 | + .compatible = "rockchip,rk3036-power-controller", |
| 952 | + .data = (void *)&rk3036_pmu, |
| 953 | + }, |
921 | 954 | { |
922 | 955 | .compatible = "rockchip,rk3128-power-controller", |
923 | 956 | .data = (void *)&rk3128_pmu, |
|
0 commit comments