thermal/drivers/armada: Add support for AP807 thermal data
authorAlex Leibovich <alexl@marvell.com>
Fri, 16 Jun 2023 11:50:42 +0000 (12:50 +0100)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Mon, 26 Jun 2023 10:03:14 +0000 (12:03 +0200)
Add support for the AP807 die thermal data. This is the same as AP806,
except for the coefficients.

ap807 values taken from TSENSE_ADC_16FFC spec, which says:
T(in Celsius) = T(code)*TSENE_GAIN+TSENE_OFFSET
where in default:
TSENE_OFFSET = 128.9
TSENE_GAIN = 0.394

Signed-off-by: Alex Leibovich <alexl@marvell.com>
Tested-by: sa_ip-sw-jenkins <sa_ip-sw-jenkins@marvell.com>
Reviewed-by: Stefan Chulski <stefanc@marvell.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/E1qA7yU-00Ea4u-Je@rmk-PC.armlinux.org.uk
drivers/thermal/armada_thermal.c

index 0e8dfa6..9f6dc4f 100644 (file)
@@ -231,7 +231,7 @@ static void armada380_init(struct platform_device *pdev,
        regmap_write(priv->syscon, data->syscon_control0_off, reg);
 }
 
-static void armada_ap806_init(struct platform_device *pdev,
+static void armada_ap80x_init(struct platform_device *pdev,
                              struct armada_thermal_priv *priv)
 {
        struct armada_thermal_data *data = priv->data;
@@ -614,7 +614,7 @@ static const struct armada_thermal_data armada380_data = {
 };
 
 static const struct armada_thermal_data armada_ap806_data = {
-       .init = armada_ap806_init,
+       .init = armada_ap80x_init,
        .is_valid_bit = BIT(16),
        .temp_shift = 0,
        .temp_mask = 0x3ff,
@@ -637,6 +637,30 @@ static const struct armada_thermal_data armada_ap806_data = {
        .cpu_nr = 4,
 };
 
+static const struct armada_thermal_data armada_ap807_data = {
+       .init = armada_ap80x_init,
+       .is_valid_bit = BIT(16),
+       .temp_shift = 0,
+       .temp_mask = 0x3ff,
+       .thresh_shift = 3,
+       .hyst_shift = 19,
+       .hyst_mask = 0x3,
+       .coef_b = -128900LL,
+       .coef_m = 394ULL,
+       .coef_div = 1,
+       .inverted = true,
+       .signed_sample = true,
+       .syscon_control0_off = 0x84,
+       .syscon_control1_off = 0x88,
+       .syscon_status_off = 0x8C,
+       .dfx_irq_cause_off = 0x108,
+       .dfx_irq_mask_off = 0x10C,
+       .dfx_overheat_irq = BIT(22),
+       .dfx_server_irq_mask_off = 0x104,
+       .dfx_server_irq_en = BIT(1),
+       .cpu_nr = 4,
+};
+
 static const struct armada_thermal_data armada_cp110_data = {
        .init = armada_cp110_init,
        .is_valid_bit = BIT(10),
@@ -681,6 +705,10 @@ static const struct of_device_id armada_thermal_id_table[] = {
                .data       = &armada_ap806_data,
        },
        {
+               .compatible = "marvell,armada-ap807-thermal",
+               .data       = &armada_ap807_data,
+       },
+       {
                .compatible = "marvell,armada-cp110-thermal",
                .data       = &armada_cp110_data,
        },