]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
cpufreq: imx-cpufreq-dt: Fix no OPPs available on unfused parts
authorLeonard Crestez <leonard.crestez@nxp.com>
Wed, 29 May 2019 11:52:08 +0000 (11:52 +0000)
committerViresh Kumar <viresh.kumar@linaro.org>
Mon, 3 Jun 2019 05:34:13 +0000 (11:04 +0530)
Early samples without fuses written report "0 0" which means consumer
segment and minimum speed grading. According to datasheet the minimum speed
grade is not supported for consumer parts so all OPPs are disabled
which results in stack dumps later on.

Fix by clamping minimum consumer speed grade to 1 on imx8mm and imx8mq.

Fixes: 4d28ba1d62c4 ("cpufreq: Add imx-cpufreq-dt driver")
Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
[ Viresh: s/minumum/minimum/ in patch and log ]
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/imx-cpufreq-dt.c

index e1aa346efa103b75e325e94579ad6e7782e3169e..35b6717d7255e6eed99f4b0c7b9cde61ba2ca558 100644 (file)
@@ -50,6 +50,21 @@ static int imx_cpufreq_dt_probe(struct platform_device *pdev)
 
        speed_grade = (cell_value & OCOTP_CFG3_SPEED_GRADE_MASK) >> OCOTP_CFG3_SPEED_GRADE_SHIFT;
        mkt_segment = (cell_value & OCOTP_CFG3_MKT_SEGMENT_MASK) >> OCOTP_CFG3_MKT_SEGMENT_SHIFT;
+
+       /*
+        * Early samples without fuses written report "0 0" which means
+        * consumer segment and minimum speed grading.
+        *
+        * According to datasheet minimum speed grading is not supported for
+        * consumer parts so clamp to 1 to avoid warning for "no OPPs"
+        *
+        * Applies to 8mq and 8mm.
+        */
+       if (mkt_segment == 0 && speed_grade == 0 && (
+                       !strcmp(match->compatible, "fsl,imx8mm") ||
+                       !strcmp(match->compatible, "fsl,imx8mq")))
+               speed_grade = 1;
+
        supported_hw[0] = BIT(speed_grade);
        supported_hw[1] = BIT(mkt_segment);
        dev_info(&pdev->dev, "cpu speed grade %d mkt segment %d supported-hw %#x %#x\n",