xref: /rk3399_ARM-atf/include/plat/marvell/odyssey/csr/ody-warn.h (revision 12d80bbbf6031228bdd910eccb03bb185e8df527)
1*4b8b8d74SJaiprakash Singh /***********************license start***********************************
2*4b8b8d74SJaiprakash Singh * Copyright (C) 2021-2026 Marvell.
3*4b8b8d74SJaiprakash Singh * SPDX-License-Identifier: BSD-3-Clause
4*4b8b8d74SJaiprakash Singh * https://spdx.org/licenses
5*4b8b8d74SJaiprakash Singh ***********************license end**************************************/
6*4b8b8d74SJaiprakash Singh 
7*4b8b8d74SJaiprakash Singh /**
8*4b8b8d74SJaiprakash Singh  * @file
9*4b8b8d74SJaiprakash Singh  *
10*4b8b8d74SJaiprakash Singh  * Functions for reporting errors and warnings.
11*4b8b8d74SJaiprakash Singh  *
12*4b8b8d74SJaiprakash Singh  * <hr>$Revision: 49448 $<hr>
13*4b8b8d74SJaiprakash Singh  *
14*4b8b8d74SJaiprakash Singh  * @defgroup stdio Standard IO related functions
15*4b8b8d74SJaiprakash Singh  * @{
16*4b8b8d74SJaiprakash Singh  */
17*4b8b8d74SJaiprakash Singh 
18*4b8b8d74SJaiprakash Singh extern void __ody_die(void) __attribute__ ((noreturn));
19*4b8b8d74SJaiprakash Singh extern void ody_fatal(const char *format, ...) __attribute__ ((noreturn, format(printf, 1, 2)));
20*4b8b8d74SJaiprakash Singh extern void ody_error(const char *format, ...) __attribute__ ((format(printf, 1, 2)));
21*4b8b8d74SJaiprakash Singh extern void ody_warn(const char *format, ...) __attribute__ ((format(printf, 1, 2)));
22*4b8b8d74SJaiprakash Singh extern void __ody_trace_printf(const char *format, ...) __attribute__ ((format(printf, 1, 2)));
23*4b8b8d74SJaiprakash Singh #define ody_warn_if(expression, format, ...) do { if (ody_unlikely(expression)) ody_warn (format, ##__VA_ARGS__); } while (0)
24*4b8b8d74SJaiprakash Singh 
25*4b8b8d74SJaiprakash Singh /* The following defines control detailed tracing of various parts of the
26*4b8b8d74SJaiprakash Singh    ODY. Each one can be enabled(1) or disabled(0) independently. These
27*4b8b8d74SJaiprakash Singh    should be disabled unless you are trying to debug something specific */
28*4b8b8d74SJaiprakash Singh 
29*4b8b8d74SJaiprakash Singh typedef enum {
30*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_DRAM,              /* DRAM initialization */
31*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_DRAM_TEST,         /* DRAM test code */
32*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_INIT,              /* Early initialization, before main() */
33*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_ECAM,              /* ECAM initialization */
34*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_QLM,               /* QLM related debug */
35*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_EMMC,              /* eMMC related debug */
36*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_PCIE,              /* PCIe link init */
37*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_PCIE_CONFIG,       /* PCIe config space reads / writes */
38*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_SPI,               /* SPI related debug */
39*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_ENV,               /* Environment variables related debug */
40*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_DEVICE,            /* ECAM based device framework */
41*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_DEVICE_SCAN,       /* ECAM based device scanning detail */
42*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_FDT_OS,            /* Device tree passed to OS */
43*4b8b8d74SJaiprakash Singh 	TRACE_ENABLE_USB_XHCI,          /* USB XHCI block */
44*4b8b8d74SJaiprakash Singh 	__TRACE_ENABLE_LAST,            /* Must always be last value */
45*4b8b8d74SJaiprakash Singh } ody_trace_enable_t;
46*4b8b8d74SJaiprakash Singh 
47*4b8b8d74SJaiprakash Singh /* See ody-config.c to change the trace level for before config files are loaded */
48*4b8b8d74SJaiprakash Singh extern uint64_t ody_trace_enables;
49*4b8b8d74SJaiprakash Singh 
50*4b8b8d74SJaiprakash Singh /**
51*4b8b8d74SJaiprakash Singh  * Macro for low level tracing of ODY functions. When enabled,
52*4b8b8d74SJaiprakash Singh  * these translate to printf() calls. The "area" is a string
53*4b8b8d74SJaiprakash Singh  * that is appended to "TRACE_ENABLE_" to figure out which
54*4b8b8d74SJaiprakash Singh  * enable macro to use. The macro expects a ';' after it.
55*4b8b8d74SJaiprakash Singh  */
56*4b8b8d74SJaiprakash Singh #define TRACE(area, format, ...) do {                       \
57*4b8b8d74SJaiprakash Singh 	if (ody_trace_enables & (1ull << TRACE_ENABLE_##area))  \
58*4b8b8d74SJaiprakash Singh 	__ody_trace_printf(#area ": " format, ##__VA_ARGS__);   \
59*4b8b8d74SJaiprakash Singh } while (0)
60*4b8b8d74SJaiprakash Singh 
61*4b8b8d74SJaiprakash Singh /* The following defines control detailed tracing of various parts of the
62*4b8b8d74SJaiprakash Singh    ATF. Each one can be enabled(1) or disabled(0) independently. These
63*4b8b8d74SJaiprakash Singh    should be disabled unless you are trying to debug something specific.
64*4b8b8d74SJaiprakash Singh 
65*4b8b8d74SJaiprakash Singh    Implementation note: this order must match ATF 'mrvl_tf_log_module_e'.
66*4b8b8d74SJaiprakash Singh */
67*4b8b8d74SJaiprakash Singh typedef enum {
68*4b8b8d74SJaiprakash Singh 	/* gap (matches ATF mrvl_tf_log_module_e) */
69*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_RVU = 9,  /* ATF RVU driver messages */
70*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_PARSE,    /* ATF platform parsing messages */
71*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_PLAT_ECAM,/* ATF plat-specific ecam driver messages */
72*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_GEN_ECAM, /* ATF generic ecam driver messages */
73*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_UPDATE,   /* ATF update driver */
74*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_ETH_CMD,  /* ATF network driver messages */
75*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_ETH_LINK, /* ATF network driver link message */
76*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_ETH_LINK_MGMT, /* ATF ECP link interface */
77*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_GSERM,    /* ATF GSERM driver messages */
78*4b8b8d74SJaiprakash Singh 	ATF_TRACE_MODULE_ETH_SFP_MGMT,    /* ATF SFP mgmt driver messages */
79*4b8b8d74SJaiprakash Singh 	__ATF_TRACE_MODULE_LAST,   /* Must always be last value */
80*4b8b8d74SJaiprakash Singh } atf_trace_module_t;
81*4b8b8d74SJaiprakash Singh 
82*4b8b8d74SJaiprakash Singh /** @} */
83