printk: collect printk stuff into <linux/printk.h> with loglevel support
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Sat, 16 Sep 2017 05:10:40 +0000 (14:10 +0900)
committerTom Rini <trini@konsulko.com>
Wed, 4 Oct 2017 14:31:17 +0000 (10:31 -0400)
When we import code from Linux, with regular re-sync planned, we want
to use printk() and pr_*().  U-Boot does not support them in a clean
way.  So, people end up with local macros, or compat headers here and
there, then we occasionally see build errors of definition conflicts.

We have include/linux/compat.h, but putting all sorts of unrelated
things into a single header is just a temporal workaround.  Hence this
patch, to find the best home for all printk variants.  If you want to
use printk() and friends, please include <linux/printk.h>.  This header
is self-contained, and pulls in only a few headers.

When I was testing this clean-up, I noticed the image size exceeded
its platform limit on some boards.  This is because all pr_*() that
were previously defined as no-op in include/linux/mtd/mtd.h (unless
CONFIG_MTD_DEBUG is set), are now enabled.

To make such boards happy, this commit also implements CONFIG_LOGLEVEL.
The concept is similar to the kernel parameter "loglevel".  (Actually,
the Kconfig help message was taken from kernel-paremeter.txt of Linux)
Messages with a loglevel smaller than console loglevel will be printed.

The difference is the loglevel is build-time determined.  To save the
image size, lower priority pr_*() are compiled out.  I set the default
of CONFIG_LOGLEVEL to 6, i.e. pr_notice and higher priority messages
are compiled in.

I adjusted CONFIG_LOGLEVEL to avoid build error for some boards.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
[trini: Add in SPL_LOGLEVEL that is the same as LOGLEVEL]
Signed-off-by: Tom Rini <trini@konsulko.com>
20 files changed:
arch/arm/mach-uniphier/dram_init.c
arch/arm/mach-uniphier/init.h
common/Kconfig
configs/axm_defconfig
configs/colibri_vf_defconfig
configs/corvus_defconfig
configs/omapl138_lcdk_defconfig
configs/openrd_base_defconfig
configs/openrd_client_defconfig
configs/openrd_ultimate_defconfig
configs/taurus_defconfig
configs/vf610twr_defconfig
configs/vf610twr_nand_defconfig
drivers/bios_emulator/include/x86emu/x86emui.h
drivers/usb/dwc3/linux-compat.h
drivers/usb/musb-new/linux-compat.h
include/common.h
include/linux/compat.h
include/linux/mtd/mtd.h
include/linux/printk.h [new file with mode: 0644]

index 32d359321ae2899b6f730c77f5604b63feb75e8d..22136855fa1a4ba04fdca5884b3978327992486b 100644 (file)
@@ -15,9 +15,6 @@
 #include "sg-regs.h"
 #include "soc-info.h"
 
-#define pr_warn(fmt, args...)  printf(fmt, ##args)
-#define pr_err(fmt, args...)   printf(fmt, ##args)
-
 DECLARE_GLOBAL_DATA_PTR;
 
 struct uniphier_memif_data {
index 29f638d94703a31a7ef27ada4e9141a39c53a469..da209354ed503424c95e3d2f1fd4a4607e14cb6d 100644 (file)
@@ -104,9 +104,4 @@ int uniphier_have_internal_stm(void);
 int uniphier_boot_from_backend(void);
 int uniphier_pin_init(const char *pinconfig_name);
 
-#undef pr_warn
-#define pr_warn(fmt, args...)  printf(fmt, ##args)
-#undef pr_err
-#define pr_err(fmt, args...)   printf(fmt, ##args)
-
 #endif /* __MACH_INIT_H */
index 540cc9999bc6df546fcf408d188cd4d91f192020..f53ee9d6d79015d001446d41eb2fcc79ae9ccd4b 100644 (file)
@@ -241,6 +241,27 @@ config IDENT_STRING
        help
          This options adds the board specific name to u-boot version.
 
+config LOGLEVEL
+       int "loglevel"
+       default 6
+       range 0 8
+       help
+         All Messages with a loglevel smaller than the console loglevel will
+         be compiled in. The loglevels are defined as follows:
+
+         0 (KERN_EMERG)          system is unusable
+         1 (KERN_ALERT)          action must be taken immediately
+         2 (KERN_CRIT)           critical conditions
+         3 (KERN_ERR)            error conditions
+         4 (KERN_WARNING)        warning conditions
+         5 (KERN_NOTICE)         normal but significant condition
+         6 (KERN_INFO)           informational
+         7 (KERN_DEBUG)          debug-level messages
+
+config SPL_LOGLEVEL
+       int
+       default LOGLEVEL
+
 config SILENT_CONSOLE
        bool "Support a silent console"
        help
index 81654b23043165081d5eb3c05621b376e9b4864e..cd89c2a235ff74ee30680978db38015e5eb411c9 100644 (file)
@@ -41,3 +41,4 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_PHYLIB=y
 CONFIG_USE_TINY_PRINTF=y
+CONFIG_LOGLEVEL=4
index 1ffe8618097440608e3f2ca0080a5b010e81ea91..49315d0638ed2bc9ac02d742529558ff353b94d7 100644 (file)
@@ -6,6 +6,7 @@ CONFIG_TARGET_COLIBRI_VF=y
 CONFIG_DEFAULT_DEVICE_TREE="vf610-colibri"
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/colibri_vf/imximage.cfg,IMX_NAND"
 CONFIG_BOOTDELAY=1
+CONFIG_LOGLEVEL=3
 CONFIG_VERSION_VARIABLE=y
 # CONFIG_DISPLAY_BOARDINFO is not set
 CONFIG_ARCH_MISC_INIT=y
index 705e0014570059873986c3aac90528165b1e0c00..059cb5992e9235622a7ee17202b3979e5adcd771 100644 (file)
@@ -14,6 +14,7 @@ CONFIG_SYS_EXTRA_OPTIONS="AT91SAM9M10G45,MACH_TYPE=2066,SYS_USE_NANDFLASH"
 CONFIG_BOOTDELAY=3
 CONFIG_USE_BOOTARGS=y
 CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) root=/dev/mtdblock7 rw rootfstype=jffs2"
