~aleteoryx/muditaos

ref: eda92600a7df852e18bdb44388966248a4af3c77 muditaos/module-bsp/board/rt1051/common/chip.cpp -rw-r--r-- 2.5 KiB
eda92600 — Maciej Gibowicz [BH-2095] Add quote interval setting 10 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md

#include "chip.hpp"

#include <log/log.hpp>

#include <map>
#include <string>

namespace
{
    const std::map<std::uint32_t, std::string> bootReasonDef = {
        {SRC_SRSR_IPP_RESET_B_SHIFT, "ipp_reset_b pin (Power-up sequence)"},
        {SRC_SRSR_LOCKUP_SYSRESETREQ_SHIFT, "CPU lockup or software setting of SYSRESETREQ"},
        {SRC_SRSR_CSU_RESET_B_SHIFT, "csu_reset_b input"},
        {SRC_SRSR_IPP_USER_RESET_B_SHIFT, "ipp_user_reset_b qualified reset"},
        {SRC_SRSR_WDOG_RST_B_SHIFT, "IC Watchdog Time-out reset"},
        {SRC_SRSR_JTAG_RST_B_SHIFT, "HIGH - Z JTAG reset"},
        {SRC_SRSR_JTAG_SW_RST_SHIFT, "JTAG software reset"},
        {SRC_SRSR_WDOG3_RST_B_SHIFT, "IC Watchdog3 Time-out reset"},
        {SRC_SRSR_TEMPSENSE_RST_B_SHIFT, "Tamper Sensor software reset"}};
} // namespace

void clearAndPrintBootReason()
{
    // get boot reason
    std::uint32_t SRSR_val = SRC_GetResetStatusFlags(SRC);

    LOG_INFO("Boot reason: %" PRIu32, SRSR_val);
    if (SRSR_val & (1UL << SRC_SRSR_IPP_RESET_B_SHIFT))
        LOG_INFO("\t*%s", bootReasonDef.at(SRC_SRSR_IPP_RESET_B_SHIFT).c_str());
    if (SRSR_val & (1UL << SRC_SRSR_LOCKUP_SYSRESETREQ_SHIFT)) {
        LOG_WARN("\t*%s", bootReasonDef.at(SRC_SRSR_LOCKUP_SYSRESETREQ_SHIFT).c_str());
        LOG_INFO("\tGPR_5 %" PRIu32, SRC_GetGeneralPurposeRegister(SRC, 5));
    }
    if (SRSR_val & (1UL << SRC_SRSR_CSU_RESET_B_SHIFT))
        LOG_INFO("\t*%s", bootReasonDef.at(SRC_SRSR_CSU_RESET_B_SHIFT).c_str());
    if (SRSR_val & (1UL << SRC_SRSR_IPP_USER_RESET_B_SHIFT))
        LOG_INFO("\t*%s", bootReasonDef.at(SRC_SRSR_IPP_USER_RESET_B_SHIFT).c_str());
    if (SRSR_val & (1UL << SRC_SRSR_WDOG_RST_B_SHIFT))
        LOG_WARN("\t*%s", bootReasonDef.at(SRC_SRSR_WDOG_RST_B_SHIFT).c_str());
    if (SRSR_val & (1UL << SRC_SRSR_JTAG_RST_B_SHIFT))
        LOG_INFO("\t*%s", bootReasonDef.at(SRC_SRSR_JTAG_RST_B_SHIFT).c_str());
    if (SRSR_val & (1UL << SRC_SRSR_JTAG_SW_RST_SHIFT))
        LOG_INFO("\t*%s", bootReasonDef.at(SRC_SRSR_JTAG_SW_RST_SHIFT).c_str());
    if (SRSR_val & (1UL << SRC_SRSR_WDOG3_RST_B_SHIFT))
        LOG_INFO("\t*%s", bootReasonDef.at(SRC_SRSR_WDOG3_RST_B_SHIFT).c_str());
    if (SRSR_val & (1UL << SRC_SRSR_TEMPSENSE_RST_B_SHIFT))
        LOG_WARN("\t*%s", bootReasonDef.at(SRC_SRSR_TEMPSENSE_RST_B_SHIFT).c_str());

    // clear all set bits
    SRC_ClearResetStatusFlags(SRC, SRSR_val);
}