Merge tag 'LA.UM.9.14.1.r1-10900-QCM6490.QSSI14.0' of https://git.codelinaro.org/clo/la/kernel/msm-5.4 into android13-5.4-lahaina

"LA.UM.9.14.1.r1-10900-QCM6490.QSSI14.0"

* tag 'LA.UM.9.14.1.r1-10900-QCM6490.QSSI14.0' of https://git.codelinaro.org/clo/la/kernel/msm-5.4:
  msm: kgsl: Defer drawobj_sync_timeline_fence_work() to a workqueue
  BACKPORT: of: base: Skip CPU nodes with "fail"/"fail-..." status
  qcom: cpufreq-hw: Use the topology coreid for offset
  msm: kgsl: Check user generated timestamp before queuing drawobjs
  msm: kgsl: Keep postamble packets in a privileged buffer
  net: qrtr: haven: Add bounds check on tx path
  pci: msm: Add support to retry for sending rpmsg
  cpu-topology: Change the size of allocation for cpu's
  devfreq: memlat: Correct the num_cpus in memlat-mon
  core_ctl: Add check for available cpus before accessing per_cpus
  msm: kgsl: Remove protected GPUCC registers from snapshot
  wifi: cfg80211: fix BSS refcounting bugs
  wifi: cfg80211: avoid nontransmitted BSS list corruption
  wifi: cfg80211: fix u8 overflow in cfg80211_update_notlisted_nontrans()
  cnss2: Add code to fallback to non-contiguous FW mem allocation
  msm: kgsl: Fix gpuaddr_in_range() to check upper bound
  msm: kgsl: Remove 'fd' dependency to get dma_buf handle
  msm: kgsl: Zap performance counters across context switches
  msm: kgsl: Update the IFPC power up reglist
  msm: kgsl: Update register protection config
  msm: kgsl: Add support for A643 GPU

Change-Id: Ie958b06794787ef0672bb2cdd0c12911b819f3d5
This commit is contained in:
Michael Bestas 2023-08-29 03:54:00 +03:00
commit d9b72de2cf
No known key found for this signature in database
GPG key ID: CC95044519BE6669
3 changed files with 15 additions and 6 deletions

View file

@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
/*
@ -253,7 +254,7 @@ static void drawobj_sync_func(struct kgsl_device *device,
kgsl_drawobj_put(&event->syncobj->base);
}
static void drawobj_sync_timeline_fence_work(struct irq_work *work)
static void drawobj_sync_timeline_fence_work(struct work_struct *work)
{
struct kgsl_drawobj_sync_event *event = container_of(work,
struct kgsl_drawobj_sync_event, work);
@ -301,7 +302,7 @@ static void drawobj_sync_timeline_fence_callback(struct dma_fence *f,
* removing the fence
*/
if (drawobj_sync_expire(event->device, event))
irq_work_queue(&event->work);
queue_work(kgsl_driver.mem_workqueue, &event->work);
}
static void syncobj_destroy(struct kgsl_drawobj *drawobj)
@ -498,7 +499,7 @@ static int drawobj_add_sync_timeline(struct kgsl_device *device,
event->device = device;
event->context = NULL;
event->fence = fence;
init_irq_work(&event->work, drawobj_sync_timeline_fence_work);
INIT_WORK(&event->work, drawobj_sync_timeline_fence_work);
INIT_LIST_HEAD(&event->cb.node);

View file

@ -1,6 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef __KGSL_DRAWOBJ_H
@ -170,8 +171,8 @@ struct kgsl_drawobj_sync_event {
struct dma_fence *fence;
/** @cb: Callback struct for KGSL_CMD_SYNCPOINT_TYPE_TIMELINE */
struct dma_fence_cb cb;
/** @work : irq worker for KGSL_CMD_SYNCPOINT_TYPE_TIMELINE */
struct irq_work work;
/** @work : work_struct for KGSL_CMD_SYNCPOINT_TYPE_TIMELINE */
struct work_struct work;
};
#define KGSL_DRAWOBJ_FLAGS \

View file

@ -7760,7 +7760,7 @@ static int msm_pcie_drv_send_rpmsg(struct msm_pcie_dev_t *pcie_dev,
struct msm_pcie_drv_msg *msg)
{
struct msm_pcie_drv_info *drv_info = pcie_dev->drv_info;
int ret;
int ret, re_try = 5; /* sleep 5 ms per re-try */
struct rpmsg_device *rpdev;
mutex_lock(&pcie_drv.rpmsg_lock);
@ -7781,8 +7781,15 @@ static int msm_pcie_drv_send_rpmsg(struct msm_pcie_dev_t *pcie_dev,
PCIE_DBG(pcie_dev, "PCIe: RC%d: DRV: sending rpmsg: command: 0x%x\n",
pcie_dev->rc_idx, msg->pkt.dword[0]);
retry:
ret = rpmsg_trysend(rpdev->ept, msg, sizeof(*msg));
if (ret) {
if (ret == -EBUSY && re_try) {
usleep_range(5000, 5001);
re_try--;
goto retry;
}
PCIE_ERR(pcie_dev,
"PCIe: RC%d: DRV: failed to send rpmsg, ret:%d\n",
pcie_dev->rc_idx, ret);