Message ID | 20240219033835.11369-2-raag.jadav@intel.com |
---|---|
State | Accepted |
Headers | show |
Series | DesignWare PWM improvements | expand |
Hello Raag, On Mon, Feb 19, 2024 at 09:08:32AM +0530, Raag Jadav wrote: > While preparing dwc driver for devm_pwmchip_alloc() usage, commit > df41cd8bbcad ("pwm: dwc: Prepare removing pwm_chip from driver data") > modified ->suspend() handle to use the pwm_chip as driver_data for > accessing struct dwc_pwm, but didn't modify ->resume() handle with > relevant changes. This results into illegal memory access during > device wakeup and causes a PM regression. > > Fix this by correctly accessing struct dwc_pwm in ->resume() handle. > > Fixes: df41cd8bbcad ("pwm: dwc: Prepare removing pwm_chip from driver data") > Signed-off-by: Raag Jadav <raag.jadav@intel.com> > --- > drivers/pwm/pwm-dwc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/pwm/pwm-dwc.c b/drivers/pwm/pwm-dwc.c > index 8ca1c20a6aaf..c0e586688e57 100644 > --- a/drivers/pwm/pwm-dwc.c > +++ b/drivers/pwm/pwm-dwc.c > @@ -95,7 +95,8 @@ static int dwc_pwm_suspend(struct device *dev) > > static int dwc_pwm_resume(struct device *dev) > { > - struct dwc_pwm *dwc = dev_get_drvdata(dev); > + struct pwm_chip *chip = dev_get_drvdata(dev); > + struct dwc_pwm *dwc = to_dwc_pwm(chip); > int i; > > for (i = 0; i < DWC_TIMERS_TOTAL; i++) { If you're ok I'd squash this into df41cd8bbcad adding Thanks to Raag Jadav for providing a hunk of this patch that Uwe missed during creation of this patch. to the commit log. Best regards Uwe
On Mon, Feb 19, 2024 at 08:22:15AM +0100, Uwe Kleine-König wrote: > Hello Raag, > > On Mon, Feb 19, 2024 at 09:08:32AM +0530, Raag Jadav wrote: > > While preparing dwc driver for devm_pwmchip_alloc() usage, commit > > df41cd8bbcad ("pwm: dwc: Prepare removing pwm_chip from driver data") > > modified ->suspend() handle to use the pwm_chip as driver_data for > > accessing struct dwc_pwm, but didn't modify ->resume() handle with > > relevant changes. This results into illegal memory access during > > device wakeup and causes a PM regression. > > > > Fix this by correctly accessing struct dwc_pwm in ->resume() handle. > > > > Fixes: df41cd8bbcad ("pwm: dwc: Prepare removing pwm_chip from driver data") > > Signed-off-by: Raag Jadav <raag.jadav@intel.com> > > --- > > drivers/pwm/pwm-dwc.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/pwm/pwm-dwc.c b/drivers/pwm/pwm-dwc.c > > index 8ca1c20a6aaf..c0e586688e57 100644 > > --- a/drivers/pwm/pwm-dwc.c > > +++ b/drivers/pwm/pwm-dwc.c > > @@ -95,7 +95,8 @@ static int dwc_pwm_suspend(struct device *dev) > > > > static int dwc_pwm_resume(struct device *dev) > > { > > - struct dwc_pwm *dwc = dev_get_drvdata(dev); > > + struct pwm_chip *chip = dev_get_drvdata(dev); > > + struct dwc_pwm *dwc = to_dwc_pwm(chip); > > int i; > > > > for (i = 0; i < DWC_TIMERS_TOTAL; i++) { > > If you're ok I'd squash this into df41cd8bbcad adding > > Thanks to Raag Jadav for providing a hunk of this patch that Uwe > missed during creation of this patch. > > to the commit log. Works for me. Raag
diff --git a/drivers/pwm/pwm-dwc.c b/drivers/pwm/pwm-dwc.c index 8ca1c20a6aaf..c0e586688e57 100644 --- a/drivers/pwm/pwm-dwc.c +++ b/drivers/pwm/pwm-dwc.c @@ -95,7 +95,8 @@ static int dwc_pwm_suspend(struct device *dev) static int dwc_pwm_resume(struct device *dev) { - struct dwc_pwm *dwc = dev_get_drvdata(dev); + struct pwm_chip *chip = dev_get_drvdata(dev); + struct dwc_pwm *dwc = to_dwc_pwm(chip); int i; for (i = 0; i < DWC_TIMERS_TOTAL; i++) {
While preparing dwc driver for devm_pwmchip_alloc() usage, commit df41cd8bbcad ("pwm: dwc: Prepare removing pwm_chip from driver data") modified ->suspend() handle to use the pwm_chip as driver_data for accessing struct dwc_pwm, but didn't modify ->resume() handle with relevant changes. This results into illegal memory access during device wakeup and causes a PM regression. Fix this by correctly accessing struct dwc_pwm in ->resume() handle. Fixes: df41cd8bbcad ("pwm: dwc: Prepare removing pwm_chip from driver data") Signed-off-by: Raag Jadav <raag.jadav@intel.com> --- drivers/pwm/pwm-dwc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)