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
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; |
|
}
|
|
|