xref: /rk3399_rockchip-uboot/drivers/mtd/ubi/debug.h (revision 1a4596601fd395f3afb8f82f3f840c5e00bdd57a)
1961df833SKyungmin Park /*
2961df833SKyungmin Park  * Copyright (c) International Business Machines Corp., 2006
3961df833SKyungmin Park  *
4*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
5961df833SKyungmin Park  *
6961df833SKyungmin Park  * Author: Artem Bityutskiy (Битюцкий Артём)
7961df833SKyungmin Park  */
8961df833SKyungmin Park 
9961df833SKyungmin Park #ifndef __UBI_DEBUG_H__
10961df833SKyungmin Park #define __UBI_DEBUG_H__
11961df833SKyungmin Park 
12961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG
13961df833SKyungmin Park #ifdef UBI_LINUX
14961df833SKyungmin Park #include <linux/random.h>
15961df833SKyungmin Park #endif
16961df833SKyungmin Park 
17961df833SKyungmin Park #define ubi_assert(expr)  BUG_ON(!(expr))
18961df833SKyungmin Park #define dbg_err(fmt, ...) ubi_err(fmt, ##__VA_ARGS__)
19961df833SKyungmin Park #else
20961df833SKyungmin Park #define ubi_assert(expr)  ({})
21961df833SKyungmin Park #define dbg_err(fmt, ...) ({})
22961df833SKyungmin Park #endif
23961df833SKyungmin Park 
24961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_DISABLE_BGT
25961df833SKyungmin Park #define DBG_DISABLE_BGT 1
26961df833SKyungmin Park #else
27961df833SKyungmin Park #define DBG_DISABLE_BGT 0
28961df833SKyungmin Park #endif
29961df833SKyungmin Park 
30961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_MSG
31961df833SKyungmin Park /* Generic debugging message */
32961df833SKyungmin Park #define dbg_msg(fmt, ...)                                    \
33961df833SKyungmin Park 	printk(KERN_DEBUG "UBI DBG: %s: " fmt "\n", \
34961df833SKyungmin Park 	       __FUNCTION__, ##__VA_ARGS__)
35961df833SKyungmin Park 
36961df833SKyungmin Park #define ubi_dbg_dump_stack() dump_stack()
37961df833SKyungmin Park 
38961df833SKyungmin Park struct ubi_ec_hdr;
39961df833SKyungmin Park struct ubi_vid_hdr;
40961df833SKyungmin Park struct ubi_volume;
41961df833SKyungmin Park struct ubi_vtbl_record;
42961df833SKyungmin Park struct ubi_scan_volume;
43961df833SKyungmin Park struct ubi_scan_leb;
44961df833SKyungmin Park struct ubi_mkvol_req;
45961df833SKyungmin Park 
46961df833SKyungmin Park void ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr);
47961df833SKyungmin Park void ubi_dbg_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr);
48961df833SKyungmin Park void ubi_dbg_dump_vol_info(const struct ubi_volume *vol);
49961df833SKyungmin Park void ubi_dbg_dump_vtbl_record(const struct ubi_vtbl_record *r, int idx);
50961df833SKyungmin Park void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv);
51961df833SKyungmin Park void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type);
52961df833SKyungmin Park void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req);
53961df833SKyungmin Park 
54961df833SKyungmin Park #else
55961df833SKyungmin Park 
56961df833SKyungmin Park #define dbg_msg(fmt, ...)    ({})
57961df833SKyungmin Park #define ubi_dbg_dump_stack() ({})
58961df833SKyungmin Park #define ubi_dbg_dump_ec_hdr(ec_hdr)      ({})
59961df833SKyungmin Park #define ubi_dbg_dump_vid_hdr(vid_hdr)    ({})
60961df833SKyungmin Park #define ubi_dbg_dump_vol_info(vol)       ({})
61961df833SKyungmin Park #define ubi_dbg_dump_vtbl_record(r, idx) ({})
62961df833SKyungmin Park #define ubi_dbg_dump_sv(sv)              ({})
63961df833SKyungmin Park #define ubi_dbg_dump_seb(seb, type)      ({})
64961df833SKyungmin Park #define ubi_dbg_dump_mkvol_req(req)      ({})
65961df833SKyungmin Park 
66961df833SKyungmin Park #endif /* CONFIG_MTD_UBI_DEBUG_MSG */
67961df833SKyungmin Park 
68961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_MSG_EBA
69961df833SKyungmin Park /* Messages from the eraseblock association unit */
70961df833SKyungmin Park #define dbg_eba(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
71961df833SKyungmin Park #else
72961df833SKyungmin Park #define dbg_eba(fmt, ...) ({})
73961df833SKyungmin Park #endif
74961df833SKyungmin Park 
75961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_MSG_WL
76961df833SKyungmin Park /* Messages from the wear-leveling unit */
77961df833SKyungmin Park #define dbg_wl(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
78961df833SKyungmin Park #else
79961df833SKyungmin Park #define dbg_wl(fmt, ...) ({})
80961df833SKyungmin Park #endif
81961df833SKyungmin Park 
82961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_MSG_IO
83961df833SKyungmin Park /* Messages from the input/output unit */
84961df833SKyungmin Park #define dbg_io(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
85961df833SKyungmin Park #else
86961df833SKyungmin Park #define dbg_io(fmt, ...) ({})
87961df833SKyungmin Park #endif
88961df833SKyungmin Park 
89961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_MSG_BLD
90961df833SKyungmin Park /* Initialization and build messages */
91961df833SKyungmin Park #define dbg_bld(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
92961df833SKyungmin Park #else
93961df833SKyungmin Park #define dbg_bld(fmt, ...) ({})
94961df833SKyungmin Park #endif
95961df833SKyungmin Park 
96961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_BITFLIPS
97961df833SKyungmin Park /**
98961df833SKyungmin Park  * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip.
99961df833SKyungmin Park  *
100961df833SKyungmin Park  * Returns non-zero if a bit-flip should be emulated, otherwise returns zero.
101961df833SKyungmin Park  */
102961df833SKyungmin Park static inline int ubi_dbg_is_bitflip(void)
103961df833SKyungmin Park {
104961df833SKyungmin Park 	return !(random32() % 200);
105961df833SKyungmin Park }
106961df833SKyungmin Park #else
107961df833SKyungmin Park #define ubi_dbg_is_bitflip() 0
108961df833SKyungmin Park #endif
109961df833SKyungmin Park 
110961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_WRITE_FAILURES
111961df833SKyungmin Park /**
112961df833SKyungmin Park  * ubi_dbg_is_write_failure - if it is time to emulate a write failure.
113961df833SKyungmin Park  *
114961df833SKyungmin Park  * Returns non-zero if a write failure should be emulated, otherwise returns
115961df833SKyungmin Park  * zero.
116961df833SKyungmin Park  */
117961df833SKyungmin Park static inline int ubi_dbg_is_write_failure(void)
118961df833SKyungmin Park {
119961df833SKyungmin Park 	return !(random32() % 500);
120961df833SKyungmin Park }
121961df833SKyungmin Park #else
122961df833SKyungmin Park #define ubi_dbg_is_write_failure() 0
123961df833SKyungmin Park #endif
124961df833SKyungmin Park 
125961df833SKyungmin Park #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_ERASE_FAILURES
126961df833SKyungmin Park /**
127961df833SKyungmin Park  * ubi_dbg_is_erase_failure - if its time to emulate an erase failure.
128961df833SKyungmin Park  *
129961df833SKyungmin Park  * Returns non-zero if an erase failure should be emulated, otherwise returns
130961df833SKyungmin Park  * zero.
131961df833SKyungmin Park  */
132961df833SKyungmin Park static inline int ubi_dbg_is_erase_failure(void)
133961df833SKyungmin Park {
134961df833SKyungmin Park 		return !(random32() % 400);
135961df833SKyungmin Park }
136961df833SKyungmin Park #else
137961df833SKyungmin Park #define ubi_dbg_is_erase_failure() 0
138961df833SKyungmin Park #endif
139961df833SKyungmin Park 
140961df833SKyungmin Park #endif /* !__UBI_DEBUG_H__ */
141