From aa47a8ab7a072981a133073eb1d9a47e17ac78af Mon Sep 17 00:00:00 2001 From: Hai Li Date: Wed, 22 Apr 2020 12:47:55 -0400 Subject: [PATCH 01/40] ARM: dts: msm: add hgsl to sa8195 vm for GPU doorbell This change is to enable GPU doorbell feature on sa8195 Linux GVM. Change-Id: I7d9c6f63bbcc4d7507071d4a81de2f668ecf81cd Signed-off-by: Hai Li --- arch/arm64/boot/dts/qcom/sa8195-vm.dtsi | 60 +++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sa8195-vm.dtsi b/arch/arm64/boot/dts/qcom/sa8195-vm.dtsi index 3dc5a946900a..61f4ec4d4aed 100644 --- a/arch/arm64/boot/dts/qcom/sa8195-vm.dtsi +++ b/arch/arm64/boot/dts/qcom/sa8195-vm.dtsi @@ -752,6 +752,66 @@ clocks = <&clock_virt GCC_PRNG_AHB_CLK>; clock-names = "iface_clk"; }; + + tcsr_compute_signal_glb: syscon@0x1fd8000 { + compatible = "syscon"; + reg = <0x1fd8000 0x1000>; + }; + + tcsr_compute_signal_sender0: syscon@0x1fd9000 { + compatible = "syscon"; + reg = <0x1fd9000 0x1000>; + }; + + tcsr_compute_signal_sender1: syscon@0x1fdd000 { + compatible = "syscon"; + reg = <0x1fdd000 0x1000>; + }; + + tcsr_compute_signal_receiver0: syscon@0x1fdb000 { + compatible = "syscon"; + reg = <0x1fdb000 0x1000>; + }; + + tcsr_compute_signal_receiver1: syscon@0x1fdf000 { + compatible = "syscon"; + reg = <0x1fdf000 0x1000>; + }; + + hgsl_tcsr_sender0: hgsl_tcsr_sender0 { + compatible = "qcom,hgsl-tcsr-sender"; + syscon = <&tcsr_compute_signal_sender0>; + syscon-glb = <&tcsr_compute_signal_glb>; + }; + + hgsl_tcsr_sender1: hgsl_tcsr_sender1 { + compatible = "qcom,hgsl-tcsr-sender"; + syscon = <&tcsr_compute_signal_sender1>; + syscon-glb = <&tcsr_compute_signal_glb>; + }; + + hgsl_tcsr_receiver0: hgsl_tcsr_receiver0 { + compatible = "qcom,hgsl-tcsr-receiver"; + syscon = <&tcsr_compute_signal_receiver0>; + interrupts = <0 238 0>; + }; + + hgsl_tcsr_receiver1: hgsl_tcsr_receiver1 { + compatible = "qcom,hgsl-tcsr-receiver"; + syscon = <&tcsr_compute_signal_receiver1>; + interrupts = <0 239 0>; + }; + + msm_gpu_hyp: qcom,hgsl@0x2c00000 { + compatible = "qcom,hgsl"; + reg = <0x2c00000 0x8>, <0x2c8f000 0x4>; + reg-names = "hgsl_reg_hwinf", "hgsl_reg_gmucx"; + + qcom,glb-db-senders = <&hgsl_tcsr_sender0 + &hgsl_tcsr_sender1>; + qcom,glb-db-receivers = <&hgsl_tcsr_receiver0 + &hgsl_tcsr_receiver1>; + }; }; #include "sdmshrike-pinctrl.dtsi" From 64f5ee7baf0cb5f24d23189ede65a3340b0e4c60 Mon Sep 17 00:00:00 2001 From: Xiaowen Wu Date: Fri, 22 May 2020 14:26:28 -0400 Subject: [PATCH 02/40] drm/bridge: add anx7625 to drm device pm link Add anx7625 to drm device pm link to make sure anx7625 is suspended after drm device suspended, and resumed before drm device resumed. Change-Id: I306b9c1f25eec5f9d7efbfd845ed3483a4167045 Signed-off-by: Xiaowen Wu --- drivers/gpu/drm/bridge/analogix-anx7625.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/bridge/analogix-anx7625.c b/drivers/gpu/drm/bridge/analogix-anx7625.c index 0b80128b4587..8a45ad58d3f9 100644 --- a/drivers/gpu/drm/bridge/analogix-anx7625.c +++ b/drivers/gpu/drm/bridge/analogix-anx7625.c @@ -1221,6 +1221,9 @@ static int anx7625_bridge_attach(struct drm_bridge *bridge) return err; } + device_link_add(bridge->dev->dev, &anx7625->client->dev, + DL_FLAG_PM_RUNTIME); + return 0; } From e8c8ce5e4e96170e624661442e5724ff4bafcd81 Mon Sep 17 00:00:00 2001 From: E V Ravi Date: Mon, 13 Apr 2020 16:13:32 +0530 Subject: [PATCH 03/40] Add S2R and S2D support in KMD S2R: Implement .suspend() and .resume() S2D: Implement .thaw() and .restore(). Change-Id: Idef319f8f67895fcadb838fb72f03187799401c8 Signed-off-by: E V Ravi --- .../msm/ais/cam_req_mgr/cam_req_mgr_dev.c | 59 +++++++++++++++++++ include/uapi/media/cam_req_mgr.h | 12 +++- 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/msm/ais/cam_req_mgr/cam_req_mgr_dev.c b/drivers/media/platform/msm/ais/cam_req_mgr/cam_req_mgr_dev.c index ee18a574faeb..89a48d58073d 100644 --- a/drivers/media/platform/msm/ais/cam_req_mgr/cam_req_mgr_dev.c +++ b/drivers/media/platform/msm/ais/cam_req_mgr/cam_req_mgr_dev.c @@ -745,6 +745,64 @@ static const struct of_device_id cam_req_mgr_dt_match[] = { }; MODULE_DEVICE_TABLE(of, cam_dt_match); +static int cam_pm_suspend(struct device *pdev) +{ + struct v4l2_event event; + + event.id = V4L_EVENT_CAM_REQ_MGR_S2R_SUSPEND; + event.type = V4L_EVENT_CAM_REQ_MGR_EVENT; + CAM_DBG(CAM_CRM, "Queue S2R suspend event"); + v4l2_event_queue(g_dev.video, &event); + return 0; +} + +static int cam_pm_resume(struct device *pdev) +{ + struct v4l2_event event; + + event.id = V4L_EVENT_CAM_REQ_MGR_S2R_RESUME; + event.type = V4L_EVENT_CAM_REQ_MGR_EVENT; + CAM_DBG(CAM_CRM, "Queue S2R resume event"); + v4l2_event_queue(g_dev.video, &event); + return 0; +} + +static int cam_pm_freeze(struct device *pdev) +{ + CAM_DBG(CAM_CRM, "Freeze done for cam_req_mgr driver"); + return 0; +} + +static int cam_pm_restore(struct device *pdev) +{ + struct v4l2_event event; + + event.id = V4L_EVENT_CAM_REQ_MGR_HIBERNATION_RESUME; + event.type = V4L_EVENT_CAM_REQ_MGR_EVENT; + CAM_DBG(CAM_CRM, "Queue hibernation restore event"); + v4l2_event_queue(g_dev.video, &event); + return 0; +} + +static int cam_pm_thaw(struct device *pdev) +{ + struct v4l2_event event; + + event.id = V4L_EVENT_CAM_REQ_MGR_HIBERNATION_SUSPEND; + event.type = V4L_EVENT_CAM_REQ_MGR_EVENT; + CAM_DBG(CAM_CRM, "Queue hibernation thaw event"); + v4l2_event_queue(g_dev.video, &event); + return 0; +} + +static const struct dev_pm_ops cam_pm_ops = { + .suspend = &cam_pm_suspend, + .resume = &cam_pm_resume, + .freeze = &cam_pm_freeze, + .restore = &cam_pm_restore, + .thaw = &cam_pm_thaw, +}; + static struct platform_driver cam_req_mgr_driver = { .probe = cam_req_mgr_probe, .remove = cam_req_mgr_remove, @@ -753,6 +811,7 @@ static struct platform_driver cam_req_mgr_driver = { .owner = THIS_MODULE, .of_match_table = cam_req_mgr_dt_match, .suppress_bind_attrs = true, + .pm = &cam_pm_ops, }, }; diff --git a/include/uapi/media/cam_req_mgr.h b/include/uapi/media/cam_req_mgr.h index bdc1cb94c28c..55105fd903b0 100644 --- a/include/uapi/media/cam_req_mgr.h +++ b/include/uapi/media/cam_req_mgr.h @@ -43,9 +43,15 @@ #define V4L_EVENT_CAM_REQ_MGR_EVENT (V4L2_EVENT_PRIVATE_START + 0) /* Specific event ids to get notified in user space */ -#define V4L_EVENT_CAM_REQ_MGR_SOF 0 -#define V4L_EVENT_CAM_REQ_MGR_ERROR 1 -#define V4L_EVENT_CAM_REQ_MGR_SOF_BOOT_TS 2 +#define V4L_EVENT_CAM_REQ_MGR_SOF 0 +#define V4L_EVENT_CAM_REQ_MGR_ERROR 1 +#define V4L_EVENT_CAM_REQ_MGR_SOF_BOOT_TS 2 + +/* Suspend to RAM and Hibernation events */ +#define V4L_EVENT_CAM_REQ_MGR_S2R_SUSPEND 10 +#define V4L_EVENT_CAM_REQ_MGR_S2R_RESUME 11 +#define V4L_EVENT_CAM_REQ_MGR_HIBERNATION_SUSPEND 12 +#define V4L_EVENT_CAM_REQ_MGR_HIBERNATION_RESUME 13 /* SOF Event status */ #define CAM_REQ_MGR_SOF_EVENT_SUCCESS 0 From 6ef0e17f0d6fbadb9043e816226f8ffbfe71dd80 Mon Sep 17 00:00:00 2001 From: Jack Pham Date: Tue, 26 May 2020 23:33:16 -0700 Subject: [PATCH 04/40] usb: dwc3: gadget: Avoid spuriously printing NO_PULLUP in log This log message can come unnecessarily particularly when the controller is operating in host mode and the xHCI HCD driver is primarily handling interrupts. As there should be no gadget specific events there should not be any value showing in the GEVNTCOUNT registers so dwc3_interrupt() should normally return silently. Only print the "NO_PULLUP" log in case there are new/pending events and the gadget is in halted state. Change-Id: I4e5040409a14f18d454833fd67d41ca5d0f13501 Signed-off-by: Jack Pham --- drivers/usb/dwc3/gadget.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 03301a2455aa..9052518ff925 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -3885,20 +3885,6 @@ static irqreturn_t dwc3_check_event_buf(struct dwc3_event_buffer *evt) if (dwc->err_evt_seen) return IRQ_HANDLED; - /* Controller is being halted, ignore the interrupts */ - if (!dwc->pullups_connected) { - /* - * Even with controller halted, there is a possibility - * that the interrupt line is kept asserted. - * As per the databook (3.00A - 6.3.57) read the GEVNTCOUNT - * to ensure that the interrupt line is de-asserted. - */ - count = dwc3_readl(dwc->regs, DWC3_GEVNTCOUNT(0)); - count &= DWC3_GEVNTCOUNT_MASK; - dbg_event(0xFF, "NO_PULLUP", count); - return IRQ_HANDLED; - } - /* * With PCIe legacy interrupt, test shows that top-half irq handler can * be called again after HW interrupt deassertion. Check if bottom-half @@ -3913,6 +3899,13 @@ static irqreturn_t dwc3_check_event_buf(struct dwc3_event_buffer *evt) if (!count) return IRQ_NONE; + /* Controller is halted; ignore new/pending events */ + if (!dwc->pullups_connected) { + dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), count); + dbg_event(0xFF, "NO_PULLUP", count); + return IRQ_HANDLED; + } + if (count > evt->length) { dbg_event(0xFF, "HUGE_EVCNT", count); /* From 98c140797d9f03b98445f5784c642f4b4ba3f222 Mon Sep 17 00:00:00 2001 From: Bojun Pan Date: Tue, 9 Jun 2020 18:18:27 -0700 Subject: [PATCH 05/40] msm: ipa: update MHI event id logic 1. Device side GSI event channel allocated for MHI event channel need to be sequential. 2. The device side evt_id = host_evt_id - host first_evt_idx + device side offset (ipa3_ctx->mhi_evid_limits). Change-Id: Ieab7596caa6880d2daf75c3bc45cd59375dd7589 Signed-off-by: Bojun Pan --- drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c b/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c index f715f0bf2824..c356ae76bb01 100644 --- a/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c +++ b/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c @@ -1669,7 +1669,8 @@ int ipa_mhi_connect_pipe(struct ipa_mhi_connect_params *in, u32 *clnt_hdl) internal.start.gsi.mhi = &channel->ch_scratch.mhi; internal.start.gsi.cached_gsi_evt_ring_hdl = &channel->cached_gsi_evt_ring_hdl; - internal.start.gsi.evchid = channel->index; + internal.start.gsi.evchid = channel->ch_ctx_host.erindex - + ipa_mhi_client_ctx->first_er_idx; res = ipa_connect_mhi_pipe(&internal, clnt_hdl); if (res) { From 4354614e88b0cb7abd0869ff5e81145672794e69 Mon Sep 17 00:00:00 2001 From: Ashish Chavan Date: Wed, 10 Jun 2020 11:07:44 +0530 Subject: [PATCH 06/40] power: smb1398: Fix array index out of bounds error In smb1398_get_irq_index_byname() while accessing 'smb_irqs' we may cause array index out of bound error. Fix this by looping till ARRAY_SIZE(smb_irqs) instead of NUM_IRQS. While at it also fix usage of uninitialized variable of 'main_fcc_ua'. Change-Id: I2f726cdc23fdbff431d48699c8407744dd0ca93e Signed-off-by: Ashish Chavan --- drivers/power/supply/qcom/smb1398-charger.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/qcom/smb1398-charger.c b/drivers/power/supply/qcom/smb1398-charger.c index 2f3b3bf3f8b3..5f834401ab0b 100644 --- a/drivers/power/supply/qcom/smb1398-charger.c +++ b/drivers/power/supply/qcom/smb1398-charger.c @@ -1470,7 +1470,7 @@ static int smb1398_get_irq_index_byname(const char *irq_name) { int i; - for (i = 0; i < NUM_IRQS; i++) { + for (i = 0; i < ARRAY_SIZE(smb_irqs); i++) { if (smb_irqs[i].name != NULL) if (strcmp(smb_irqs[i].name, irq_name) == 0) return i; @@ -1726,7 +1726,7 @@ static void smb1398_taper_work(struct work_struct *work) struct smb1398_chip *chip = container_of(work, struct smb1398_chip, taper_work); union power_supply_propval pval = {0}; - int rc, fcc_ua, fv_uv, stepper_ua, main_fcc_ua; + int rc, fcc_ua, fv_uv, stepper_ua, main_fcc_ua = 0; bool slave_en; if (!is_psy_voter_available(chip)) From dfc16676a5073166568a3658526d374f26b22fc2 Mon Sep 17 00:00:00 2001 From: Mohammed Nayeem Ur Rahman Date: Wed, 1 Apr 2020 14:30:33 +0530 Subject: [PATCH 07/40] msm: adsprpc: Fix array index underflow problem Add check to restrict index underflow.This is to avoid that it does not access invalid index. Change-Id: Ib971033c5820ca4dab38ace3b106c7b1b42529e4 Acked-by: Gururaj Chalger Signed-off-by: Mohammed Nayeem Ur Rahman --- drivers/char/adsprpc.c | 67 +++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c index 4d538a830a1d..c3823ec9bf85 100644 --- a/drivers/char/adsprpc.c +++ b/drivers/char/adsprpc.c @@ -706,12 +706,23 @@ static void fastrpc_mmap_free(struct fastrpc_mmap *map, uint32_t flags) { struct fastrpc_apps *me = &gfa; struct fastrpc_file *fl; - int vmid; + int vmid, cid = -1, err = 0; struct fastrpc_session_ctx *sess; if (!map) return; fl = map->fl; + if (fl && !(map->flags == ADSP_MMAP_HEAP_ADDR || + map->flags == ADSP_MMAP_REMOTE_HEAP_ADDR)) { + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; + pr_err("adsprpc: ERROR:%s, Invalid channel id: %d, err:%d", + __func__, cid, err); + return; + } + } if (map->flags == ADSP_MMAP_HEAP_ADDR || map->flags == ADSP_MMAP_REMOTE_HEAP_ADDR) { map->refs--; @@ -783,20 +794,21 @@ static int fastrpc_mmap_create(struct fastrpc_file *fl, int fd, struct fastrpc_apps *me = &gfa; struct fastrpc_session_ctx *sess; struct fastrpc_apps *apps = fl->apps; - int cid = fl->cid; struct fastrpc_channel_ctx *chan = NULL; struct fastrpc_mmap *map = NULL; dma_addr_t region_phys = 0; void *region_vaddr = NULL; unsigned long flags; - int err = 0, vmid, sgl_index = 0; + int err = 0, vmid, sgl_index = 0, cid = -1; struct scatterlist *sgl = NULL; - VERIFY(err, cid >= 0 && cid < NUM_CHANNELS); - if (err) + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; goto bail; + } chan = &apps->channel[cid]; - if (!fastrpc_mmap_find(fl, fd, va, len, mflags, 1, ppmap)) return 0; map = kzalloc(sizeof(*map), GFP_KERNEL); @@ -1829,8 +1841,16 @@ static int fastrpc_invoke_send(struct smq_invoke_ctx *ctx, { struct smq_msg *msg = &ctx->msg; struct fastrpc_file *fl = ctx->fl; - struct fastrpc_channel_ctx *channel_ctx = &fl->apps->channel[fl->cid]; - int err = 0; + struct fastrpc_channel_ctx *channel_ctx = NULL; + int err = 0, cid = -1; + + channel_ctx = &fl->apps->channel[fl->cid]; + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; + goto bail; + } mutex_lock(&channel_ctx->smd_mutex); msg->pid = fl->tgid; @@ -1895,11 +1915,22 @@ static int fastrpc_internal_invoke(struct fastrpc_file *fl, uint32_t mode, { struct smq_invoke_ctx *ctx = NULL; struct fastrpc_ioctl_invoke *invoke = &inv->inv; - int cid = fl->cid; - int interrupted = 0; - int err = 0; + int err = 0, cid = -1, interrupted = 0; struct timespec invoket = {0}; - int64_t *perf_counter = getperfcounter(fl, PERF_COUNT); + int64_t *perf_counter = NULL; + + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; + goto bail; + } + VERIFY(err, fl->sctx != NULL); + if (err) { + err = -EBADR; + goto bail; + } + perf_counter = getperfcounter(fl, PERF_COUNT); if (fl->profile) getnstimeofday(&invoket); @@ -1913,14 +1944,6 @@ static int fastrpc_internal_invoke(struct fastrpc_file *fl, uint32_t mode, } } - VERIFY(err, fl->cid >= 0 && fl->cid < NUM_CHANNELS && fl->sctx != NULL); - if (err) { - pr_err("adsprpc: ERROR: %s: user application %s domain is not set\n", - __func__, current->comm); - err = -EBADR; - goto bail; - } - if (!kernel) { VERIFY(err, 0 == context_restore_interrupted(fl, inv, &ctx)); @@ -3238,8 +3261,7 @@ static const struct file_operations debugfs_fops = { static int fastrpc_channel_open(struct fastrpc_file *fl) { struct fastrpc_apps *me = &gfa; - int cid, err = 0; - + int cid = -1, err = 0; VERIFY(err, fl && fl->sctx && fl->cid >= 0 && fl->cid < NUM_CHANNELS); if (err) { @@ -3249,7 +3271,6 @@ static int fastrpc_channel_open(struct fastrpc_file *fl) return err; } cid = fl->cid; - mutex_lock(&me->channel[cid].rpmsg_mutex); VERIFY(err, NULL != me->channel[cid].rpdev); if (err) { From af4f77ab21337d8a8ced1d9f3011ad5d6cddbe2a Mon Sep 17 00:00:00 2001 From: Manohar Vavilapalli Date: Thu, 28 May 2020 16:38:27 +0530 Subject: [PATCH 08/40] drivers: soc: sdx_ext_ipc: Add option to change default policy Current code sets default policy to PANIC. Add option to override it from device tree. Change-Id: I0bdfdf2fc7cebfab951bd8be91ea3d8cb4f280cd Signed-off-by: Manohar Vavilapalli --- Documentation/devicetree/bindings/arm/msm/sdx-ext-ipc.txt | 2 ++ drivers/soc/qcom/sdx_ext_ipc.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/arm/msm/sdx-ext-ipc.txt b/Documentation/devicetree/bindings/arm/msm/sdx-ext-ipc.txt index 689c5b697fa5..e98f793b66d7 100644 --- a/Documentation/devicetree/bindings/arm/msm/sdx-ext-ipc.txt +++ b/Documentation/devicetree/bindings/arm/msm/sdx-ext-ipc.txt @@ -21,6 +21,8 @@ Optional named gpio properties: - qcom,ap2mdm-status2-gpio: gpio for APQ to indicate graceful shutdown to modem. +- qcom,default-policy-nop: Set default policy from PANIC to NOP. + Example: sdx_ext_ipc: qcom,sdx_ext_ipc { compatible = "qcom,sdx-ext-ipc"; diff --git a/drivers/soc/qcom/sdx_ext_ipc.c b/drivers/soc/qcom/sdx_ext_ipc.c index 9092aa8cf8f6..0118f4a33fa6 100644 --- a/drivers/soc/qcom/sdx_ext_ipc.c +++ b/drivers/soc/qcom/sdx_ext_ipc.c @@ -232,7 +232,10 @@ static int sdx_ext_ipc_probe(struct platform_device *pdev) mutex_init(&mdm->policy_lock); mutex_init(&mdm->e911_lock); - mdm->policy = SUBSYS_NOP; + if (of_property_read_bool(pdev->dev.of_node, "qcom,default-policy-nop")) + mdm->policy = SUBSYS_NOP; + else + mdm->policy = SUBSYS_PANIC; ret = device_create_file(mdm->dev, &dev_attr_policy); if (ret) { From 857094d551c398baecb9145a712577f0ebf7808a Mon Sep 17 00:00:00 2001 From: Manohar Vavilapalli Date: Fri, 12 Jun 2020 14:03:17 +0530 Subject: [PATCH 09/40] ARM: dts: msm: Enable sdx_ext_ipc and set policy to NOP in sa515m Enable sdx_ext_ipc node and add a property to set default policy from PANIC to NOP. Change-Id: I841b84085d84fd07c671a9fa6981fef1adc36045 Signed-off-by: Manohar Vavilapalli --- arch/arm64/boot/dts/qcom/sa515m-ccard-pcie-ep.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sa515m-ccard-pcie-ep.dts b/arch/arm64/boot/dts/qcom/sa515m-ccard-pcie-ep.dts index c33e8d9f17c1..81786435e82c 100644 --- a/arch/arm64/boot/dts/qcom/sa515m-ccard-pcie-ep.dts +++ b/arch/arm64/boot/dts/qcom/sa515m-ccard-pcie-ep.dts @@ -71,3 +71,8 @@ &usb { qcom,smmu-s1-bypass; }; + +&sdx_ext_ipc { + qcom,default-policy-nop; + status = "okay"; +}; From 02d283a541c25f06333185c72f1d45b19d666001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Wed, 6 May 2020 16:25:38 -0700 Subject: [PATCH 10/40] ANDROID: net: bpf: permit redirect from ingress L3 to egress L2 devices at near max mtu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit __bpf_skb_max_len(skb) is used from: bpf_skb_adjust_room __bpf_skb_change_tail __bpf_skb_change_head but in the case of forwarding we're likely calling these functions during receive processing on ingress and bpf_redirect()'ing at a later point in time to egress on another interface, thus these mtu checks are for the wrong device (input instead of output). This is particularly problematic if we're receiving on an L3 1500 mtu cellular interface, trying to add an L2 header and forwarding to an L3 mtu 1500 mtu wifi/ethernet device (which is thus L2 1514). The mtu check prevents us from adding the 14 byte ethernet header prior to forwarding the packet. After the packet has already been redirected, we'd need to add an additional 2nd ebpf program on the target device's egress tc hook, but then we'd also see non-redirected traffic and have no easy way to tell apart normal egress with ethernet header packets from forwarded ethernet headerless packets. Link: https://patchwork.ozlabs.org/project/netdev/patch/20200507023606.111650-1-zenczykowski@gmail.com/ But note that a more thorough solution will be pursued. CRs-Fixed: 2662725 Bug: 149816401 Change-Id: If55a144d7822e23bce85f65897bca7de4e0f9b24 Cc: Alexei Starovoitov Cc: Jakub Kicinski Signed-off-by: Maciej Żenczykowski Git-commit: 69eb478ff932476b208d2e7e97137ced5665fa04 Git-repo: https://android.googlesource.com/kernel/common/ Signed-off-by: Subash Abhinov Kasiviswanathan --- net/core/filter.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/core/filter.c b/net/core/filter.c index a3646230fbee..715c56a74246 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2281,6 +2281,8 @@ static int bpf_skb_net_shrink(struct sk_buff *skb, u32 len_diff) static u32 __bpf_skb_max_len(const struct sk_buff *skb) { + if (skb_at_tc_ingress(skb) || !skb->dev) + return SKB_MAX_ALLOC; return skb->dev->mtu + skb->dev->hard_header_len; } From 3fb9da1b388ed31ddac9659e0a5f015fa9871827 Mon Sep 17 00:00:00 2001 From: YUE CHEN Date: Fri, 12 Jun 2020 17:30:06 +0800 Subject: [PATCH 11/40] msm: ais: fix csid fatal error issue Move retain sw reg reset after enable csi2. Change-Id: I6de52fca7719c707c081a2e9eb392e61bf06c1d2 Signed-off-by: YUE CHEN --- .../ais/ais_isp/csid_hw/ais_ife_csid_core.c | 112 +++++++++--------- 1 file changed, 57 insertions(+), 55 deletions(-) diff --git a/drivers/media/platform/msm/ais/ais_isp/csid_hw/ais_ife_csid_core.c b/drivers/media/platform/msm/ais/ais_isp/csid_hw/ais_ife_csid_core.c index c1603049376b..dcdf3671faf4 100644 --- a/drivers/media/platform/msm/ais/ais_isp/csid_hw/ais_ife_csid_core.c +++ b/drivers/media/platform/msm/ais/ais_isp/csid_hw/ais_ife_csid_core.c @@ -1075,6 +1075,49 @@ static int ais_ife_csid_force_reset(void *hw_priv, return rc; } +static int ais_ife_csid_reset_retain_sw_reg( + struct ais_ife_csid_hw *csid_hw) +{ + int rc = 0; + uint32_t status; + const struct ais_ife_csid_reg_offset *csid_reg = + csid_hw->csid_info->csid_reg; + struct cam_hw_soc_info *soc_info; + + soc_info = &csid_hw->hw_info->soc_info; + /* clear the top interrupt first */ + cam_io_w_mb(1, soc_info->reg_map[0].mem_base + + csid_reg->cmn_reg->csid_top_irq_clear_addr); + cam_io_w_mb(1, soc_info->reg_map[0].mem_base + + csid_reg->cmn_reg->csid_irq_cmd_addr); + + usleep_range(3000, 3010); + + cam_io_w_mb(csid_reg->cmn_reg->csid_rst_stb, + soc_info->reg_map[0].mem_base + + csid_reg->cmn_reg->csid_rst_strobes_addr); + rc = readl_poll_timeout(soc_info->reg_map[0].mem_base + + csid_reg->cmn_reg->csid_top_irq_status_addr, + status, (status & 0x1) == 0x1, + AIS_IFE_CSID_TIMEOUT_SLEEP_US, AIS_IFE_CSID_TIMEOUT_ALL_US); + if (rc < 0) { + CAM_ERR(CAM_ISP, "CSID:%d csid_reset fail rc = %d", + csid_hw->hw_intf->hw_idx, rc); + rc = -ETIMEDOUT; + } else { + CAM_DBG(CAM_ISP, "CSID:%d hw reset completed %d", + csid_hw->hw_intf->hw_idx, rc); + rc = 0; + } + cam_io_w_mb(1, soc_info->reg_map[0].mem_base + + csid_reg->cmn_reg->csid_top_irq_clear_addr); + cam_io_w_mb(1, soc_info->reg_map[0].mem_base + + csid_reg->cmn_reg->csid_irq_cmd_addr); + + return rc; +} + + static int ais_ife_csid_reserve(void *hw_priv, void *reserve_args, uint32_t arg_size) { @@ -1083,6 +1126,7 @@ static int ais_ife_csid_reserve(void *hw_priv, struct cam_hw_info *csid_hw_info; struct ais_ife_rdi_init_args *rdi_cfg; const struct ais_ife_csid_reg_offset *csid_reg; + unsigned long flags; if (!hw_priv || !reserve_args || (arg_size != sizeof(struct ais_ife_rdi_init_args))) { @@ -1120,6 +1164,19 @@ static int ais_ife_csid_reserve(void *hw_priv, if (rc) goto end; + if (csid_hw->device_enabled == 0) { + rc = ais_ife_csid_reset_retain_sw_reg(csid_hw); + if (rc < 0) { + CAM_ERR(CAM_ISP, "CSID: Failed in SW reset"); + goto disable_csi2; + } else { + CAM_DBG(CAM_ISP, "CSID: SW reset Successful"); + spin_lock_irqsave(&csid_hw->lock_state, flags); + csid_hw->device_enabled = 1; + spin_unlock_irqrestore(&csid_hw->lock_state, flags); + } + } + rc = ais_ife_csid_config_rdi_path(csid_hw, rdi_cfg); if (rc) goto disable_csi2; @@ -1185,57 +1242,12 @@ end: return rc; } - -static int ais_ife_csid_reset_retain_sw_reg( - struct ais_ife_csid_hw *csid_hw) -{ - int rc = 0; - uint32_t status; - const struct ais_ife_csid_reg_offset *csid_reg = - csid_hw->csid_info->csid_reg; - struct cam_hw_soc_info *soc_info; - - soc_info = &csid_hw->hw_info->soc_info; - /* clear the top interrupt first */ - cam_io_w_mb(1, soc_info->reg_map[0].mem_base + - csid_reg->cmn_reg->csid_top_irq_clear_addr); - cam_io_w_mb(1, soc_info->reg_map[0].mem_base + - csid_reg->cmn_reg->csid_irq_cmd_addr); - - usleep_range(3000, 3010); - - cam_io_w_mb(csid_reg->cmn_reg->csid_rst_stb, - soc_info->reg_map[0].mem_base + - csid_reg->cmn_reg->csid_rst_strobes_addr); - rc = readl_poll_timeout(soc_info->reg_map[0].mem_base + - csid_reg->cmn_reg->csid_top_irq_status_addr, - status, (status & 0x1) == 0x1, - AIS_IFE_CSID_TIMEOUT_SLEEP_US, AIS_IFE_CSID_TIMEOUT_ALL_US); - if (rc < 0) { - CAM_ERR(CAM_ISP, "CSID:%d csid_reset fail rc = %d", - csid_hw->hw_intf->hw_idx, rc); - rc = -ETIMEDOUT; - } else { - CAM_DBG(CAM_ISP, "CSID:%d hw reset completed %d", - csid_hw->hw_intf->hw_idx, rc); - rc = 0; - } - cam_io_w_mb(1, soc_info->reg_map[0].mem_base + - csid_reg->cmn_reg->csid_top_irq_clear_addr); - cam_io_w_mb(1, soc_info->reg_map[0].mem_base + - csid_reg->cmn_reg->csid_irq_cmd_addr); - - return rc; -} - - static int ais_ife_csid_init_hw(void *hw_priv, void *init_args, uint32_t arg_size) { int rc = 0; struct ais_ife_csid_hw *csid_hw; struct cam_hw_info *csid_hw_info; - unsigned long flags; if (!hw_priv || !init_args || (arg_size != sizeof(struct ais_ife_rdi_init_args))) { @@ -1251,16 +1263,6 @@ static int ais_ife_csid_init_hw(void *hw_priv, /* Initialize the csid hardware */ rc = ais_ife_csid_enable_hw(csid_hw); - if (csid_hw->device_enabled == 0) { - rc = ais_ife_csid_reset_retain_sw_reg(csid_hw); - if (rc < 0) - CAM_ERR(CAM_ISP, "CSID: Failed in SW reset"); - } - - spin_lock_irqsave(&csid_hw->lock_state, flags); - csid_hw->device_enabled = 1; - spin_unlock_irqrestore(&csid_hw->lock_state, flags); - mutex_unlock(&csid_hw->hw_info->hw_mutex); CAM_DBG(CAM_ISP, "Exit (%d)", rc); From 1e25bb79c36c15721801fbf4c9fa7d0a4690dcb7 Mon Sep 17 00:00:00 2001 From: Shankar Ravi Date: Wed, 27 May 2020 18:42:13 +0530 Subject: [PATCH 12/40] msm: camera: csiphy: Clear secure phy flags on release Issue: Phy flags are set on CONFIG_DEV and are cleared on STOP_DEV. If release is called without stop dev, next session will be opened with incorrect phy configuration based on the previous stale secure mode flags. Fix: Clear the phy secure mode flags on RELEASE_DEV. Change-Id: If47a4084c3edbf2a8fb48d22b85c5d04fe878c50 Signed-off-by: Shankar Ravi --- .../cam_csiphy/cam_csiphy_core.c | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_csiphy/cam_csiphy_core.c b/drivers/media/platform/msm/camera/cam_sensor_module/cam_csiphy/cam_csiphy_core.c index bb631c722d32..a53a6399b09e 100644 --- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_csiphy/cam_csiphy_core.c +++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_csiphy/cam_csiphy_core.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -51,6 +51,12 @@ static int cam_csiphy_notify_secure_mode(struct csiphy_device *csiphy_dev, return -EINVAL; } + CAM_INFO(CAM_CSIPHY, "PHY : %d offset: %d SEC: %d Mask: %d", + csiphy_dev->soc_info.index, + offset, + protect, + csiphy_dev->csiphy_cpas_cp_reg_mask[offset]); + return 0; } @@ -837,6 +843,7 @@ int32_t cam_csiphy_core_cfg(void *phy_dev, } break; case CAM_RELEASE_DEV: { + int32_t offset; struct cam_release_dev_cmd release; if (!csiphy_dev->acquire_count) { @@ -852,6 +859,23 @@ int32_t cam_csiphy_core_cfg(void *phy_dev, goto release_mutex; } + offset = cam_csiphy_get_instance_offset(csiphy_dev, + release.dev_handle); + if (offset < 0 || offset >= CSIPHY_MAX_INSTANCES) { + CAM_ERR(CAM_CSIPHY, "Invalid offset"); + goto release_mutex; + } + + if (csiphy_dev->csiphy_info.secure_mode[offset]) + cam_csiphy_notify_secure_mode( + csiphy_dev, + CAM_SECURE_MODE_NON_SECURE, offset); + + csiphy_dev->csiphy_info.secure_mode[offset] = + CAM_SECURE_MODE_NON_SECURE; + + csiphy_dev->csiphy_cpas_cp_reg_mask[offset] = 0x0; + rc = cam_destroy_device_hdl(release.dev_handle); if (rc < 0) CAM_ERR(CAM_CSIPHY, "destroying the device hdl"); From 400bfcec65b01ed5272a65ac40bbec283658d1d3 Mon Sep 17 00:00:00 2001 From: Shravya Samala Date: Fri, 15 May 2020 14:32:56 +0530 Subject: [PATCH 13/40] msm: camera: isp: Add trace event in case of irq delay detected Added trace event and called this trace when irq delay is detected. CRs-Fixed: 2688566 Change-Id: Ifcc27fca2db3d003edada46adf4cef28f8f9efcd Signed-off-by: Shravya Samala --- .../msm/camera/cam_isp/cam_isp_context.c | 56 ++++++++++++++++--- .../platform/msm/camera/cam_utils/cam_trace.h | 30 +++++++++- 2 files changed, 78 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c b/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c index d96a23da3bb8..a5d63a6e88b1 100644 --- a/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c +++ b/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c @@ -596,8 +596,14 @@ static int __cam_isp_ctx_handle_buf_done_in_activated_state( if (ctx_isp->frame_id == 1) ctx_isp->irq_timestamps = done->irq_mono_boot_time; else if (ctx_isp->fps && ((done->irq_mono_boot_time - - ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) + ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) { ctx_isp->irq_delay_detect = true; + trace_cam_isp_irq_delay_detect("IRQ delay at buf_done", + ctx, req->request_id, + ctx_isp->substate_activated, + (done->irq_mono_boot_time - + ctx_isp->irq_timestamps)); + } ctx_isp->irq_timestamps = done->irq_mono_boot_time; @@ -851,8 +857,14 @@ static int __cam_isp_ctx_reg_upd_in_epoch_state( if (ctx_isp->frame_id == 1) ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time; else if (ctx_isp->fps && ((rup_event_data->irq_mono_boot_time - - ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) + ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) { ctx_isp->irq_delay_detect = true; + trace_cam_isp_irq_delay_detect("IRQ delay at reg_upd", + ctx, req->request_id, + ctx_isp->substate_activated, + (rup_event_data->irq_mono_boot_time - + ctx_isp->irq_timestamps)); + } ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time; return 0; @@ -906,8 +918,14 @@ static int __cam_isp_ctx_reg_upd_in_activated_state( if (ctx_isp->frame_id == 1) ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time; else if (ctx_isp->fps && ((rup_event_data->irq_mono_boot_time - - ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) + ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) { ctx_isp->irq_delay_detect = true; + trace_cam_isp_irq_delay_detect("IRQ delay at reg_upd", + ctx, req->request_id, + ctx_isp->substate_activated, + (rup_event_data->irq_mono_boot_time - + ctx_isp->irq_timestamps)); + } ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time; end: @@ -1091,8 +1109,14 @@ static int __cam_isp_ctx_sof_in_activated_state( if (ctx_isp->frame_id == 1) ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time; else if (ctx_isp->fps && ((sof_event_data->irq_mono_boot_time - - ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) + ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) { ctx_isp->irq_delay_detect = true; + trace_cam_isp_irq_delay_detect("IRQ delay at sof", + ctx, req->request_id, + ctx_isp->substate_activated, + (sof_event_data->irq_mono_boot_time - + ctx_isp->irq_timestamps)); + } ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time; @@ -1138,8 +1162,14 @@ static int __cam_isp_ctx_reg_upd_in_sof(struct cam_isp_context *ctx_isp, if (ctx_isp->frame_id == 1) ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time; else if (ctx_isp->fps && ((rup_event_data->irq_mono_boot_time - - ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) + ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) { ctx_isp->irq_delay_detect = true; + trace_cam_isp_irq_delay_detect("IRQ delay at reg_upd", + ctx, req->request_id, + ctx_isp->substate_activated, + (rup_event_data->irq_mono_boot_time - + ctx_isp->irq_timestamps)); + } ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time; end: @@ -1228,8 +1258,14 @@ end: ctx_isp->irq_timestamps = epoch_hw_event_data->irq_mono_boot_time; else if (ctx_isp->fps && ((epoch_hw_event_data->irq_mono_boot_time - - ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) + ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) { ctx_isp->irq_delay_detect = true; + trace_cam_isp_irq_delay_detect("IRQ delay at epoch", + ctx, req->request_id, + ctx_isp->substate_activated, + (epoch_hw_event_data->irq_mono_boot_time - + ctx_isp->irq_timestamps)); + } ctx_isp->irq_timestamps = epoch_hw_event_data->irq_mono_boot_time; @@ -1268,8 +1304,14 @@ static int __cam_isp_ctx_sof_in_epoch(struct cam_isp_context *ctx_isp, if (ctx_isp->frame_id == 1) ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time; else if (ctx_isp->fps && ((sof_event_data->irq_mono_boot_time - - ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) + ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) { ctx_isp->irq_delay_detect = true; + trace_cam_isp_irq_delay_detect("IRQ delay at sof", + ctx, 0, + ctx_isp->substate_activated, + (sof_event_data->irq_mono_boot_time - + ctx_isp->irq_timestamps)); + } ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time; diff --git a/drivers/media/platform/msm/camera/cam_utils/cam_trace.h b/drivers/media/platform/msm/camera/cam_utils/cam_trace.h index c8b1fb00c124..5e45127baf68 100644 --- a/drivers/media/platform/msm/camera/cam_utils/cam_trace.h +++ b/drivers/media/platform/msm/camera/cam_utils/cam_trace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -286,6 +286,34 @@ TRACE_EVENT(cam_irq_handled, ) ); +TRACE_EVENT(cam_isp_irq_delay_detect, + TP_PROTO(const char *text, struct cam_context *ctx, + uint64_t request_id, uint32_t substate, + uint64_t timestamp), + TP_ARGS(text, ctx, request_id, substate, timestamp), + TP_STRUCT__entry( + __string(text, text) + __field(uint32_t, ctx_id) + __field(uint64_t, dev_id) + __field(uint64_t, req_id) + __field(uint32_t, substate) + __field(uint64_t, ts) + ), + TP_fast_assign( + __assign_str(text, text); + __entry->ctx_id = ctx->ctx_id; + __entry->dev_id = ctx->dev_id; + __entry->req_id = request_id; + __entry->substate = substate; + __entry->ts = timestamp; + ), + TP_printk( + "ISP: %s ctx=%u dev_id=%u req_id=%lld substate=%u event=%u delay_by=%llu", + __get_str(text), __entry->ctx_id, __entry->dev_id, + __entry->req_id, __entry->substate, __entry->ts + ) +); + TRACE_EVENT(cam_cdm_cb, TP_PROTO(const char *entity, uint32_t status), TP_ARGS(entity, status), From bdc105e6c2e9eda306f3e4d80dc1d6944854c82c Mon Sep 17 00:00:00 2001 From: Aniket Randive Date: Wed, 10 Jun 2020 20:10:07 +0530 Subject: [PATCH 14/40] USB: gadget: Add a print for Boot marker KPI Add a info print in composite_resume function. To know the exact time when the USB device is coming out from suspend mode. Change-Id: Ia18dfa6fb73db48df62eec3faa60edc7341b86ce Signed-off-by: Aniket Randive --- drivers/usb/gadget/composite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 88ebb9c27f26..73f1fd35e386 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -2431,7 +2431,7 @@ void composite_resume(struct usb_gadget *gadget) /* REVISIT: should we have config level * suspend/resume callbacks? */ - DBG(cdev, "resume\n"); + INFO(cdev, "USB Resume\n"); place_marker("M - USB device is resumed"); if (cdev->driver->resume) cdev->driver->resume(cdev); From b498b562cf39a761485664bd51d59c700c5d11de Mon Sep 17 00:00:00 2001 From: Om Parkash Date: Tue, 16 Jun 2020 10:28:51 +0530 Subject: [PATCH 15/40] ARM: dts: msm: Include camera sensor DTSi file for QCS410 Include camera sensor DTSi file for QCS410 Target Change-Id: Ie2a2c5981026e12b62ea87353c7ebd591449fda2 Signed-off-by: Om Parkash --- arch/arm64/boot/dts/qcom/qcs410-iot.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/qcom/qcs410-iot.dtsi b/arch/arm64/boot/dts/qcom/qcs410-iot.dtsi index 96fb1d37b317..3144838fcefc 100644 --- a/arch/arm64/boot/dts/qcom/qcs410-iot.dtsi +++ b/arch/arm64/boot/dts/qcom/qcs410-iot.dtsi @@ -14,6 +14,7 @@ #include #include #include "qcs410.dtsi" +#include "qcs610-camera-sensor-idp.dtsi" / { model = "Qualcomm Technologies, Inc. QCS410 IOT"; From bca0946befd35f93329c899d376bf2859549102a Mon Sep 17 00:00:00 2001 From: Mahesh Voorugonda Date: Sun, 14 Jun 2020 12:23:29 +0530 Subject: [PATCH 16/40] msm: vidc: Fix in deciding power mode Added maximum HQ load per core check to avoid sessions running in HQ more than supported. Change-Id: I027325684d6523126e5e9c71b89702a4c2272045 Signed-off-by: Mahesh Voorugonda --- .../media/platform/msm/vidc/msm_vidc_clocks.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/media/platform/msm/vidc/msm_vidc_clocks.c b/drivers/media/platform/msm/vidc/msm_vidc_clocks.c index 9d53d7f58ada..bf6141b6870d 100644 --- a/drivers/media/platform/msm/vidc/msm_vidc_clocks.c +++ b/drivers/media/platform/msm/vidc/msm_vidc_clocks.c @@ -1454,7 +1454,11 @@ static inline int msm_vidc_power_save_mode_enable(struct msm_vidc_inst *inst, struct hfi_device *hdev = NULL; enum hal_perf_mode venc_mode; u32 rc_mode = 0; + u32 hq_mbs_per_sec = 0; + struct msm_vidc_core *core; + struct msm_vidc_inst *instance = NULL; + core = inst->core; hdev = inst->core->device; if (inst->session_type != MSM_VIDC_ENCODER) { dprintk(VIDC_DBG, @@ -1469,6 +1473,19 @@ static inline int msm_vidc_power_save_mode_enable(struct msm_vidc_inst *inst, mbs_per_sec > inst->core->resources.max_hq_mbs_per_sec) { enable = true; } + if (!enable) { + mutex_lock(&core->lock); + list_for_each_entry(instance, &core->instances, list) { + if (instance->clk_data.core_id && + !(instance->flags & VIDC_LOW_POWER)) + hq_mbs_per_sec += + msm_comm_get_inst_load_per_core( + instance, LOAD_CALC_NO_QUIRKS); + } + mutex_unlock(&core->lock); + if (hq_mbs_per_sec > inst->core->resources.max_hq_mbs_per_sec) + enable = true; + } /* Power saving always disabled for CQ RC mode. */ rc_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_BITRATE_MODE); From d9dbcb40b707ca2925c6b26f815e8dd25648721c Mon Sep 17 00:00:00 2001 From: raghavendra ambadas Date: Mon, 15 Jun 2020 14:26:36 +0530 Subject: [PATCH 17/40] fbdev: msm: call pxl clk unprepare during suspend Pxl clock needs to be un-prepared during device goes to suspend. This will avoid byte clk warning back-trace in the logs and failure to enable the clocks. Change-Id: Iab6649af34d0135475e05d86f6d8545d20869abb Signed-off-by: Raghavendra Ambadas --- drivers/video/fbdev/msm/mdss_dsi_clk.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/video/fbdev/msm/mdss_dsi_clk.c b/drivers/video/fbdev/msm/mdss_dsi_clk.c index bd0aefa0411e..c75fd7d08340 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_clk.c +++ b/drivers/video/fbdev/msm/mdss_dsi_clk.c @@ -247,6 +247,7 @@ static int dsi_link_hs_clk_unprepare( if (link_hs_clks->byte_intf_clk) clk_unprepare(link_hs_clks->byte_intf_clk); + clk_unprepare(link_hs_clks->pixel_clk); clk_unprepare(link_hs_clks->byte_clk); return rc; From 91f301e070b606f702df8b70c10022f4141b04fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Mon, 23 Mar 2020 18:10:19 -0700 Subject: [PATCH 18/40] net-ipv6-ndisc: add support for 'PREF64' dns64 prefix identifier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is trivial since we already have support for the entirely identical (from the kernel's point of view) RDNSS, DNSSL, etc. that also contain opaque data that needs to be passed down to userspace for further processing. As specified in draft-ietf-6man-ra-pref64-09 (while it is still a draft, it is purely waiting on the RFC Editor for cleanups and publishing): PREF64 option contains lifetime and a (up to) 96-bit IPv6 prefix. The 8-bit identifier of the option type as assigned by the IANA is 38. Since we lack DNS64/NAT64/CLAT support in kernel at the moment, thus this option should also be passed on to userland. See: https://tools.ietf.org/html/draft-ietf-6man-ra-pref64-09 https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml#icmpv6-parameters-5 CRs-fixed: 2708232 Change-Id: I5b43d07ad34b764fff259e4f0cad30c4396c6eb8 Cc: Erik Kline Cc: Jen Linkova Cc: Lorenzo Colitti Cc: Michael Haro Signed-off-by: Maciej Żenczykowski Acked-By: Lorenzo Colitti Git-commit: I02bff2103194a8171f907e82f811d7ab66962138 Git-repo: https://android.googlesource.com/kernel/common/ Signed-off-by: Chinmay Agarwal --- include/net/ndisc.h | 1 + net/ipv6/ndisc.c | 1 + 2 files changed, 2 insertions(+) diff --git a/include/net/ndisc.h b/include/net/ndisc.h index d2a016ef5c41..35d7c887a5b9 100644 --- a/include/net/ndisc.h +++ b/include/net/ndisc.h @@ -39,6 +39,7 @@ enum { ND_OPT_DNSSL = 31, /* RFC6106 */ ND_OPT_6CO = 34, /* RFC6775 */ ND_OPT_CAPTIVE_PORTAL = 37, /* RFC7710 */ + ND_OPT_PREF64 = 38, /* RFC-ietf-6man-ra-pref64-09 */ __ND_OPT_MAX }; diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 381708112f7d..2241c5f52394 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -197,6 +197,7 @@ static inline int ndisc_is_useropt(const struct net_device *dev, return opt->nd_opt_type == ND_OPT_RDNSS || opt->nd_opt_type == ND_OPT_DNSSL || opt->nd_opt_type == ND_OPT_CAPTIVE_PORTAL || + opt->nd_opt_type == ND_OPT_PREF64 || ndisc_ops_is_useropt(dev, opt->nd_opt_type); } From ee2cf687ae1d4c14f5744bc828f13572d02f0e12 Mon Sep 17 00:00:00 2001 From: Shashi Kant Maurya Date: Wed, 10 Jun 2020 15:49:55 +0530 Subject: [PATCH 19/40] ARM: dts: msm: Enable USB type-C analog audio on SDM660 Enabling USB type-C audio on SDM660. Change-Id: Ic63f3cd31a871dd6f5b53a85f4d0ece8b1cca9d7 Signed-off-by: Shashi Kant Maurya --- arch/arm64/boot/dts/qcom/Makefile | 5 +++- .../qcom/sdm660-usbc-audio-mtp-overlay.dts | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 arch/arm64/boot/dts/qcom/sdm660-usbc-audio-mtp-overlay.dts diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile index c9af9a76daca..1d096793c0f0 100644 --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile @@ -434,7 +434,8 @@ ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y) sdm660-rcm-internal-codec-overlay.dtbo \ sda660-mtp-external-codec-overlay.dtbo \ sda660-cdp-external-codec-overlay.dtbo \ - sda660-rcm-external-codec-overlay.dtbo + sda660-rcm-external-codec-overlay.dtbo \ + sdm660-usbc-audio-mtp-overlay.dtbo sdm660-mtp-external-codec-overlay.dtbo-base := sdm660-pm660l.dtb @@ -450,6 +451,8 @@ sdm660-rcm-external-codec-overlay.dtbo-base := sdm660-pm660l.dtb sdm660-rcm-internal-codec-overlay.dtbo-base := sdm660-pm660l.dtb +sdm660-usbc-audio-mtp-overlay.dtbo-base := sdm660-pm660l.dtb + sda660-mtp-external-codec-overlay.dtbo-base := sda660-pm660l.dtb sda660-cdp-external-codec-overlay.dtbo-base := sda660-pm660l.dtb diff --git a/arch/arm64/boot/dts/qcom/sdm660-usbc-audio-mtp-overlay.dts b/arch/arm64/boot/dts/qcom/sdm660-usbc-audio-mtp-overlay.dts new file mode 100644 index 000000000000..72dc5c277fd7 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/sdm660-usbc-audio-mtp-overlay.dts @@ -0,0 +1,29 @@ +/* Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; +/plugin/; +#include + +#include "sdm660-mtp.dtsi" +#include "sdm660-external-codec.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. SDM 660 Ext. USBC Audio Codec MTP"; + compatible = "qcom,sdm660-mtp", "qcom,sdm660", "qcom,mtp"; + qcom,board-id = <8 2>; +}; + +&tavil_snd { + qcom,msm-mbhc-usbc-audio-supported = <1>; + qcom,msm-mbhc-moist-cfg = <0>, <0>, <3>; +}; From ef57f3ada4176ee92b8bb766d77afe42dfc0faf2 Mon Sep 17 00:00:00 2001 From: Xiaowen Wu Date: Tue, 16 Jun 2020 08:33:44 -0400 Subject: [PATCH 20/40] ARM: dts: msm: remove default SA6155 DP pinctrl Remove default SA6155 DP pinctrl for ADP platform. Change-Id: I112660636110110afef42e164953c281d91180bd Signed-off-by: Xiaowen Wu --- arch/arm64/boot/dts/qcom/sa6155-display.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/qcom/sa6155-display.dtsi b/arch/arm64/boot/dts/qcom/sa6155-display.dtsi index 429e6f5989ff..4556b60ff124 100644 --- a/arch/arm64/boot/dts/qcom/sa6155-display.dtsi +++ b/arch/arm64/boot/dts/qcom/sa6155-display.dtsi @@ -49,6 +49,7 @@ vdda-1p2-supply = <&pm6155_1_l11>; vdda-0p9-supply = <&pm6155_1_l5>; /delete-property/ qcom,dp-aux-switch; + /delete-property/ pinctrl-names; qcom,mst-enable; qcom,dp-aux-bridge-sim = <&sde_dp_mst_sim>; From a18713b4292476acf126c67795dd037f80517381 Mon Sep 17 00:00:00 2001 From: Akshay Pandit Date: Wed, 17 Jun 2020 00:16:01 +0530 Subject: [PATCH 21/40] arm64: dts: msm: Add dt entry for manual fw loading Add specific dt entry to denote fw loading is done manually by writing into ipa dev node. Change-Id: I52f9d28f92d44e7ae1fabe510b87bf75053358b0 Signed-off-by: Akshay Pandit --- Documentation/devicetree/bindings/platform/msm/ipa.txt | 1 + arch/arm64/boot/dts/qcom/sa8155-vm-la.dtsi | 1 + 2 files changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/platform/msm/ipa.txt b/Documentation/devicetree/bindings/platform/msm/ipa.txt index d3884063feb0..8746789098f8 100644 --- a/Documentation/devicetree/bindings/platform/msm/ipa.txt +++ b/Documentation/devicetree/bindings/platform/msm/ipa.txt @@ -115,6 +115,7 @@ memory allocation over a PCIe bridge 1 (override scm call as though it returned true), and 2 (override scm call as though it returned false) - qcom,use-xbl-boot: Boolean to indicate XBL boot loading for IPA FW +- qcom,manual-fw-load: Manually load ipa fws by writing 1 to ipa dev node IPA pipe sub nodes (A2 static pipes configurations): diff --git a/arch/arm64/boot/dts/qcom/sa8155-vm-la.dtsi b/arch/arm64/boot/dts/qcom/sa8155-vm-la.dtsi index f15391179db0..8a4394d75675 100644 --- a/arch/arm64/boot/dts/qcom/sa8155-vm-la.dtsi +++ b/arch/arm64/boot/dts/qcom/sa8155-vm-la.dtsi @@ -107,6 +107,7 @@ qcom,smmu-fast-map; qcom,use-ipa-pm; qcom,bandwidth-vote-for-ipa; + qcom,manual-fw-load; qcom,msm-bus,name = "ipa"; qcom,msm-bus,num-cases = <5>; qcom,msm-bus,num-paths = <4>; From 2959415b24ea1bc7ec583e9ad067b785a2850345 Mon Sep 17 00:00:00 2001 From: Lipsa Rout Date: Tue, 16 Jun 2020 18:17:02 +0530 Subject: [PATCH 22/40] ARM: dts: qcom: Add support for POMS on sim-video-panel This change adds support for panel operating mode switch on sim-video-panel. Change-Id: I7b16cc15fb98309e770d30804f22242b3d95afe0 Signed-off-by: Lipsa Rout --- arch/arm64/boot/dts/qcom/atoll-idp.dtsi | 6 +++ .../boot/dts/qcom/atoll-sde-display.dtsi | 6 +++ .../boot/dts/qcom/dsi-panel-sim-video.dtsi | 45 ++++++++++++++++++- 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/atoll-idp.dtsi b/arch/arm64/boot/dts/qcom/atoll-idp.dtsi index 143134f50af7..896e2082cb4f 100644 --- a/arch/arm64/boot/dts/qcom/atoll-idp.dtsi +++ b/arch/arm64/boot/dts/qcom/atoll-idp.dtsi @@ -284,6 +284,12 @@ qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>; }; +&dsi_sim_vid { + qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>; + qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs"; + qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>; +}; + &dsi_nt36672c_video { qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>; qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs"; diff --git a/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi b/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi index 0c4320bcb3a0..c170bb13af74 100644 --- a/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi +++ b/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi @@ -293,6 +293,12 @@ <2 0 1>; qcom,default-topology-index = <0>; }; + timing@1{ + qcom,mdss-dsi-panel-phy-timings = [00 1c 07 07 23 21 07 + 07 05 02 04 00]; + qcom,display-topology = <1 0 1>; + qcom,default-topology-index = <0>; + }; }; }; diff --git a/arch/arm64/boot/dts/qcom/dsi-panel-sim-video.dtsi b/arch/arm64/boot/dts/qcom/dsi-panel-sim-video.dtsi index 40bedd0e462c..90dc3bf6bc56 100644 --- a/arch/arm64/boot/dts/qcom/dsi-panel-sim-video.dtsi +++ b/arch/arm64/boot/dts/qcom/dsi-panel-sim-video.dtsi @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2015, 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2015, 2017-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -22,6 +22,7 @@ qcom,mdss-dsi-panel-hdr-enabled; qcom,mdss-dsi-panel-hdr-color-primaries = <14500 15500 32000 17000 15500 30000 8000 3000>; + qcom,mdss-dsi-panel-mode-switch; qcom,mdss-dsi-panel-peak-brightness = <4200000>; qcom,mdss-dsi-panel-blackness-level = <3230>; qcom,mdss-dsi-traffic-mode = "non_burst_sync_event"; @@ -37,9 +38,15 @@ qcom,mdss-dsi-mdp-trigger = "none"; qcom,mdss-dsi-reset-sequence = <1 0>, <0 0>, <1 0>; qcom,panel-ack-disabled; - + qcom,mdss-dsi-te-pin-select = <1>; + qcom,mdss-dsi-wr-mem-start = <0x2c>; + qcom,mdss-dsi-wr-mem-continue = <0x3c>; + qcom,mdss-dsi-te-dcs-command = <1>; + qcom,mdss-dsi-te-check-enable; + qcom,mdss-dsi-te-using-wd; qcom,mdss-dsi-display-timings { timing@0{ + qcom,mdss-dsi-video-mode; qcom,mdss-dsi-panel-width = <640>; qcom,mdss-dsi-panel-height = <480>; qcom,mdss-dsi-h-front-porch = <8>; @@ -63,6 +70,40 @@ qcom,mdss-dsi-on-command-state = "dsi_lp_mode"; qcom,mdss-dsi-off-command-state = "dsi_lp_mode"; qcom,mdss-dsi-h-sync-pulse = <0>; + qcom,cmd-to-video-mode-post-switch-commands = [ + 32 01 00 00 00 00 02 00 00]; + qcom,cmd-to-video-mode-post-switch-commands-state = + "dsi_lp_mode"; + }; + timing@1{ + qcom,mdss-dsi-cmd-mode; + qcom,mdss-dsi-panel-width = <640>; + qcom,mdss-dsi-panel-height = <480>; + qcom,mdss-dsi-h-front-porch = <8>; + qcom,mdss-dsi-h-back-porch = <8>; + qcom,mdss-dsi-h-pulse-width = <8>; + qcom,mdss-dsi-h-sync-skew = <0>; + qcom,mdss-dsi-v-back-porch = <6>; + qcom,mdss-dsi-v-front-porch = <6>; + qcom,mdss-dsi-v-pulse-width = <2>; + qcom,mdss-dsi-h-left-border = <0>; + qcom,mdss-dsi-h-right-border = <0>; + qcom,mdss-dsi-v-top-border = <0>; + qcom,mdss-dsi-v-bottom-border = <0>; + qcom,mdss-dsi-panel-framerate = <60>; + qcom,mdss-dsi-panel-timings = + [00 00 00 00 00 00 00 00 00 00 00 00]; + qcom,mdss-dsi-on-command = + [32 01 00 00 00 00 02 00 00]; + qcom,mdss-dsi-off-command = + [22 01 00 00 00 00 02 00 00]; + qcom,mdss-dsi-on-command-state = "dsi_lp_mode"; + qcom,mdss-dsi-off-command-state = "dsi_lp_mode"; + qcom,mdss-dsi-h-sync-pulse = <0>; + qcom,video-to-cmd-mode-post-switch-commands = [ + 32 01 00 00 00 00 02 00 00]; + qcom,video-to-cmd-mode-post-switch-commands-state = + "dsi_lp_mode"; }; }; }; From 07535729c9bfd2fd8eefe6098a8e9b09a6146054 Mon Sep 17 00:00:00 2001 From: Anurag Chouhan Date: Fri, 29 May 2020 16:41:08 +0530 Subject: [PATCH 23/40] soc: qcom: socinfo: Add support for QCM6125/QCS6125 soc-id Add socinfo support for QCM6125/QCS6125 Soc and update the bindings for the same. Change-Id: Ia2a9729e6b668559393c6660deca2da97f545c67 Signed-off-by: Anurag Chouhan --- Documentation/devicetree/bindings/arm/msm/msm.txt | 8 ++++++++ drivers/soc/qcom/socinfo.c | 12 ++++++++++++ include/soc/qcom/socinfo.h | 8 ++++++++ 3 files changed, 28 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/msm/msm.txt b/Documentation/devicetree/bindings/arm/msm/msm.txt index 4624924fa639..76026a75d0cf 100644 --- a/Documentation/devicetree/bindings/arm/msm/msm.txt +++ b/Documentation/devicetree/bindings/arm/msm/msm.txt @@ -106,6 +106,12 @@ SoCs: - SDA429W compatible = "qcom,sda429w" +- QCM6125 + compatible = "qcom,qcm6125" + +- QCS6125 + compatible = "qcom,qcs6125" + Generic board variants: - CDP device: @@ -299,3 +305,5 @@ compatible = "qcom,sda429w-wdp" compatible = "qcom,sda429-wdp" compatible = "qcom,sdm429w-wdp" compatible = "qcom,sdm429-wdp" +compatible = "qcom,qcm6125" +compatible = "qcom,qcs6125" diff --git a/drivers/soc/qcom/socinfo.c b/drivers/soc/qcom/socinfo.c index c5a629686bf8..03a4c2214fe6 100644 --- a/drivers/soc/qcom/socinfo.c +++ b/drivers/soc/qcom/socinfo.c @@ -451,6 +451,10 @@ static struct msm_soc_info cpu_of_id[] = { [416] = {MSM_CPU_SDM429W, "SDM429W"}, [437] = {MSM_CPU_SDA429W, "SDA429W"}, + /* QCM6125 IDs*/ + [467] = {MSM_CPU_QCM6125, "QCM6125"}, + [468] = {MSM_CPU_QCS6125, "QCS6125"}, + /* Uninitialized IDs are not known to run Linux. * MSM_CPU_UNKNOWN is set to 0 to ensure these IDs are * considered as unknown CPU. @@ -1463,6 +1467,14 @@ static void * __init setup_dummy_socinfo(void) dummy_socinfo.id = 437; strlcpy(dummy_socinfo.build_id, "sda429w - ", sizeof(dummy_socinfo.build_id)); + } else if (early_machine_is_qcm6125()) { + dummy_socinfo.id = 467; + strlcpy(dummy_socinfo.build_id, "qcm6125 - ", + sizeof(dummy_socinfo.build_id)); + } else if (early_machine_is_qcs6125()) { + dummy_socinfo.id = 468; + strlcpy(dummy_socinfo.build_id, "qcm6125 - ", + sizeof(dummy_socinfo.build_id)); } else strlcat(dummy_socinfo.build_id, "Dummy socinfo", sizeof(dummy_socinfo.build_id)); diff --git a/include/soc/qcom/socinfo.h b/include/soc/qcom/socinfo.h index 2e316c5bb623..55dc5e9732c9 100644 --- a/include/soc/qcom/socinfo.h +++ b/include/soc/qcom/socinfo.h @@ -117,6 +117,10 @@ of_flat_dt_is_compatible(of_get_flat_dt_root(), "qcom,sdm429w") #define early_machine_is_sda429w() \ of_flat_dt_is_compatible(of_get_flat_dt_root(), "qcom,sda429w") +#define early_machine_is_qcm6125() \ + of_flat_dt_is_compatible(of_get_flat_dt_root(), "qcom,qcm6125") +#define early_machine_is_qcs6125() \ + of_flat_dt_is_compatible(of_get_flat_dt_root(), "qcom,qcs6125") #else #define of_board_is_sim() 0 #define of_board_is_rumi() 0 @@ -164,6 +168,8 @@ #define early_machine_is_sda660() 0 #define early_machine_is_sdm429w() 0 #define early_machine_is_sda429w() 0 +#define early_machine_is_qcm6125() 0 +#define early_machine_is_qcs6125() 0 #endif #define PLATFORM_SUBTYPE_MDM 1 @@ -214,6 +220,8 @@ enum msm_cpu { MSM_CPU_SDA660, MSM_CPU_SDM429W, MSM_CPU_SDA429W, + MSM_CPU_QCM6125, + MSM_CPU_QCS6125, }; struct msm_soc_info { From d9d0de39ae72d4c4c77a0e09992e09d18c08fe92 Mon Sep 17 00:00:00 2001 From: Anurag Chouhan Date: Fri, 29 May 2020 16:48:22 +0530 Subject: [PATCH 24/40] ARM: dts: msm: Add initial dts support for QCM6125 Add initial device tree files to support QCM6125/QCS6125. Change-Id: I8fd1716262070c84565614c0674985a611e78088 Signed-off-by: Anurag Chouhan --- arch/arm64/boot/dts/qcom/Makefile | 10 ++++++-- .../boot/dts/qcom/qcm6125-iot-idp-overlay.dts | 25 +++++++++++++++++++ arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dts | 23 +++++++++++++++++ arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dtsi | 13 ++++++++++ arch/arm64/boot/dts/qcom/qcm6125.dts | 22 ++++++++++++++++ arch/arm64/boot/dts/qcom/qcm6125.dtsi | 21 ++++++++++++++++ .../boot/dts/qcom/qcs6125-iot-idp-overlay.dts | 25 +++++++++++++++++++ arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dts | 23 +++++++++++++++++ arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dtsi | 13 ++++++++++ arch/arm64/boot/dts/qcom/qcs6125.dts | 22 ++++++++++++++++ arch/arm64/boot/dts/qcom/qcs6125.dtsi | 21 ++++++++++++++++ 11 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 arch/arm64/boot/dts/qcom/qcm6125-iot-idp-overlay.dts create mode 100644 arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dts create mode 100644 arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dtsi create mode 100644 arch/arm64/boot/dts/qcom/qcm6125.dts create mode 100644 arch/arm64/boot/dts/qcom/qcm6125.dtsi create mode 100644 arch/arm64/boot/dts/qcom/qcs6125-iot-idp-overlay.dts create mode 100644 arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dts create mode 100644 arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dtsi create mode 100644 arch/arm64/boot/dts/qcom/qcs6125.dts create mode 100644 arch/arm64/boot/dts/qcom/qcs6125.dtsi diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile index c9af9a76daca..433fac54197d 100644 --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile @@ -319,7 +319,9 @@ ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y) trinket-external-codec-idp-overlay.dtbo \ trinket-usbc-external-codec-idp-overlay.dtbo \ trinket-usbc-idp-overlay.dtbo \ - trinket-dp-idp-overlay.dtbo + trinket-dp-idp-overlay.dtbo \ + qcm6125-iot-idp-overlay.dtbo \ + qcs6125-iot-idp-overlay.dtbo trinket-rumi-overlay.dtbo-base := trinket.dtb trinket-idp-overlay.dtbo-base := trinket.dtb @@ -328,6 +330,8 @@ trinket-external-codec-idp-overlay.dtbo-base := trinket.dtb trinket-usbc-external-codec-idp-overlay.dtbo-base := trinket.dtb trinket-usbc-idp-overlay.dtbo-base := trinket.dtb trinket-dp-idp-overlay.dtbo-base := trinket.dtb +qcm6125-iot-idp-overlay.dtbo-base := qcm6125.dtb +qcs6125-iot-idp-overlay.dtbo-base := qcs6125.dtb else dtb-$(CONFIG_ARCH_TRINKET) += trinket-rumi.dtb \ trinket-idp.dtb \ @@ -335,7 +339,9 @@ dtb-$(CONFIG_ARCH_TRINKET) += trinket-rumi.dtb \ trinket-external-codec-idp.dtb \ trinket-usbc-external-codec-idp.dtb \ trinket-usbc-idp.dtb \ - trinket-dp-idp.dtb + trinket-dp-idp.dtb \ + qcm6125-iot-idp.dtb \ + qcs6125-iot-idp.dtb endif ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y) diff --git a/arch/arm64/boot/dts/qcom/qcm6125-iot-idp-overlay.dts b/arch/arm64/boot/dts/qcom/qcm6125-iot-idp-overlay.dts new file mode 100644 index 000000000000..936473fcec4b --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcm6125-iot-idp-overlay.dts @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; +/plugin/; + +#include "qcm6125-iot-idp.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCM6125 IOT IDP Overlay"; + compatible = "qcom,qcm6125"; + qcom,msm-id = <467 0x10000>; + qcom,board-id = <34 0>; +}; + diff --git a/arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dts b/arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dts new file mode 100644 index 000000000000..37f06e2c3f46 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dts @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; + +#include "qcm6125.dtsi" +#include "qcm6125-iot-idp.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCM6125 IOT IDP SoC"; + compatible = "qcom,qcm6125"; + qcom,board-id = <34 0>; +}; diff --git a/arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dtsi b/arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dtsi new file mode 100644 index 000000000000..6d198b235fbc --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcm6125-iot-idp.dtsi @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ +#include "trinket-idp.dtsi" diff --git a/arch/arm64/boot/dts/qcom/qcm6125.dts b/arch/arm64/boot/dts/qcom/qcm6125.dts new file mode 100644 index 000000000000..4e31d2849dc3 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcm6125.dts @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; + +#include "qcm6125.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCM6125 IOT IDP SoC"; + compatible = "qcom,qcm6125"; + qcom,board-id = <0 0>; +}; diff --git a/arch/arm64/boot/dts/qcom/qcm6125.dtsi b/arch/arm64/boot/dts/qcom/qcm6125.dtsi new file mode 100644 index 000000000000..dca459b90404 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcm6125.dtsi @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "trinket.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCM6125"; + compatible = "qcom,qcm6125"; + qcom,msm-id = <467 0x0>; + qcom,msm-name = "QCM6125"; +}; diff --git a/arch/arm64/boot/dts/qcom/qcs6125-iot-idp-overlay.dts b/arch/arm64/boot/dts/qcom/qcs6125-iot-idp-overlay.dts new file mode 100644 index 000000000000..8b80605046e5 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcs6125-iot-idp-overlay.dts @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; +/plugin/; + +#include "qcs6125-iot-idp.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCS6125 IOT IDP Overlay"; + compatible = "qcom,qcs6125"; + qcom,msm-id = <468 0x10000>; + qcom,board-id = <34 0>; +}; + diff --git a/arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dts b/arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dts new file mode 100644 index 000000000000..4eaa9b6ccccb --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dts @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; + +#include "qcs6125.dtsi" +#include "qcs6125-iot-idp.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCS6125 IOT IDP SoC"; + compatible = "qcom,qcs6125"; + qcom,board-id = <34 0>; +}; diff --git a/arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dtsi b/arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dtsi new file mode 100644 index 000000000000..6d198b235fbc --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcs6125-iot-idp.dtsi @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ +#include "trinket-idp.dtsi" diff --git a/arch/arm64/boot/dts/qcom/qcs6125.dts b/arch/arm64/boot/dts/qcom/qcs6125.dts new file mode 100644 index 000000000000..c2ac4473ee4b --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcs6125.dts @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; + +#include "qcs6125.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCS6125 SoC"; + compatible = "qcom,qcs6125"; + qcom,board-id = <0 0>; +}; diff --git a/arch/arm64/boot/dts/qcom/qcs6125.dtsi b/arch/arm64/boot/dts/qcom/qcs6125.dtsi new file mode 100644 index 000000000000..aed91a655019 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/qcs6125.dtsi @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "trinket.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. QCS6125"; + compatible = "qcom,qcs6125"; + qcom,msm-id = <468 0x0>; + qcom,msm-name = "QCS6125"; +}; From 002ee55e71c2a14c30d320482c5c9939399829d0 Mon Sep 17 00:00:00 2001 From: Om Parkash Date: Wed, 17 Jun 2020 12:55:07 +0530 Subject: [PATCH 25/40] msm: camera: Allow applying request if congestion comes Sometimes, due to DDR write delays, bufdone gets delyed. It affect applying new request. This change allow applying request if congestion comes. Change-Id: I064d88588f7de68737aec143bd5d3ea5adbc9da6 Signed-off-by: Om Parkash --- drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c b/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c index d96a23da3bb8..12386e4c7c7c 100644 --- a/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c +++ b/drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c @@ -2088,7 +2088,7 @@ static int __cam_isp_ctx_apply_req_in_activated_state( req->request_id, ctx_isp->substate_activated, ctx->ctx_id); req_isp = (struct cam_isp_ctx_req *) req->req_priv; - if (ctx_isp->active_req_cnt >= 2) { + if (ctx_isp->active_req_cnt >= 4) { CAM_ERR_RATE_LIMIT(CAM_ISP, "Reject apply request (id %lld) due to congestion(cnt = %d) ctx %u", req->request_id, From 32483be0f46c8fd310c5dddc810c35686f2555d2 Mon Sep 17 00:00:00 2001 From: Avaneesh Kumar Dwivedi Date: Mon, 4 May 2020 19:10:34 +0530 Subject: [PATCH 26/40] ARM: dts: msm: Bring all board specific changes to common file for QCS610 For supporting device tree overlay on QCS610, need to align overlay device tree with normal device tree changes, hence bringing non SoC specific changes to common file. Change-Id: I3632a6a50665e2e399a11ee65813c6d96cf44308 Signed-off-by: Avaneesh Kumar Dwivedi Signed-off-by: Anurag Chouhan --- arch/arm64/boot/dts/qcom/Makefile | 6 ++--- .../boot/dts/qcom/qcs610-iot-overlay.dts | 4 ++-- arch/arm64/boot/dts/qcom/qcs610-iot.dts | 8 ++----- arch/arm64/boot/dts/qcom/qcs610-iot.dtsi | 23 ++++++++++++++++++- .../boot/dts/qcom/qcs610-ipc-overlay.dts | 4 ++-- arch/arm64/boot/dts/qcom/qcs610-ipc.dts | 4 +++- arch/arm64/boot/dts/qcom/qcs610-ipc.dtsi | 1 - arch/arm64/boot/dts/qcom/qcs610.dtsi | 12 +--------- 8 files changed, 35 insertions(+), 27 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile index c9af9a76daca..84ce4fe46aab 100644 --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile @@ -250,9 +250,9 @@ sa6155p-v2-adp-star-overlay.dtbo-base := sa6155p.dtb sa6155-adp-air-overlay.dtbo-base := sa6155.dtb sa6155p-adp-air-overlay.dtbo-base := sa6155p.dtb sa6155p-v2-adp-air-overlay.dtbo-base := sa6155p.dtb -qcs610-iot-overlay.dtbo-base := sm6150.dtb -qcs610-ipc-overlay.dtbo-base := sm6150.dtb -qcs410-iot-overlay.dtbo-base := sm6150.dtb +qcs610-iot-overlay.dtbo-base := qcs610.dtb +qcs610-ipc-overlay.dtbo-base := qcs610.dtb +qcs410-iot-overlay.dtbo-base := qcs410.dtb else dtb-$(CONFIG_ARCH_SM6150) += sm6150-rumi.dtb \ sm6150-qrd.dtb \ diff --git a/arch/arm64/boot/dts/qcom/qcs610-iot-overlay.dts b/arch/arm64/boot/dts/qcom/qcs610-iot-overlay.dts index 0c740154ee48..33c3fcaa7fe1 100644 --- a/arch/arm64/boot/dts/qcom/qcs610-iot-overlay.dts +++ b/arch/arm64/boot/dts/qcom/qcs610-iot-overlay.dts @@ -1,4 +1,4 @@ -/* Copyright (c) 2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -18,7 +18,7 @@ #include "qcs610-iot.dtsi" / { - model = "IOT"; + model = "Qualcomm Technologies, Inc. QCS610 IOT Overlay"; compatible = "qcom,qcs610-iot", "qcom,qcs610", "qcom,iot"; qcom,msm-id = <401 0x0>; qcom,board-id = <32 0>; diff --git a/arch/arm64/boot/dts/qcom/qcs610-iot.dts b/arch/arm64/boot/dts/qcom/qcs610-iot.dts index 76fd007b5f56..a0a6c723d172 100644 --- a/arch/arm64/boot/dts/qcom/qcs610-iot.dts +++ b/arch/arm64/boot/dts/qcom/qcs610-iot.dts @@ -1,4 +1,4 @@ -/* Copyright (c) 2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -11,7 +11,7 @@ */ /dts-v1/; - +#include "qcs610.dtsi" #include "qcs610-iot.dtsi" #include "sm6150-audio-overlay.dtsi" @@ -20,7 +20,3 @@ compatible = "qcom,qcs610-iot", "qcom,qcs610", "qcom,iot"; qcom,board-id = <32 0>; }; - -&sm6150_snd { - /delete-property/ fsa4480-i2c-handle; -}; diff --git a/arch/arm64/boot/dts/qcom/qcs610-iot.dtsi b/arch/arm64/boot/dts/qcom/qcs610-iot.dtsi index 63a8139732ba..6c1d8c88de2a 100644 --- a/arch/arm64/boot/dts/qcom/qcs610-iot.dtsi +++ b/arch/arm64/boot/dts/qcom/qcs610-iot.dtsi @@ -13,7 +13,14 @@ #include #include #include -#include "qcs610.dtsi" + +#include +#include +#include +#include +#include +#include + #include "sm6150-sde.dtsi" #include "sm6150-sde-pll.dtsi" #include "sm6150-sde-display.dtsi" @@ -25,6 +32,20 @@ qcom,board-id = <32 0>; }; +&soc { + qcom,rmnet-ipa { + status="disabled"; + }; +}; + +&ipa_hw { + status="disabled"; +}; + +&sm6150_snd { + /delete-property/ fsa4480-i2c-handle; +}; + &qupv3_se3_i2c { status = "ok"; #include "smb1390.dtsi" diff --git a/arch/arm64/boot/dts/qcom/qcs610-ipc-overlay.dts b/arch/arm64/boot/dts/qcom/qcs610-ipc-overlay.dts index dd232536ca97..df10995071fe 100644 --- a/arch/arm64/boot/dts/qcom/qcs610-ipc-overlay.dts +++ b/arch/arm64/boot/dts/qcom/qcs610-ipc-overlay.dts @@ -1,4 +1,4 @@ -/* Copyright (c) 2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -18,7 +18,7 @@ #include "qcs610-ipc.dtsi" / { - model = "IOT"; + model = "Qualcomm Technologies, Inc. QCS610 IOT IPC"; compatible = "qcom,qcs610-iot", "qcom,qcs610", "qcom,iot"; qcom,msm-id = <401 0x0>; qcom,board-id = <32 1>; diff --git a/arch/arm64/boot/dts/qcom/qcs610-ipc.dts b/arch/arm64/boot/dts/qcom/qcs610-ipc.dts index f8722b0addd9..aa9b6439e0b3 100644 --- a/arch/arm64/boot/dts/qcom/qcs610-ipc.dts +++ b/arch/arm64/boot/dts/qcom/qcs610-ipc.dts @@ -1,4 +1,4 @@ -/* Copyright (c) 2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -12,6 +12,8 @@ /dts-v1/; +#include "qcs610.dtsi" +#include "qcs610-iot.dtsi" #include "qcs610-ipc.dtsi" / { diff --git a/arch/arm64/boot/dts/qcom/qcs610-ipc.dtsi b/arch/arm64/boot/dts/qcom/qcs610-ipc.dtsi index 15cbf635b989..87c198d211ec 100644 --- a/arch/arm64/boot/dts/qcom/qcs610-ipc.dtsi +++ b/arch/arm64/boot/dts/qcom/qcs610-ipc.dtsi @@ -10,7 +10,6 @@ * GNU General Public License for more details. */ -#include "qcs610-iot.dtsi" #include "sm6150-audio-overlay.dtsi" #include "sm6150-camera-sensor-idp.dtsi" / { diff --git a/arch/arm64/boot/dts/qcom/qcs610.dtsi b/arch/arm64/boot/dts/qcom/qcs610.dtsi index dfdbba966d75..8d1fc6080003 100644 --- a/arch/arm64/boot/dts/qcom/qcs610.dtsi +++ b/arch/arm64/boot/dts/qcom/qcs610.dtsi @@ -1,4 +1,4 @@ -/* Copyright (c) 2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -17,13 +17,3 @@ qcom,msm-name = "QCS610"; qcom,msm-id = <401 0>; }; - -&soc { - qcom,rmnet-ipa { - status="disabled"; - }; -}; - -&ipa_hw { - status="disabled"; -}; From cd3184a2e7e8eb305ede16317df55ea51427ac2c Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:47:22 +0530 Subject: [PATCH 27/40] Revert "serial: msm-geni-serial: Add support for thaw callback" This reverts commit 0c9edebb64983f8e89f2e6d224f1b97bb9484983. Signed-off-by: UtsavBalar1231 --- drivers/tty/serial/msm_geni_serial.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/tty/serial/msm_geni_serial.c b/drivers/tty/serial/msm_geni_serial.c index cd4ce95f3021..77cb8be5664c 100644 --- a/drivers/tty/serial/msm_geni_serial.c +++ b/drivers/tty/serial/msm_geni_serial.c @@ -3282,7 +3282,6 @@ static const struct dev_pm_ops msm_geni_serial_pm_ops = { .resume_noirq = msm_geni_serial_sys_resume_noirq, .freeze = msm_geni_serial_sys_suspend_noirq, .restore = msm_geni_serial_sys_hib_resume_noirq, - .thaw = msm_geni_serial_sys_hib_resume_noirq, }; static void msm_geni_serial_ssr_down(struct device *dev) From 59aa1fecf94603f0da46b02ae5efff63c818e27c Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:47:48 +0530 Subject: [PATCH 28/40] Revert "clk: qcom: Add support for enabling the critical clocks" This reverts commit 70266ab90155c6766d8753b792c6d1e2aafb1598. Signed-off-by: UtsavBalar1231 --- drivers/clk/qcom/gcc-sm6150.c | 2 +- drivers/clk/qcom/gcc-sm8150.c | 2 +- drivers/clk/qcom/gpucc-sm6150.c | 2 +- drivers/clk/qcom/npucc-sm8150.c | 2 +- drivers/clk/qcom/videocc-sm6150.c | 2 +- drivers/clk/qcom/videocc-sm8150.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/clk/qcom/gcc-sm6150.c b/drivers/clk/qcom/gcc-sm6150.c index c6f2ad3e376a..84778a5d0915 100644 --- a/drivers/clk/qcom/gcc-sm6150.c +++ b/drivers/clk/qcom/gcc-sm6150.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and diff --git a/drivers/clk/qcom/gcc-sm8150.c b/drivers/clk/qcom/gcc-sm8150.c index eb19336e9007..53600eda62f7 100644 --- a/drivers/clk/qcom/gcc-sm8150.c +++ b/drivers/clk/qcom/gcc-sm8150.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and diff --git a/drivers/clk/qcom/gpucc-sm6150.c b/drivers/clk/qcom/gpucc-sm6150.c index 31a3923f8b44..1871ae7e4328 100644 --- a/drivers/clk/qcom/gpucc-sm6150.c +++ b/drivers/clk/qcom/gpucc-sm6150.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and diff --git a/drivers/clk/qcom/npucc-sm8150.c b/drivers/clk/qcom/npucc-sm8150.c index 6c947f04c669..480357982e89 100644 --- a/drivers/clk/qcom/npucc-sm8150.c +++ b/drivers/clk/qcom/npucc-sm8150.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and diff --git a/drivers/clk/qcom/videocc-sm6150.c b/drivers/clk/qcom/videocc-sm6150.c index 6430bf7ab39d..f74a97264ae9 100644 --- a/drivers/clk/qcom/videocc-sm6150.c +++ b/drivers/clk/qcom/videocc-sm6150.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and diff --git a/drivers/clk/qcom/videocc-sm8150.c b/drivers/clk/qcom/videocc-sm8150.c index 19564ba8cbcc..63ab8acdfcba 100644 --- a/drivers/clk/qcom/videocc-sm8150.c +++ b/drivers/clk/qcom/videocc-sm8150.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and From a96bdf6f037a3f837f9fcf3b655610b6d164976c Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:48:07 +0530 Subject: [PATCH 29/40] Revert "mmc: sdhci-msm: Add hibernation callbacks" This reverts commit 104d337ca31c8d665db8c5511f531c38607b577e. Signed-off-by: UtsavBalar1231 --- drivers/mmc/host/sdhci-msm.c | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 6bc396cb9cf8..45945ccdf77f 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -5580,19 +5580,6 @@ static int sdhci_msm_suspend_noirq(struct device *dev) return ret; } -static int sdhci_msm_freeze(struct device *dev) -{ - struct sdhci_host *host = dev_get_drvdata(dev); - struct mmc_host *mmc = host->mmc; - struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); - struct sdhci_msm_host *msm_host = pltfm_host->priv; - - if (gpio_is_valid(msm_host->pdata->status_gpio) && - (msm_host->mmc->slot.cd_irq >= 0)) - mmc_gpiod_free_cd_irq(mmc); - return 0; -} - static int sdhci_msm_restore(struct device *dev) { struct sdhci_host *host = dev_get_drvdata(dev); @@ -5601,8 +5588,6 @@ static int sdhci_msm_restore(struct device *dev) if (mmc->inlinecrypt_support) mmc->inlinecrypt_reset_needed = true; - mmc_gpiod_restore_cd_irq(mmc); - return 0; } @@ -5612,9 +5597,7 @@ static const struct dev_pm_ops sdhci_msm_pmops = { .runtime_suspend = sdhci_msm_runtime_suspend, .runtime_resume = sdhci_msm_runtime_resume, .suspend_noirq = sdhci_msm_suspend_noirq, - .freeze = sdhci_msm_freeze, .restore = sdhci_msm_restore, - .thaw = sdhci_msm_restore, }; #define SDHCI_MSM_PMOPS (&sdhci_msm_pmops) From 060ab52ce459719ce303284849469a4208e4829c Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:48:41 +0530 Subject: [PATCH 30/40] Revert "rtc: qpnp-rtc: Add support for thaw callback" This reverts commit b352e11f543d4cd23198300858e5d155cd2c8461. Signed-off-by: UtsavBalar1231 --- drivers/rtc/qpnp-rtc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/rtc/qpnp-rtc.c b/drivers/rtc/qpnp-rtc.c index 579877306d92..624d336a0289 100644 --- a/drivers/rtc/qpnp-rtc.c +++ b/drivers/rtc/qpnp-rtc.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2015, 2017-2020, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2015, 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -734,7 +734,6 @@ static int qpnp_rtc_freeze(struct device *dev) static const struct dev_pm_ops qpnp_rtc_pm_ops = { .freeze = qpnp_rtc_freeze, .restore = qpnp_rtc_restore, - .thaw = qpnp_rtc_restore, }; static const struct of_device_id spmi_match_table[] = { From e96f06818e000cfbdbd513018045fea983073488 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:48:47 +0530 Subject: [PATCH 31/40] Revert "thermal: qcom-spmi-temp-alarm: Add support for thaw callback" This reverts commit 8383d489d0837fc31c4e45436b9aeac898fa2ad5. Signed-off-by: UtsavBalar1231 --- drivers/thermal/qcom-spmi-temp-alarm.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/thermal/qcom-spmi-temp-alarm.c b/drivers/thermal/qcom-spmi-temp-alarm.c index 783f243ea93f..174c526ae06b 100644 --- a/drivers/thermal/qcom-spmi-temp-alarm.c +++ b/drivers/thermal/qcom-spmi-temp-alarm.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2015, 2017-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2015, 2017-2019 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -445,7 +445,6 @@ static int qpnp_tm_freeze(struct device *dev) static const struct dev_pm_ops qpnp_tm_pm_ops = { .freeze = qpnp_tm_freeze, .restore = qpnp_tm_restore, - .thaw = qpnp_tm_restore, }; static const struct of_device_id qpnp_tm_match_table[] = { From e9c2d0634c002fd51366e82ba08ee262d0e95247 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:48:56 +0530 Subject: [PATCH 32/40] Revert "input: qpnp-power-on: Implementing thaw callback" This reverts commit 75025cb913204ac327d7b2cdf7a41ddb2298d964. Signed-off-by: UtsavBalar1231 --- drivers/input/misc/qpnp-power-on.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/input/misc/qpnp-power-on.c b/drivers/input/misc/qpnp-power-on.c index df9fa421072f..d84f3c0ae33e 100644 --- a/drivers/input/misc/qpnp-power-on.c +++ b/drivers/input/misc/qpnp-power-on.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -2513,7 +2513,6 @@ static int qpnp_pon_freeze(struct device *dev) static const struct dev_pm_ops qpnp_pon_pm_ops = { .freeze = qpnp_pon_freeze, .restore = qpnp_pon_restore, - .thaw = qpnp_pon_restore, }; #endif From 2560482cb26eaf27407a6545c3f48181fe04eda4 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:49:02 +0530 Subject: [PATCH 33/40] Revert "iio: adc: Implementing thaw callback" This reverts commit c58da26a1ea80c2b8b90bf7229c0c84c22ccf31e. Signed-off-by: UtsavBalar1231 --- drivers/iio/adc/qcom-spmi-adc5.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/iio/adc/qcom-spmi-adc5.c b/drivers/iio/adc/qcom-spmi-adc5.c index f34c2ac8490e..f16ba898cc47 100644 --- a/drivers/iio/adc/qcom-spmi-adc5.c +++ b/drivers/iio/adc/qcom-spmi-adc5.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1140,7 +1140,6 @@ static int adc_freeze(struct device *dev) static const struct dev_pm_ops adc_pm_ops = { .freeze = adc_freeze, .restore = adc_restore, - .thaw = adc_restore, }; static struct platform_driver adc_driver = { From f046374761986e2501c52f5c34dfcab781a9a0b3 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:49:08 +0530 Subject: [PATCH 34/40] Revert "i2c: i2c-qcom-geni: Implementing thaw callback" This reverts commit b557b058afe685d2f18062ecb2410109e9ad0850. Signed-off-by: UtsavBalar1231 --- drivers/i2c/busses/i2c-qcom-geni.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c index 255074d7ef76..fdc76ebe32a6 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1168,7 +1168,6 @@ static const struct dev_pm_ops geni_i2c_pm_ops = { .runtime_resume = geni_i2c_runtime_resume, .freeze = geni_i2c_suspend_noirq, .restore = geni_i2c_hib_resume_noirq, - .thaw = geni_i2c_hib_resume_noirq, }; static void ssr_i2c_force_suspend(struct device *dev) From 176e344cfe47db97e8f771a71bf4351bdda0bb89 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:49:17 +0530 Subject: [PATCH 35/40] Revert "soc: qcom: smem: Implementing thaw callback" This reverts commit 0c4ac9f6ad74f264dcdc8cd71b26596d136481e8. Signed-off-by: UtsavBalar1231 --- drivers/soc/qcom/smem.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c index fd350aee2675..39d26ea60342 100644 --- a/drivers/soc/qcom/smem.c +++ b/drivers/soc/qcom/smem.c @@ -1094,9 +1094,8 @@ static int qcom_smem_restore(struct device *dev) } static const struct dev_pm_ops qcom_smem_pm_ops = { - .freeze_late = qcom_smem_freeze, - .restore_early = qcom_smem_restore, - .thaw_early = qcom_smem_restore, + .freeze = qcom_smem_freeze, + .restore = qcom_smem_restore, }; static const struct of_device_id qcom_smem_of_match[] = { From 141df1ea5ff6e7ec2defe722fa468af2314915a8 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:49:23 +0530 Subject: [PATCH 36/40] Revert "soc: qcom: smp2p: Implementing thaw callback" This reverts commit bbe98cb353a3d05bcf43d8025e5a76a7ca7277b4. Signed-off-by: UtsavBalar1231 --- drivers/soc/qcom/smp2p.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/soc/qcom/smp2p.c b/drivers/soc/qcom/smp2p.c index 93bd83ee6aa9..1b5e81ecf74f 100644 --- a/drivers/soc/qcom/smp2p.c +++ b/drivers/soc/qcom/smp2p.c @@ -720,7 +720,7 @@ static int qcom_smp2p_remove(struct platform_device *pdev) return 0; } -static int qcom_smp2p_restore(struct device *dev) +static int qcom_smp2p_resume(struct device *dev) { int ret = 0; struct qcom_smp2p *smp2p = dev_get_drvdata(dev); @@ -757,7 +757,6 @@ static int qcom_smp2p_restore(struct device *dev) } wakeup_source_init(&smp2p->ws, "smp2p"); - enable_irq_wake(smp2p->irq); /* Kick the outgoing edge after allocating entries */ qcom_smp2p_kick(smp2p); @@ -768,13 +767,12 @@ print_err: return ret; } -static int qcom_smp2p_freeze(struct device *dev) +static int qcom_smp2p_suspend(struct device *dev) { struct qcom_smp2p *smp2p = dev_get_drvdata(dev); struct smp2p_entry *entry; struct smp2p_entry *next_entry; - disable_irq_wake(smp2p->irq); /* Walk through the out bound list and release state and entry */ list_for_each_entry_safe(entry, next_entry, &smp2p->outbound, node) { qcom_smem_state_unregister(entry->state); @@ -796,9 +794,8 @@ static int qcom_smp2p_freeze(struct device *dev) } static const struct dev_pm_ops qcom_smp2p_pm_ops = { - .freeze = qcom_smp2p_freeze, - .restore = qcom_smp2p_restore, - .thaw = qcom_smp2p_restore, + .freeze = qcom_smp2p_suspend, + .restore = qcom_smp2p_resume, }; static const struct of_device_id qcom_smp2p_of_match[] = { From fc8ff74ab978a51dcff7d8c9b3854ba9264c58e5 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:49:45 +0530 Subject: [PATCH 37/40] Revert "firmware: qcom: Register call back functions for hibernation" This reverts commit 65480aa5173ad93242aae07ff6b4f47e4d4b74c1. Signed-off-by: UtsavBalar1231 --- drivers/firmware/qcom/tz_log.c | 37 ++-------------------------------- 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/drivers/firmware/qcom/tz_log.c b/drivers/firmware/qcom/tz_log.c index f8d3dd338506..4eb9295af09d 100644 --- a/drivers/firmware/qcom/tz_log.c +++ b/drivers/firmware/qcom/tz_log.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2020, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -1131,6 +1130,7 @@ err: return -ENXIO; } + static int tz_log_remove(struct platform_device *pdev) { kzfree(tzdbg.diag_buf); @@ -1141,38 +1141,6 @@ static int tz_log_remove(struct platform_device *pdev) return 0; } -#ifdef CONFIG_PM -static int tz_log_freeze(struct device *dev) -{ - dma_free_coherent(dev, QSEE_LOG_BUF_SIZE, (void *)g_qsee_log, - coh_pmem); - - return 0; -} - -static int tz_log_restore(struct device *dev) -{ - /* Register the log bugger at TZ during hibernation resume. - * After hibernation the log buffer is with HLOS as TZ encountered - * a coldboot sequence. - */ - tzdbg_register_qsee_log_buf(to_platform_device(dev)); - - return 0; -} - -static const struct dev_pm_ops tz_log_pmops = { - .freeze = tz_log_freeze, - .restore = tz_log_restore, - .thaw = tz_log_restore, -}; - -#define TZ_LOG_PMOPS (&tz_log_pmops) - -#else -#define TZ_LOG_PMOPS NULL -#endif - static const struct of_device_id tzlog_match[] = { { .compatible = "qcom,tz-log", }, @@ -1187,7 +1155,6 @@ static struct platform_driver tz_log_driver = { .owner = THIS_MODULE, .of_match_table = tzlog_match, .probe_type = PROBE_PREFER_ASYNCHRONOUS, - .pm = TZ_LOG_PMOPS, }, }; From f037ccbc7162a85994798b00a7705c271dd6b3ea Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:49:53 +0530 Subject: [PATCH 38/40] Revert "soc: qcom: Implement hibernation callbacks for jtag-etm" This reverts commit 3bc1b425352cf9c80375a2b4e8bb537e4f4dd156. Signed-off-by: UtsavBalar1231 --- drivers/soc/qcom/jtagv8-etm.c | 56 ++--------------------------------- 1 file changed, 2 insertions(+), 54 deletions(-) diff --git a/drivers/soc/qcom/jtagv8-etm.c b/drivers/soc/qcom/jtagv8-etm.c index e118e51e624e..96004e927677 100644 --- a/drivers/soc/qcom/jtagv8-etm.c +++ b/drivers/soc/qcom/jtagv8-etm.c @@ -245,7 +245,6 @@ struct etm_ctx { static struct etm_ctx *etm[NR_CPUS]; static int cnt; -static bool hibernation_freeze; static struct clk *clock[NR_CPUS]; @@ -1438,8 +1437,7 @@ void msm_jtag_etm_save_state(void) cpu = raw_smp_processor_id(); - if (!etm[cpu] || etm[cpu]->save_restore_disabled - || hibernation_freeze) + if (!etm[cpu] || etm[cpu]->save_restore_disabled) return; if (etm[cpu]->save_restore_enabled) { @@ -1457,8 +1455,7 @@ void msm_jtag_etm_restore_state(void) cpu = raw_smp_processor_id(); - if (!etm[cpu] || etm[cpu]->save_restore_disabled - || hibernation_freeze) + if (!etm[cpu] || etm[cpu]->save_restore_disabled) return; /* @@ -1726,54 +1723,6 @@ static int jtag_mm_remove(struct platform_device *pdev) return 0; } -static void msm_jtag_etm_save_state_hib(void *unused_info) -{ - msm_jtag_etm_save_state(); -} - -static void msm_jtag_etm_restore_state_hib(void *unused_info) -{ - msm_jtag_etm_restore_state(); -} - -static int jtag_mm_freeze(struct device *dev) -{ - int cpu; - - if (hibernation_freeze) - return 0; - get_online_cpus(); - on_each_cpu(msm_jtag_etm_save_state_hib, - NULL, true); - for_each_online_cpu(cpu) - clk_disable_unprepare(clock[cpu]); - put_online_cpus(); - hibernation_freeze = true; - return 0; -} - -static int jtag_mm_restore(struct device *dev) -{ - int cpu; - - if (!hibernation_freeze) - return 0; - get_online_cpus(); - for_each_online_cpu(cpu) - clk_prepare_enable(clock[cpu]); - on_each_cpu(msm_jtag_etm_restore_state_hib, - NULL, true); - put_online_cpus(); - hibernation_freeze = false; - return 0; -} - -static const struct dev_pm_ops jtag_mm_pm_ops = { - .freeze = jtag_mm_freeze, - .restore = jtag_mm_restore, - .thaw = jtag_mm_restore, -}; - static const struct of_device_id msm_qdss_mm_match[] = { { .compatible = "qcom,jtagv8-mm"}, {} @@ -1786,7 +1735,6 @@ static struct platform_driver jtag_mm_driver = { .name = "msm-jtagv8-mm", .owner = THIS_MODULE, .of_match_table = msm_qdss_mm_match, - .pm = &jtag_mm_pm_ops, }, }; From 3629222f6f22c7c83081aa75d41ee385270f87c1 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:50:09 +0530 Subject: [PATCH 39/40] Revert "iommu: arm-smmu: Use same callback for thaw and restore" This reverts commit 40616de577fadd7283e659d0ca9126d933e984e0. Signed-off-by: UtsavBalar1231 --- drivers/iommu/arm-smmu.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 954006f81b87..41aabe1ef86d 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -320,7 +320,9 @@ struct arm_smmu_device { struct arm_smmu_arch_ops *arch_ops; void *archdata; +#ifdef CONFIG_HIBERNATION bool smmu_restore; +#endif enum tz_smmu_device_id sec_id; }; @@ -1916,7 +1918,9 @@ static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx, struct arm_smmu_cb *cb = &smmu->cbs[idx]; struct arm_smmu_cfg *cfg = cb->cfg; void __iomem *cb_base, *gr1_base; +#ifdef CONFIG_HIBERNATION struct arm_smmu_domain *smmu_domain; +#endif cb_base = ARM_SMMU_CB(smmu, idx); @@ -1994,10 +1998,12 @@ static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx, /* Ensure bypass transactions are Non-shareable */ reg |= SCTLR_SHCFG_NSH << SCTLR_SHCFG_SHIFT; +#ifdef CONFIG_HIBERNATION if (smmu->smmu_restore) { smmu_domain = container_of(cfg, struct arm_smmu_domain, cfg); attributes = smmu_domain->attributes; } +#endif if (attributes & (1 << DOMAIN_ATTR_CB_STALL_DISABLE)) { reg &= ~SCTLR_CFCFG; reg |= SCTLR_HUPCF; @@ -5192,6 +5198,11 @@ static int __maybe_unused arm_smmu_pm_resume(struct device *dev) arm_smmu_device_reset(smmu); arm_smmu_power_off(smmu->pwr); + +#ifdef CONFIG_HIBERNATION + smmu->smmu_restore = false; +#endif + return 0; } @@ -5201,7 +5212,7 @@ static int __maybe_unused arm_smmu_pm_restore_early(struct device *dev) struct arm_smmu_domain *smmu_domain; struct io_pgtable_ops *pgtbl_ops; struct arm_smmu_cb *cb; - int idx, ret; + int idx; /* restore the secure pools */ for (idx = 0; idx < smmu->num_context_banks; idx++) { @@ -5228,10 +5239,10 @@ static int __maybe_unused arm_smmu_pm_restore_early(struct device *dev) arm_smmu_init_context_bank(smmu_domain, &smmu_domain->pgtbl_cfg); } +#ifdef CONFIG_HIBERNATION smmu->smmu_restore = true; - ret = arm_smmu_pm_resume(dev); - smmu->smmu_restore = false; - return ret; +#endif + return arm_smmu_pm_resume(dev); } static int __maybe_unused arm_smmu_pm_freeze_late(struct device *dev) @@ -5268,7 +5279,7 @@ static int __maybe_unused arm_smmu_pm_freeze_late(struct device *dev) static const struct dev_pm_ops arm_smmu_pm_ops = { .resume = arm_smmu_pm_resume, - .thaw_early = arm_smmu_pm_restore_early, + .thaw_early = arm_smmu_pm_resume, .freeze_late = arm_smmu_pm_freeze_late, .restore_early = arm_smmu_pm_restore_early, }; From 47a5dc7a8f7bab111b8797d1105ddd3fa74ad276 Mon Sep 17 00:00:00 2001 From: UtsavBalar1231 Date: Tue, 23 Jun 2020 12:57:47 +0530 Subject: [PATCH 40/40] Revert "iommu: arm-smmu: Make restore of smmu-context runtime detectable" This reverts commit 76fa02bfca51b244a26adc986247613c71699345. Signed-off-by: UtsavBalar1231 --- drivers/iommu/arm-smmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 41aabe1ef86d..e65a54656c23 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -4260,7 +4260,7 @@ static void arm_smmu_device_reset(struct arm_smmu_device *smmu) * invalid and all S2CRn as bypass unless overridden. */ if (!(smmu->options & ARM_SMMU_OPT_SKIP_INIT) || - (IS_ENABLED(CONFIG_HIBERNATION) && smmu->smmu_restore)) { + IS_ENABLED(CONFIG_HIBERNATION)) { for (i = 0; i < smmu->num_mapping_groups; ++i) arm_smmu_write_sme(smmu, i);