PM / devfreq: rockchip_dmc: dump current opp state when panic for ddr

panic log:
rockchip-dmc dmc: cur_freq: 528000000 Hz, volt_vdd: 675000 uV, volt_mem: 700000 uV

Signed-off-by: Liang Chen <cl@rock-chips.com>
Change-Id: Iad0ef4c72f9761e23f68098d1e9ad03dec4d84a1
This commit is contained in:
Liang Chen
2022-12-22 10:57:26 +08:00
committed by Tao Huang
parent 2f39a52b83
commit e0d6e449eb

View File

@@ -118,6 +118,7 @@ struct rockchip_dmcfreq {
struct regulator *vdd_center;
struct regulator *mem_reg;
struct notifier_block status_nb;
struct notifier_block panic_nb;
struct list_head video_info_list;
struct freq_map_table *cpu_bw_tbl;
struct work_struct boost_work;
@@ -2619,6 +2620,23 @@ next:
return NOTIFY_OK;
}
static int rockchip_dmcfreq_panic_notifier(struct notifier_block *nb,
unsigned long v, void *p)
{
struct rockchip_dmcfreq *dmcfreq =
container_of(nb, struct rockchip_dmcfreq, panic_nb);
struct device *dev = dmcfreq->dev;
if (dmcfreq->regulator_count == 1)
dev_info(dev, "cur_freq: %lu Hz, volt: %lu uV\n",
dmcfreq->rate, dmcfreq->volt);
else
dev_info(dev, "cur_freq: %lu Hz, volt_vdd: %lu uV, volt_mem: %lu uV\n",
dmcfreq->rate, dmcfreq->volt, dmcfreq->mem_volt);
return 0;
}
static ssize_t rockchip_dmcfreq_status_show(struct device *dev,
struct device_attribute *attr,
char *buf)
@@ -3172,6 +3190,12 @@ static void rockchip_dmcfreq_register_notifier(struct rockchip_dmcfreq *dmcfreq)
if (ret)
dev_err(dmcfreq->dev, "failed to register system_status nb\n");
dmcfreq->panic_nb.notifier_call = rockchip_dmcfreq_panic_notifier;
ret = atomic_notifier_chain_register(&panic_notifier_list,
&dmcfreq->panic_nb);
if (ret)
dev_err(dmcfreq->dev, "failed to register panic nb\n");
dmc_mdevp.data = dmcfreq->info.devfreq;
dmcfreq->mdev_info = rockchip_system_monitor_register(dmcfreq->dev,
&dmc_mdevp);