1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*
- * Copyright (c) 2006-2024, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2024-03-21 qiujingbao the first version
- */
- #include <rtthread.h>
- #include <rtdevice.h>
- #define DBG_TAG "DRV.POR"
- #define DBG_LVL DBG_WARNING
- #include <rtdbg.h>
- #include "mmio.h"
- #define CVI_RTC_CTRL_BASE 0x05025000U
- #define CVI_RTC_REG_BASE 0x05026000U
- #define RTC_CTRL0_UNLOCKKEY 0x4
- #define RTC_CTRL0 0x8
- #define RTC_APB_BUSY_SEL 0x3C
- #define RTC_EN_WARM_RST_REQ 0xCC
- #define RSM_STATE 0xD4
- #define ST_ON 0x3
- static int cvi_restart(void)
- {
- /* Enable power suspend wakeup source mask */
- mmio_write_32(CVI_RTC_REG_BASE + RTC_APB_BUSY_SEL,0x1);
- /* unlock register */
- mmio_write_32(CVI_RTC_CTRL_BASE + RTC_CTRL0_UNLOCKKEY, 0xAB18);
- mmio_write_32(CVI_RTC_REG_BASE + RTC_EN_WARM_RST_REQ, 0x1);
- while (mmio_read_32(CVI_RTC_REG_BASE + RTC_EN_WARM_RST_REQ) != 0x01);
- while (mmio_read_32(CVI_RTC_REG_BASE + RSM_STATE) != ST_ON);
- mmio_write_32( CVI_RTC_CTRL_BASE + RTC_CTRL0,0xFFFF0800 | (0x1 << 4));
- return 0;
- }
- void rt_hw_cpu_reset(void)
- {
- cvi_restart();
- while (1);
- }
- MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reboot, reset machine);
|