From aa75fcc7cffbcfb559e201c52dee935e72fdee0e Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Tue, 24 Mar 2020 16:57:25 -0700 Subject: [PATCH 1/6] mhi: core: add log buffer for controller bootup and shutdown Add support in the MHI controller for a dedicated bootup and shutdown log buffer and fix log message macros. Change-Id: I6425107b9e2a048b44d8912051486d3aaa2abdac Signed-off-by: Bhaumik Bhatt --- include/linux/mhi.h | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/include/linux/mhi.h b/include/linux/mhi.h index dbcb34c91716..f6b8ffe30fc0 100644 --- a/include/linux/mhi.h +++ b/include/linux/mhi.h @@ -411,6 +411,7 @@ struct mhi_controller { bool initiate_mhi_reset; void *priv_data; void *log_buf; + void *cntrl_log_buf; struct dentry *dentry; struct dentry *parent; @@ -905,7 +906,7 @@ char *mhi_get_restart_reason(const char *name); #ifdef CONFIG_MHI_DEBUG #define MHI_VERB(fmt, ...) do { \ - if (mhi_cntrl->klog_lvl <= MHI_MSG_VERBOSE) \ + if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_VERBOSE) \ pr_dbg("[D][%s] " fmt, __func__, ##__VA_ARGS__);\ } while (0) @@ -915,8 +916,20 @@ char *mhi_get_restart_reason(const char *name); #endif +#define MHI_CNTRL_LOG(fmt, ...) do { \ + if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \ + printk("%s[I][%s] " fmt, KERN_INFO, __func__, \ + ##__VA_ARGS__); \ +} while (0) + +#define MHI_CNTRL_ERR(fmt, ...) do { \ + if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_ERROR) \ + printk("%s[E][%s] " fmt, KERN_ERR, __func__, \ + ##__VA_ARGS__); \ +} while (0) + #define MHI_LOG(fmt, ...) do { \ - if (mhi_cntrl->klog_lvl <= MHI_MSG_INFO) \ + if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \ printk("%s[I][%s] " fmt, KERN_INFO, __func__, \ ##__VA_ARGS__); \ } while (0) @@ -958,6 +971,22 @@ char *mhi_get_restart_reason(const char *name); #endif +#define MHI_CNTRL_LOG(fmt, ...) do { \ + if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \ + printk("%s[I][%s] " fmt, KERN_ERR, __func__, \ + ##__VA_ARGS__); \ + ipc_log_string(mhi_cntrl->cntrl_log_buf, "[I][%s] " fmt, \ + __func__, ##__VA_ARGS__); \ +} while (0) + +#define MHI_CNTRL_ERR(fmt, ...) do { \ + if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_ERROR) \ + printk("%s[E][%s] " fmt, KERN_ERR, __func__, \ + ##__VA_ARGS__); \ + ipc_log_string(mhi_cntrl->cntrl_log_buf, "[E][%s] " fmt, \ + __func__, ##__VA_ARGS__); \ +} while (0) + #define MHI_LOG(fmt, ...) do { \ if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \ printk("%s[I][%s] " fmt, KERN_ERR, __func__, \ From 7b037a401a66abbcbce8554dc89862aa6638e805 Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Wed, 25 Mar 2020 13:19:22 -0700 Subject: [PATCH 2/6] cnss2: add support for controller IPC logs Controller IPC logs support bootup and shutdown logs which can help in easier debug. Change-Id: I10e37641559473a14a7ebab65562ffcfb9d95ab6 Signed-off-by: Bhaumik Bhatt --- drivers/net/wireless/cnss2/pci.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index b9450154b6dd..e1c4cbd5846b 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -4402,6 +4402,11 @@ static int cnss_pci_register_mhi(struct cnss_pci_data *pci_priv) if (!mhi_ctrl->log_buf) cnss_pr_err("Unable to create CNSS MHI IPC log context\n"); + mhi_ctrl->cntrl_log_buf = ipc_log_context_create(CNSS_IPC_LOG_PAGES, + "cnss-mhi-cntrl", 0); + if (!mhi_ctrl->cntrl_log_buf) + cnss_pr_err("Unable to create CNSS MHICNTRL IPC log context\n"); + ret = of_register_mhi_controller(mhi_ctrl); if (ret) { cnss_pr_err("Failed to register to MHI bus, err = %d\n", ret); @@ -4419,6 +4424,8 @@ unreg_mhi: destroy_ipc: if (mhi_ctrl->log_buf) ipc_log_context_destroy(mhi_ctrl->log_buf); + if (mhi_ctrl->cntrl_log_buf) + ipc_log_context_destroy(mhi_ctrl->cntrl_log_buf); kfree(mhi_ctrl->irq); free_mhi_ctrl: mhi_free_controller(mhi_ctrl); @@ -4433,6 +4440,8 @@ static void cnss_pci_unregister_mhi(struct cnss_pci_data *pci_priv) mhi_unregister_mhi_controller(mhi_ctrl); if (mhi_ctrl->log_buf) ipc_log_context_destroy(mhi_ctrl->log_buf); + if (mhi_ctrl->cntrl_log_buf) + ipc_log_context_destroy(mhi_ctrl->cntrl_log_buf); kfree(mhi_ctrl->irq); mhi_free_controller(mhi_ctrl); } From 938de35a9de1a2d42bd600184aa3036d2a597966 Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Tue, 24 Mar 2020 16:57:54 -0700 Subject: [PATCH 3/6] mhi: cntrl: qcom: add support for controller ipc logs Enable support for dedicated bootup and shutdown controller IPC logs. Change-Id: I569691d718caa6847bbd992b4d169da569c1d12b Signed-off-by: Bhaumik Bhatt --- drivers/bus/mhi/controllers/mhi_arch_qcom.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/bus/mhi/controllers/mhi_arch_qcom.c b/drivers/bus/mhi/controllers/mhi_arch_qcom.c index a12c03bd54d3..5f24529f5c85 100644 --- a/drivers/bus/mhi/controllers/mhi_arch_qcom.c +++ b/drivers/bus/mhi/controllers/mhi_arch_qcom.c @@ -45,11 +45,13 @@ struct arch_info { #ifdef CONFIG_MHI_DEBUG #define MHI_IPC_LOG_PAGES (100) +#define MHI_CNTRL_LOG_PAGES (25) enum MHI_DEBUG_LEVEL mhi_ipc_log_lvl = MHI_MSG_LVL_VERBOSE; #else #define MHI_IPC_LOG_PAGES (10) +#define MHI_CNTRL_LOG_PAGES (5) enum MHI_DEBUG_LEVEL mhi_ipc_log_lvl = MHI_MSG_LVL_ERROR; #endif @@ -461,6 +463,12 @@ int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl) node, 0); mhi_cntrl->log_lvl = mhi_ipc_log_lvl; + snprintf(node, sizeof(node), "mhi_cntrl_%04x_%02u.%02u.%02u", + mhi_cntrl->dev_id, mhi_cntrl->domain, mhi_cntrl->bus, + mhi_cntrl->slot); + mhi_cntrl->cntrl_log_buf = ipc_log_context_create( + MHI_CNTRL_LOG_PAGES, node, 0); + snprintf(node, sizeof(node), "mhi_tsync_%04x_%02u.%02u.%02u", mhi_cntrl->dev_id, mhi_cntrl->domain, mhi_cntrl->bus, mhi_cntrl->slot); From ecac4a2d505833dd7d20a6afcc7f5985faa56425 Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Tue, 24 Mar 2020 17:02:33 -0700 Subject: [PATCH 4/6] mhi: cntrl: qcom: reduce timesync and bootlogger log buffer size Much of the IPC log buffer size allocated to the sparsely used time synchronization is unused and bootlogger is allocated more than it needs. Reduce the sizes for the same. Change-Id: I342cd077d00d38a0fb737605e6e43577edc05396 Signed-off-by: Bhaumik Bhatt --- drivers/bus/mhi/controllers/mhi_arch_qcom.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/bus/mhi/controllers/mhi_arch_qcom.c b/drivers/bus/mhi/controllers/mhi_arch_qcom.c index 5f24529f5c85..661536d3d5ea 100644 --- a/drivers/bus/mhi/controllers/mhi_arch_qcom.c +++ b/drivers/bus/mhi/controllers/mhi_arch_qcom.c @@ -40,7 +40,7 @@ struct arch_info { #define DLOG "Dev->Host: " #define HLOG "Host: " -#define MHI_TSYNC_LOG_PAGES (10) +#define MHI_TSYNC_LOG_PAGES (2) #ifdef CONFIG_MHI_DEBUG @@ -408,7 +408,7 @@ static int mhi_bl_probe(struct mhi_device *mhi_device, mhi_device->slot); arch_info->boot_dev = mhi_device; - arch_info->boot_ipc_log = ipc_log_context_create(MHI_IPC_LOG_PAGES, + arch_info->boot_ipc_log = ipc_log_context_create(MHI_CNTRL_LOG_PAGES, node_name, 0); ipc_log_string(arch_info->boot_ipc_log, HLOG "Entered SBL, Session ID:0x%x\n", mhi_cntrl->session_id); From ef5838d49b972f20ed947b1e04bda4560c7b6ff2 Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Tue, 24 Mar 2020 20:09:12 -0700 Subject: [PATCH 5/6] mhi: cntrl: qcom: move certain logs to controller log buffer Certain important and less frequently occurring logs can be moved to controller log buffer to monitor bootup and shutdown. Change-Id: I26d0ade3562c925ac533c51c6d5613c40a836813 Signed-off-by: Bhaumik Bhatt --- drivers/bus/mhi/controllers/mhi_arch_qcom.c | 73 ++++++++++----------- drivers/bus/mhi/controllers/mhi_qcom.c | 35 ++++++---- drivers/bus/mhi/controllers/mhi_qcom.h | 5 +- 3 files changed, 61 insertions(+), 52 deletions(-) diff --git a/drivers/bus/mhi/controllers/mhi_arch_qcom.c b/drivers/bus/mhi/controllers/mhi_arch_qcom.c index 661536d3d5ea..13f1384153db 100644 --- a/drivers/bus/mhi/controllers/mhi_arch_qcom.c +++ b/drivers/bus/mhi/controllers/mhi_arch_qcom.c @@ -148,7 +148,7 @@ static void mhi_arch_pci_link_state_cb(struct msm_pcie_notify *notify) switch (notify->event) { case MSM_PCIE_EVENT_WAKEUP: - MHI_LOG("Received MSM_PCIE_EVENT_WAKE signal\n"); + MHI_CNTRL_LOG("Received PCIE_WAKE signal\n"); /* bring link out of d3cold */ if (mhi_dev->powered_on) { @@ -157,14 +157,14 @@ static void mhi_arch_pci_link_state_cb(struct msm_pcie_notify *notify) } break; case MSM_PCIE_EVENT_L1SS_TIMEOUT: - MHI_VERB("Received MSM_PCIE_EVENT_L1SS_TIMEOUT signal\n"); + MHI_VERB("Received PCIE_L1SS_TIMEOUT signal\n"); pm_runtime_mark_last_busy(&pci_dev->dev); pm_request_autosuspend(&pci_dev->dev); break; case MSM_PCIE_EVENT_DRV_CONNECT: /* drv is connected we can suspend now */ - MHI_LOG("Received MSM_PCIE_EVENT_DRV_CONNECT signal\n"); + MHI_CNTRL_LOG("Received DRV_CONNECT signal\n"); arch_info->drv_connected = true; @@ -179,7 +179,7 @@ static void mhi_arch_pci_link_state_cb(struct msm_pcie_notify *notify) mutex_unlock(&mhi_cntrl->pm_mutex); break; case MSM_PCIE_EVENT_DRV_DISCONNECT: - MHI_LOG("Received MSM_PCIE_EVENT_DRV_DISCONNECT signal\n"); + MHI_CNTRL_LOG("Received DRV_DISCONNECT signal\n"); /* * if link suspended bring it out of suspend and disable runtime @@ -189,7 +189,7 @@ static void mhi_arch_pci_link_state_cb(struct msm_pcie_notify *notify) pm_runtime_forbid(&pci_dev->dev); break; default: - MHI_ERR("Unhandled event 0x%x\n", notify->event); + MHI_CNTRL_LOG("Unhandled event 0x%x\n", notify->event); } } @@ -202,12 +202,12 @@ static int mhi_arch_esoc_ops_power_on(void *priv, unsigned int flags) mutex_lock(&mhi_cntrl->pm_mutex); if (mhi_dev->powered_on) { - MHI_LOG("MHI still in active state\n"); + MHI_CNTRL_LOG("MHI still in active state\n"); mutex_unlock(&mhi_cntrl->pm_mutex); return 0; } - MHI_LOG("Enter: mdm_crashed:%d\n", flags & ESOC_HOOK_MDM_CRASH); + MHI_CNTRL_LOG("Enter: mdm_crashed:%d\n", flags & ESOC_HOOK_MDM_CRASH); /* reset rpm state */ pm_runtime_set_active(&pci_dev->dev); @@ -216,7 +216,7 @@ static int mhi_arch_esoc_ops_power_on(void *priv, unsigned int flags) pm_runtime_forbid(&pci_dev->dev); ret = pm_runtime_get_sync(&pci_dev->dev); if (ret < 0) { - MHI_ERR("Error with rpm resume, ret:%d\n", ret); + MHI_CNTRL_ERR("Error with rpm resume, ret:%d\n", ret); return ret; } @@ -224,7 +224,7 @@ static int mhi_arch_esoc_ops_power_on(void *priv, unsigned int flags) ret = msm_pcie_pm_control(MSM_PCIE_RESUME, pci_dev->bus->number, pci_dev, NULL, 0); if (ret) { - MHI_ERR("Failed to resume pcie bus ret %d\n", ret); + MHI_CNTRL_ERR("Failed to resume pcie bus ret %d\n", ret); return ret; } @@ -236,7 +236,7 @@ static void mhi_arch_link_off(struct mhi_controller *mhi_cntrl) struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl); struct pci_dev *pci_dev = mhi_dev->pci_dev; - MHI_LOG("Entered\n"); + MHI_CNTRL_LOG("Entered\n"); pci_set_power_state(pci_dev, PCI_D3hot); @@ -244,7 +244,7 @@ static void mhi_arch_link_off(struct mhi_controller *mhi_cntrl) msm_pcie_pm_control(MSM_PCIE_SUSPEND, mhi_cntrl->bus, pci_dev, NULL, 0); mhi_arch_set_bus_request(mhi_cntrl, 0); - MHI_LOG("Exited\n"); + MHI_CNTRL_LOG("Exited\n"); } static void mhi_arch_esoc_ops_power_off(void *priv, unsigned int flags) @@ -255,7 +255,7 @@ static void mhi_arch_esoc_ops_power_off(void *priv, unsigned int flags) struct pci_dev *pci_dev = mhi_dev->pci_dev; bool mdm_state = (flags & ESOC_HOOK_MDM_CRASH); - MHI_LOG("Enter: mdm_crashed:%d\n", mdm_state); + MHI_CNTRL_LOG("Enter: mdm_crashed:%d\n", mdm_state); /* * Abort system suspend if system is preparing to go to suspend @@ -271,7 +271,7 @@ static void mhi_arch_esoc_ops_power_off(void *priv, unsigned int flags) mutex_lock(&mhi_cntrl->pm_mutex); if (!mhi_dev->powered_on) { - MHI_LOG("Not in active state\n"); + MHI_CNTRL_LOG("Not in active state\n"); mutex_unlock(&mhi_cntrl->pm_mutex); pm_runtime_put_noidle(&pci_dev->dev); return; @@ -281,7 +281,7 @@ static void mhi_arch_esoc_ops_power_off(void *priv, unsigned int flags) pm_runtime_put_noidle(&pci_dev->dev); - MHI_LOG("Triggering shutdown process\n"); + MHI_CNTRL_LOG("Triggering shutdown process\n"); mhi_power_down(mhi_cntrl, !mdm_state); /* turn the link off */ @@ -298,12 +298,10 @@ static void mhi_arch_esoc_ops_mdm_error(void *priv) { struct mhi_controller *mhi_cntrl = priv; - MHI_LOG("Enter: mdm asserted\n"); + MHI_CNTRL_LOG("Enter: mdm asserted\n"); /* transition MHI state into error state */ mhi_control_error(mhi_cntrl); - - MHI_LOG("Exit\n"); } static void mhi_bl_dl_cb(struct mhi_device *mhi_device, @@ -380,8 +378,9 @@ static int mhi_arch_pcie_scale_bw(struct mhi_controller *mhi_cntrl, /* do a bus scale vote based on gen speeds */ mhi_arch_set_bus_request(mhi_cntrl, link_info->target_link_speed); - MHI_VERB("bw changed to speed:0x%x width:0x%x\n", - link_info->target_link_speed, link_info->target_link_width); + MHI_LOG("BW changed to speed:0x%x width:0x%x\n", + link_info->target_link_speed, + link_info->target_link_width); return 0; } @@ -524,7 +523,8 @@ int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl) reg_event->notify.data = mhi_cntrl; ret = msm_pcie_register_event(reg_event); if (ret) - MHI_LOG("Failed to reg. for link up notification\n"); + MHI_CNTRL_ERR( + "Failed to reg. for link up notification\n"); init_completion(&arch_info->pm_completion); @@ -541,7 +541,7 @@ int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl) arch_info->esoc_client = devm_register_esoc_client( &mhi_dev->pci_dev->dev, "mdm"); if (IS_ERR_OR_NULL(arch_info->esoc_client)) { - MHI_ERR("Failed to register esoc client\n"); + MHI_CNTRL_ERR("Failed to register esoc client\n"); } else { /* register for power on/off hooks */ struct esoc_client_hook *esoc_ops = @@ -559,7 +559,7 @@ int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl) ret = esoc_register_client_hook(arch_info->esoc_client, esoc_ops); if (ret) - MHI_ERR("Failed to register esoc ops\n"); + MHI_CNTRL_ERR("Failed to register esoc ops\n"); } /* @@ -610,7 +610,7 @@ static int mhi_arch_drv_suspend(struct mhi_controller *mhi_cntrl) link_info.target_link_width = cur_link_info->target_link_width; ret = mhi_arch_pcie_scale_bw(mhi_cntrl, pci_dev, &link_info); if (ret) { - MHI_ERR("Failed to switch Gen1 speed\n"); + MHI_CNTRL_ERR("Failed to switch Gen1 speed\n"); return -EBUSY; } @@ -640,7 +640,8 @@ int mhi_arch_link_suspend(struct mhi_controller *mhi_cntrl) struct pci_dev *pci_dev = mhi_dev->pci_dev; int ret = 0; - MHI_LOG("Entered\n"); + MHI_LOG("Entered with suspend_mode:%s\n", + TO_MHI_SUSPEND_MODE_STR(mhi_dev->suspend_mode)); /* disable inactivity timer */ msm_pcie_l1ss_timeout_disable(pci_dev); @@ -650,7 +651,8 @@ int mhi_arch_link_suspend(struct mhi_controller *mhi_cntrl) pci_clear_master(pci_dev); ret = pci_save_state(mhi_dev->pci_dev); if (ret) { - MHI_ERR("Failed with pci_save_state, ret:%d\n", ret); + MHI_CNTRL_ERR("Failed with pci_save_state, ret:%d\n", + ret); goto exit_suspend; } @@ -669,6 +671,7 @@ int mhi_arch_link_suspend(struct mhi_controller *mhi_cntrl) break; case MHI_ACTIVE_STATE: case MHI_FAST_LINK_ON:/* keeping link on do nothing */ + default: break; } @@ -689,8 +692,6 @@ static int __mhi_arch_link_resume(struct mhi_controller *mhi_cntrl) struct mhi_link_info *cur_info = &mhi_cntrl->mhi_link_info; int ret; - MHI_LOG("Entered\n"); - /* request bus scale voting based on higher gen speed */ ret = mhi_arch_set_bus_request(mhi_cntrl, cur_info->target_link_speed); @@ -733,7 +734,8 @@ int mhi_arch_link_resume(struct mhi_controller *mhi_cntrl) struct mhi_link_info *cur_info = &mhi_cntrl->mhi_link_info; int ret = 0; - MHI_LOG("Entered\n"); + MHI_LOG("Entered with suspend_mode:%s\n", + TO_MHI_SUSPEND_MODE_STR(mhi_dev->suspend_mode)); switch (mhi_dev->suspend_mode) { case MHI_DEFAULT_SUSPEND: @@ -751,26 +753,23 @@ int mhi_arch_link_resume(struct mhi_controller *mhi_cntrl) * only print an error here. */ if (mhi_arch_pcie_scale_bw(mhi_cntrl, pci_dev, cur_info)) - MHI_ERR( + MHI_CNTRL_ERR( "Failed to honor bw request: speed:0x%x width:0x%x\n", cur_info->target_link_speed, cur_info->target_link_width); break; case MHI_ACTIVE_STATE: case MHI_FAST_LINK_ON: + default: break; } - if (ret) { - MHI_ERR("Link training failed, ret:%d\n", ret); - return ret; - } + if (!ret) + msm_pcie_l1ss_timeout_enable(pci_dev); - msm_pcie_l1ss_timeout_enable(pci_dev); + MHI_LOG("Exited with ret:%d\n", ret); - MHI_LOG("Exited\n"); - - return 0; + return ret; } int mhi_arch_link_lpm_disable(struct mhi_controller *mhi_cntrl) diff --git a/drivers/bus/mhi/controllers/mhi_qcom.c b/drivers/bus/mhi/controllers/mhi_qcom.c index 7ab2fd71d400..7479dcef64de 100644 --- a/drivers/bus/mhi/controllers/mhi_qcom.c +++ b/drivers/bus/mhi/controllers/mhi_qcom.c @@ -33,12 +33,19 @@ static const struct firmware_info firmware_table[] = { static int debug_mode; +const char * const mhi_suspend_mode_str[MHI_SUSPEND_MODE_MAX] = { + [MHI_ACTIVE_STATE] = "Active", + [MHI_DEFAULT_SUSPEND] = "Default", + [MHI_FAST_LINK_OFF] = "Fast Link Off", + [MHI_FAST_LINK_ON] = "Fast Link On", +}; + int mhi_debugfs_trigger_m0(void *data, u64 val) { struct mhi_controller *mhi_cntrl = data; struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl); - MHI_LOG("Trigger M3 Exit\n"); + MHI_CNTRL_LOG("Trigger M3 Exit\n"); pm_runtime_get(&mhi_dev->pci_dev->dev); pm_runtime_put(&mhi_dev->pci_dev->dev); @@ -52,7 +59,7 @@ int mhi_debugfs_trigger_m3(void *data, u64 val) struct mhi_controller *mhi_cntrl = data; struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl); - MHI_LOG("Trigger M3 Entry\n"); + MHI_CNTRL_LOG("Trigger M3 Entry\n"); pm_runtime_mark_last_busy(&mhi_dev->pci_dev->dev); pm_request_autosuspend(&mhi_dev->pci_dev->dev); @@ -91,19 +98,19 @@ static int mhi_init_pci_dev(struct mhi_controller *mhi_cntrl) mhi_dev->resn = MHI_PCI_BAR_NUM; ret = pci_assign_resource(pci_dev, mhi_dev->resn); if (ret) { - MHI_ERR("Error assign pci resources, ret:%d\n", ret); + MHI_CNTRL_ERR("Error assign pci resources, ret:%d\n", ret); return ret; } ret = pci_enable_device(pci_dev); if (ret) { - MHI_ERR("Error enabling device, ret:%d\n", ret); + MHI_CNTRL_ERR("Error enabling device, ret:%d\n", ret); goto error_enable_device; } ret = pci_request_region(pci_dev, mhi_dev->resn, "mhi"); if (ret) { - MHI_ERR("Error pci_request_region, ret:%d\n", ret); + MHI_CNTRL_ERR("Error pci_request_region, ret:%d\n", ret); goto error_request_region; } @@ -113,14 +120,14 @@ static int mhi_init_pci_dev(struct mhi_controller *mhi_cntrl) len = pci_resource_len(pci_dev, mhi_dev->resn); mhi_cntrl->regs = ioremap_nocache(mhi_cntrl->base_addr, len); if (!mhi_cntrl->regs) { - MHI_ERR("Error ioremap region\n"); + MHI_CNTRL_ERR("Error ioremap region\n"); goto error_ioremap; } ret = pci_alloc_irq_vectors(pci_dev, mhi_cntrl->msi_required, mhi_cntrl->msi_required, PCI_IRQ_MSI); if (IS_ERR_VALUE((ulong)ret) || ret < mhi_cntrl->msi_required) { - MHI_ERR("Failed to enable MSI, ret:%d\n", ret); + MHI_CNTRL_ERR("Failed to enable MSI, ret:%d\n", ret); goto error_req_msi; } @@ -394,7 +401,7 @@ static int mhi_force_suspend(struct mhi_controller *mhi_cntrl) struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl); int itr = DIV_ROUND_UP(mhi_cntrl->timeout_ms, delayms); - MHI_LOG("Entered\n"); + MHI_CNTRL_LOG("Entered\n"); mutex_lock(&mhi_cntrl->pm_mutex); @@ -410,12 +417,12 @@ static int mhi_force_suspend(struct mhi_controller *mhi_cntrl) if (!ret || ret != -EBUSY) break; - MHI_LOG("MHI busy, sleeping and retry\n"); + MHI_CNTRL_LOG("MHI busy, sleeping and retry\n"); msleep(delayms); } if (ret) { - MHI_ERR("Force suspend ret with %d\n", ret); + MHI_CNTRL_ERR("Force suspend ret:%d\n", ret); goto exit_force_suspend; } @@ -551,14 +558,14 @@ static void mhi_status_cb(struct mhi_controller *mhi_cntrl, pm_runtime_get(dev); ret = mhi_force_suspend(mhi_cntrl); if (!ret) { - MHI_LOG("Attempt resume after forced suspend\n"); + MHI_CNTRL_LOG("Attempt resume after forced suspend\n"); mhi_runtime_resume(dev); } pm_runtime_put(dev); mhi_arch_mission_mode_enter(mhi_cntrl); break; default: - MHI_ERR("Unhandled cb:0x%x\n", reason); + MHI_CNTRL_LOG("Unhandled cb:0x%x\n", reason); } } @@ -772,7 +779,7 @@ static struct mhi_controller *mhi_register_controller(struct pci_dev *pci_dev) atomic_set(&mhi_cntrl->write_idx, -1); if (sysfs_create_group(&mhi_cntrl->mhi_dev->dev.kobj, &mhi_qcom_group)) - MHI_ERR("Error while creating the sysfs group\n"); + MHI_CNTRL_ERR("Error while creating the sysfs group\n"); return mhi_cntrl; @@ -829,7 +836,7 @@ int mhi_pci_probe(struct pci_dev *pci_dev, pm_runtime_mark_last_busy(&pci_dev->dev); - MHI_LOG("Return successful\n"); + MHI_CNTRL_LOG("Return successful\n"); return 0; diff --git a/drivers/bus/mhi/controllers/mhi_qcom.h b/drivers/bus/mhi/controllers/mhi_qcom.h index 692a4f4967fb..325be120486c 100644 --- a/drivers/bus/mhi/controllers/mhi_qcom.h +++ b/drivers/bus/mhi/controllers/mhi_qcom.h @@ -38,9 +38,12 @@ enum mhi_suspend_mode { MHI_DEFAULT_SUSPEND, MHI_FAST_LINK_OFF, MHI_FAST_LINK_ON, + MHI_SUSPEND_MODE_MAX, }; -#define MHI_IS_SUSPENDED(mode) (mode) +extern const char * const mhi_suspend_mode_str[MHI_SUSPEND_MODE_MAX]; +#define TO_MHI_SUSPEND_MODE_STR(mode) \ + (mode >= MHI_SUSPEND_MODE_MAX ? "Invalid" : mhi_suspend_mode_str[mode]) struct mhi_dev { struct pci_dev *pci_dev; From 79730055383a175b273267ce3dfba9245cf2cddd Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Tue, 24 Mar 2020 20:54:57 -0700 Subject: [PATCH 6/6] mhi: core: move certain logs to controller log buffer Certain important and less frequently occurring logs can be moved to controller log buffer to monitor bootup and shutdown. Change-Id: I602d99adcdf8415e29930867cbcaa62d043deff0 Signed-off-by: Bhaumik Bhatt --- drivers/bus/mhi/core/mhi_boot.c | 107 +++++++++++++++--------------- drivers/bus/mhi/core/mhi_init.c | 30 ++++----- drivers/bus/mhi/core/mhi_pm.c | 114 +++++++++++++++++--------------- 3 files changed, 129 insertions(+), 122 deletions(-) diff --git a/drivers/bus/mhi/core/mhi_boot.c b/drivers/bus/mhi/core/mhi_boot.c index 97af7175a348..d5864a28548c 100644 --- a/drivers/bus/mhi/core/mhi_boot.c +++ b/drivers/bus/mhi/core/mhi_boot.c @@ -51,7 +51,7 @@ static void mhi_process_sfr(struct mhi_controller *mhi_cntrl, rem_seg_len = 0; seg_idx++; if (seg_idx == mhi_cntrl->rddm_image->entries) { - MHI_ERR("invalid size for SFR file\n"); + MHI_CNTRL_ERR("invalid size for SFR file\n"); goto err; } } @@ -80,7 +80,7 @@ static int mhi_find_next_file_offset(struct mhi_controller *mhi_cntrl, while (info->file_size) { info->seg_idx++; if (info->seg_idx == mhi_cntrl->rddm_image->entries) { - MHI_ERR("invalid size for file %s\n", + MHI_CNTRL_ERR("invalid size for file %s\n", table_info->file_name); return -EINVAL; } @@ -111,14 +111,14 @@ void mhi_dump_sfr(struct mhi_controller *mhi_cntrl) if (rddm_header->header_size > sizeof(*rddm_header) || rddm_header->header_size < 8) { - MHI_ERR("invalid reported header size %u\n", + MHI_CNTRL_ERR("invalid reported header size %u\n", rddm_header->header_size); return; } table_size = (rddm_header->header_size - 8) / sizeof(*table_info); if (!table_size) { - MHI_ERR("invalid rddm table size %u\n", table_size); + MHI_CNTRL_ERR("invalid rddm table size %u\n", table_size); return; } @@ -150,13 +150,13 @@ void mhi_rddm_prepare(struct mhi_controller *mhi_cntrl, int i = 0; for (i = 0; i < img_info->entries - 1; i++, mhi_buf++, bhi_vec++) { - MHI_VERB("Setting vector:%pad size:%zu\n", - &mhi_buf->dma_addr, mhi_buf->len); + MHI_CNTRL_LOG("Setting vector:%pad size:%zu\n", + &mhi_buf->dma_addr, mhi_buf->len); bhi_vec->dma_addr = mhi_buf->dma_addr; bhi_vec->size = mhi_buf->len; } - MHI_LOG("BHIe programming for RDDM\n"); + MHI_CNTRL_LOG("BHIe programming for RDDM\n"); mhi_cntrl->write_reg(mhi_cntrl, base, BHIE_RXVECADDR_HIGH_OFFS, upper_32_bits(mhi_buf->dma_addr)); @@ -175,8 +175,8 @@ void mhi_rddm_prepare(struct mhi_controller *mhi_cntrl, BHIE_RXVECDB_SEQNUM_BMSK, BHIE_RXVECDB_SEQNUM_SHFT, sequence_id); - MHI_LOG("address:%pad len:0x%lx sequence:%u\n", - &mhi_buf->dma_addr, mhi_buf->len, sequence_id); + MHI_CNTRL_LOG("address:%pad len:0x%lx sequence:%u\n", + &mhi_buf->dma_addr, mhi_buf->len, sequence_id); } /* collect rddm during kernel panic */ @@ -191,10 +191,10 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl) int rddm_retry = rddm_timeout_us / delayus; /* time to enter rddm */ void __iomem *base = mhi_cntrl->bhie; - MHI_LOG("Entered with pm_state:%s dev_state:%s ee:%s\n", - to_mhi_pm_state_str(mhi_cntrl->pm_state), - TO_MHI_STATE_STR(mhi_cntrl->dev_state), - TO_MHI_EXEC_STR(mhi_cntrl->ee)); + MHI_CNTRL_LOG("Entered with pm_state:%s dev_state:%s ee:%s\n", + to_mhi_pm_state_str(mhi_cntrl->pm_state), + TO_MHI_STATE_STR(mhi_cntrl->dev_state), + TO_MHI_EXEC_STR(mhi_cntrl->ee)); /* * This should only be executing during a kernel panic, we expect all @@ -219,10 +219,10 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl) ee = mhi_get_exec_env(mhi_cntrl); if (ee != MHI_EE_RDDM) { - MHI_LOG("Trigger device into RDDM mode using SYSERR\n"); + MHI_CNTRL_LOG("Trigger device into RDDM mode using SYSERR\n"); mhi_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR); - MHI_LOG("Waiting for device to enter RDDM\n"); + MHI_CNTRL_LOG("Waiting for device to enter RDDM\n"); while (rddm_retry--) { ee = mhi_get_exec_env(mhi_cntrl); if (ee == MHI_EE_RDDM) @@ -233,7 +233,7 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl) if (rddm_retry <= 0) { /* Hardware reset; force device to enter rddm */ - MHI_LOG( + MHI_CNTRL_LOG( "Did not enter RDDM, do a host req. reset\n"); mhi_cntrl->write_reg(mhi_cntrl, mhi_cntrl->regs, MHI_SOC_RESET_REQ_OFFSET, @@ -244,8 +244,8 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl) ee = mhi_get_exec_env(mhi_cntrl); } - MHI_LOG("Waiting for image download completion, current EE:%s\n", - TO_MHI_EXEC_STR(ee)); + MHI_CNTRL_LOG("Waiting for image download completion, current EE:%s\n", + TO_MHI_EXEC_STR(ee)); while (retry--) { ret = mhi_read_reg_field(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS, BHIE_RXVECSTATUS_STATUS_BMSK, @@ -255,7 +255,7 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl) return -EIO; if (rx_status == BHIE_RXVECSTATUS_STATUS_XFER_COMPL) { - MHI_LOG("RDDM successfully collected\n"); + MHI_CNTRL_LOG("RDDM successfully collected\n"); return 0; } @@ -265,9 +265,9 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl) ee = mhi_get_exec_env(mhi_cntrl); ret = mhi_read_reg(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS, &rx_status); - MHI_ERR("Did not complete RDDM transfer\n"); - MHI_ERR("Current EE:%s\n", TO_MHI_EXEC_STR(ee)); - MHI_ERR("RXVEC_STATUS:0x%x, ret:%d\n", rx_status, ret); + MHI_CNTRL_ERR("Did not complete RDDM transfer\n"); + MHI_CNTRL_ERR("Current EE:%s\n", TO_MHI_EXEC_STR(ee)); + MHI_CNTRL_ERR("RXVEC_STATUS:0x%x, ret:%d\n", rx_status, ret); return -EIO; } @@ -281,7 +281,7 @@ int mhi_download_rddm_img(struct mhi_controller *mhi_cntrl, bool in_panic) if (in_panic) return __mhi_download_rddm_in_panic(mhi_cntrl); - MHI_LOG("Waiting for image download completion\n"); + MHI_CNTRL_LOG("Waiting for image download completion\n"); /* waiting for image download completion */ wait_event_timeout(mhi_cntrl->state_event, @@ -309,7 +309,7 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, return -EIO; } - MHI_LOG("Starting BHIe Programming\n"); + MHI_CNTRL_LOG("Starting BHIe Programming\n"); mhi_cntrl->write_reg(mhi_cntrl, base, BHIE_TXVECADDR_HIGH_OFFS, upper_32_bits(mhi_buf->dma_addr)); @@ -329,11 +329,11 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, mhi_cntrl->sequence_id); read_unlock_bh(pm_lock); - MHI_LOG("Upper:0x%x Lower:0x%x len:0x%lx sequence:%u\n", - upper_32_bits(mhi_buf->dma_addr), - lower_32_bits(mhi_buf->dma_addr), - mhi_buf->len, mhi_cntrl->sequence_id); - MHI_LOG("Waiting for image transfer completion\n"); + MHI_CNTRL_LOG("Upper:0x%x Lower:0x%x len:0x%lx sequence:%u\n", + upper_32_bits(mhi_buf->dma_addr), + lower_32_bits(mhi_buf->dma_addr), + mhi_buf->len, mhi_cntrl->sequence_id); + MHI_CNTRL_LOG("Waiting for image transfer completion\n"); /* waiting for image download completion */ wait_event_timeout(mhi_cntrl->state_event, @@ -370,7 +370,7 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, { NULL }, }; - MHI_LOG("Starting BHI programming\n"); + MHI_CNTRL_LOG("Starting BHI programming\n"); /* program start sbl download via bhi protocol */ read_lock_bh(pm_lock); @@ -393,7 +393,7 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, mhi_cntrl->session_id); read_unlock_bh(pm_lock); - MHI_LOG("Waiting for image transfer completion\n"); + MHI_CNTRL_LOG("Waiting for image transfer completion\n"); /* waiting for image download completion */ wait_event_timeout(mhi_cntrl->state_event, @@ -406,7 +406,7 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, goto invalid_pm_state; if (tx_status == BHI_STATUS_ERROR) { - MHI_ERR("Image transfer failed\n"); + MHI_CNTRL_ERR("Image transfer failed\n"); read_lock_bh(pm_lock); if (MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { for (i = 0; error_reg[i].name; i++) { @@ -414,8 +414,8 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, error_reg[i].offset, &val); if (ret) break; - MHI_ERR("reg:%s value:0x%x\n", - error_reg[i].name, val); + MHI_CNTRL_ERR("reg:%s value:0x%x\n", + error_reg[i].name, val); } } read_unlock_bh(pm_lock); @@ -454,8 +454,8 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl, struct image_info *img_info; struct mhi_buf *mhi_buf; - MHI_LOG("Allocating bytes:%zu seg_size:%zu total_seg:%u\n", - alloc_size, seg_size, segments); + MHI_CNTRL_LOG("Allocating bytes:%zu seg_size:%zu total_seg:%u\n", + alloc_size, seg_size, segments); img_info = kzalloc(sizeof(*img_info), GFP_KERNEL); if (!img_info) @@ -482,7 +482,7 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl, if (!mhi_buf->buf) goto error_alloc_segment; - MHI_LOG("Entry:%d Address:0x%llx size:%lu\n", i, + MHI_CNTRL_LOG("Entry:%d Address:0x%llx size:%lu\n", i, mhi_buf->dma_addr, mhi_buf->len); } @@ -490,7 +490,7 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl, img_info->entries = segments; *image_info = img_info; - MHI_LOG("Successfully allocated bhi vec table\n"); + MHI_CNTRL_LOG("Successfully allocated bhi vec table\n"); return 0; @@ -545,11 +545,11 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) size_t size; if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) { - MHI_ERR("MHI is not in valid state\n"); + MHI_CNTRL_ERR("MHI is not in valid state\n"); return; } - MHI_LOG("Device current EE:%s\n", TO_MHI_EXEC_STR(mhi_cntrl->ee)); + MHI_CNTRL_LOG("Device current EE:%s\n", TO_MHI_EXEC_STR(mhi_cntrl->ee)); /* if device in pthru, do reset to ready state transition */ if (mhi_cntrl->ee == MHI_EE_PTHRU) @@ -560,14 +560,15 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) if (!fw_name || (mhi_cntrl->fbc_download && (!mhi_cntrl->sbl_size || !mhi_cntrl->seg_len))) { - MHI_ERR("No firmware image defined or !sbl_size || !seg_len\n"); + MHI_CNTRL_ERR( + "No firmware image defined or !sbl_size || !seg_len\n"); return; } ret = request_firmware(&firmware, fw_name, mhi_cntrl->dev); if (ret) { if (!mhi_cntrl->fw_image_fallback) { - MHI_ERR("Error loading fw, ret:%d\n", ret); + MHI_CNTRL_ERR("Error loading fw, ret:%d\n", ret); return; } @@ -575,7 +576,7 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) ret = request_firmware(&firmware, mhi_cntrl->fw_image_fallback, mhi_cntrl->dev); if (ret) { - MHI_ERR("Error loading fw_fb, ret:%d\n", ret); + MHI_CNTRL_ERR("Error loading fw_fb, ret:%d\n", ret); return; } @@ -591,7 +592,7 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) buf = mhi_alloc_coherent(mhi_cntrl, size, &dma_addr, GFP_KERNEL); if (!buf) { - MHI_ERR("Could not allocate memory for image\n"); + MHI_CNTRL_ERR("Could not allocate memory for image\n"); release_firmware(firmware); return; } @@ -620,11 +621,11 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) ret = mhi_alloc_bhie_table(mhi_cntrl, &mhi_cntrl->fbc_image, firmware->size); if (ret) { - MHI_ERR("Error alloc size of %zu\n", firmware->size); + MHI_CNTRL_ERR("Error alloc size:%zu\n", firmware->size); goto error_alloc_fw_table; } - MHI_LOG("Copying firmware image into vector table\n"); + MHI_CNTRL_LOG("Copying firmware image into vector table\n"); /* load the firmware into BHIE vec table */ mhi_firmware_copy(mhi_cntrl, firmware, mhi_cntrl->fbc_image); @@ -634,16 +635,16 @@ fw_load_ee_pthru: /* transitioning into MHI RESET->READY state */ ret = mhi_ready_state_transition(mhi_cntrl); - MHI_LOG("To Reset->Ready PM_STATE:%s MHI_STATE:%s EE:%s, ret:%d\n", - to_mhi_pm_state_str(mhi_cntrl->pm_state), - TO_MHI_STATE_STR(mhi_cntrl->dev_state), - TO_MHI_EXEC_STR(mhi_cntrl->ee), ret); + MHI_CNTRL_LOG("To Reset->Ready PM_STATE:%s MHI_STATE:%s EE:%s ret:%d\n", + to_mhi_pm_state_str(mhi_cntrl->pm_state), + TO_MHI_STATE_STR(mhi_cntrl->dev_state), + TO_MHI_EXEC_STR(mhi_cntrl->ee), ret); if (!mhi_cntrl->fbc_download) return; if (ret) { - MHI_ERR("Did not transition to READY state\n"); + MHI_CNTRL_ERR("Did not transition to READY state\n"); goto error_read; } @@ -654,7 +655,7 @@ fw_load_ee_pthru: msecs_to_jiffies(mhi_cntrl->timeout_ms)); if (!ret || MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) { - MHI_ERR("MHI did not enter BHIE\n"); + MHI_CNTRL_ERR("MHI did not enter BHIE\n"); goto error_read; } @@ -664,7 +665,7 @@ fw_load_ee_pthru: /* last entry is vec table */ &image_info->mhi_buf[image_info->entries - 1]); - MHI_LOG("amss fw_load, ret:%d\n", ret); + MHI_CNTRL_LOG("amss fw_load ret:%d\n", ret); release_firmware(firmware); diff --git a/drivers/bus/mhi/core/mhi_init.c b/drivers/bus/mhi/core/mhi_init.c index 41a18e224c94..0dd29368d2f6 100644 --- a/drivers/bus/mhi/core/mhi_init.c +++ b/drivers/bus/mhi/core/mhi_init.c @@ -435,8 +435,8 @@ int mhi_init_irq_setup(struct mhi_controller *mhi_cntrl) mhi_msi_handlr, IRQF_SHARED | IRQF_NO_SUSPEND, "mhi", mhi_event); if (ret) { - MHI_ERR("Error requesting irq:%d for ev:%d\n", - mhi_cntrl->irq[mhi_event->msi], i); + MHI_CNTRL_ERR("Error requesting irq:%d for ev:%d\n", + mhi_cntrl->irq[mhi_event->msi], i); goto error_request; } } @@ -792,7 +792,7 @@ static int mhi_init_timesync(struct mhi_controller *mhi_cntrl) ret = mhi_get_capability_offset(mhi_cntrl, TIMESYNC_CAP_ID, &time_offset); if (ret) { - MHI_LOG("No timesync capability found\n"); + MHI_CNTRL_LOG("No timesync capability found\n"); return ret; } @@ -807,7 +807,7 @@ static int mhi_init_timesync(struct mhi_controller *mhi_cntrl) INIT_LIST_HEAD(&mhi_tsync->head); /* save time_offset for obtaining time */ - MHI_LOG("TIME OFFS:0x%x\n", time_offset); + MHI_CNTRL_LOG("TIME OFFS:0x%x\n", time_offset); mhi_tsync->time_reg = mhi_cntrl->regs + time_offset + TIMESYNC_TIME_LOW_OFFSET; @@ -816,7 +816,7 @@ static int mhi_init_timesync(struct mhi_controller *mhi_cntrl) /* get timesync event ring configuration */ er_index = mhi_get_er_index(mhi_cntrl, MHI_ER_TSYNC_ELEMENT_TYPE); if (er_index < 0) { - MHI_LOG("Could not find timesync event ring\n"); + MHI_CNTRL_LOG("Could not find timesync event ring\n"); return er_index; } @@ -845,7 +845,7 @@ int mhi_init_sfr(struct mhi_controller *mhi_cntrl) sfr_info->buf_addr = mhi_alloc_coherent(mhi_cntrl, sfr_info->len, &sfr_info->dma_addr, GFP_KERNEL); if (!sfr_info->buf_addr) { - MHI_ERR("Failed to allocate memory for sfr\n"); + MHI_CNTRL_ERR("Failed to allocate memory for sfr\n"); return -ENOMEM; } @@ -853,14 +853,14 @@ int mhi_init_sfr(struct mhi_controller *mhi_cntrl) ret = mhi_send_cmd(mhi_cntrl, NULL, MHI_CMD_SFR_CFG); if (ret) { - MHI_ERR("Failed to send sfr cfg cmd\n"); + MHI_CNTRL_ERR("Failed to send sfr cfg cmd\n"); return ret; } ret = wait_for_completion_timeout(&sfr_info->completion, msecs_to_jiffies(mhi_cntrl->timeout_ms)); if (!ret || sfr_info->ccs != MHI_EV_CC_SUCCESS) { - MHI_ERR("Failed to get sfr cfg cmd completion\n"); + MHI_CNTRL_ERR("Failed to get sfr cfg cmd completion\n"); return -EIO; } @@ -888,7 +888,7 @@ static int mhi_init_bw_scale(struct mhi_controller *mhi_cntrl) bw_cfg_offset += BW_SCALE_CFG_OFFSET; - MHI_LOG("BW_CFG OFFSET:0x%x\n", bw_cfg_offset); + MHI_CNTRL_LOG("BW_CFG OFFSET:0x%x\n", bw_cfg_offset); /* advertise host support */ mhi_cntrl->write_reg(mhi_cntrl, mhi_cntrl->regs, bw_cfg_offset, @@ -977,7 +977,7 @@ int mhi_init_mmio(struct mhi_controller *mhi_cntrl) { 0, 0, 0 } }; - MHI_LOG("Initializing MMIO\n"); + MHI_CNTRL_LOG("Initializing MMIO\n"); /* set up DB register for all the chan rings */ ret = mhi_read_reg_field(mhi_cntrl, base, CHDBOFF, CHDBOFF_CHDBOFF_MASK, @@ -985,7 +985,7 @@ int mhi_init_mmio(struct mhi_controller *mhi_cntrl) if (ret) return -EIO; - MHI_LOG("CHDBOFF:0x%x\n", val); + MHI_CNTRL_LOG("CHDBOFF:0x%x\n", val); /* setup wake db */ mhi_cntrl->wake_db = base + val + (8 * MHI_DEV_WAKE_DB); @@ -1008,7 +1008,7 @@ int mhi_init_mmio(struct mhi_controller *mhi_cntrl) if (ret) return -EIO; - MHI_LOG("ERDBOFF:0x%x\n", val); + MHI_CNTRL_LOG("ERDBOFF:0x%x\n", val); mhi_event = mhi_cntrl->mhi_event; for (i = 0; i < mhi_cntrl->total_ev_rings; i++, val += 8, mhi_event++) { @@ -1021,7 +1021,7 @@ int mhi_init_mmio(struct mhi_controller *mhi_cntrl) /* set up DB register for primary CMD rings */ mhi_cntrl->mhi_cmd[PRIMARY_CMD_RING].ring.db_addr = base + CRDB_LOWER; - MHI_LOG("Programming all MMIO values.\n"); + MHI_CNTRL_LOG("Programming all MMIO values.\n"); for (i = 0; reg_info[i].offset; i++) mhi_write_reg_field(mhi_cntrl, base, reg_info[i].offset, reg_info[i].mask, reg_info[i].shift, @@ -1772,7 +1772,7 @@ int mhi_prepare_for_power_up(struct mhi_controller *mhi_cntrl) ret = mhi_init_dev_ctxt(mhi_cntrl); if (ret) { - MHI_ERR("Error with init dev_ctxt\n"); + MHI_CNTRL_ERR("Error with init dev_ctxt\n"); goto error_dev_ctxt; } @@ -1792,7 +1792,7 @@ int mhi_prepare_for_power_up(struct mhi_controller *mhi_cntrl) ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIEOFF, &bhie_off); if (ret) { - MHI_ERR("Error getting bhie offset\n"); + MHI_CNTRL_ERR("Error getting bhie offset\n"); goto bhie_error; } diff --git a/drivers/bus/mhi/core/mhi_pm.c b/drivers/bus/mhi/core/mhi_pm.c index c0404868f068..819ea9442f21 100644 --- a/drivers/bus/mhi/core/mhi_pm.c +++ b/drivers/bus/mhi/core/mhi_pm.c @@ -256,7 +256,7 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl) enum MHI_PM_STATE cur_state; int ret, i; - MHI_LOG("Waiting to enter READY state\n"); + MHI_CNTRL_LOG("Waiting to enter READY state\n"); /* wait for RESET to be cleared and READY bit to be set */ wait_event_timeout(mhi_cntrl->state_event, @@ -278,16 +278,16 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl) if (reset || !ready) return -ETIMEDOUT; - MHI_LOG("Device in READY State\n"); + MHI_CNTRL_LOG("Device in READY State\n"); write_lock_irq(&mhi_cntrl->pm_lock); cur_state = mhi_tryset_pm_state(mhi_cntrl, MHI_PM_POR); mhi_cntrl->dev_state = MHI_STATE_READY; write_unlock_irq(&mhi_cntrl->pm_lock); if (cur_state != MHI_PM_POR) { - MHI_ERR("Error moving to state %s from %s\n", - to_mhi_pm_state_str(MHI_PM_POR), - to_mhi_pm_state_str(cur_state)); + MHI_CNTRL_ERR("Error moving to state %s from %s\n", + to_mhi_pm_state_str(MHI_PM_POR), + to_mhi_pm_state_str(cur_state)); return -EIO; } read_lock_bh(&mhi_cntrl->pm_lock); @@ -296,7 +296,7 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl) ret = mhi_init_mmio(mhi_cntrl); if (ret) { - MHI_ERR("Error programming mmio registers\n"); + MHI_CNTRL_ERR("Error programming mmio registers\n"); goto error_mmio; } @@ -475,7 +475,7 @@ static int mhi_pm_mission_mode_transition(struct mhi_controller *mhi_cntrl) enum mhi_ee ee = 0; struct mhi_event *mhi_event; - MHI_LOG("Processing Mission Mode Transition\n"); + MHI_CNTRL_LOG("Processing Mission Mode Transition\n"); write_lock_irq(&mhi_cntrl->pm_lock); if (MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) @@ -483,7 +483,7 @@ static int mhi_pm_mission_mode_transition(struct mhi_controller *mhi_cntrl) write_unlock_irq(&mhi_cntrl->pm_lock); if (!MHI_IN_MISSION_MODE(ee)) { - MHI_ERR("Invalid EE:%s\n", TO_MHI_EXEC_STR(ee)); + MHI_CNTRL_ERR("Invalid EE:%s\n", TO_MHI_EXEC_STR(ee)); return -EIO; } @@ -546,7 +546,7 @@ static int mhi_pm_mission_mode_transition(struct mhi_controller *mhi_cntrl) /* setup sysfs nodes for userspace votes */ mhi_create_sysfs(mhi_cntrl); - MHI_LOG("Adding new devices\n"); + MHI_CNTRL_LOG("Adding new devices\n"); /* add supported devices */ mhi_create_devices(mhi_cntrl); @@ -557,7 +557,7 @@ error_mission_mode: mhi_cntrl->wake_put(mhi_cntrl, false); read_unlock_bh(&mhi_cntrl->pm_lock); - MHI_LOG("Exit with ret:%d\n", ret); + MHI_CNTRL_LOG("Exit with ret:%d\n", ret); return ret; } @@ -574,7 +574,8 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, struct mhi_sfr_info *sfr_info = mhi_cntrl->mhi_sfr; int ret, i; - MHI_LOG("Enter with from pm_state:%s MHI_STATE:%s to pm_state:%s\n", + MHI_CNTRL_LOG( + "Enter with from pm_state:%s MHI_STATE:%s to pm_state:%s\n", to_mhi_pm_state_str(mhi_cntrl->pm_state), TO_MHI_STATE_STR(mhi_cntrl->dev_state), to_mhi_pm_state_str(transition_state)); @@ -605,8 +606,8 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, /* not handling sys_err, could be middle of shut down */ if (cur_state != transition_state) { - MHI_LOG("Failed to transition to state:0x%x from:0x%x\n", - transition_state, cur_state); + MHI_CNTRL_LOG("Failed to transition to state:0x%x from:0x%x\n", + transition_state, cur_state); mutex_unlock(&mhi_cntrl->pm_mutex); return; } @@ -615,7 +616,7 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, if (MHI_REG_ACCESS_VALID(prev_state)) { unsigned long timeout = msecs_to_jiffies(mhi_cntrl->timeout_ms); - MHI_LOG("Trigger device into MHI_RESET\n"); + MHI_CNTRL_LOG("Trigger device into MHI_RESET\n"); write_lock_irq(&mhi_cntrl->pm_lock); mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET); @@ -641,7 +642,8 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, mhi_cntrl->initiate_mhi_reset = false; } - MHI_LOG("Waiting for all pending event ring processing to complete\n"); + MHI_CNTRL_LOG( + "Waiting for all pending event ring processing to complete\n"); mhi_event = mhi_cntrl->mhi_event; for (i = 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) { if (!mhi_event->request_irq) @@ -651,7 +653,7 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, mutex_unlock(&mhi_cntrl->pm_mutex); - MHI_LOG("Reset all active channels and remove mhi devices\n"); + MHI_CNTRL_LOG("Reset all active channels and remove mhi devices\n"); device_for_each_child(mhi_cntrl->dev, NULL, mhi_destroy_device); MHI_LOG("Finish resetting channels\n"); @@ -659,7 +661,7 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, /* remove support for userspace votes */ mhi_destroy_sysfs(mhi_cntrl); - MHI_LOG("Waiting for all pending threads to complete\n"); + MHI_CNTRL_LOG("Waiting for all pending threads to complete\n"); wake_up_all(&mhi_cntrl->state_event); flush_work(&mhi_cntrl->special_work); @@ -675,7 +677,7 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, MHI_ASSERT(atomic_read(&mhi_cntrl->pending_pkts), "pending_pkts != 0"); /* reset the ev rings and cmd rings */ - MHI_LOG("Resetting EV CTXT and CMD CTXT\n"); + MHI_CNTRL_LOG("Resetting EV CTXT and CMD CTXT\n"); mhi_cmd = mhi_cntrl->mhi_cmd; cmd_ctxt = mhi_cntrl->mhi_ctxt->cmd_ctxt; for (i = 0; i < NR_OF_CMD_RINGS; i++, mhi_cmd++, cmd_ctxt++) { @@ -711,14 +713,15 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl, cur_state = mhi_tryset_pm_state(mhi_cntrl, MHI_PM_DISABLE); write_unlock_irq(&mhi_cntrl->pm_lock); if (unlikely(cur_state != MHI_PM_DISABLE)) - MHI_ERR("Error moving from pm state:%s to state:%s\n", + MHI_CNTRL_ERR( + "Error moving from pm state:%s to state:%s\n", to_mhi_pm_state_str(cur_state), to_mhi_pm_state_str(MHI_PM_DISABLE)); } - MHI_LOG("Exit with pm_state:%s mhi_state:%s\n", - to_mhi_pm_state_str(mhi_cntrl->pm_state), - TO_MHI_STATE_STR(mhi_cntrl->dev_state)); + MHI_CNTRL_LOG("Exit with pm_state:%s mhi_state:%s\n", + to_mhi_pm_state_str(mhi_cntrl->pm_state), + TO_MHI_STATE_STR(mhi_cntrl->dev_state)); mutex_unlock(&mhi_cntrl->pm_mutex); } @@ -740,7 +743,7 @@ int mhi_debugfs_trigger_reset(void *data, u64 val) enum MHI_PM_STATE cur_state; int ret; - MHI_LOG("Trigger MHI Reset\n"); + MHI_CNTRL_LOG("Trigger MHI Reset\n"); /* exit lpm first */ mhi_cntrl->runtime_get(mhi_cntrl, mhi_cntrl->priv_data); @@ -752,7 +755,8 @@ int mhi_debugfs_trigger_reset(void *data, u64 val) msecs_to_jiffies(mhi_cntrl->timeout_ms)); if (!ret || MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) { - MHI_ERR("Did not enter M0 state, cur_state:%s pm_state:%s\n", + MHI_CNTRL_ERR( + "Did not enter M0 state, cur_state:%s pm_state:%s\n", TO_MHI_STATE_STR(mhi_cntrl->dev_state), to_mhi_pm_state_str(mhi_cntrl->pm_state)); return -EIO; @@ -856,7 +860,8 @@ void mhi_process_sys_err(struct mhi_controller *mhi_cntrl) * instead we will jump directly to rddm state */ if (mhi_cntrl->rddm_image) { - MHI_LOG("Controller supports RDDM, skipping SYS_ERR_PROCESS\n"); + MHI_CNTRL_LOG( + "Controller supports RDDM, skipping SYS_ERR_PROCESS\n"); return; } @@ -880,8 +885,8 @@ void mhi_pm_st_worker(struct work_struct *work) list_for_each_entry_safe(itr, tmp, &head, node) { list_del(&itr->node); - MHI_LOG("Transition to state:%s\n", - TO_MHI_STATE_TRANS_STR(itr->state)); + MHI_CNTRL_LOG("Transition to state:%s\n", + TO_MHI_STATE_TRANS_STR(itr->state)); switch (itr->state) { case MHI_ST_TRANSITION_PBL: @@ -918,7 +923,7 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) enum MHI_ST_TRANSITION next_state; struct mhi_device *mhi_dev = mhi_cntrl->mhi_dev; - MHI_LOG("Requested to power on\n"); + MHI_CNTRL_LOG("Requested to power on\n"); if (mhi_cntrl->msi_allocated < mhi_cntrl->total_ev_rings) return -EINVAL; @@ -943,14 +948,14 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) /* setup device context */ ret = mhi_init_dev_ctxt(mhi_cntrl); if (ret) { - MHI_ERR("Error setting dev_context\n"); + MHI_CNTRL_ERR("Error setting dev_context\n"); goto error_dev_ctxt; } } ret = mhi_init_irq_setup(mhi_cntrl); if (ret) { - MHI_ERR("Error setting up irq\n"); + MHI_CNTRL_ERR("Error setting up irq\n"); goto error_setup_irq; } @@ -970,7 +975,7 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIEOFF, &val); if (ret) { write_unlock_irq(&mhi_cntrl->pm_lock); - MHI_ERR("Error getting bhie offset\n"); + MHI_CNTRL_ERR("Error getting bhie offset\n"); goto error_bhi_offset; } @@ -986,7 +991,8 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) /* confirm device is in valid exec env */ if (!MHI_IN_PBL(current_ee) && current_ee != MHI_EE_AMSS) { - MHI_ERR("Not a valid ee for power on\n"); + MHI_CNTRL_ERR("Not a valid EE for power on:%s\n", + TO_MHI_EXEC_STR(current_ee)); ret = -EIO; goto error_bhi_offset; } @@ -1001,7 +1007,7 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) mutex_unlock(&mhi_cntrl->pm_mutex); - MHI_LOG("Power on setup success\n"); + MHI_CNTRL_LOG("Power on setup success\n"); return 0; @@ -1026,15 +1032,15 @@ void mhi_control_error(struct mhi_controller *mhi_cntrl) enum MHI_PM_STATE cur_state, transition_state; struct mhi_sfr_info *sfr_info = mhi_cntrl->mhi_sfr; - MHI_LOG("Enter with pm_state:%s MHI_STATE:%s\n", - to_mhi_pm_state_str(mhi_cntrl->pm_state), - TO_MHI_STATE_STR(mhi_cntrl->dev_state)); + MHI_CNTRL_LOG("Enter with pm_state:%s MHI_STATE:%s\n", + to_mhi_pm_state_str(mhi_cntrl->pm_state), + TO_MHI_STATE_STR(mhi_cntrl->dev_state)); /* copy subsystem failure reason string if supported */ if (sfr_info && sfr_info->buf_addr) { memcpy(sfr_info->str, sfr_info->buf_addr, sfr_info->len); - pr_err("mhi: %s sfr: %s\n", mhi_cntrl->name, - sfr_info->buf_addr); + MHI_CNTRL_ERR("mhi:%s sfr: %s\n", mhi_cntrl->name, + sfr_info->buf_addr); } /* link is not down if device is in RDDM */ @@ -1047,9 +1053,9 @@ void mhi_control_error(struct mhi_controller *mhi_cntrl) /* proceed if we move to device error or are already in error state */ if (!MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) { - MHI_ERR("Failed to transition to state:%s from:%s\n", - to_mhi_pm_state_str(transition_state), - to_mhi_pm_state_str(cur_state)); + MHI_CNTRL_ERR("Failed to transition to state:%s from:%s\n", + to_mhi_pm_state_str(transition_state), + to_mhi_pm_state_str(cur_state)); goto exit_control_error; } @@ -1062,9 +1068,9 @@ void mhi_control_error(struct mhi_controller *mhi_cntrl) device_for_each_child(mhi_cntrl->dev, NULL, mhi_early_notify_device); exit_control_error: - MHI_LOG("Exit with pm_state:%s MHI_STATE:%s\n", - to_mhi_pm_state_str(mhi_cntrl->pm_state), - TO_MHI_STATE_STR(mhi_cntrl->dev_state)); + MHI_CNTRL_LOG("Exit with pm_state:%s MHI_STATE:%s\n", + to_mhi_pm_state_str(mhi_cntrl->pm_state), + TO_MHI_STATE_STR(mhi_cntrl->dev_state)); } EXPORT_SYMBOL(mhi_control_error); @@ -1082,7 +1088,7 @@ void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful) cur_state = mhi_tryset_pm_state(mhi_cntrl, MHI_PM_LD_ERR_FATAL_DETECT); if (cur_state != MHI_PM_LD_ERR_FATAL_DETECT) - MHI_ERR("Failed to move to state:%s from:%s\n", + MHI_CNTRL_ERR("Failed to move to state:%s from:%s\n", to_mhi_pm_state_str(MHI_PM_LD_ERR_FATAL_DETECT), to_mhi_pm_state_str(mhi_cntrl->pm_state)); transition_state = MHI_PM_SHUTDOWN_NO_ACCESS; @@ -1093,7 +1099,7 @@ void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful) mhi_queue_disable_transition(mhi_cntrl, transition_state); - MHI_LOG("Wait for shutdown to complete\n"); + MHI_CNTRL_LOG("Wait for shutdown to complete\n"); flush_work(&mhi_cntrl->st_worker); mhi_deinit_debugfs(mhi_cntrl); @@ -1704,27 +1710,27 @@ int mhi_force_rddm_mode(struct mhi_controller *mhi_cntrl) { int ret; - MHI_LOG("Enter with pm_state:%s ee:%s\n", - to_mhi_pm_state_str(mhi_cntrl->pm_state), - TO_MHI_EXEC_STR(mhi_cntrl->ee)); + MHI_CNTRL_LOG("Enter with pm_state:%s ee:%s\n", + to_mhi_pm_state_str(mhi_cntrl->pm_state), + TO_MHI_EXEC_STR(mhi_cntrl->ee)); /* device already in rddm */ if (mhi_cntrl->ee == MHI_EE_RDDM) return 0; - MHI_LOG("Triggering SYS_ERR to force rddm state\n"); + MHI_CNTRL_LOG("Triggering SYS_ERR to force rddm state\n"); mhi_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR); /* wait for rddm event */ - MHI_LOG("Waiting for device to enter RDDM state\n"); + MHI_CNTRL_LOG("Waiting for device to enter RDDM state\n"); ret = wait_event_timeout(mhi_cntrl->state_event, mhi_cntrl->ee == MHI_EE_RDDM, msecs_to_jiffies(mhi_cntrl->timeout_ms)); ret = ret ? 0 : -EIO; - MHI_LOG("Exiting with pm_state:%s ee:%s ret:%d\n", - to_mhi_pm_state_str(mhi_cntrl->pm_state), - TO_MHI_EXEC_STR(mhi_cntrl->ee), ret); + MHI_CNTRL_LOG("Exiting with pm_state:%s ee:%s ret:%d\n", + to_mhi_pm_state_str(mhi_cntrl->pm_state), + TO_MHI_EXEC_STR(mhi_cntrl->ee), ret); return ret; }