Loading drivers/power/qcom/msm-pm.c +9 −2 Original line number Diff line number Diff line Loading @@ -437,7 +437,7 @@ bool msm_cpu_pm_enter_sleep(enum msm_pm_sleep_mode mode, bool from_idle) */ int msm_pm_wait_cpu_shutdown(unsigned int cpu) { int timeout = 10; int timeout = 0; if (!msm_pm_slp_sts) return 0; Loading @@ -455,7 +455,14 @@ int msm_pm_wait_cpu_shutdown(unsigned int cpu) return 0; udelay(100); WARN(++timeout == 20, "CPU%u didn't collapse in 2ms\n", cpu); /* * Dump spm registers for debugging */ if (++timeout == 20) { msm_spm_dump_regs(cpu); __WARN_printf("CPU%u didn't collapse in 2ms, sleep status: 0x%x\n", cpu, acc_sts); } } return -EBUSY; Loading drivers/soc/qcom/spm-v2.c +12 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,18 @@ void msm_spm_drv_flush_seq_entry(struct msm_spm_driver_data *dev) mb(); } void dump_regs(struct msm_spm_driver_data *dev, int cpu) { msm_spm_drv_load_shadow(dev, MSM_SPM_REG_SAW2_SPM_STS); mb(); pr_err("CPU%d: spm register MSM_SPM_REG_SAW2_SPM_STS: 0x%x\n", cpu, dev->reg_shadow[MSM_SPM_REG_SAW2_SPM_STS]); msm_spm_drv_load_shadow(dev, MSM_SPM_REG_SAW2_SPM_CTL); mb(); pr_err("CPU%d: spm register MSM_SPM_REG_SAW2_SPM_CTL: 0x%x\n", cpu, dev->reg_shadow[MSM_SPM_REG_SAW2_SPM_CTL]); } int msm_spm_drv_write_seq_data(struct msm_spm_driver_data *dev, uint8_t *cmd, uint32_t *offset) { Loading drivers/soc/qcom/spm_devices.c +5 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,11 @@ int msm_spm_probe_done(void) } EXPORT_SYMBOL(msm_spm_probe_done); void msm_spm_dump_regs(unsigned int cpu) { dump_regs(&per_cpu(msm_cpu_spm_device, cpu).reg_data, cpu); } /** * msm_spm_set_vdd(): Set core voltage * @cpu: core id Loading drivers/soc/qcom/spm_driver.h +1 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,7 @@ int msm_spm_drv_set_low_power_mode(struct msm_spm_driver_data *dev, uint32_t addr, bool pc_mode); int msm_spm_drv_set_vdd(struct msm_spm_driver_data *dev, unsigned int vlevel); void dump_regs(struct msm_spm_driver_data *dev, int cpu); uint32_t msm_spm_drv_get_sts_curr_pmic_data( struct msm_spm_driver_data *dev); int msm_spm_drv_write_seq_data(struct msm_spm_driver_data *dev, Loading include/soc/qcom/spm.h +7 −1 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ int msm_spm_config_low_power_mode(struct msm_spm_device *dev, unsigned int mode, bool notify_rpm); int msm_spm_device_init(void); bool msm_spm_is_mode_avail(unsigned int mode); void msm_spm_dump_regs(unsigned int cpu); #if defined(CONFIG_MSM_L2_SPM) /* Public functions */ Loading Loading @@ -87,6 +87,12 @@ static inline int msm_spm_device_init(void) { return -ENOSYS; } static void msm_spm_dump_regs(unsigned int cpu) { return; } int msm_spm_config_low_power_mode(struct msm_spm_device *dev, unsigned int mode, bool notify_rpm) { Loading Loading
drivers/power/qcom/msm-pm.c +9 −2 Original line number Diff line number Diff line Loading @@ -437,7 +437,7 @@ bool msm_cpu_pm_enter_sleep(enum msm_pm_sleep_mode mode, bool from_idle) */ int msm_pm_wait_cpu_shutdown(unsigned int cpu) { int timeout = 10; int timeout = 0; if (!msm_pm_slp_sts) return 0; Loading @@ -455,7 +455,14 @@ int msm_pm_wait_cpu_shutdown(unsigned int cpu) return 0; udelay(100); WARN(++timeout == 20, "CPU%u didn't collapse in 2ms\n", cpu); /* * Dump spm registers for debugging */ if (++timeout == 20) { msm_spm_dump_regs(cpu); __WARN_printf("CPU%u didn't collapse in 2ms, sleep status: 0x%x\n", cpu, acc_sts); } } return -EBUSY; Loading
drivers/soc/qcom/spm-v2.c +12 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,18 @@ void msm_spm_drv_flush_seq_entry(struct msm_spm_driver_data *dev) mb(); } void dump_regs(struct msm_spm_driver_data *dev, int cpu) { msm_spm_drv_load_shadow(dev, MSM_SPM_REG_SAW2_SPM_STS); mb(); pr_err("CPU%d: spm register MSM_SPM_REG_SAW2_SPM_STS: 0x%x\n", cpu, dev->reg_shadow[MSM_SPM_REG_SAW2_SPM_STS]); msm_spm_drv_load_shadow(dev, MSM_SPM_REG_SAW2_SPM_CTL); mb(); pr_err("CPU%d: spm register MSM_SPM_REG_SAW2_SPM_CTL: 0x%x\n", cpu, dev->reg_shadow[MSM_SPM_REG_SAW2_SPM_CTL]); } int msm_spm_drv_write_seq_data(struct msm_spm_driver_data *dev, uint8_t *cmd, uint32_t *offset) { Loading
drivers/soc/qcom/spm_devices.c +5 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,11 @@ int msm_spm_probe_done(void) } EXPORT_SYMBOL(msm_spm_probe_done); void msm_spm_dump_regs(unsigned int cpu) { dump_regs(&per_cpu(msm_cpu_spm_device, cpu).reg_data, cpu); } /** * msm_spm_set_vdd(): Set core voltage * @cpu: core id Loading
drivers/soc/qcom/spm_driver.h +1 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,7 @@ int msm_spm_drv_set_low_power_mode(struct msm_spm_driver_data *dev, uint32_t addr, bool pc_mode); int msm_spm_drv_set_vdd(struct msm_spm_driver_data *dev, unsigned int vlevel); void dump_regs(struct msm_spm_driver_data *dev, int cpu); uint32_t msm_spm_drv_get_sts_curr_pmic_data( struct msm_spm_driver_data *dev); int msm_spm_drv_write_seq_data(struct msm_spm_driver_data *dev, Loading
include/soc/qcom/spm.h +7 −1 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ int msm_spm_config_low_power_mode(struct msm_spm_device *dev, unsigned int mode, bool notify_rpm); int msm_spm_device_init(void); bool msm_spm_is_mode_avail(unsigned int mode); void msm_spm_dump_regs(unsigned int cpu); #if defined(CONFIG_MSM_L2_SPM) /* Public functions */ Loading Loading @@ -87,6 +87,12 @@ static inline int msm_spm_device_init(void) { return -ENOSYS; } static void msm_spm_dump_regs(unsigned int cpu) { return; } int msm_spm_config_low_power_mode(struct msm_spm_device *dev, unsigned int mode, bool notify_rpm) { Loading