Merge "soc: qcom: bgcom: disable IRQ in pm suspend"
diff --git a/arch/arm/configs/msm8909-perf_defconfig b/arch/arm/configs/msm8909-perf_defconfig
index 8e386d3..458d60a 100755
--- a/arch/arm/configs/msm8909-perf_defconfig
+++ b/arch/arm/configs/msm8909-perf_defconfig
@@ -329,6 +329,8 @@
CONFIG_MSM_EEPROM=y
CONFIG_MSM_ISP_V1=y
CONFIG_MSM_ISPIF=y
+CONFIG_MSM_VIDC_3X_V4L2=y
+CONFIG_MSM_VIDC_3X_GOVERNORS=y
CONFIG_QCOM_KGSL=y
CONFIG_FB=y
CONFIG_FB_MSM=y
diff --git a/arch/arm/configs/msm8909_defconfig b/arch/arm/configs/msm8909_defconfig
index 5f69894..38d48ac 100644
--- a/arch/arm/configs/msm8909_defconfig
+++ b/arch/arm/configs/msm8909_defconfig
@@ -352,6 +352,8 @@
CONFIG_MSM_EEPROM=y
CONFIG_MSM_ISP_V1=y
CONFIG_MSM_ISPIF=y
+CONFIG_MSM_VIDC_3X_V4L2=y
+CONFIG_MSM_VIDC_3X_GOVERNORS=y
CONFIG_QCOM_KGSL=y
CONFIG_FB=y
CONFIG_FB_VIRTUAL=y
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index a58e327..67d8e33 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -1239,8 +1239,6 @@
rcvd_lstnr.sb_size))
return -EFAULT;
- data->listener.id = rcvd_lstnr.listener_id;
-
ptr_svc = __qseecom_find_svc(rcvd_lstnr.listener_id);
if (ptr_svc) {
if (ptr_svc->unregister_pending == false) {
@@ -1288,6 +1286,7 @@
new_entry->listener_in_use = false;
list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head);
+ data->listener.id = rcvd_lstnr.listener_id;
pr_debug("Service %d is registered\n", rcvd_lstnr.listener_id);
return ret;
}
@@ -1356,6 +1355,11 @@
struct qseecom_registered_listener_list *ptr_svc = NULL;
struct qseecom_unregister_pending_list *entry = NULL;
+ if (data->released) {
+ pr_err("Don't unregister lsnr %d\n", data->listener.id);
+ return -EINVAL;
+ }
+
ptr_svc = __qseecom_find_svc(data->listener.id);
if (!ptr_svc) {
pr_err("Unregiser invalid listener ID %d\n", data->listener.id);
@@ -8073,9 +8077,10 @@
switch (data->type) {
case QSEECOM_LISTENER_SERVICE:
pr_debug("release lsnr svc %d\n", data->listener.id);
- free_private_data = false;
mutex_lock(&listener_access_lock);
ret = qseecom_unregister_listener(data);
+ if (!ret)
+ free_private_data = false;
data->listener.release_called = true;
mutex_unlock(&listener_access_lock);
__wakeup_unregister_listener_kthread();
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
index 234e7a9..30bb97a 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
@@ -311,15 +311,15 @@
[IPA_4_0_AUTO] = {
/*not-used UL_DL CV2X not-used, other are invalid */
[IPA_v4_0_RSRC_GRP_TYPE_SRC_PKT_CONTEXTS] = {
- {0, 0}, {1, 255}, {1, 1}, {0, 0}, {0, 0}, {0, 0} },
+ {1, 63}, {1, 63}, {1, 1}, {0, 0}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_SRS_DESCRIPTOR_LISTS] = {
- {0, 0}, {10, 10}, {8, 8}, {0, 0}, {0, 0}, {0, 0} },
+ {10, 10}, {10, 10}, {8, 8}, {0, 0}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_SRC_DESCRIPTOR_BUFF] = {
- {0, 0}, {14, 14}, {8, 8}, {0, 0}, {0, 0}, {0, 0} },
+ {12, 12}, {14, 14}, {8, 8}, {0, 0}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_SRC_HPS_DMARS] = {
- {0, 255}, {0, 255}, {0, 255}, {0, 255}, {0, 0}, {0, 0} },
+ {0, 63}, {0, 63}, {0, 63}, {0, 63}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_SRC_ACK_ENTRIES] = {
- {0, 0}, {20, 20}, {14, 14}, {0, 0}, {0, 0}, {0, 0} },
+ {14, 14}, {20, 20}, {14, 14}, {0, 0}, {0, 0}, {0, 0} },
},
[IPA_4_0_AUTO_MHI] = {
/* PCIE DDR DMA/CV2X not used, other are invalid */
@@ -330,7 +330,7 @@
[IPA_v4_0_RSRC_GRP_TYPE_SRC_DESCRIPTOR_BUFF] = {
{12, 12}, {12, 12}, {8, 8}, {0, 0}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_SRC_HPS_DMARS] = {
- {0, 255}, {0, 255}, {0, 255}, {0, 255}, {0, 0}, {0, 0} },
+ {0, 63}, {0, 63}, {0, 63}, {0, 63}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_SRC_ACK_ENTRIES] = {
{14, 14}, {14, 14}, {14, 14}, {0, 0}, {0, 0}, {0, 0} },
},
@@ -387,14 +387,14 @@
[IPA_v4_0_RSRC_GRP_TYPE_DST_DATA_SECTORS] = {
{4, 4}, {4, 4}, {3, 3}, {2, 2}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_DST_DPS_DMARS] = {
- {2, 255}, {1, 255}, {1, 2}, {0, 2}, {0, 0}, {0, 0} },
+ {2, 63}, {1, 63}, {1, 2}, {0, 2}, {0, 0}, {0, 0} },
},
[IPA_4_0_AUTO_MHI] = {
/*PCIE DDR DMA/CV2X, other are invalid */
[IPA_v4_0_RSRC_GRP_TYPE_DST_DATA_SECTORS] = {
{4, 4}, {4, 4}, {3, 3}, {2, 2}, {0, 0}, {0, 0} },
[IPA_v4_0_RSRC_GRP_TYPE_DST_DPS_DMARS] = {
- {2, 255}, {1, 255}, {1, 2}, {0, 2}, {0, 0}, {0, 0} },
+ {2, 63}, {1, 63}, {1, 2}, {0, 2}, {0, 0}, {0, 0} },
},
};
@@ -433,7 +433,7 @@
[IPA_4_0_AUTO] = {
/*not-used UL_DL CV2X not-used, other are invalid */
[IPA_RSRC_GRP_TYPE_RX_HPS_CMDQ] = {
- {0, 0}, {7, 7}, {2, 2}, {0, 0}, {0, 0}, {0, 0} },
+ {3, 3}, {7, 7}, {2, 2}, {0, 0}, {0, 0}, {0, 0} },
},
[IPA_4_0_AUTO_MHI] = {
/* PCIE DDR DMA/CV2X not used, other are invalid */
@@ -1705,7 +1705,7 @@
QMB_MASTER_SELECT_DDR,
{ 17, 1, 9, 9, IPA_EE_AP, GSI_USE_PREFETCH_BUFS } },
[IPA_4_0_AUTO][IPA_CLIENT_ETHERNET_CONS] = {
- true, IPA_v4_0_ETHERNET,
+ true, IPA_v4_0_GROUP_UL_DL,
false,
IPA_DPS_HPS_SEQ_TYPE_INVALID,
QMB_MASTER_SELECT_DDR,
@@ -1887,7 +1887,7 @@
QMB_MASTER_SELECT_PCIE,
{ 19, 6, 9, 9, IPA_EE_AP, GSI_USE_PREFETCH_BUFS } },
[IPA_4_0_AUTO_MHI][IPA_CLIENT_ETHERNET_CONS] = {
- true, IPA_v4_0_ETHERNET,
+ true, IPA_v4_0_MHI_GROUP_DDR,
false,
IPA_DPS_HPS_SEQ_TYPE_INVALID,
QMB_MASTER_SELECT_DDR,
diff --git a/drivers/usb/phy/phy-msm-usb.c b/drivers/usb/phy/phy-msm-usb.c
index f7903ad..a74a0aa 100644
--- a/drivers/usb/phy/phy-msm-usb.c
+++ b/drivers/usb/phy/phy-msm-usb.c
@@ -3340,17 +3340,24 @@
{
int ret = 0;
struct msm_otg *motg = rdev_get_drvdata(rdev);
+ struct usb_phy *phy = &motg->phy;
if (!motg->rm_pulldown) {
+ msm_otg_dbg_log_event(&motg->phy, "Disable Pulldown",
+ motg->rm_pulldown, 0);
ret = msm_hsusb_ldo_enable(motg, USB_PHY_REG_3P3_ON);
- if (!ret) {
- motg->rm_pulldown = true;
- msm_otg_dbg_log_event(&motg->phy, "RM Pulldown",
- motg->rm_pulldown, 0);
- }
- }
+ if (ret)
+ return ret;
- msm_otg_set_mode_nondriving(motg, true);
+ motg->rm_pulldown = true;
+ /* Don't reset h/w if previous disconnect handling is pending */
+ if (phy->otg->state == OTG_STATE_B_IDLE ||
+ phy->otg->state == OTG_STATE_UNDEFINED)
+ msm_otg_set_mode_nondriving(motg, true);
+ else
+ msm_otg_dbg_log_event(&motg->phy, "NonDrv err",
+ motg->rm_pulldown, 0);
+ }
return ret;
}
@@ -3359,16 +3366,21 @@
{
int ret = 0;
struct msm_otg *motg = rdev_get_drvdata(rdev);
-
- msm_otg_set_mode_nondriving(motg, false);
+ struct usb_phy *phy = &motg->phy;
if (motg->rm_pulldown) {
+ /* Let sm_work handle it if USB core is active */
+ if (phy->otg->state == OTG_STATE_B_IDLE ||
+ phy->otg->state == OTG_STATE_UNDEFINED)
+ msm_otg_set_mode_nondriving(motg, false);
+
ret = msm_hsusb_ldo_enable(motg, USB_PHY_REG_3P3_OFF);
- if (!ret) {
- motg->rm_pulldown = false;
- msm_otg_dbg_log_event(&motg->phy, "RM Pulldown",
- motg->rm_pulldown, 0);
- }
+ if (ret)
+ return ret;
+
+ motg->rm_pulldown = false;
+ msm_otg_dbg_log_event(&motg->phy, "EN Pulldown",
+ motg->rm_pulldown, 0);
}
return ret;