|
@@ -23,6 +23,10 @@
|
|
|
#include "prm33xx.h"
|
|
|
#include "prm-regbits-33xx.h"
|
|
|
|
|
|
+#define AM33XX_PRM_RSTCTRL_OFFSET 0x0000
|
|
|
+
|
|
|
+#define AM33XX_RST_GLOBAL_WARM_SW_MASK (1 << 0)
|
|
|
+
|
|
|
/* Read a register in a PRM instance */
|
|
|
u32 am33xx_prm_read_reg(s16 inst, u16 idx)
|
|
|
{
|
|
@@ -332,6 +336,23 @@ static int am33xx_check_vcvp(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * am33xx_prm_global_warm_sw_reset - reboot the device via warm reset
|
|
|
+ *
|
|
|
+ * Immediately reboots the device through warm reset.
|
|
|
+ */
|
|
|
+void am33xx_prm_global_warm_sw_reset(void)
|
|
|
+{
|
|
|
+ am33xx_prm_rmw_reg_bits(AM33XX_RST_GLOBAL_WARM_SW_MASK,
|
|
|
+ AM33XX_RST_GLOBAL_WARM_SW_MASK,
|
|
|
+ AM33XX_PRM_DEVICE_MOD,
|
|
|
+ AM33XX_PRM_RSTCTRL_OFFSET);
|
|
|
+
|
|
|
+ /* OCP barrier */
|
|
|
+ (void)am33xx_prm_read_reg(AM33XX_PRM_DEVICE_MOD,
|
|
|
+ AM33XX_PRM_RSTCTRL_OFFSET);
|
|
|
+}
|
|
|
+
|
|
|
struct pwrdm_ops am33xx_pwrdm_operations = {
|
|
|
.pwrdm_set_next_pwrst = am33xx_pwrdm_set_next_pwrst,
|
|
|
.pwrdm_read_next_pwrst = am33xx_pwrdm_read_next_pwrst,
|