Merge "regulator: cpr3: fix panic callback failure in interrupt context"
This commit is contained in:
commit
373c6ba99f
3 changed files with 9 additions and 4 deletions
|
@ -5935,14 +5935,11 @@ static int cpr3_panic_callback(struct notifier_block *nfb,
|
||||||
struct cpr3_controller, panic_notifier);
|
struct cpr3_controller, panic_notifier);
|
||||||
struct cpr3_panic_regs_info *regs_info = ctrl->panic_regs_info;
|
struct cpr3_panic_regs_info *regs_info = ctrl->panic_regs_info;
|
||||||
struct cpr3_reg_info *reg;
|
struct cpr3_reg_info *reg;
|
||||||
void __iomem *virt_addr;
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
for (i = 0; i < regs_info->reg_count; i++) {
|
for (i = 0; i < regs_info->reg_count; i++) {
|
||||||
reg = &(regs_info->regs[i]);
|
reg = &(regs_info->regs[i]);
|
||||||
virt_addr = ioremap(reg->addr, 0x4);
|
reg->value = readl_relaxed(reg->virt_addr);
|
||||||
reg->value = readl_relaxed(virt_addr);
|
|
||||||
iounmap(virt_addr);
|
|
||||||
pr_err("%s[0x%08x] = 0x%08x\n", reg->name, reg->addr,
|
pr_err("%s[0x%08x] = 0x%08x\n", reg->name, reg->addr,
|
||||||
reg->value);
|
reg->value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -498,6 +498,7 @@ struct cpr3_aging_sensor_info {
|
||||||
* @name: Register name
|
* @name: Register name
|
||||||
* @addr: Register physical address
|
* @addr: Register physical address
|
||||||
* @value: Register content
|
* @value: Register content
|
||||||
|
* @virt_addr: Register virtual address
|
||||||
*
|
*
|
||||||
* This data structure is used to dump some critical register contents
|
* This data structure is used to dump some critical register contents
|
||||||
* when the device crashes due to a kernel panic.
|
* when the device crashes due to a kernel panic.
|
||||||
|
@ -506,6 +507,7 @@ struct cpr3_reg_info {
|
||||||
const char *name;
|
const char *name;
|
||||||
u32 addr;
|
u32 addr;
|
||||||
u32 value;
|
u32 value;
|
||||||
|
void __iomem *virt_addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1078,6 +1078,12 @@ static int cpr3_panic_notifier_init(struct cpr3_controller *ctrl)
|
||||||
rc);
|
rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
regs[i].virt_addr = devm_ioremap(ctrl->dev, regs[i].addr, 0x4);
|
||||||
|
if (!regs[i].virt_addr) {
|
||||||
|
pr_err("Unable to map panic register addr 0x%08x\n",
|
||||||
|
regs[i].addr);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
regs[i].value = 0xFFFFFFFF;
|
regs[i].value = 0xFFFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue