Messages in this thread | | | Subject | Re: [PATCH] thermal/drivers/sun8i: Don't fail probe due to zone registration failure | From | Icenowy Zheng <> | Date | Sat, 22 Jul 2023 20:11:43 +0800 |
| |
在 2023-07-18星期二的 16:04 +0100,Mark Brown写道: > Currently the sun8i thermal driver will fail to probe if any of the > thermal zones it is registering fails to register with the thermal > core. > Since we currently do not define any trip points for the GPU thermal > zones on at least A64 or H5 this means that we have no thermal > support > on these platforms: > > [ 1.698703] thermal_sys: Failed to find 'trips' node > [ 1.698707] thermal_sys: Failed to find trip points for thermal- > sensor id=1
I think this is an issue in the core thermal subsystem, and sent a patch; Unfortunately the patch seems to be rejected by linux-arm-kernel (and some other mailing lists)...
I will then resend it again and put Mark into CC list.
> > even though the main CPU thermal zone on both SoCs is fully > configured. > This does not seem ideal, while we may not be able to use all the > zones > it seems better to have those zones which are usable be operational. > Instead just carry on registering zones if we get any non-deferral > error, allowing use of those zones which are usable. > > This means that we also need to update the interrupt handler to not > attempt to notify the core for events on zones which we have not > registered, I didn't see an ability to mask individual interrupts and > I would expect that interrupts would still be indicated in the ISR > even > if they were masked. > > Signed-off-by: Mark Brown <broonie@kernel.org> > --- > I noticed this while trying to debug an issue with memory corruption > on > boot which since the merge window has prevented Pine64 Plus (an A64) > from booting at all: > > > https://storage.kernelci.org/mainline/master/v6.5-rc2/arm64/defconfig/gcc-10/lab-baylibre/baseline-sun50i-a64-pine64-plus.txt > > (which I bisected to a random memory management change that clearly > wasn't at fault) and has been causing less consistent but still very > severe boot issues on Libretech Tritium (a H3). The corruption > appears > to happen when unbinding a the one thermal zone that does register, > I've > not figured out exactly where. > > The memory corruption issue obviously needs to be dealt with properly > (I'm still digging into it) but this does allow both platforms to > boot > reliably and seems like a sensible thing to do independently, ideally > we > could get this in as a fix. > --- > drivers/thermal/sun8i_thermal.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/thermal/sun8i_thermal.c > b/drivers/thermal/sun8i_thermal.c > index 195f3c5d0b38..b69134538867 100644 > --- a/drivers/thermal/sun8i_thermal.c > +++ b/drivers/thermal/sun8i_thermal.c > @@ -190,6 +190,9 @@ static irqreturn_t sun8i_irq_thread(int irq, void > *data) > int i; > > for_each_set_bit(i, &irq_bitmap, tmdev->chip->sensor_num) { > + /* We allow some zones to not register. */ > + if (IS_ERR(tmdev->sensor[i].tzd)) > + continue; > thermal_zone_device_update(tmdev->sensor[i].tzd, > > THERMAL_EVENT_UNSPECIFIED); > } > @@ -465,8 +468,17 @@ static int sun8i_ths_register(struct ths_device > *tmdev) > i, > &tmdev- > >sensor[i], > &ths_ops); > - if (IS_ERR(tmdev->sensor[i].tzd)) > - return PTR_ERR(tmdev->sensor[i].tzd); > + > + /* > + * If an individual zone fails to register for > reasons > + * other than probe deferral (eg, a bad DT) then > carry > + * on, other zones might register successfully. > + */ > + if (IS_ERR(tmdev->sensor[i].tzd)) { > + if (PTR_ERR(tmdev->sensor[i].tzd) == - > EPROBE_DEFER) > + return PTR_ERR(tmdev->sensor[i].tzd); > + continue; > + } > > devm_thermal_add_hwmon_sysfs(tmdev->dev, tmdev- > >sensor[i].tzd); > } > > --- > base-commit: fdf0eaf11452d72945af31804e2a1048ee1b574c > change-id: 20230718-thermal-sun8i-registration-df3a136ccafa > > Best regards,
| |