+CONFIG_LOGLEVEL=4
 # CONFIG_DISPLAY_BOARDINFO is not set
 CONFIG_BOARD_EARLY_INIT_F=y
 CONFIG_SPL=y
index c95134bcf9907c514249cb98683d0bd79534afc9..3e9eb4fa84e240e912a32a7041c7027e008503b2 100644 (file)
@@ -8,6 +8,7 @@ CONFIG_SPL_MMC_SUPPORT=y
 CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_SPL_NAND_SUPPORT=y
 CONFIG_BOOTDELAY=3
+CONFIG_LOGLEVEL=4
 CONFIG_VERSION_VARIABLE=y
 # CONFIG_DISPLAY_CPUINFO is not set
 # CONFIG_DISPLAY_BOARDINFO is not set
index b2a0e04d36ce4829fb91309cf7a9059ed91e161f..f31af1c3fe75975b672a6a7152491a61fb479656 100644 (file)
@@ -5,6 +5,7 @@ CONFIG_TARGET_OPENRD=y
 CONFIG_IDENT_STRING="\nOpenRD-Base"
 CONFIG_SYS_EXTRA_OPTIONS="BOARD_IS_OPENRD_BASE"
 CONFIG_BOOTDELAY=3
+CONFIG_LOGLEVEL=3
 # CONFIG_DISPLAY_BOARDINFO is not set
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
index 8b1d35edd10f273efcf2282563e7cf9801cf5a46..bee818b82cc14697cb9c9ccd28863451ce30ea15 100644 (file)
@@ -5,6 +5,7 @@ CONFIG_TARGET_OPENRD=y
 CONFIG_IDENT_STRING="\nOpenRD-Client"
 CONFIG_SYS_EXTRA_OPTIONS="BOARD_IS_OPENRD_CLIENT"
 CONFIG_BOOTDELAY=3
+CONFIG_LOGLEVEL=3
 # CONFIG_DISPLAY_BOARDINFO is not set
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
index 4cc0205629f6bee42a72c5ef7254d93da08189db..e9462e59b2f1f4c0d8c2ddddcfb2231b6d7d1e5f 100644 (file)
@@ -5,6 +5,7 @@ CONFIG_TARGET_OPENRD=y
 CONFIG_IDENT_STRING="\nOpenRD-Ultimate"
 CONFIG_SYS_EXTRA_OPTIONS="BOARD_IS_OPENRD_ULTIMATE"
 CONFIG_BOOTDELAY=3
+CONFIG_LOGLEVEL=3
 # CONFIG_DISPLAY_BOARDINFO is not set
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
index 71a382a3e132d274f5558e31171b9a5170534ef7..5b7fc8ae146627c8532dc14005e60562ea2663a5 100644 (file)
@@ -16,6 +16,7 @@ CONFIG_SPL_SPI_SUPPORT=y
 CONFIG_DEFAULT_DEVICE_TREE="at91sam9g20-taurus"
 CONFIG_SYS_EXTRA_OPTIONS="AT91SAM9G20,MACH_TYPE=2067,BOARD_TAURUS"
 CONFIG_BOOTDELAY=3
