Loading drivers/soc/qcom/qmi_rmnet.c +30 −3 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <net/pkt_sched.h> #include "qmi_rmnet_i.h" #include <trace/events/dfc.h> #include <linux/module.h> #include <linux/moduleparam.h> #define NLMSG_FLOW_ACTIVATE 1 Loading @@ -30,7 +31,11 @@ #define FLAG_POWERSAVE_MASK 0x0010 #define DFC_MODE_MULTIQ 2 #define PS_INTERVAL (0x0004 * HZ) unsigned int rmnet_wq_frequency __read_mostly = 4; module_param(rmnet_wq_frequency, uint, 0644); MODULE_PARM_DESC(rmnet_wq_frequency, "Frequency of PS check"); #define PS_INTERVAL (((!rmnet_wq_frequency) ? 1 : rmnet_wq_frequency) * HZ) #define NO_DELAY (0x0000 * HZ) #ifdef CONFIG_QCOM_QMI_DFC Loading Loading @@ -684,6 +689,7 @@ static void qmi_rmnet_check_stats(struct work_struct *work) if (unlikely(!real_work || !real_work->port)) return; /* Min Delay for retry errors */ lock_delay = qmi_rmnet_work_get_active(real_work->port) ? PS_INTERVAL : (HZ / 50); Loading @@ -693,7 +699,18 @@ static void qmi_rmnet_check_stats(struct work_struct *work) } if (!qmi_rmnet_work_get_active(real_work->port)) { qmi_rmnet_work_set_active(real_work->port, 1); qmi_rmnet_set_powersave_mode(real_work->port, 0); /* Retry after small delay if qmi error * This resumes UL grants by disabling * powersave mode if successful. */ if (qmi_rmnet_set_powersave_mode(real_work->port, 0) < 0) { qmi_rmnet_work_set_active(real_work->port, 0); queue_delayed_work(rmnet_ps_wq, &real_work->work, lock_delay); rtnl_unlock(); return; } goto end; } Loading @@ -705,7 +722,17 @@ static void qmi_rmnet_check_stats(struct work_struct *work) if (!rxd && !txd) { qmi_rmnet_work_set_active(real_work->port, 0); qmi_rmnet_set_powersave_mode(real_work->port, 1); /* Retry after lock delay if enabling powersave fails. * This will cause UL grants to continue being sent * suboptimally. Keeps wq active until successful. */ if (qmi_rmnet_set_powersave_mode(real_work->port, 1) < 0) { qmi_rmnet_work_set_active(real_work->port, 1); queue_delayed_work(rmnet_ps_wq, &real_work->work, PS_INTERVAL); } rtnl_unlock(); return; } Loading drivers/soc/qcom/wda_qmi.c +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ static void wda_svc_config(struct work_struct *work); /* **************************************************** */ #define WDA_SERVICE_ID_V01 0x1A #define WDA_SERVICE_VERS_V01 0x01 #define WDA_TIMEOUT_MS 10000 #define WDA_TIMEOUT_MS 20 #define QMI_WDA_SET_POWERSAVE_CONFIG_REQ_V01 0x002D #define QMI_WDA_SET_POWERSAVE_CONFIG_RESP_V01 0x002D Loading Loading
drivers/soc/qcom/qmi_rmnet.c +30 −3 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <net/pkt_sched.h> #include "qmi_rmnet_i.h" #include <trace/events/dfc.h> #include <linux/module.h> #include <linux/moduleparam.h> #define NLMSG_FLOW_ACTIVATE 1 Loading @@ -30,7 +31,11 @@ #define FLAG_POWERSAVE_MASK 0x0010 #define DFC_MODE_MULTIQ 2 #define PS_INTERVAL (0x0004 * HZ) unsigned int rmnet_wq_frequency __read_mostly = 4; module_param(rmnet_wq_frequency, uint, 0644); MODULE_PARM_DESC(rmnet_wq_frequency, "Frequency of PS check"); #define PS_INTERVAL (((!rmnet_wq_frequency) ? 1 : rmnet_wq_frequency) * HZ) #define NO_DELAY (0x0000 * HZ) #ifdef CONFIG_QCOM_QMI_DFC Loading Loading @@ -684,6 +689,7 @@ static void qmi_rmnet_check_stats(struct work_struct *work) if (unlikely(!real_work || !real_work->port)) return; /* Min Delay for retry errors */ lock_delay = qmi_rmnet_work_get_active(real_work->port) ? PS_INTERVAL : (HZ / 50); Loading @@ -693,7 +699,18 @@ static void qmi_rmnet_check_stats(struct work_struct *work) } if (!qmi_rmnet_work_get_active(real_work->port)) { qmi_rmnet_work_set_active(real_work->port, 1); qmi_rmnet_set_powersave_mode(real_work->port, 0); /* Retry after small delay if qmi error * This resumes UL grants by disabling * powersave mode if successful. */ if (qmi_rmnet_set_powersave_mode(real_work->port, 0) < 0) { qmi_rmnet_work_set_active(real_work->port, 0); queue_delayed_work(rmnet_ps_wq, &real_work->work, lock_delay); rtnl_unlock(); return; } goto end; } Loading @@ -705,7 +722,17 @@ static void qmi_rmnet_check_stats(struct work_struct *work) if (!rxd && !txd) { qmi_rmnet_work_set_active(real_work->port, 0); qmi_rmnet_set_powersave_mode(real_work->port, 1); /* Retry after lock delay if enabling powersave fails. * This will cause UL grants to continue being sent * suboptimally. Keeps wq active until successful. */ if (qmi_rmnet_set_powersave_mode(real_work->port, 1) < 0) { qmi_rmnet_work_set_active(real_work->port, 1); queue_delayed_work(rmnet_ps_wq, &real_work->work, PS_INTERVAL); } rtnl_unlock(); return; } Loading
drivers/soc/qcom/wda_qmi.c +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ static void wda_svc_config(struct work_struct *work); /* **************************************************** */ #define WDA_SERVICE_ID_V01 0x1A #define WDA_SERVICE_VERS_V01 0x01 #define WDA_TIMEOUT_MS 10000 #define WDA_TIMEOUT_MS 20 #define QMI_WDA_SET_POWERSAVE_CONFIG_REQ_V01 0x002D #define QMI_WDA_SET_POWERSAVE_CONFIG_RESP_V01 0x002D Loading