hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/soc/rockchip/rockchip_pm_config.c
....@@ -34,6 +34,7 @@
3434 RK_PM_STATE_MAX
3535 };
3636
37
+#ifndef MODULE
3738 static const char * const pm_state_str[RK_PM_STATE_MAX] = {
3839 [RK_PM_MEM] = "mem",
3940 [RK_PM_MEM_LITE] = "mem-lite",
....@@ -44,6 +45,7 @@
4445 struct regulator_dev *on_reg_list[MAX_ON_OFF_REG_NUM];
4546 struct regulator_dev *off_reg_list[MAX_ON_OFF_REG_NUM];
4647 } on_off_regs_list[RK_PM_STATE_MAX];
48
+#endif
4749
4850 static struct rk_sleep_config {
4951 u32 mode_config;
....@@ -59,18 +61,22 @@
5961 { .compatible = "rockchip,pm-rk3328",},
6062 { .compatible = "rockchip,pm-rk3368",},
6163 { .compatible = "rockchip,pm-rk3399",},
64
+ { .compatible = "rockchip,pm-rk3528",},
65
+ { .compatible = "rockchip,pm-rk3562",},
6266 { .compatible = "rockchip,pm-rk3568",},
67
+ { .compatible = "rockchip,pm-rk3588",},
6368 { .compatible = "rockchip,pm-rv1126",},
6469 { },
6570 };
6671
72
+#ifndef MODULE
6773 static void rockchip_pm_virt_pwroff_prepare(void)
6874 {
6975 int error;
7076
7177 regulator_suspend_prepare(PM_SUSPEND_MEM);
7278
73
- error = disable_nonboot_cpus();
79
+ error = suspend_disable_secondary_cpus();
7480 if (error) {
7581 pr_err("Disable nonboot cpus failed!\n");
7682 return;
....@@ -158,6 +164,7 @@
158164
159165 return 0;
160166 }
167
+#endif
161168
162169 static int pm_config_probe(struct platform_device *pdev)
163170 {
....@@ -168,10 +175,15 @@
168175 int gpio_temp[10];
169176 u32 sleep_debug_en = 0;
170177 u32 apios_suspend = 0;
178
+ u32 io_ret_config = 0;
179
+ u32 sleep_pin_config[2] = {0};
180
+#ifndef MODULE
171181 u32 virtual_poweroff_en = 0;
182
+#endif
172183 enum of_gpio_flags flags;
173184 int i = 0;
174185 int length;
186
+ int ret;
175187
176188 match_id = of_match_node(pm_match_table, pdev->dev.of_node);
177189 if (!match_id)
....@@ -239,6 +251,27 @@
239251 0);
240252
241253 if (!of_property_read_u32_array(node,
254
+ "rockchip,sleep-io-ret-config",
255
+ &io_ret_config, 1)) {
256
+ ret = sip_smc_set_suspend_mode(SUSPEND_IO_RET_CONFIG, io_ret_config, 0);
257
+ if (ret)
258
+ dev_warn(&pdev->dev,
259
+ "sleep-io-ret-config failed (%d), check parameters or update trust\n",
260
+ ret);
261
+ }
262
+
263
+ if (!of_property_read_u32_array(node,
264
+ "rockchip,sleep-pin-config",
265
+ sleep_pin_config, 2)) {
266
+ ret = sip_smc_set_suspend_mode(SLEEP_PIN_CONFIG, sleep_pin_config[0], sleep_pin_config[1]);
267
+ if (ret)
268
+ dev_warn(&pdev->dev,
269
+ "sleep-pin-config failed (%d), check parameters or update trust\n",
270
+ ret);
271
+ }
272
+
273
+#ifndef MODULE
274
+ if (!of_property_read_u32_array(node,
242275 "rockchip,virtual-poweroff",
243276 &virtual_poweroff_en, 1) &&
244277 virtual_poweroff_en)
....@@ -248,10 +281,12 @@
248281 parse_sleep_config(node, i);
249282 parse_on_off_regulator(node, i);
250283 }
284
+#endif
251285
252286 return 0;
253287 }
254288
289
+#ifndef MODULE
255290 static int pm_config_prepare(struct device *dev)
256291 {
257292 int i;
....@@ -299,13 +334,16 @@
299334 static const struct dev_pm_ops rockchip_pm_ops = {
300335 .prepare = pm_config_prepare,
301336 };
337
+#endif
302338
303339 static struct platform_driver pm_driver = {
304340 .probe = pm_config_probe,
305341 .driver = {
306342 .name = "rockchip-pm",
307343 .of_match_table = pm_match_table,
344
+#ifndef MODULE
308345 .pm = &rockchip_pm_ops,
346
+#endif
309347 },
310348 };
311349