Merge "video: driver: use readl_relaxed_poll_timeout instead of register_read"

This commit is contained in:
qctecmdr
2021-08-16 11:31:23 -07:00
کامیت شده توسط Gerrit - the friendly Code Review server
کامیت e7f90a6334
3فایلهای تغییر یافته به همراه72 افزوده شده و 83 حذف شده

مشاهده پرونده

@@ -67,6 +67,8 @@ int __write_register_masked(struct msm_vidc_core *core,
int __write_register(struct msm_vidc_core *core,
u32 reg, u32 value);
int __read_register(struct msm_vidc_core *core, u32 reg);
int __read_register_with_poll_timeout(struct msm_vidc_core *core,
u32 reg, u32 mask, u32 exp_val, u32 sleep_us, u32 timeout_us);
int __iface_cmdq_write(struct msm_vidc_core *core,
void *pkt);
int __iface_msgq_read(struct msm_vidc_core *core, void *pkt);

مشاهده پرونده

@@ -14,6 +14,7 @@
#include <linux/firmware.h>
#include <linux/qcom_scm.h>
#include <linux/soc/qcom/mdt_loader.h>
#include <linux/iopoll.h>
#include "venus_hfi.h"
#include "msm_vidc_core.h"
@@ -335,6 +336,39 @@ int __read_register(struct msm_vidc_core *core, u32 reg)
return rc;
}
int __read_register_with_poll_timeout(struct msm_vidc_core *core,
u32 reg, u32 mask, u32 exp_val, u32 sleep_us, u32 timeout_us)
{
int rc = 0;
u32 val = 0;
u8 *addr;
if (!core) {
d_vpr_e("%s: invalid params\n", __func__);
return -EINVAL;
}
if (!core->power_enabled) {
d_vpr_e("%s failed: Power is OFF\n", __func__);
return -EINVAL;
}
addr = (u8 *)core->register_base_addr + reg;
rc = readl_relaxed_poll_timeout(addr, val, ((val & mask) == exp_val), sleep_us, timeout_us);
/*
* Memory barrier to make sure value is read correctly from the
* register.
*/
rmb();
d_vpr_l(
"regread(%pK + %#x) = %#x. rc %d, mask %#x, exp_val %#x, cond %u, sleep %u, timeout %u\n",
core->register_base_addr, reg, val, rc, mask, exp_val,
((val & mask) == exp_val), sleep_us, timeout_us);
return rc;
}
static void __schedule_power_collapse_work(struct msm_vidc_core *core)
{
if (!core || !core->capabilities) {