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;
....@@ -60,18 +62,21 @@
6062 { .compatible = "rockchip,pm-rk3368",},
6163 { .compatible = "rockchip,pm-rk3399",},
6264 { .compatible = "rockchip,pm-rk3528",},
65
+ { .compatible = "rockchip,pm-rk3562",},
6366 { .compatible = "rockchip,pm-rk3568",},
67
+ { .compatible = "rockchip,pm-rk3588",},
6468 { .compatible = "rockchip,pm-rv1126",},
6569 { },
6670 };
6771
72
+#ifndef MODULE
6873 static void rockchip_pm_virt_pwroff_prepare(void)
6974 {
7075 int error;
7176
7277 regulator_suspend_prepare(PM_SUSPEND_MEM);
7378
74
- error = disable_nonboot_cpus();
79
+ error = suspend_disable_secondary_cpus();
7580 if (error) {
7681 pr_err("Disable nonboot cpus failed!\n");
7782 return;
....@@ -159,6 +164,7 @@
159164
160165 return 0;
161166 }
167
+#endif
162168
163169 static int pm_config_probe(struct platform_device *pdev)
164170 {
....@@ -169,10 +175,15 @@
169175 int gpio_temp[10];
170176 u32 sleep_debug_en = 0;
171177 u32 apios_suspend = 0;
178
+ u32 io_ret_config = 0;
179
+ u32 sleep_pin_config[2] = {0};
180
+#ifndef MODULE
172181 u32 virtual_poweroff_en = 0;
182
+#endif
173183 enum of_gpio_flags flags;
174184 int i = 0;
175185 int length;
186
+ int ret;
176187
177188 match_id = of_match_node(pm_match_table, pdev->dev.of_node);
178189 if (!match_id)
....@@ -240,6 +251,27 @@
240251 0);
241252
242253 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,
243275 "rockchip,virtual-poweroff",
244276 &virtual_poweroff_en, 1) &&
245277 virtual_poweroff_en)
....@@ -249,10 +281,12 @@
249281 parse_sleep_config(node, i);
250282 parse_on_off_regulator(node, i);
251283 }
284
+#endif
252285
253286 return 0;
254287 }
255288
289
+#ifndef MODULE
256290 static int pm_config_prepare(struct device *dev)
257291 {
258292 int i;
....@@ -300,13 +334,16 @@
300334 static const struct dev_pm_ops rockchip_pm_ops = {
301335 .prepare = pm_config_prepare,
302336 };
337
+#endif
303338
304339 static struct platform_driver pm_driver = {
305340 .probe = pm_config_probe,
306341 .driver = {
307342 .name = "rockchip-pm",
308343 .of_match_table = pm_match_table,
344
+#ifndef MODULE
309345 .pm = &rockchip_pm_ops,
346
+#endif
310347 },
311348 };
312349