diff mbox series

[v3,08/15] thermal/drivers/tsens: Drop single-cell code for msm8939

Message ID 20221220024721.947147-9-dmitry.baryshkov@linaro.org (mailing list archive)
State Superseded
Headers show
Series thermal/drivers/tsens: specify nvmem cells in DT rather than parsing them manually | expand

Commit Message

Dmitry Baryshkov Dec. 20, 2022, 2:47 a.m. UTC
There is no dtsi file for msm8939 in the kernel sources. Drop the
compatibility with unofficial dtsi and remove support for handling the
single-cell calibration data on msm8939.

Cc: Shawn Guo <shawn.guo@linaro.org>
Cc: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/thermal/qcom/tsens-v0_1.c | 146 ++----------------------------
 1 file changed, 7 insertions(+), 139 deletions(-)

Comments

Bryan O'Donoghue Dec. 20, 2022, 10:08 a.m. UTC | #1
On 20/12/2022 02:47, Dmitry Baryshkov wrote:
> There is no dtsi file for msm8939 in the kernel sources. Drop the
> compatibility with unofficial dtsi and remove support for handling the
> single-cell calibration data on msm8939.
> 
> Cc: Shawn Guo <shawn.guo@linaro.org>
> Cc: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

Maybe its a better idea to just - finally - get the 8939 dtsi upstream.

Is there anything that needs to change in this ? If not I'll just V2 in 
in the next few hours.

tsens: thermal-sensor@4a9000 {
         compatible = "qcom,msm8939-tsens", "qcom,tsens-v0_1";
          reg = <0x004a9000 0x1000>, /* TM */
                <0x004a8000 0x1000>; /* SROT */
          nvmem-cells = <&tsens_caldata>;
          nvmem-cell-names = "calib";
          #qcom,sensors = <10>;
          interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
          interrupt-names = "uplow";
          #thermal-sensor-cells = <1>;
};

https://git.linaro.org/people/bryan.odonoghue/kernel.git/commit/?h=linux-next-22-12-15-msm8939-no-cpr&id=146087a134306dfb6e1ec48b20b19a278f336b15

---
bod
Konrad Dybcio Dec. 20, 2022, 10:21 a.m. UTC | #2
On 20.12.2022 11:08, Bryan O'Donoghue wrote:
> On 20/12/2022 02:47, Dmitry Baryshkov wrote:
>> There is no dtsi file for msm8939 in the kernel sources. Drop the
>> compatibility with unofficial dtsi and remove support for handling the
>> single-cell calibration data on msm8939.
>>
>> Cc: Shawn Guo <shawn.guo@linaro.org>
>> Cc: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> 
> Maybe its a better idea to just - finally - get the 8939 dtsi upstream.
> 
> Is there anything that needs to change in this ? If not I'll just V2 in in the next few hours.
The point of this patchset is to remove logic like this, as it's
very repetetive and all it does is read fuses with a ton of magic
offsets. Dmitry pushes that to DT with the generic nvmem API, so
that instead of these magic &s and <<s, one is simply supposed to
define QFPROM fuses at the correct offset and with a matching bits=<>
property. This does not remove any functionality, it just changes
how the fuses are accessed and makes the code more generic.

Konrad
> 
> tsens: thermal-sensor@4a9000 {
>         compatible = "qcom,msm8939-tsens", "qcom,tsens-v0_1";
>          reg = <0x004a9000 0x1000>, /* TM */
>                <0x004a8000 0x1000>; /* SROT */
>          nvmem-cells = <&tsens_caldata>;
>          nvmem-cell-names = "calib";
>          #qcom,sensors = <10>;
>          interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
>          interrupt-names = "uplow";
>          #thermal-sensor-cells = <1>;
> };
> 
> https://git.linaro.org/people/bryan.odonoghue/kernel.git/commit/?h=linux-next-22-12-15-msm8939-no-cpr&id=146087a134306dfb6e1ec48b20b19a278f336b15
> 
> ---
> bod
Bryan O'Donoghue Dec. 20, 2022, 10:26 a.m. UTC | #3
On 20/12/2022 10:21, Konrad Dybcio wrote:
> The point of this patchset is to remove logic like this, as it's
> very repetetive and all it does is read fuses with a ton of magic
> offsets. Dmitry pushes that to DT with the generic nvmem API, so
> that instead of these magic &s and <<s, one is simply supposed to
> define QFPROM fuses at the correct offset and with a matching bits=<>
> property. This does not remove any functionality, it just changes
> how the fuses are accessed and makes the code more generic.
> 
> Konrad

Hmm but then there's extra work to get this working again on 8939 right?

Seems very dogmatic to drop working code for want of sending a dtsi out.

Certainly my preference is to keep exiting working code and just 
complete landing the relevant dtsi, rather than eject working code and 
have to do the same work all over again.

---
bod
Konrad Dybcio Dec. 20, 2022, 10:32 a.m. UTC | #4
On 20.12.2022 11:26, Bryan O'Donoghue wrote:
> On 20/12/2022 10:21, Konrad Dybcio wrote:
>> The point of this patchset is to remove logic like this, as it's
>> very repetetive and all it does is read fuses with a ton of magic
>> offsets. Dmitry pushes that to DT with the generic nvmem API, so
>> that instead of these magic &s and <<s, one is simply supposed to
>> define QFPROM fuses at the correct offset and with a matching bits=<>
>> property. This does not remove any functionality, it just changes
>> how the fuses are accessed and makes the code more generic.
>>
>> Konrad
> 
> Hmm but then there's extra work to get this working again on 8939 right?
> 
> Seems very dogmatic to drop working code for want of sending a dtsi out.
> 
> Certainly my preference is to keep exiting working code and just complete landing the relevant dtsi, rather than eject working code and have to do the same work all over again.
Well, I don't really know how to say it in a way that wouldn't
make it sound mean, but trust me I don't want it to be mean..

Mainline does not and will not (for the most part) care about
out of tree code, so cleanups of parts like this with no users
are wholly expected if your DT hasn't landed upstream (or has been
stuck in review for a long long time like it is the case with
various parts of 8939).. Keeping this old iteration is blocking
progress, as the other similar ones (that *do* have mainline users)
are left in place just to be backwards compatible with old DTs
that may have been pulled from torvalds/linux by third party projects,
like U-Boot, *BSDs or something. Trimming away this now-duplicated
code will shrink the driver, reducing bloat for everyone that
compiles it in and doesn't use the 8939-specific path.

Konrad
> 
> ---
> bod
Bryan O'Donoghue Dec. 20, 2022, 10:34 a.m. UTC | #5
On 20/12/2022 10:32, Konrad Dybcio wrote:
> Mainline does not and will not (for the most part) care about
> out of tree code, so cleanups of parts like this with no users
> are wholly expected if your DT hasn't landed upstream (or has been
> stuck in review for a long long time like it is the case with
> various parts of 8939).. Keeping this old iteration is blocking
> progress, as the other similar ones (that*do*  have mainline users)
> are left in place just to be backwards compatible with old DTs
> that may have been pulled from torvalds/linux by third party projects,
> like U-Boot, *BSDs or something. Trimming away this now-duplicated
> code will shrink the driver, reducing bloat for everyone that
> compiles it in and doesn't use the 8939-specific path.

I entirely take your point on duration Konrad but, I think we can be 
just a little more pragmatic and hold off on dropping working code and 
land the dtsi.

We went to the trouble of upstreaming the enabling code for the 8939, 
the right thing to do, IMO is to finish off the job.

---
bod
Dmitry Baryshkov Dec. 20, 2022, 1:29 p.m. UTC | #6
Hello Bryan,

On Tue, 20 Dec 2022 at 12:34, Bryan O'Donoghue
<bryan.odonoghue@linaro.org> wrote:
>
> On 20/12/2022 10:32, Konrad Dybcio wrote:
> > Mainline does not and will not (for the most part) care about
> > out of tree code, so cleanups of parts like this with no users
> > are wholly expected if your DT hasn't landed upstream (or has been
> > stuck in review for a long long time like it is the case with
> > various parts of 8939).. Keeping this old iteration is blocking
> > progress, as the other similar ones (that*do*  have mainline users)
> > are left in place just to be backwards compatible with old DTs
> > that may have been pulled from torvalds/linux by third party projects,
> > like U-Boot, *BSDs or something. Trimming away this now-duplicated
> > code will shrink the driver, reducing bloat for everyone that
> > compiles it in and doesn't use the 8939-specific path.
>
> I entirely take your point on duration Konrad but, I think we can be
> just a little more pragmatic and hold off on dropping working code and
> land the dtsi.
>
> We went to the trouble of upstreaming the enabling code for the 8939,
> the right thing to do, IMO is to finish off the job.

I'm pretty sorry to step on your toes here. It's up to the maintainers
of the platform and of the thermal subsystem. However I'd suggest
getting rid of this code.
Would me doing the dtsi patch for you to test on 8939 help you in any way?
Bryan O'Donoghue Dec. 20, 2022, 1:51 p.m. UTC | #7
On 20/12/2022 13:29, Dmitry Baryshkov wrote:
> Would me doing the dtsi patch for you to test on 8939 help you in any way?

Yep.

I'd be happy enough with whatever re-enabling work is required to offset 
the removal.

---
bod
Bryan O'Donoghue Dec. 20, 2022, 2:02 p.m. UTC | #8
On 20/12/2022 02:47, Dmitry Baryshkov wrote:
> There is no dtsi file for msm8939 in the kernel sources. Drop the
> compatibility with unofficial dtsi and remove support for handling the
> single-cell calibration data on msm8939.
> 
> Cc: Shawn Guo <shawn.guo@linaro.org>
> Cc: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

Happy to take an off-list or follow on patch from Dmitry to re-enable on 
8939.

I will drop the relevant node on v2 of the 8939 patches in the interregnum.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
diff mbox series

Patch

diff --git a/drivers/thermal/qcom/tsens-v0_1.c b/drivers/thermal/qcom/tsens-v0_1.c
index 7f87b403c6fa..8f1ea7075354 100644
--- a/drivers/thermal/qcom/tsens-v0_1.c
+++ b/drivers/thermal/qcom/tsens-v0_1.c
@@ -48,63 +48,6 @@ 
 #define MSM8916_CAL_SEL_MASK	0xe0000000
 #define MSM8916_CAL_SEL_SHIFT	29
 
-/* eeprom layout data for 8939 */
-#define MSM8939_BASE0_MASK	0x000000ff
-#define MSM8939_BASE1_MASK	0xff000000
-#define MSM8939_BASE0_SHIFT	0
-#define MSM8939_BASE1_SHIFT	24
-
-#define MSM8939_S0_P1_MASK	0x000001f8
-#define MSM8939_S1_P1_MASK	0x001f8000
-#define MSM8939_S2_P1_MASK_0_4	0xf8000000
-#define MSM8939_S2_P1_MASK_5	0x00000001
-#define MSM8939_S3_P1_MASK	0x00001f80
-#define MSM8939_S4_P1_MASK	0x01f80000
-#define MSM8939_S5_P1_MASK	0x00003f00
-#define MSM8939_S6_P1_MASK	0x03f00000
-#define MSM8939_S7_P1_MASK	0x0000003f
-#define MSM8939_S8_P1_MASK	0x0003f000
-#define MSM8939_S9_P1_MASK	0x07e00000
-
-#define MSM8939_S0_P2_MASK	0x00007e00
-#define MSM8939_S1_P2_MASK	0x07e00000
-#define MSM8939_S2_P2_MASK	0x0000007e
-#define MSM8939_S3_P2_MASK	0x0007e000
-#define MSM8939_S4_P2_MASK	0x7e000000
-#define MSM8939_S5_P2_MASK	0x000fc000
-#define MSM8939_S6_P2_MASK	0xfc000000
-#define MSM8939_S7_P2_MASK	0x00000fc0
-#define MSM8939_S8_P2_MASK	0x00fc0000
-#define MSM8939_S9_P2_MASK_0_4	0xf8000000
-#define MSM8939_S9_P2_MASK_5	0x00002000
-
-#define MSM8939_S0_P1_SHIFT	3
-#define MSM8939_S1_P1_SHIFT	15
-#define MSM8939_S2_P1_SHIFT_0_4	27
-#define MSM8939_S2_P1_SHIFT_5	0
-#define MSM8939_S3_P1_SHIFT	7
-#define MSM8939_S4_P1_SHIFT	19
-#define MSM8939_S5_P1_SHIFT	8
-#define MSM8939_S6_P1_SHIFT	20
-#define MSM8939_S7_P1_SHIFT	0
-#define MSM8939_S8_P1_SHIFT	12
-#define MSM8939_S9_P1_SHIFT	21
-
-#define MSM8939_S0_P2_SHIFT	9
-#define MSM8939_S1_P2_SHIFT	21
-#define MSM8939_S2_P2_SHIFT	1
-#define MSM8939_S3_P2_SHIFT	13
-#define MSM8939_S4_P2_SHIFT	25
-#define MSM8939_S5_P2_SHIFT	14
-#define MSM8939_S6_P2_SHIFT	26
-#define MSM8939_S7_P2_SHIFT	6
-#define MSM8939_S8_P2_SHIFT	18
-#define MSM8939_S9_P2_SHIFT_0_4	27
-#define MSM8939_S9_P2_SHIFT_5	13
-
-#define MSM8939_CAL_SEL_MASK	0x7
-#define MSM8939_CAL_SEL_SHIFT	0
-
 /* eeprom layout data for 8974 */
 #define BASE1_MASK		0xff
 #define S0_P1_MASK		0x3f00
