Merge 3686b916e5 on remote branch

Change-Id: Ibca9097d15066ffd4c5a18352236ce31307714ed
This commit is contained in:
Linux Build Service Account 2023-08-18 00:03:43 -07:00
commit 0b722f30d8
11 changed files with 61 additions and 13 deletions

View file

@ -809,6 +809,12 @@ static inline void mhi_trigger_resume(struct mhi_controller *mhi_cntrl)
pm_wakeup_hard_event(&mhi_cntrl->mhi_dev->dev);
}
static inline bool is_valid_ring_ptr(struct mhi_ring *ring, dma_addr_t addr)
{
return ((addr >= ring->iommu_base &&
addr < ring->iommu_base + ring->len) && (addr % 16 == 0));
}
/* queue transfer buffer */
int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan,
void *buf, void *cb, size_t buf_len, enum MHI_FLAGS flags);

View file

@ -1403,6 +1403,12 @@ int mhi_process_tsync_ev_ring(struct mhi_controller *mhi_cntrl,
int ret = 0;
spin_lock_bh(&mhi_event->lock);
if (!is_valid_ring_ptr(ev_ring, er_ctxt->rp)) {
MHI_ERR("Event ring rp points outside of the event ring or unalign rp %llx\n",
er_ctxt->rp);
spin_unlock_bh(&mhi_event->lock);
return 0;
}
dev_rp = mhi_to_virtual(ev_ring, er_ctxt->rp);
if (ev_ring->rp == dev_rp) {
spin_unlock_bh(&mhi_event->lock);
@ -1496,8 +1502,14 @@ int mhi_process_bw_scale_ev_ring(struct mhi_controller *mhi_cntrl,
int ret = 0;
spin_lock_bh(&mhi_event->lock);
dev_rp = mhi_to_virtual(ev_ring, er_ctxt->rp);
if (!is_valid_ring_ptr(ev_ring, er_ctxt->rp)) {
MHI_ERR("Event ring rp points outside of the event ring or unalign rp %llx\n",
er_ctxt->rp);
spin_unlock_bh(&mhi_event->lock);
return 0;
}
dev_rp = mhi_to_virtual(ev_ring, er_ctxt->rp);
if (ev_ring->rp == dev_rp) {
spin_unlock_bh(&mhi_event->lock);
goto exit_bw_scale_process;

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

@ -2415,6 +2415,20 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
quirk_nvidia_ck804_pcie_aer_ext_cap);
/*
* Quirk to limit QCOM RC MPS to 128 in case of Realtek 8168
* attaches.
*/
static void quirk_realtek_rc_mpss_limit(struct pci_dev *pdev)
{
struct pci_dev *root_port = pcie_find_root_port(pdev);
if (root_port->vendor == PCI_VENDOR_ID_QCOM)
pcie_set_mps(root_port, 128);
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_REALTEK, 0x8168,
quirk_realtek_rc_mpss_limit);
static void quirk_via_cx700_pci_parking_caching(struct pci_dev *dev)
{
/*

View file

@ -150,6 +150,13 @@ void place_marker(const char *name)
}
EXPORT_SYMBOL(place_marker);
void update_marker(const char *name)
{
destroy_marker(name);
place_marker(name);
}
EXPORT_SYMBOL(update_marker);
void destroy_marker(const char *name)
{
_destroy_boot_marker((char *) name);
@ -217,7 +224,7 @@ static ssize_t bootkpi_writer(struct kobject *obj, struct kobj_attribute *attr,
return rc;
buf[rc] = '\0';
place_marker(buf);
update_marker(buf);
return rc;
}

View file

@ -654,7 +654,7 @@ static int subsystem_shutdown(struct subsys_device *dev, void *data)
#ifdef CONFIG_QGKI_MSM_BOOT_TIME_MARKER
if (!strcmp(dev->desc->name, "modem"))
place_marker("M - Modem Stop");
update_marker("M - Modem Stop");
#endif
return 0;

View file

@ -474,7 +474,7 @@ int pil_do_ramdump(struct pil_desc *desc,
__func__, desc->name, ret);
#ifdef CONFIG_QGKI_MSM_BOOT_TIME_MARKER
if (!strcmp(desc->name, "modem"))
place_marker("M - Modem Dump completed");
update_marker("M - Modem Dump completed");
#endif
if (desc->subsys_vmid > 0)
ret = pil_assign_mem_to_subsys(desc, priv->region_start,
@ -873,7 +873,7 @@ static int pil_init_mmap(struct pil_desc *desc, const struct pil_mdt *mdt)
#ifdef CONFIG_QGKI_MSM_BOOT_TIME_MARKER
if (!strcmp(desc->name, "modem"))
place_marker("M - Modem Image Start Loading");
update_marker("M - Modem Image Start Loading");
#endif
pil_info(desc, "loading from %pa to %pa\n", &priv->region_start,
@ -1339,7 +1339,7 @@ int pil_boot(struct pil_desc *desc)
#ifdef CONFIG_QGKI_MSM_BOOT_TIME_MARKER
if (!strcmp(desc->name, "modem"))
place_marker("M - Modem out of reset");
update_marker("M - Modem out of reset");
#endif
pil_info(desc, "Brought out of reset\n");

View file

@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/delay.h>
@ -439,6 +440,10 @@ void seb_rx_msg(void *data, int len)
dev->seb_resp_cmplt = true;
wake_up(&dev->link_state_wait);
if (dev->wait_for_resp) {
if (len > SEB_GLINK_INTENT_SIZE) {
pr_err("Invalid seb rx buffer length\n");
return;
}
memcpy(dev->rx_buf, data, len);
} else {
/* Handle the event received from Slate */

View file

@ -873,7 +873,7 @@ static int subsys_ramdump(int enable, const struct subsys_desc *subsys)
return 0;
#ifdef CONFIG_QGKI_MSM_BOOT_TIME_MARKER
if (!strcmp(subsys->name, "modem"))
place_marker("M - Modem Dump start");
update_marker("M - Modem Dump start");
#endif
return pil_do_ramdump(&d->desc, d->ramdump_dev, d->minidump_dev);
@ -921,7 +921,7 @@ static irqreturn_t subsys_err_fatal_intr_handler (int irq, void *drv_data)
}
#ifdef CONFIG_QGKI_MSM_BOOT_TIME_MARKER
if (!strcmp(d->subsys_desc.name, "modem"))
place_marker("M - Modem crash");
update_marker("M - Modem crash");
#endif
subsys_set_crash_status(d->subsys, CRASH_STATUS_ERR_FATAL);
log_failure_reason(d);

View file

@ -6,6 +6,7 @@
#ifdef CONFIG_QGKI_MSM_BOOT_TIME_MARKER
void place_marker(const char *name);
void update_marker(const char *name);
void destroy_marker(const char *name);
unsigned long long msm_timer_get_sclk_ticks(void);
static inline int boot_marker_enabled(void) { return 1; }
@ -13,6 +14,7 @@ static inline int boot_marker_enabled(void) { return 1; }
static inline int init_bootkpi(void) { return 0; }
static inline void exit_bootkpi(void) { };
static inline void place_marker(char *name) { };
static inline void update_marker(char *name) { };
static inline void destroy_marker(const char *name) { };
static inline int boot_marker_enabled(void) { return 0; }
static inline unsigned long long msm_timer_get_sclk_ticks(void) { return -EINVAL; }