[U-Boot] [PATCH] debug_print macros support
Prafulla Wadaskar
prafulla at marvell.com
Fri Apr 3 13:49:17 CEST 2009
From: prafulla_wadaskar <prafulla at marvell.com>
This debug_prints strategy provides-
A. pre-formatted debug and print macros to be used in a code
B. flexiblility to enable selective debug prints without
modifying a source code
For more details refer doc/README.debug_prints
Signed-off-by: prafulla_wadaskar <prafulla at marvell.com>
---
config.mk | 6 +++
doc/README.debug_prints | 89 +++++++++++++++++++++++++++++++++++++++++++++++
include/debug_prints.h | 83 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 178 insertions(+), 0 deletions(-)
create mode 100644 doc/README.debug_prints
create mode 100644 include/debug_prints.h
diff --git a/config.mk b/config.mk
index b1254e9..6e85cb5 100644
--- a/config.mk
+++ b/config.mk
@@ -198,6 +198,12 @@ ifeq ($(PCI_CLOCK),PCI_66M)
CFLAGS := $(CFLAGS) -DPCI_66M
endif
+CFLAGS := $(CFLAGS) $(shell for dbgprn in $(DEBUG_PRINTS); do \
+ if [ "$$dbgprn" != "" ]; then \
+ echo "-D$$dbgprn "; \
+ fi ; \
+ done)
+
#########################################################################
export HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE \
diff --git a/doc/README.debug_prints b/doc/README.debug_prints
new file mode 100644
index 0000000..f03cb4c
--- /dev/null
+++ b/doc/README.debug_prints
@@ -0,0 +1,89 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Prafulla Wadaskar <prafulla at marvell.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+#
+
+1.1 Debugging Strategy
+======================
+This debug strategy provides predefined macros to be used in code
+
+DEBUGGING LEVELS
+0 To disable all debug messages
+1 To enable normal debug macro- debug_print
+2 To enable flow trace debug macro- debug_print_ftrace
+4 To enable interrupt and timer debug macroc- debug_print4
+8 To enable any special debug messages defined by macro- debug_print8
+
+1.2 How to use Debugging strategy in a code ?
+=============================================
+
+1. make sure #include <debug_prints.h> line present in c code
+2. define following lines at the top in your code
+ #ifndef <DBG_FLAG_NAME>
+ #define <DBG_FLAG_NAME> 0
+ #endif
+ #define DEBUG_PRINT <DBG_FLAG_NAME>
+ DBG_FLAG_NAME is an identification that is used during build to enable
+ debug prints
+3. define DEBUG_PFX to a small string to identify debug message in a code
+ This is an optional setting, if you don't define DEBUG_PFX,
+ by default "dbg: " will be used.
+4. use the debug_print, debug_ftrace, debug_print4, debug_print8 macros
+ in a code wjere ever required
+
+1.3 How to activate debug messages?
+====================================
+
+Debug messages can be activated during build time by passing desired
+debug level
+
+1. Enabling Debug messages by passing additional parameter to make
+ This is a recommended method of debug messages implimentation.
+ this method give flexibility to enable/disable debug messages
+ during build without modifying code
+ Additional command line parameters:-
+ (a) To enable debug_print messages:-
+ DEBUG_PRINTS=<DBG_FLAG_NAME>
+ (b) To enable debug_print_ftrace function:-
+ DEBUG_PRINTS=<DBG_FLAG_NAME>=2
+ (c) To enable debug_print4 messages:-
+ DEBUG_PRINTS=<DBG_FLAG_NAME>=4
+ (d) To enable debug_print8 messages:-
+ DEBUG_PRINTS=<DBG_FLAG_NAME>=8
+ (e) you can enable selective debug prints.
+ for ex. if you want to enable debug_print and debug_print4 messages
+ then you can pass ORed debug level value (i.e. 1 for debug_print and
+ 4 for debug_print4 (1 | 4 = 5)
+ DEBUG_PRINTS=<DBG_FLAG_NAME>=5
+ (f) if you want to enable debug_print defined in more than one c files
+ then you can pass additional debug flag names as
+ DEBUG_PRINTS="<DBG_FLAG_NAME1>=1 <DBG_FLAG_NAME2>=2
+ the above parameters will enable debug_print messages in a code where
+ <DBG_FLAG_NAME1> is defined and will enable debug_print_ftrace functions
+ in a code where <DBG_FLAG_NAME2> is defined
+
+2. Enabling Debug messages by hardcoding in source file
+ This is simplest implimentation, just define DEBUG_PRINT to
+ desired debug level and compile the code, the disadvantage of this
+ method is, it does not offer flexibility and code with debug message
+ may become part of your release if not taken care properly.
+
diff --git a/include/debug_prints.h b/include/debug_prints.h
new file mode 100644
index 0000000..8a374ff
--- /dev/null
+++ b/include/debug_prints.h
@@ -0,0 +1,83 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla at marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * refer doc/README.debug_prints for more details
+ */
+
+#ifndef __DEBUG_PRINTS_H__
+#define __DEBUG_PRINTS_H__
+
+#ifndef KERN_ERR
+#define KERN_ERR "Err :"
+#endif
+
+#ifndef KERN_INFO
+#define KERN_INFO "Info:"
+#endif
+
+#ifndef KERN_WARNING
+#define KERN_WARNING "Warn:"
+#endif
+
+#ifndef KERN_DBG
+#define KERN_DBG "dbg :"
+#endif
+
+#ifndef DEBUG_PRINT_PFX
+#define DEBUG_PRINT_PFX ""
+#endif
+
+#ifndef DEBUG_PRINT
+#define DEBUG_PRINT 0
+#endif
+
+#define error_print(format, arg...) \
+ printf(KERN_ERR DEBUG_PRINT_PFX format "\n" , ## arg)
+#define info_print(format, arg...) \
+ printf(KERN_INFO DEBUG_PRINT_PFX format "\n" , ## arg)
+#define warn_print(format, arg...) \
+ printf(KERN_WARNING DEBUG_PRINT_PFX format "\n" , ## arg)
+
+#define debug_print(format, arg...) \
+ (DEBUG_PRINT & 1) ? \
+ (printf(KERN_DBG DEBUG_PRINT_PFX format "\n" , ## arg))\
+ : ({do {} while (0);})
+
+#define debug_print_ftrace(format, arg...) \
+ (DEBUG_PRINT & 2) ? \
+ (printf(KERN_DBG DEBUG_PRINT_PFX "%s() called\n", \
+ ( __FUNCTION__ ))) : ({do {} while (0);})
+
+#define debug_print4(format, arg...) \
+ (DEBUG_PRINT & 4) ? \
+ (printf(KERN_DBG DEBUG_PRINT_PFX format "\n" , ## arg))\
+ : ({do {} while (0);})
+
+#define debug_print8(format, arg...) \
+ (DEBUG_PRINT & 8) ? \
+ (printf(KERN_DBG DEBUG_PRINT_PFX format "\n" , ## arg))\
+ : ({do {} while (0);})
+
+#endif /* __DEBUG_PRINTS_H__ */
--
1.5.3.3
More information about the U-Boot
mailing list