diff --git a/drivers/soc/imx/soc-imx8.c b/drivers/soc/imx/soc-imx8.c index 4f773cbedb4a383dfa2912b1676e0bf4b18b2367..bcef07394f89edbb395c74f7511395f7ba8b100c 100644 --- a/drivers/soc/imx/soc-imx8.c +++ b/drivers/soc/imx/soc-imx8.c @@ -350,6 +350,9 @@ device_initcall(imx8_soc_init); #define OCOTP_CFG3_SPEED_1P6GHZ 2 #define OCOTP_CFG3_SPEED_1P2GHZ 1 #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_MASK (0x3 << 6) #define OCOTP_CFG3_CONSUMER 0 @@ -361,7 +364,7 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) { struct device_node *np; void __iomem *base; - u32 val; + u32 val, speed_grading; np = of_find_compatible_node(NULL, NULL, "fsl,imx8mq-ocotp"); if (!np) { @@ -375,6 +378,7 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) goto put_node; } val = readl_relaxed(base + OCOTP_CFG3); + speed_grading = (val >> OCOTP_CFG3_SPEED_GRADING_SHIFT) & 0x3; val >>= OCOTP_CFG3_MKT_SEGMENT_SHIFT; val &= 0x3; @@ -384,12 +388,20 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) pr_warn("failed to disable 800MHz OPP!\n"); if (dev_pm_opp_disable(cpu_dev, 1300000000)) 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; case OCOTP_CFG3_INDUSTRIAL: if (dev_pm_opp_disable(cpu_dev, 1000000000)) pr_warn("failed to disable 1GHz OPP!\n"); if (dev_pm_opp_disable(cpu_dev, 1500000000)) 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; default: /* consumer part for default */ @@ -397,6 +409,10 @@ static void __init imx8mq_opp_check_speed_grading(struct device *cpu_dev) pr_warn("failed to disable 800MHz OPP!\n"); if (dev_pm_opp_disable(cpu_dev, 1300000000)) 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; }