Message ID | cover.1713147645.git.zhoubinbin@loongson.cn |
---|---|
Headers | show |
Series | thermal: loongson2: Add Loongson-2K0500 and Loongson-2K2000 thermal support | expand |
Hi, Binbin, On Mon, Apr 15, 2024 at 10:31 AM Binbin Zhou <zhoubinbin@loongson.cn> wrote: > > Here are some minor code style adjustment. Such as fix whitespace code > style; align function call arguments to opening parenthesis, and add > devm_thermal_add_hwmon_sysfs() return value checking. > > Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn> > --- > drivers/thermal/loongson2_thermal.c | 69 +++++++++++++++-------------- > 1 file changed, 35 insertions(+), 34 deletions(-) > > diff --git a/drivers/thermal/loongson2_thermal.c b/drivers/thermal/loongson2_thermal.c > index 0f475fe46bc9..d77d829c8b55 100644 > --- a/drivers/thermal/loongson2_thermal.c > +++ b/drivers/thermal/loongson2_thermal.c > @@ -16,45 +16,49 @@ > #include <linux/units.h> > #include "thermal_hwmon.h" > > -#define LOONGSON2_MAX_SENSOR_SEL_NUM 3 > +#define LOONGSON2_MAX_SENSOR_SEL_NUM 3 > > -#define LOONGSON2_THSENS_CTRL_HI_REG 0x0 > -#define LOONGSON2_THSENS_CTRL_LOW_REG 0x8 > -#define LOONGSON2_THSENS_STATUS_REG 0x10 > -#define LOONGSON2_THSENS_OUT_REG 0x14 > +#define LOONGSON2_THSENS_CTRL_HI_REG 0x0 > +#define LOONGSON2_THSENS_CTRL_LOW_REG 0x8 > +#define LOONGSON2_THSENS_STATUS_REG 0x10 > +#define LOONGSON2_THSENS_OUT_REG 0x14 > > -#define LOONGSON2_THSENS_INT_LO BIT(0) > -#define LOONGSON2_THSENS_INT_HIGH BIT(1) > -#define LOONGSON2_THSENS_OUT_MASK 0xFF > +#define LOONGSON2_THSENS_INT_LO BIT(0) > +#define LOONGSON2_THSENS_INT_HIGH BIT(1) > +#define LOONGSON2_THSENS_INT_EN (LOONGSON2_THSENS_INT_LO | \ > + LOONGSON2_THSENS_INT_HIGH) > +#define LOONGSON2_THSENS_OUT_MASK 0xFF > > struct loongson2_thermal_chip_data { > - unsigned int thermal_sensor_sel; > + unsigned int thermal_sensor_sel; > }; > > struct loongson2_thermal_data { > - void __iomem *regs; > + void __iomem *regs; > const struct loongson2_thermal_chip_data *chip_data; > }; > > -static int loongson2_thermal_set(struct loongson2_thermal_data *data, > - int low, int high, bool enable) > +static void loongson2_set_ctrl_regs(struct loongson2_thermal_data *data, > + int ctrl_data, bool low, bool enable) > { > - u64 reg_ctrl = 0; > - int reg_off = data->chip_data->thermal_sensor_sel * 2; > + int reg_ctrl = 0; > + int reg_off = data->chip_data->thermal_sensor_sel * 2; > + int ctrl_reg = low ? LOONGSON2_THSENS_CTRL_LOW_REG : > + LOONGSON2_THSENS_CTRL_HI_REG; Line break is unnecessary, because long lines is acceptable now. > + > + reg_ctrl = ctrl_data + HECTO; > + reg_ctrl |= enable ? 0x100 : 0; > + writew(reg_ctrl, data->regs + ctrl_reg + reg_off); > +} > > +static int loongson2_thermal_set(struct loongson2_thermal_data *data, > + int low, int high, bool enable) > +{ > low = clamp(-40, low, high); > high = clamp(125, low, high); > > - low += HECTO; > - high += HECTO; > - > - reg_ctrl = low; > - reg_ctrl |= enable ? 0x100 : 0; > - writew(reg_ctrl, data->regs + LOONGSON2_THSENS_CTRL_LOW_REG + reg_off); > - > - reg_ctrl = high; > - reg_ctrl |= enable ? 0x100 : 0; > - writew(reg_ctrl, data->regs + LOONGSON2_THSENS_CTRL_HI_REG + reg_off); > + loongson2_set_ctrl_regs(data, low, true, enable); > + loongson2_set_ctrl_regs(data, high, false, enable); > > return 0; > } > @@ -75,15 +79,15 @@ static irqreturn_t loongson2_thermal_irq_thread(int irq, void *dev) > struct thermal_zone_device *tzd = dev; > struct loongson2_thermal_data *data = thermal_zone_device_priv(tzd); > > - writeb(LOONGSON2_THSENS_INT_LO | LOONGSON2_THSENS_INT_HIGH, data->regs + > - LOONGSON2_THSENS_STATUS_REG); > + writeb(LOONGSON2_THSENS_INT_EN, data->regs + LOONGSON2_THSENS_STATUS_REG); > > thermal_zone_device_update(tzd, THERMAL_EVENT_UNSPECIFIED); > > return IRQ_HANDLED; > } > > -static int loongson2_thermal_set_trips(struct thermal_zone_device *tz, int low, int high) > +static int loongson2_thermal_set_trips(struct thermal_zone_device *tz, > + int low, int high) The same as above. Huacai > { > struct loongson2_thermal_data *data = thermal_zone_device_priv(tz); > > @@ -116,14 +120,13 @@ static int loongson2_thermal_probe(struct platform_device *pdev) > if (irq < 0) > return irq; > > - writeb(LOONGSON2_THSENS_INT_LO | LOONGSON2_THSENS_INT_HIGH, data->regs + > - LOONGSON2_THSENS_STATUS_REG); > + writeb(LOONGSON2_THSENS_INT_EN, data->regs + LOONGSON2_THSENS_STATUS_REG); > > loongson2_thermal_set(data, 0, 0, false); > > for (i = 0; i <= LOONGSON2_MAX_SENSOR_SEL_NUM; i++) { > tzd = devm_thermal_of_zone_register(dev, i, data, > - &loongson2_of_thermal_ops); > + &loongson2_of_thermal_ops); > > if (!IS_ERR(tzd)) > break; > @@ -135,13 +138,11 @@ static int loongson2_thermal_probe(struct platform_device *pdev) > } > > ret = devm_request_threaded_irq(dev, irq, NULL, loongson2_thermal_irq_thread, > - IRQF_ONESHOT, "loongson2_thermal", tzd); > + IRQF_ONESHOT, "loongson2_thermal", tzd); > if (ret < 0) > return dev_err_probe(dev, ret, "failed to request alarm irq\n"); > > - devm_thermal_add_hwmon_sysfs(dev, tzd); > - > - return 0; > + return devm_thermal_add_hwmon_sysfs(dev, tzd); > } > > static const struct loongson2_thermal_chip_data loongson2_thermal_ls2k1000_data = { > -- > 2.43.0 >
For the whole series, Acked-by: Huacai Chen <chenhuacai@loongson.cn> On Mon, Apr 15, 2024 at 10:31 AM Binbin Zhou <zhoubinbin@loongson.cn> wrote: > > Hi all: > > This patchset introduce the Loongson-2K0500 and Loongson-2K2000 > temperature sensors. > > The temperature sensors of Loongson-2K series CPUs are similar, except > that the temperature reading method of the Loongson-2K2000 is > different. > > Specifically, the temperature output register of the Loongson-2K2000 is > defined in the chip configuration domain. We need to define it in dts > and calculate it using different calculation methods. > > Thanks. > > --- > V2: > patch(2/4): > - Add Acked-by tag from Rob, Thanks. > patch(3/4): > - Add "minItems: 2" to the reg attribute of Loongson-2K2000. > > Link to V1: > https://lore.kernel.org/all/cover.1712733065.git.zhoubinbin@loongson.cn/ > > Binbin Zhou (4): > thermal: loongson2: Trivial code style adjustment > dt-bindings: thermal: loongson,ls2k-thermal: Add Loongson-2K0500 > compaible > dt-bindings: thermal: loongson,ls2k-thermal: Fix incorrect compatible > definition > thermal: loongson2: Add Loongson-2K2000 support > > .../thermal/loongson,ls2k-thermal.yaml | 24 +++- > drivers/thermal/loongson2_thermal.c | 111 +++++++++++------- > 2 files changed, 93 insertions(+), 42 deletions(-) > > -- > 2.43.0 > >
On Fri, Apr 19, 2024 at 8:30 AM Huacai Chen <chenhuacai@kernel.org> wrote: > > Hi, Binbin, > > On Mon, Apr 15, 2024 at 10:31 AM Binbin Zhou <zhoubinbin@loongson.cn> wrote: > > > > Here are some minor code style adjustment. Such as fix whitespace code > > style; align function call arguments to opening parenthesis, and add > > devm_thermal_add_hwmon_sysfs() return value checking. > > > > Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn> > > --- > > drivers/thermal/loongson2_thermal.c | 69 +++++++++++++++-------------- > > 1 file changed, 35 insertions(+), 34 deletions(-) > > > > diff --git a/drivers/thermal/loongson2_thermal.c b/drivers/thermal/loongson2_thermal.c > > index 0f475fe46bc9..d77d829c8b55 100644 > > --- a/drivers/thermal/loongson2_thermal.c > > +++ b/drivers/thermal/loongson2_thermal.c > > @@ -16,45 +16,49 @@ > > #include <linux/units.h> > > #include "thermal_hwmon.h" > > > > -#define LOONGSON2_MAX_SENSOR_SEL_NUM 3 > > +#define LOONGSON2_MAX_SENSOR_SEL_NUM 3 > > > > -#define LOONGSON2_THSENS_CTRL_HI_REG 0x0 > > -#define LOONGSON2_THSENS_CTRL_LOW_REG 0x8 > > -#define LOONGSON2_THSENS_STATUS_REG 0x10 > > -#define LOONGSON2_THSENS_OUT_REG 0x14 > > +#define LOONGSON2_THSENS_CTRL_HI_REG 0x0 > > +#define LOONGSON2_THSENS_CTRL_LOW_REG 0x8 > > +#define LOONGSON2_THSENS_STATUS_REG 0x10 > > +#define LOONGSON2_THSENS_OUT_REG 0x14 > > > > -#define LOONGSON2_THSENS_INT_LO BIT(0) > > -#define LOONGSON2_THSENS_INT_HIGH BIT(1) > > -#define LOONGSON2_THSENS_OUT_MASK 0xFF > > +#define LOONGSON2_THSENS_INT_LO BIT(0) > > +#define LOONGSON2_THSENS_INT_HIGH BIT(1) > > +#define LOONGSON2_THSENS_INT_EN (LOONGSON2_THSENS_INT_LO | \ > > + LOONGSON2_THSENS_INT_HIGH) > > +#define LOONGSON2_THSENS_OUT_MASK 0xFF > > > > struct loongson2_thermal_chip_data { > > - unsigned int thermal_sensor_sel; > > + unsigned int thermal_sensor_sel; > > }; > > > > struct loongson2_thermal_data { > > - void __iomem *regs; > > + void __iomem *regs; > > const struct loongson2_thermal_chip_data *chip_data; > > }; > > > > -static int loongson2_thermal_set(struct loongson2_thermal_data *data, > > - int low, int high, bool enable) > > +static void loongson2_set_ctrl_regs(struct loongson2_thermal_data *data, > > + int ctrl_data, bool low, bool enable) > > { > > - u64 reg_ctrl = 0; > > - int reg_off = data->chip_data->thermal_sensor_sel * 2; > > + int reg_ctrl = 0; > > + int reg_off = data->chip_data->thermal_sensor_sel * 2; > > + int ctrl_reg = low ? LOONGSON2_THSENS_CTRL_LOW_REG : > > + LOONGSON2_THSENS_CTRL_HI_REG; > Line break is unnecessary, because long lines is acceptable now. > OK, I would check the entire code again and fix it in the next version. Thanks. Binbin > > + > > + reg_ctrl = ctrl_data + HECTO; > > + reg_ctrl |= enable ? 0x100 : 0; > > + writew(reg_ctrl, data->regs + ctrl_reg + reg_off); > > +} > > > > +static int loongson2_thermal_set(struct loongson2_thermal_data *data, > > + int low, int high, bool enable) > > +{ > > low = clamp(-40, low, high); > > high = clamp(125, low, high); > > > > - low += HECTO; > > - high += HECTO; > > - > > - reg_ctrl = low; > > - reg_ctrl |= enable ? 0x100 : 0; > > - writew(reg_ctrl, data->regs + LOONGSON2_THSENS_CTRL_LOW_REG + reg_off); > > - > > - reg_ctrl = high; > > - reg_ctrl |= enable ? 0x100 : 0; > > - writew(reg_ctrl, data->regs + LOONGSON2_THSENS_CTRL_HI_REG + reg_off); > > + loongson2_set_ctrl_regs(data, low, true, enable); > > + loongson2_set_ctrl_regs(data, high, false, enable); > > > > return 0; > > } > > @@ -75,15 +79,15 @@ static irqreturn_t loongson2_thermal_irq_thread(int irq, void *dev) > > struct thermal_zone_device *tzd = dev; > > struct loongson2_thermal_data *data = thermal_zone_device_priv(tzd); > > > > - writeb(LOONGSON2_THSENS_INT_LO | LOONGSON2_THSENS_INT_HIGH, data->regs + > > - LOONGSON2_THSENS_STATUS_REG); > > + writeb(LOONGSON2_THSENS_INT_EN, data->regs + LOONGSON2_THSENS_STATUS_REG); > > > > thermal_zone_device_update(tzd, THERMAL_EVENT_UNSPECIFIED); > > > > return IRQ_HANDLED; > > } > > > > -static int loongson2_thermal_set_trips(struct thermal_zone_device *tz, int low, int high) > > +static int loongson2_thermal_set_trips(struct thermal_zone_device *tz, > > + int low, int high) > The same as above. > > Huacai > > > { > > struct loongson2_thermal_data *data = thermal_zone_device_priv(tz); > > > > @@ -116,14 +120,13 @@ static int loongson2_thermal_probe(struct platform_device *pdev) > > if (irq < 0) > > return irq; > > > > - writeb(LOONGSON2_THSENS_INT_LO | LOONGSON2_THSENS_INT_HIGH, data->regs + > > - LOONGSON2_THSENS_STATUS_REG); > > + writeb(LOONGSON2_THSENS_INT_EN, data->regs + LOONGSON2_THSENS_STATUS_REG); > > > > loongson2_thermal_set(data, 0, 0, false); > > > > for (i = 0; i <= LOONGSON2_MAX_SENSOR_SEL_NUM; i++) { > > tzd = devm_thermal_of_zone_register(dev, i, data, > > - &loongson2_of_thermal_ops); > > + &loongson2_of_thermal_ops); > > > > if (!IS_ERR(tzd)) > > break; > > @@ -135,13 +138,11 @@ static int loongson2_thermal_probe(struct platform_device *pdev) > > } > > > > ret = devm_request_threaded_irq(dev, irq, NULL, loongson2_thermal_irq_thread, > > - IRQF_ONESHOT, "loongson2_thermal", tzd); > > + IRQF_ONESHOT, "loongson2_thermal", tzd); > > if (ret < 0) > > return dev_err_probe(dev, ret, "failed to request alarm irq\n"); > > > > - devm_thermal_add_hwmon_sysfs(dev, tzd); > > - > > - return 0; > > + return devm_thermal_add_hwmon_sysfs(dev, tzd); > > } > > > > static const struct loongson2_thermal_chip_data loongson2_thermal_ls2k1000_data = { > > -- > > 2.43.0 > >