Merge "video: driver: use readl_relaxed_poll_timeout instead of register_read"
This commit is contained in:

کامیت شده توسط
Gerrit - the friendly Code Review server

کامیت
e7f90a6334
@@ -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) {
|
||||
|
مرجع در شماره جدید
Block a user