+CONFIG_LOGLEVEL=4
 CONFIG_USE_BOOTARGS=y
 CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) root=/dev/mtdblock7 rw rootfstype=jffs2"
 # CONFIG_DISPLAY_BOARDINFO is not set
index 948ea73edb91079b54e9d9b73b49109c6f6d6a77..3c277be6828fd85510107537d408cfe117f39127 100644 (file)
@@ -3,6 +3,7 @@ CONFIG_ARCH_VF610=y
 CONFIG_DEFAULT_DEVICE_TREE="vf610-twr"
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/vf610twr/imximage.cfg"
 CONFIG_BOOTDELAY=3
+CONFIG_LOGLEVEL=3
 CONFIG_BOARD_EARLY_INIT_F=y
 CONFIG_HUSH_PARSER=y
 CONFIG_CMD_BOOTZ=y
index 10cdf0646c984afeb8f511141434dd6d0eb589b0..1cd22b1b8b31f5c35c5512930592ad713570d448 100644 (file)
@@ -3,6 +3,7 @@ CONFIG_ARCH_VF610=y
 CONFIG_DEFAULT_DEVICE_TREE="vf610-twr"
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/vf610twr/imximage.cfg"
 CONFIG_BOOTDELAY=3
+CONFIG_LOGLEVEL=3
 CONFIG_BOARD_EARLY_INIT_F=y
 CONFIG_HUSH_PARSER=y
 CONFIG_CMD_BOOTZ=y
index a74957d992aa97f96c54a2fca9081b76badd938f..3537255539fe9b9583176cbd769953bcd3758f5d 100644 (file)
@@ -72,9 +72,6 @@
 #include <string.h>
 #endif
 
-#define printk printf
-
-
 /*--------------------------- Inline Functions ----------------------------*/
 
 #ifdef  __cplusplus
index 9e944a31be11f4edaccbfc857c493e3808ee3c53..64db4ecc3c6f36b015b9f2d398646ca2290e1c5b 100644 (file)
@@ -12,7 +12,6 @@
 #ifndef __DWC3_LINUX_COMPAT__
 #define __DWC3_LINUX_COMPAT__
 
-#define pr_debug(format)                debug(format)
 #define WARN(val, format, arg...)      debug(format, ##arg)
 #define dev_WARN(dev, format, arg...)  debug(format, ##arg)
 #define WARN_ON_ONCE(val)              debug("Error %d\n", val)
index 4dae83ed6850350470a334f2bbaf2dd5dd093f12..7bb53d2b198ed4269abdc6168a205774b1d281be 100644 (file)
@@ -5,8 +5,6 @@
 #include <linux/list.h>
 #include <linux/compat.h>
 
-#define pr_debug(fmt, args...) debug(fmt, ##args)
-
 #define WARN(condition, fmt, args...) ({       \
        int ret_warn = !!condition;             \
        if (ret_warn)                           \
index 5e841947c17fc983fb21e3c9cc449155100d0199..4eb92298a2072928cf5ca060b7103026bddacf4e 100644 (file)
@@ -25,6 +25,7 @@ typedef volatile unsigned char        vu_char;
 #include <linux/bitops.h>
 #include <linux/delay.h>
 #include <linux/types.h>
+#include <linux/printk.h>
 #include <linux/string.h>
 #include <linux/stringify.h>
 #include <asm/ptrace.h>
@@ -55,11 +56,6 @@ typedef volatile unsigned char       vu_char;
 #define _SPL_BUILD     0
 #endif
 
-/* Define this at the top of a file to add a prefix to debug messages */
-#ifndef pr_fmt
-#define pr_fmt(fmt) fmt
-#endif
-
 /*
  * Output a debug text when condition "cond" is met. The "cond" should be
  * computed by a preprocessor in the best case, allowing for the best
index 2336b56cf5c170ee75f7b9a7e1f5655adb3f3f03..bc027adcb9368140a6aeb2d1eeaecb4191ac9345 100644 (file)
@@ -25,17 +25,6 @@ extern struct p_current *current;
        printf(fmt, ##args)
 #define dev_warn(dev, fmt, args...)            \
        printf(fmt, ##args)
-#define printk printf
-#define printk_once    printf
-
-#define KERN_EMERG
-#define KERN_ALERT
-#define KERN_CRIT
-#define KERN_ERR
-#define KERN_WARNING
-#define KERN_NOTICE
-#define KERN_INFO
-#define KERN_DEBUG
 
 #define GFP_ATOMIC ((gfp_t) 0)
 #define GFP_KERNEL ((gfp_t) 0)
index 1fd17c303a8d7ae9c64b271711647d6fed686dd2..3e1694b3a5d33802fcecd32ad0b38556571a8e0d 100644 (file)
@@ -452,28 +452,20 @@ static inline void mtd_erase_callback(struct erase_info *instr)
 #define MTD_DEBUG_LEVEL3       (3)     /* Noisy   */
 
 #ifdef CONFIG_MTD_DEBUG
