Skip to content
Snippets Groups Projects
Commit 0b42acc8 authored by Jacky Bai's avatar Jacky Bai
Browse files

MLK-20905: soc: imx: Add speed grading fuse check for imx8mq


Add the speeding grading fuse check to limit the highest speed
of cpu. fuse bits value define as below:
    speed_grading bits[1:0]        freq(MHz)
        0x0                          800
        0x1                          1000
        0x2                          1300
        0x3                          1500

Signed-off-by: default avatarJacky Bai <ping.bai@nxp.com>
Reviewed-by: default avatarAnson Huang <Anson.Huang@nxp.com>
parent 89add27a
No related branches found
No related tags found
No related merge requests found
...@@ -350,6 +350,9 @@ device_initcall(imx8_soc_init); ...@@ -350,6 +350,9 @@ device_initcall(imx8_soc_init);
#define OCOTP_CFG3_SPEED_1P6GHZ 2 #define OCOTP_CFG3_SPEED_1P6GHZ 2
#define OCOTP_CFG3_SPEED_1P2GHZ 1 #define OCOTP_CFG3_SPEED_1P2GHZ 1
#define OCOTP_CFG3_SPEED_800MHZ 0 #define OCOTP_CFG3_SPEED_800MHZ 0
#define OCOTP_CFG3_SPEED_1P0GHZ 1
#define OCOTP_CFG3_SPEED_1P3GHZ 2
#define OCOTP_CFG3_SPEED_1P5GHZ 3
#define OCOTP_CFG3_MKT_SEGMENT_SHIFT 6 #define OCOTP_CFG3_MKT_SEGMENT_SHIFT 6
#define OCOTP_CFG3_MKT_SEGMENT_MASK (0x3 << 6) #define OCOTP_CFG3_MKT_SEGMENT_MASK (0x3 << 6)
#define OCOTP_CFG3_CONSUMER 0 #define OCOTP_CFG3_CONSUMER 0
...@@ -361,7 +364,7 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) ...@@ -361,7 +364,7 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev)
{ {
struct device_node *np; struct device_node *np;
void __iomem *base; void __iomem *base;
u32 val; u32 val, speed_grading;
np = of_find_compatible_node(NULL, NULL, "fsl,imx8mq-ocotp"); np = of_find_compatible_node(NULL, NULL, "fsl,imx8mq-ocotp");
if (!np) { if (!np) {
...@@ -375,6 +378,7 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) ...@@ -375,6 +378,7 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev)
goto put_node; goto put_node;
} }
val = readl_relaxed(base + OCOTP_CFG3); val = readl_relaxed(base + OCOTP_CFG3);
speed_grading = (val >> OCOTP_CFG3_SPEED_GRADING_SHIFT) & 0x3;
val >>= OCOTP_CFG3_MKT_SEGMENT_SHIFT; val >>= OCOTP_CFG3_MKT_SEGMENT_SHIFT;
val &= 0x3; val &= 0x3;
...@@ -384,12 +388,20 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) ...@@ -384,12 +388,20 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev)
pr_warn("failed to disable 800MHz OPP!\n"); pr_warn("failed to disable 800MHz OPP!\n");
if (dev_pm_opp_disable(cpu_dev, 1300000000)) if (dev_pm_opp_disable(cpu_dev, 1300000000))
pr_warn("failed to disable 1.3GHz OPP!\n"); pr_warn("failed to disable 1.3GHz OPP!\n");
if (speed_grading != OCOTP_CFG3_SPEED_1P5GHZ) {
if (dev_pm_opp_disable(cpu_dev, 1500000000))
pr_warn("failed to disable 1.5GHz OPP!\n");
}
break; break;
case OCOTP_CFG3_INDUSTRIAL: case OCOTP_CFG3_INDUSTRIAL:
if (dev_pm_opp_disable(cpu_dev, 1000000000)) if (dev_pm_opp_disable(cpu_dev, 1000000000))
pr_warn("failed to disable 1GHz OPP!\n"); pr_warn("failed to disable 1GHz OPP!\n");
if (dev_pm_opp_disable(cpu_dev, 1500000000)) if (dev_pm_opp_disable(cpu_dev, 1500000000))
pr_warn("failed to disable 1.5GHz OPP!\n"); pr_warn("failed to disable 1.5GHz OPP!\n");
if (speed_grading != OCOTP_CFG3_SPEED_1P3GHZ) {
if (dev_pm_opp_disable(cpu_dev, 1300000000))
pr_warn("failed to disable 1.3GHz OPP!\n");
}
break; break;
default: default:
/* consumer part for default */ /* consumer part for default */
...@@ -397,6 +409,10 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) ...@@ -397,6 +409,10 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev)
pr_warn("failed to disable 800MHz OPP!\n"); pr_warn("failed to disable 800MHz OPP!\n");
if (dev_pm_opp_disable(cpu_dev, 1300000000)) if (dev_pm_opp_disable(cpu_dev, 1300000000))
pr_warn("failed to disable 1.3GHz OPP!\n"); pr_warn("failed to disable 1.3GHz OPP!\n");
if (speed_grading != OCOTP_CFG3_SPEED_1P5GHZ) {
if (dev_pm_opp_disable(cpu_dev, 1500000000))
pr_warn("failed to disable 1.5GHz OPP!\n");
}
break; break;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment