Commit 423e84bc728b4c73bfbdefacb011be59a83797e0
Committed by
Stefano Babic
1 parent
995e9fef8f
Exists in
smarc_8mq_lf_v2020.04
and in
17 other branches
imx: cpu: move speed/temp to common cpu
The i.MX7 cpu speed/temp code could be reused on i.MX8M, so move them to common cpu code. Signed-off-by: Peng Fan <peng.fan@nxp.com> Cc: Stefano Babic <sbabic@denx.de> Cc: Fabio Estevam <fabio.estevam@nxp.com> Reviewed-by: Stefano Babic <sbabic@denx.de>
Showing 2 changed files with 73 additions and 71 deletions Side-by-side Diff
arch/arm/mach-imx/cpu.c
... | ... | @@ -333,6 +333,79 @@ |
333 | 333 | } |
334 | 334 | #endif |
335 | 335 | |
336 | +#if defined(CONFIG_MX7) | |
337 | +/* | |
338 | + * OCOTP_TESTER3[9:8] (see Fusemap Description Table offset 0x440) | |
339 | + * defines a 2-bit SPEED_GRADING | |
340 | + */ | |
341 | +#define OCOTP_TESTER3_SPEED_SHIFT 8 | |
342 | +#define OCOTP_TESTER3_SPEED_800MHZ 0 | |
343 | +#define OCOTP_TESTER3_SPEED_500MHZ 1 | |
344 | +#define OCOTP_TESTER3_SPEED_1GHZ 2 | |
345 | +#define OCOTP_TESTER3_SPEED_1P2GHZ 3 | |
346 | + | |
347 | +u32 get_cpu_speed_grade_hz(void) | |
348 | +{ | |
349 | + struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; | |
350 | + struct fuse_bank *bank = &ocotp->bank[1]; | |
351 | + struct fuse_bank1_regs *fuse = | |
352 | + (struct fuse_bank1_regs *)bank->fuse_regs; | |
353 | + uint32_t val; | |
354 | + | |
355 | + val = readl(&fuse->tester3); | |
356 | + val >>= OCOTP_TESTER3_SPEED_SHIFT; | |
357 | + val &= 0x3; | |
358 | + | |
359 | + switch(val) { | |
360 | + case OCOTP_TESTER3_SPEED_800MHZ: | |
361 | + return 800000000; | |
362 | + case OCOTP_TESTER3_SPEED_500MHZ: | |
363 | + return 500000000; | |
364 | + case OCOTP_TESTER3_SPEED_1GHZ: | |
365 | + return 1000000000; | |
366 | + case OCOTP_TESTER3_SPEED_1P2GHZ: | |
367 | + return 1200000000; | |
368 | + } | |
369 | + return 0; | |
370 | +} | |
371 | + | |
372 | +/* | |
373 | + * OCOTP_TESTER3[7:6] (see Fusemap Description Table offset 0x440) | |
374 | + * defines a 2-bit SPEED_GRADING | |
375 | + */ | |
376 | +#define OCOTP_TESTER3_TEMP_SHIFT 6 | |
377 | + | |
378 | +u32 get_cpu_temp_grade(int *minc, int *maxc) | |
379 | +{ | |
380 | + struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; | |
381 | + struct fuse_bank *bank = &ocotp->bank[1]; | |
382 | + struct fuse_bank1_regs *fuse = | |
383 | + (struct fuse_bank1_regs *)bank->fuse_regs; | |
384 | + uint32_t val; | |
385 | + | |
386 | + val = readl(&fuse->tester3); | |
387 | + val >>= OCOTP_TESTER3_TEMP_SHIFT; | |
388 | + val &= 0x3; | |
389 | + | |
390 | + if (minc && maxc) { | |
391 | + if (val == TEMP_AUTOMOTIVE) { | |
392 | + *minc = -40; | |
393 | + *maxc = 125; | |
394 | + } else if (val == TEMP_INDUSTRIAL) { | |
395 | + *minc = -40; | |
396 | + *maxc = 105; | |
397 | + } else if (val == TEMP_EXTCOMMERCIAL) { | |
398 | + *minc = -20; | |
399 | + *maxc = 105; | |
400 | + } else { | |
401 | + *minc = 0; | |
402 | + *maxc = 95; | |
403 | + } | |
404 | + } | |
405 | + return val; | |
406 | +} | |
407 | +#endif | |
408 | + | |
336 | 409 | #ifdef CONFIG_NXP_BOARD_REVISION |
337 | 410 | int nxp_board_rev(void) |
338 | 411 | { |
arch/arm/mach-imx/mx7/soc.c
... | ... | @@ -97,77 +97,6 @@ |
97 | 97 | }; |
98 | 98 | #endif |
99 | 99 | |
100 | -/* | |
101 | - * OCOTP_TESTER3[9:8] (see Fusemap Description Table offset 0x440) | |
102 | - * defines a 2-bit SPEED_GRADING | |
103 | - */ | |
104 | -#define OCOTP_TESTER3_SPEED_SHIFT 8 | |
105 | -#define OCOTP_TESTER3_SPEED_800MHZ 0 | |
106 | -#define OCOTP_TESTER3_SPEED_500MHZ 1 | |
107 | -#define OCOTP_TESTER3_SPEED_1GHZ 2 | |
108 | -#define OCOTP_TESTER3_SPEED_1P2GHZ 3 | |
109 | - | |
110 | -u32 get_cpu_speed_grade_hz(void) | |
111 | -{ | |
112 | - struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; | |
113 | - struct fuse_bank *bank = &ocotp->bank[1]; | |
114 | - struct fuse_bank1_regs *fuse = | |
115 | - (struct fuse_bank1_regs *)bank->fuse_regs; | |
116 | - uint32_t val; | |
117 | - | |
118 | - val = readl(&fuse->tester3); | |
119 | - val >>= OCOTP_TESTER3_SPEED_SHIFT; | |
120 | - val &= 0x3; | |
121 | - | |
122 | - switch(val) { | |
123 | - case OCOTP_TESTER3_SPEED_800MHZ: | |
124 | - return 800000000; | |
125 | - case OCOTP_TESTER3_SPEED_500MHZ: | |
126 | - return 500000000; | |
127 | - case OCOTP_TESTER3_SPEED_1GHZ: | |
128 | - return 1000000000; | |
129 | - case OCOTP_TESTER3_SPEED_1P2GHZ: | |
130 | - return 1200000000; | |
131 | - } | |
132 | - return 0; | |
133 | -} | |
134 | - | |
135 | -/* | |
136 | - * OCOTP_TESTER3[7:6] (see Fusemap Description Table offset 0x440) | |
137 | - * defines a 2-bit SPEED_GRADING | |
138 | - */ | |
139 | -#define OCOTP_TESTER3_TEMP_SHIFT 6 | |
140 | - | |
141 | -u32 get_cpu_temp_grade(int *minc, int *maxc) | |
142 | -{ | |
143 | - struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; | |
144 | - struct fuse_bank *bank = &ocotp->bank[1]; | |
145 | - struct fuse_bank1_regs *fuse = | |
146 | - (struct fuse_bank1_regs *)bank->fuse_regs; | |
147 | - uint32_t val; | |
148 | - | |
149 | - val = readl(&fuse->tester3); | |
150 | - val >>= OCOTP_TESTER3_TEMP_SHIFT; | |
151 | - val &= 0x3; | |
152 | - | |
153 | - if (minc && maxc) { | |
154 | - if (val == TEMP_AUTOMOTIVE) { | |
155 | - *minc = -40; | |
156 | - *maxc = 125; | |
157 | - } else if (val == TEMP_INDUSTRIAL) { | |
158 | - *minc = -40; | |
159 | - *maxc = 105; | |
160 | - } else if (val == TEMP_EXTCOMMERCIAL) { | |
161 | - *minc = -20; | |
162 | - *maxc = 105; | |
163 | - } else { | |
164 | - *minc = 0; | |
165 | - *maxc = 95; | |
166 | - } | |
167 | - } | |
168 | - return val; | |
169 | -} | |
170 | - | |
171 | 100 | static bool is_mx7d(void) |
172 | 101 | { |
173 | 102 | struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; |