mhi: Enable logging based on defconfig options

MHI driver stack logging to the private IPC log buffer can be quite
expensive from a MIPS perspective. Enable such MHI logging
if and only if such logging is desired in defconfig.

Change-Id: I4a16eedc2424d250129b1b44a91d1fa32be399f5
Signed-off-by: Andrei Danaila <adanaila@codeaurora.org>
This commit is contained in:
Andrei Danaila 2015-07-30 15:25:59 -07:00 committed by David Keitel
parent 25539ada43
commit 02716573e8
9 changed files with 65 additions and 32 deletions

View file

@ -2,4 +2,5 @@
# Makefile for the msm networking support.
#
ccflags-$(CONFIG_MSM_MHI_DEBUG) := -DDEBUG
obj-$(CONFIG_MSM_RMNET_MHI) += msm_rmnet_mhi.o

View file

@ -24,6 +24,7 @@
#include <linux/msm_mhi.h>
#include <linux/debugfs.h>
#include <linux/ipc_logging.h>
#include <linux/device.h>
#define RMNET_MHI_DRIVER_NAME "rmnet_mhi"
#define RMNET_MHI_DEV_NAME "rmnet_mhi%d"
@ -54,11 +55,14 @@ struct __packed mhi_skb_priv {
enum DBG_LVL rmnet_ipc_log_lvl = MSG_VERBOSE;
enum DBG_LVL rmnet_msg_lvl = MSG_CRITICAL;
static unsigned int rmnet_log_override;
module_param(rmnet_msg_lvl , uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(rmnet_msg_lvl, "dbg lvl");
module_param(rmnet_ipc_log_lvl, uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(rmnet_ipc_log_lvl, "dbg lvl");
module_param(rmnet_log_override , uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(rmnet_log_override, "dbg class");
unsigned int mru = MHI_DEFAULT_MRU;
module_param(mru, uint, S_IRUGO | S_IWUSR);
@ -67,11 +71,16 @@ MODULE_PARM_DESC(mru, "MRU interface setting");
void *rmnet_ipc_log;
#define rmnet_log(_msg_lvl, _msg, ...) do { \
if ((_msg_lvl) >= rmnet_msg_lvl) \
pr_alert("[%s] " _msg, __func__, ##__VA_ARGS__);\
if (rmnet_ipc_log && ((_msg_lvl) >= rmnet_ipc_log_lvl)) \
ipc_log_string(rmnet_ipc_log, \
"[%s] " _msg, __func__, ##__VA_ARGS__); \
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, _msg); \
if ((rmnet_log_override || \
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) &&\
(_msg_lvl) >= rmnet_msg_lvl) \
pr_alert("[%s] " _msg, __func__, ##__VA_ARGS__); \
if ((rmnet_log_override || \
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) && \
rmnet_ipc_log && ((_msg_lvl) >= rmnet_ipc_log_lvl)) \
ipc_log_string(rmnet_ipc_log, \
"[%s] " _msg, __func__, ##__VA_ARGS__); \
} while (0)
unsigned long tx_interrupts_count[MHI_RMNET_DEVICE_COUNT];

View file

@ -152,6 +152,15 @@ config MSM_MHI_UCI
read, write and ioctl operations to communicate with the
attached device.
config MSM_MHI_DEBUG
bool "MHI debug support"
depends on MSM_MHI
help
Say yes here to enable debugging support in the MHI transport
and individual MHI client drivers. This option may impact
throughput as individual MHI packets and state transitions
will be logged.
config MSM_11AD
tristate "Platform driver for 11ad chip"
depends on PCI

View file

@ -1,4 +1,5 @@
# Makefile for MHI driver
ccflags-$(CONFIG_MSM_MHI_DEBUG) := -DDEBUG
obj-y += mhi_main.o
obj-y += mhi_iface.o
obj-y += mhi_init.o

View file

@ -25,22 +25,19 @@
#include <linux/msm_pcie.h>
#include <linux/sched.h>
#include <linux/irqreturn.h>
#include <linux/list.h>
#include <linux/dma-mapping.h>
extern struct mhi_pcie_devices mhi_devices;
enum MHI_DEBUG_CLASS {
MHI_DBG_DATA = 0x1000,
MHI_DBG_POWER = 0x2000,
MHI_DBG_reserved = 0x80000000
};
enum MHI_DEBUG_LEVEL {
MHI_MSG_VERBOSE = 0x1,
MHI_MSG_INFO = 0x2,
MHI_MSG_DBG = 0x4,
MHI_MSG_WARNING = 0x8,
MHI_MSG_ERROR = 0x10,
MHI_MSG_CRITICAL = 0x20,
MHI_MSG_RAW = 0x1,
MHI_MSG_VERBOSE = 0x2,
MHI_MSG_INFO = 0x4,
MHI_MSG_DBG = 0x8,
MHI_MSG_WARNING = 0x10,
MHI_MSG_ERROR = 0x20,
MHI_MSG_CRITICAL = 0x40,
MHI_MSG_reserved = 0x80000000
};

View file

@ -18,10 +18,9 @@
#include "mhi_sys.h"
enum MHI_DEBUG_LEVEL mhi_msg_lvl = MHI_MSG_ERROR;
enum MHI_DEBUG_LEVEL mhi_msg_lvl = MHI_MSG_VERBOSE;
enum MHI_DEBUG_LEVEL mhi_ipc_log_lvl = MHI_MSG_VERBOSE;
enum MHI_DEBUG_CLASS mhi_msg_class = MHI_DBG_DATA | MHI_DBG_POWER;
unsigned int mhi_log_override;
module_param(mhi_msg_lvl , uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(mhi_msg_lvl, "dbg lvl");
@ -29,8 +28,8 @@ MODULE_PARM_DESC(mhi_msg_lvl, "dbg lvl");
module_param(mhi_ipc_log_lvl, uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(mhi_ipc_log_lvl, "dbg lvl");
module_param(mhi_msg_class , uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(mhi_msg_class, "dbg class");
module_param(mhi_log_override , uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(mhi_log_override, "dbg class");
static ssize_t mhi_dbgfs_chan_read(struct file *fp, char __user *buf,
size_t count, loff_t *offp)

View file

@ -17,12 +17,13 @@
#include <linux/ipc_logging.h>
#include <linux/sysfs.h>
#include <linux/delay.h>
#include <linux/device.h>
#include "mhi.h"
extern enum MHI_DEBUG_LEVEL mhi_msg_lvl;
extern enum MHI_DEBUG_LEVEL mhi_ipc_log_lvl;
extern enum MHI_DEBUG_CLASS mhi_msg_class;
extern unsigned int mhi_log_override;
extern u32 m3_timer_val_ms;
extern enum MHI_DEBUG_LEVEL mhi_xfer_db_interval;
@ -40,11 +41,16 @@ extern void *mhi_ipc_log;
} while (0)
#define mhi_log(_msg_lvl, _msg, ...) do { \
if ((_msg_lvl) >= mhi_msg_lvl) \
pr_alert("[%s] " _msg, __func__, ##__VA_ARGS__);\
if (mhi_ipc_log && ((_msg_lvl) >= mhi_ipc_log_lvl)) \
ipc_log_string(mhi_ipc_log, \
"[%s] " _msg, __func__, ##__VA_ARGS__); \
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, _msg); \
if ((mhi_log_override || \
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) &&\
(_msg_lvl) >= mhi_msg_lvl) \
pr_alert("[%s] " _msg, __func__, ##__VA_ARGS__); \
if ((mhi_log_override || \
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) && \
mhi_ipc_log && ((_msg_lvl) >= mhi_ipc_log_lvl)) \
ipc_log_string(mhi_ipc_log, \
"[%s] " _msg, __func__, ##__VA_ARGS__); \
} while (0)
irqreturn_t mhi_msi_handlr(int msi_number, void *dev_id);

View file

@ -1,2 +1,3 @@
# Makefile for MHI UCI driver
ccflags-$(CONFIG_MSM_MHI_DEBUG) := -DDEBUG
obj-y += mhi_uci.o

View file

@ -25,6 +25,7 @@
#include <linux/delay.h>
#include <linux/ipc_logging.h>
#include <linux/dma-mapping.h>
#include <linux/device.h>
#define MHI_DEV_NODE_NAME_LEN 13
#define MHI_MAX_NR_OF_CLIENTS 23
@ -51,6 +52,7 @@ enum UCI_DBG_LEVEL {
enum UCI_DBG_LEVEL mhi_uci_msg_lvl = UCI_DBG_CRITICAL;
enum UCI_DBG_LEVEL mhi_uci_ipc_log_lvl = UCI_DBG_INFO;
static unsigned int uci_log_override;
void *mhi_uci_ipc_log;
struct __packed rs232_ctrl_msg {
@ -213,10 +215,15 @@ struct mhi_uci_ctxt_t {
};
#define uci_log(_msg_lvl, _msg, ...) do { \
if (_msg_lvl >= mhi_uci_msg_lvl) { \
pr_err("[%s] "_msg, __func__, ##__VA_ARGS__); \
} \
if (mhi_uci_ipc_log && (_msg_lvl >= mhi_uci_ipc_log_lvl)) { \
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, _msg); \
if ((uci_log_override || \
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) &&\
(_msg_lvl >= mhi_uci_msg_lvl)) { \
pr_err("[%s] "_msg, __func__, ##__VA_ARGS__); \
} \
if ((uci_log_override || \
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) && \
mhi_uci_ipc_log && (_msg_lvl >= mhi_uci_ipc_log_lvl)) { \
ipc_log_string(mhi_uci_ipc_log, \
"[%s] " _msg, __func__, ##__VA_ARGS__); \
} \
@ -228,6 +235,9 @@ MODULE_PARM_DESC(mhi_uci_msg_lvl, "uci dbg lvl");
module_param(mhi_uci_ipc_log_lvl, uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(mhi_uci_ipc_log_lvl, "ipc dbg lvl");
module_param(uci_log_override , uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(uci_log_override, "dbg class");
static ssize_t mhi_uci_client_read(struct file *file, char __user *buf,
size_t count, loff_t *offp);
static ssize_t mhi_uci_client_write(struct file *file,