Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

67 lines
1.2 KiB

/*
* Copyright (c) 2025 Baylibre, SAS
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/drivers/hwinfo.h>
#include <string.h>
#include <driverlib/pmctl.h>
int z_impl_hwinfo_get_supported_reset_cause(uint32_t *supported)
{
*supported = (RESET_PIN
| RESET_SOFTWARE
| RESET_BROWNOUT
| RESET_POR
| RESET_WATCHDOG
| RESET_DEBUG
| RESET_CPU_LOCKUP
| RESET_CLOCK
| RESET_TEMPERATURE);
return 0;
}
int z_impl_hwinfo_get_reset_cause(uint32_t *cause)
{
uint32_t rststa = PMCTLGetResetReason();
switch (rststa) {
case PMCTL_RESET_PIN:
*cause = RESET_PIN;
break;
case PMCTL_RESET_SYSTEM:
*cause = RESET_SOFTWARE;
break;
case PMCTL_RESET_VDDR:
case PMCTL_RESET_VDDS:
*cause = RESET_BROWNOUT;
break;
case PMCTL_RESET_POR:
*cause = RESET_POR;
break;
case PMCTL_RESET_WATCHDOG:
*cause = RESET_WATCHDOG;
break;
case PMCTL_RESET_SWD:
case PMCTL_RESET_SHUTDOWN_SWD:
*cause = RESET_DEBUG;
break;
case PMCTL_RESET_LOCKUP:
*cause = RESET_CPU_LOCKUP;
break;
case PMCTL_RESET_LFXT:
*cause = RESET_CLOCK;
break;
case PMCTL_RESET_TSD:
*cause = RESET_TEMPERATURE;
break;
default:
*cause = 0;
break;
}
return 0;
}