Merge "regulator: cpr3: fix panic callback failure in interrupt context"

This commit is contained in:
Linux Build Service Account 2016-08-26 22:22:37 -07:00 committed by Gerrit - the friendly Code Review server
commit 373c6ba99f
3 changed files with 9 additions and 4 deletions

View file

@ -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);
} }

View file

@ -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;
}; };
/** /**

View file

@ -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;
} }