-#define pr_debug(args...)      MTDDEBUG(MTD_DEBUG_LEVEL0, args)
 #define MTDDEBUG(n, args...)                           \
        do {                                            \
                if (n <= CONFIG_MTD_DEBUG_VERBOSE)      \
                        printk(KERN_INFO args);         \
        } while(0)
 #else /* CONFIG_MTD_DEBUG */
-#define pr_debug(args...)
 #define MTDDEBUG(n, args...)                           \
        do {                                            \
                if (0)                                  \
                        printk(KERN_INFO args);         \
        } while(0)
 #endif /* CONFIG_MTD_DEBUG */
-#define pr_info(args...)       MTDDEBUG(MTD_DEBUG_LEVEL0, args)
-#define pr_warn(args...)       MTDDEBUG(MTD_DEBUG_LEVEL0, args)
-#define pr_err(args...)                MTDDEBUG(MTD_DEBUG_LEVEL0, args)
-#define pr_crit(args...)       MTDDEBUG(MTD_DEBUG_LEVEL0, args)
-#define pr_cont(args...)       MTDDEBUG(MTD_DEBUG_LEVEL0, args)
-#define pr_notice(args...)     MTDDEBUG(MTD_DEBUG_LEVEL0, args)
 #endif
+
 static inline int mtd_is_bitflip(int err) {
        return err == -EUCLEAN;
 }
diff --git a/include/linux/printk.h b/include/linux/printk.h
new file mode 100644 (file)
index 0000000..088513a
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef __KERNEL_PRINTK__
+#define __KERNEL_PRINTK__
+
+#include <stdio.h>
+#include <linux/compiler.h>
+
+#define KERN_EMERG
+#define KERN_ALERT
+#define KERN_CRIT
+#define KERN_ERR
+#define KERN_WARNING
+#define KERN_NOTICE
+#define KERN_INFO
+#define KERN_DEBUG
+#define KERN_CONT
+
+#define printk(fmt, ...) \
+       printf(fmt, ##__VA_ARGS__)
+
+/*
+ * Dummy printk for disabled debugging statements to use whilst maintaining
+ * gcc's format checking.
+ */
+#define no_printk(fmt, ...)                            \
+({                                                     \
+       if (0)                                          \
+               printk(fmt, ##__VA_ARGS__);             \
+       0;                                              \
+})
+
+#define __printk(level, fmt, ...)                                      \
+({                                                                     \
+       level < CONFIG_LOGLEVEL ? printk(fmt, ##__VA_ARGS__) : 0;       \
+})
+
+#ifndef pr_fmt
+#define pr_fmt(fmt) fmt
+#endif
+
+#define pr_emerg(fmt, ...) \
+       __printk(0, pr_fmt(fmt), ##__VA_ARGS__)
+#define pr_alert(fmt, ...) \
+       __printk(1, pr_fmt(fmt), ##__VA_ARGS__)
+#define pr_crit(fmt, ...) \
+       __printk(2, pr_fmt(fmt), ##__VA_ARGS__)
+#define pr_err(fmt, ...) \
+       __printk(3, pr_fmt(fmt), ##__VA_ARGS__)
+#define pr_warning(fmt, ...) \
+       __printk(4, pr_fmt(fmt), ##__VA_ARGS__)
+#define pr_warn pr_warning
+#define pr_notice(fmt, ...) \
+       __printk(5, pr_fmt(fmt), ##__VA_ARGS__)
+#define pr_info(fmt, ...) \
+       __printk(6, pr_fmt(fmt), ##__VA_ARGS__)
+
+#define pr_cont(fmt, ...) \
+       printk(fmt, ##__VA_ARGS__)
+
+/* pr_devel() should produce zero code unless DEBUG is defined */
+#ifdef DEBUG
+#define pr_devel(fmt, ...) \
+       __printk(7, pr_fmt(fmt), ##__VA_ARGS__)
+#else
+#define pr_devel(fmt, ...) \
+       no_printk(pr_fmt(fmt), ##__VA_ARGS__)
+#endif
+
+#ifdef DEBUG
+#define pr_debug(fmt, ...) \
+       __printk(7, pr_fmt(fmt), ##__VA_ARGS__)
+#else
+#define pr_debug(fmt, ...) \
+       no_printk(pr_fmt(fmt), ##__VA_ARGS__)
+#endif
+
+#define printk_once(fmt, ...) \
+       printk(fmt, ##__VA_ARGS__)
+
+#endif