@@ -284,81 +227,6 @@  static int calibrate_8916(struct tsens_priv *priv)
 	return 0;
 }
 
-static int calibrate_8939(struct tsens_priv *priv)
-{
-	int base0 = 0, base1 = 0, i;
-	u32 p1[10], p2[10];
-	int mode = 0;
-	u32 *qfprom_cdata;
-	u32 cdata[6];
-	int ret;
-
-	ret = tsens_calibrate_common(priv);
-	if (!ret)
-		return 0;
-
-	qfprom_cdata = (u32 *)qfprom_read(priv->dev, "calib");
-	if (IS_ERR(qfprom_cdata))
-		return PTR_ERR(qfprom_cdata);
-
-	/* Mapping between qfprom nvmem and calibration data */
-	cdata[0] = qfprom_cdata[12];
-	cdata[1] = qfprom_cdata[13];
-	cdata[2] = qfprom_cdata[0];
-	cdata[3] = qfprom_cdata[1];
-	cdata[4] = qfprom_cdata[22];
-	cdata[5] = qfprom_cdata[21];
-
-	mode = (cdata[0] & MSM8939_CAL_SEL_MASK) >> MSM8939_CAL_SEL_SHIFT;
-	dev_dbg(priv->dev, "calibration mode is %d\n", mode);
-
-	switch (mode) {
-	case TWO_PT_CALIB:
-		base1 = (cdata[3] & MSM8939_BASE1_MASK) >> MSM8939_BASE1_SHIFT;
-		p2[0] = (cdata[0] & MSM8939_S0_P2_MASK) >> MSM8939_S0_P2_SHIFT;
-		p2[1] = (cdata[0] & MSM8939_S1_P2_MASK) >> MSM8939_S1_P2_SHIFT;
-		p2[2] = (cdata[1] & MSM8939_S2_P2_MASK) >> MSM8939_S2_P2_SHIFT;
-		p2[3] = (cdata[1] & MSM8939_S3_P2_MASK) >> MSM8939_S3_P2_SHIFT;
-		p2[4] = (cdata[1] & MSM8939_S4_P2_MASK) >> MSM8939_S4_P2_SHIFT;
-		p2[5] = (cdata[2] & MSM8939_S5_P2_MASK) >> MSM8939_S5_P2_SHIFT;
-		p2[6] = (cdata[2] & MSM8939_S6_P2_MASK) >> MSM8939_S6_P2_SHIFT;
-		p2[7] = (cdata[3] & MSM8939_S7_P2_MASK) >> MSM8939_S7_P2_SHIFT;
-		p2[8] = (cdata[3] & MSM8939_S8_P2_MASK) >> MSM8939_S8_P2_SHIFT;
-		p2[9] = (cdata[4] & MSM8939_S9_P2_MASK_0_4) >> MSM8939_S9_P2_SHIFT_0_4;
-		p2[9] |= ((cdata[5] & MSM8939_S9_P2_MASK_5) >> MSM8939_S9_P2_SHIFT_5) << 5;
-		for (i = 0; i < priv->num_sensors; i++)
-			p2[i] = (base1 + p2[i]) << 2;
-		fallthrough;
-	case ONE_PT_CALIB2:
-		base0 = (cdata[2] & MSM8939_BASE0_MASK) >> MSM8939_BASE0_SHIFT;
-		p1[0] = (cdata[0] & MSM8939_S0_P1_MASK) >> MSM8939_S0_P1_SHIFT;
-		p1[1] = (cdata[0] & MSM8939_S1_P1_MASK) >> MSM8939_S1_P1_SHIFT;
-		p1[2] = (cdata[0] & MSM8939_S2_P1_MASK_0_4) >> MSM8939_S2_P1_SHIFT_0_4;
-		p1[2] |= ((cdata[1] & MSM8939_S2_P1_MASK_5) >> MSM8939_S2_P1_SHIFT_5) << 5;
-		p1[3] = (cdata[1] & MSM8939_S3_P1_MASK) >> MSM8939_S3_P1_SHIFT;
-		p1[4] = (cdata[1] & MSM8939_S4_P1_MASK) >> MSM8939_S4_P1_SHIFT;
-		p1[5] = (cdata[2] & MSM8939_S5_P1_MASK) >> MSM8939_S5_P1_SHIFT;
-		p1[6] = (cdata[2] & MSM8939_S6_P1_MASK) >> MSM8939_S6_P1_SHIFT;
-		p1[7] = (cdata[3] & MSM8939_S7_P1_MASK) >> MSM8939_S7_P1_SHIFT;
-		p1[8] = (cdata[3] & MSM8939_S8_P1_MASK) >> MSM8939_S8_P1_SHIFT;
-		p1[9] = (cdata[4] & MSM8939_S9_P1_MASK) >> MSM8939_S9_P1_SHIFT;
-		for (i = 0; i < priv->num_sensors; i++)
-			p1[i] = ((base0) + p1[i]) << 2;
-		break;
-	default:
-		for (i = 0; i < priv->num_sensors; i++) {
-			p1[i] = 500;
-			p2[i] = 780;
-		}
-		break;
-	}
-
-	compute_intercept_slope(priv, p1, p2, mode);
-	kfree(qfprom_cdata);
-
-	return 0;
-}
-
 static int calibrate_8974(struct tsens_priv *priv)
 {
 	int base1 = 0, base2 = 0, i;
@@ -598,6 +466,12 @@  static const struct reg_field tsens_v0_1_regfields[MAX_REGFIELDS] = {
 	[TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
 };
 
+static const struct tsens_ops ops_v0_1 = {
+	.init		= init_common,
+	.calibrate	= tsens_calibrate_common,
+	.get_temp	= get_temp_common,
+};
+
 static const struct tsens_ops ops_8916 = {
 	.init		= init_common,
 	.calibrate	= calibrate_8916,
@@ -613,15 +487,9 @@  struct tsens_plat_data data_8916 = {
 	.fields	= tsens_v0_1_regfields,
 };
 
-static const struct tsens_ops ops_8939 = {
-	.init		= init_common,
-	.calibrate	= calibrate_8939,
-	.get_temp	= get_temp_common,
-};
-
 struct tsens_plat_data data_8939 = {
 	.num_sensors	= 10,
-	.ops		= &ops_8939,
+	.ops		= &ops_v0_1,
 	.hw_ids		= (unsigned int []){ 0, 1, 2, 3, 5, 6, 7, 8, 9, 10 },
 
 	.feat		= &tsens_v0_1_feat,