Merge tag 'ktest-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / arch / arm / mach-omap2 / powerdomains3xxx_data.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * OMAP3 powerdomain definitions
4  *
5  * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc.
6  * Copyright (C) 2007-2011 Nokia Corporation
7  *
8  * Paul Walmsley, Jouni Högander
9  */
10
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/bug.h>
14
15 #include "soc.h"
16 #include "powerdomain.h"
17 #include "powerdomains2xxx_3xxx_data.h"
18 #include "prcm-common.h"
19 #include "prm2xxx_3xxx.h"
20 #include "prm-regbits-34xx.h"
21 #include "cm2xxx_3xxx.h"
22 #include "cm-regbits-34xx.h"
23
24 /*
25  * 34XX-specific powerdomains, dependencies
26  */
27
28 /*
29  * Powerdomains
30  */
31
32 static struct powerdomain iva2_pwrdm = {
33         .name             = "iva2_pwrdm",
34         .prcm_offs        = OMAP3430_IVA2_MOD,
35         .pwrsts           = PWRSTS_OFF_RET_ON,
36         .pwrsts_logic_ret = PWRSTS_OFF_RET,
37         .banks            = 4,
38         .pwrsts_mem_ret   = {
39                 [0] = PWRSTS_OFF_RET,
40                 [1] = PWRSTS_OFF_RET,
41                 [2] = PWRSTS_OFF_RET,
42                 [3] = PWRSTS_OFF_RET,
43         },
44         .pwrsts_mem_on    = {
45                 [0] = PWRSTS_ON,
46                 [1] = PWRSTS_ON,
47                 [2] = PWRSTS_OFF_ON,
48                 [3] = PWRSTS_ON,
49         },
50         .voltdm           = { .name = "mpu_iva" },
51 };
52
53 static struct powerdomain mpu_3xxx_pwrdm = {
54         .name             = "mpu_pwrdm",
55         .prcm_offs        = MPU_MOD,
56         .pwrsts           = PWRSTS_OFF_RET_ON,
57         .pwrsts_logic_ret = PWRSTS_OFF_RET,
58         .flags            = PWRDM_HAS_MPU_QUIRK,
59         .banks            = 1,
60         .pwrsts_mem_ret   = {
61                 [0] = PWRSTS_OFF_RET,
62         },
63         .pwrsts_mem_on    = {
64                 [0] = PWRSTS_OFF_ON,
65         },
66         .voltdm           = { .name = "mpu_iva" },
67 };
68
69 static struct powerdomain mpu_am35x_pwrdm = {
70         .name             = "mpu_pwrdm",
71         .prcm_offs        = MPU_MOD,
72         .pwrsts           = PWRSTS_ON,
73         .pwrsts_logic_ret = PWRSTS_ON,
74         .flags            = PWRDM_HAS_MPU_QUIRK,
75         .banks            = 1,
76         .pwrsts_mem_ret   = {
77                 [0] = PWRSTS_ON,
78         },
79         .pwrsts_mem_on    = {
80                 [0] = PWRSTS_ON,
81         },
82         .voltdm           = { .name = "mpu_iva" },
83 };
84
85 /*
86  * The USBTLL Save-and-Restore mechanism is broken on
87  * 3430s up to ES3.0 and 3630ES1.0. Hence this feature
88  * needs to be disabled on these chips.
89  * Refer: 3430 errata ID i459 and 3630 errata ID i579
90  *
91  * Note: setting the SAR flag could help for errata ID i478
92  *  which applies to 3430 <= ES3.1, but since the SAR feature
93  *  is broken, do not use it.
94  */
95 static struct powerdomain core_3xxx_pre_es3_1_pwrdm = {
96         .name             = "core_pwrdm",
97         .prcm_offs        = CORE_MOD,
98         .pwrsts           = PWRSTS_OFF_RET_ON,
99         .pwrsts_logic_ret = PWRSTS_OFF_RET,
100         .banks            = 2,
101         .pwrsts_mem_ret   = {
102                 [0] = PWRSTS_OFF_RET,    /* MEM1RETSTATE */
103                 [1] = PWRSTS_OFF_RET,    /* MEM2RETSTATE */
104         },
105         .pwrsts_mem_on    = {
106                 [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
107                 [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
108         },
109         .voltdm           = { .name = "core" },
110 };
111
112 static struct powerdomain core_3xxx_es3_1_pwrdm = {
113         .name             = "core_pwrdm",
114         .prcm_offs        = CORE_MOD,
115         .pwrsts           = PWRSTS_OFF_RET_ON,
116         .pwrsts_logic_ret = PWRSTS_OFF_RET,
117         /*
118          * Setting the SAR flag for errata ID i478 which applies
119          *  to 3430 <= ES3.1
120          */
121         .flags            = PWRDM_HAS_HDWR_SAR, /* for USBTLL only */
122         .banks            = 2,
123         .pwrsts_mem_ret   = {
124                 [0] = PWRSTS_OFF_RET,    /* MEM1RETSTATE */
125                 [1] = PWRSTS_OFF_RET,    /* MEM2RETSTATE */
126         },
127         .pwrsts_mem_on    = {
128                 [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
129                 [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
130         },
131         .voltdm           = { .name = "core" },
132 };
133
134 static struct powerdomain core_am35x_pwrdm = {
135         .name             = "core_pwrdm",
136         .prcm_offs        = CORE_MOD,
137         .pwrsts           = PWRSTS_ON,
138         .pwrsts_logic_ret = PWRSTS_ON,
139         .banks            = 2,
140         .pwrsts_mem_ret   = {
141                 [0] = PWRSTS_ON,         /* MEM1RETSTATE */
142                 [1] = PWRSTS_ON,         /* MEM2RETSTATE */
143         },
144         .pwrsts_mem_on    = {
145                 [0] = PWRSTS_ON, /* MEM1ONSTATE */
146                 [1] = PWRSTS_ON, /* MEM2ONSTATE */
147         },
148         .voltdm           = { .name = "core" },
149 };
150
151 static struct powerdomain dss_pwrdm = {
152         .name             = "dss_pwrdm",
153         .prcm_offs        = OMAP3430_DSS_MOD,
154         .pwrsts           = PWRSTS_OFF_RET_ON,
155         .pwrsts_logic_ret = PWRSTS_RET,
156         .banks            = 1,
157         .pwrsts_mem_ret   = {
158                 [0] = PWRSTS_RET, /* MEMRETSTATE */
159         },
160         .pwrsts_mem_on    = {
161                 [0] = PWRSTS_ON,  /* MEMONSTATE */
162         },
163         .voltdm           = { .name = "core" },
164 };
165
166 static struct powerdomain dss_am35x_pwrdm = {
167         .name             = "dss_pwrdm",
168         .prcm_offs        = OMAP3430_DSS_MOD,
169         .pwrsts           = PWRSTS_ON,
170         .pwrsts_logic_ret = PWRSTS_ON,
171         .banks            = 1,
172         .pwrsts_mem_ret   = {
173                 [0] = PWRSTS_ON, /* MEMRETSTATE */
174         },
175         .pwrsts_mem_on    = {
176                 [0] = PWRSTS_ON,  /* MEMONSTATE */
177         },
178         .voltdm           = { .name = "core" },
179 };
180
181 /*
182  * Although the 34XX TRM Rev K Table 4-371 notes that retention is a
183  * possible SGX powerstate, the SGX device itself does not support
184  * retention.
185  */
186 static struct powerdomain sgx_pwrdm = {
187         .name             = "sgx_pwrdm",
188         .prcm_offs        = OMAP3430ES2_SGX_MOD,
189         /* XXX This is accurate for 3430 SGX, but what about GFX? */
190         .pwrsts           = PWRSTS_OFF_ON,
191         .pwrsts_logic_ret = PWRSTS_RET,
192         .banks            = 1,
193         .pwrsts_mem_ret   = {
194                 [0] = PWRSTS_RET, /* MEMRETSTATE */
195         },
196         .pwrsts_mem_on    = {
197                 [0] = PWRSTS_ON,  /* MEMONSTATE */
198         },
199         .voltdm           = { .name = "core" },
200 };
201
202 static struct powerdomain sgx_am35x_pwrdm = {
203         .name             = "sgx_pwrdm",
204         .prcm_offs        = OMAP3430ES2_SGX_MOD,
205         .pwrsts           = PWRSTS_ON,
206         .pwrsts_logic_ret = PWRSTS_ON,
207         .banks            = 1,
208         .pwrsts_mem_ret   = {
209                 [0] = PWRSTS_ON, /* MEMRETSTATE */
210         },
211         .pwrsts_mem_on    = {
212                 [0] = PWRSTS_ON,  /* MEMONSTATE */
213         },
214         .voltdm           = { .name = "core" },
215 };
216
217 static struct powerdomain cam_pwrdm = {
218         .name             = "cam_pwrdm",
219         .prcm_offs        = OMAP3430_CAM_MOD,
220         .pwrsts           = PWRSTS_OFF_RET_ON,
221         .pwrsts_logic_ret = PWRSTS_RET,
222         .banks            = 1,
223         .pwrsts_mem_ret   = {
224                 [0] = PWRSTS_RET, /* MEMRETSTATE */
225         },
226         .pwrsts_mem_on    = {
227                 [0] = PWRSTS_ON,  /* MEMONSTATE */
228         },
229         .voltdm           = { .name = "core" },
230 };
231
232 static struct powerdomain per_pwrdm = {
233         .name             = "per_pwrdm",
234         .prcm_offs        = OMAP3430_PER_MOD,
235         .pwrsts           = PWRSTS_OFF_RET_ON,
236         .pwrsts_logic_ret = PWRSTS_OFF_RET,
237         .banks            = 1,
238         .pwrsts_mem_ret   = {
239                 [0] = PWRSTS_RET, /* MEMRETSTATE */
240         },
241         .pwrsts_mem_on    = {
242                 [0] = PWRSTS_ON,  /* MEMONSTATE */
243         },
244         .voltdm           = { .name = "core" },
245 };
246
247 static struct powerdomain per_am35x_pwrdm = {
248         .name             = "per_pwrdm",
249         .prcm_offs        = OMAP3430_PER_MOD,
250         .pwrsts           = PWRSTS_ON,
251         .pwrsts_logic_ret = PWRSTS_ON,
252         .banks            = 1,
253         .pwrsts_mem_ret   = {
254                 [0] = PWRSTS_ON, /* MEMRETSTATE */
255         },
256         .pwrsts_mem_on    = {
257                 [0] = PWRSTS_ON,  /* MEMONSTATE */
258         },
259         .voltdm           = { .name = "core" },
260 };
261
262 static struct powerdomain emu_pwrdm = {
263         .name           = "emu_pwrdm",
264         .prcm_offs      = OMAP3430_EMU_MOD,
265         .voltdm           = { .name = "core" },
266 };
267
268 static struct powerdomain neon_pwrdm = {
269         .name             = "neon_pwrdm",
270         .prcm_offs        = OMAP3430_NEON_MOD,
271         .pwrsts           = PWRSTS_OFF_RET_ON,
272         .pwrsts_logic_ret = PWRSTS_RET,
273         .voltdm           = { .name = "mpu_iva" },
274 };
275
276 static struct powerdomain neon_am35x_pwrdm = {
277         .name             = "neon_pwrdm",
278         .prcm_offs        = OMAP3430_NEON_MOD,
279         .pwrsts           = PWRSTS_ON,
280         .pwrsts_logic_ret = PWRSTS_ON,
281         .voltdm           = { .name = "mpu_iva" },
282 };
283
284 static struct powerdomain usbhost_pwrdm = {
285         .name             = "usbhost_pwrdm",
286         .prcm_offs        = OMAP3430ES2_USBHOST_MOD,
287         .pwrsts           = PWRSTS_OFF_RET_ON,
288         .pwrsts_logic_ret = PWRSTS_RET,
289         /*
290          * REVISIT: Enabling usb host save and restore mechanism seems to
291          * leave the usb host domain permanently in ACTIVE mode after
292          * changing the usb host power domain state from OFF to active once.
293          * Disabling for now.
294          */
295         /*.flags          = PWRDM_HAS_HDWR_SAR,*/ /* for USBHOST ctrlr only */
296         .banks            = 1,
297         .pwrsts_mem_ret   = {
298                 [0] = PWRSTS_RET, /* MEMRETSTATE */
299         },
300         .pwrsts_mem_on    = {
301                 [0] = PWRSTS_ON,  /* MEMONSTATE */
302         },
303         .voltdm           = { .name = "core" },
304 };
305
306 static struct powerdomain dpll1_pwrdm = {
307         .name           = "dpll1_pwrdm",
308         .prcm_offs      = MPU_MOD,
309         .voltdm           = { .name = "mpu_iva" },
310 };
311
312 static struct powerdomain dpll2_pwrdm = {
313         .name           = "dpll2_pwrdm",
314         .prcm_offs      = OMAP3430_IVA2_MOD,
315         .voltdm           = { .name = "mpu_iva" },
316 };
317
318 static struct powerdomain dpll3_pwrdm = {
319         .name           = "dpll3_pwrdm",
320         .prcm_offs      = PLL_MOD,
321         .voltdm           = { .name = "core" },
322 };
323
324 static struct powerdomain dpll4_pwrdm = {
325         .name           = "dpll4_pwrdm",
326         .prcm_offs      = PLL_MOD,
327         .voltdm           = { .name = "core" },
328 };
329
330 static struct powerdomain dpll5_pwrdm = {
331         .name           = "dpll5_pwrdm",
332         .prcm_offs      = PLL_MOD,
333         .voltdm           = { .name = "core" },
334 };
335
336 static struct powerdomain alwon_81xx_pwrdm = {
337         .name             = "alwon_pwrdm",
338         .prcm_offs        = TI81XX_PRM_ALWON_MOD,
339         .pwrsts           = PWRSTS_OFF_ON,
340         .voltdm           = { .name = "core" },
341 };
342
343 static struct powerdomain device_81xx_pwrdm = {
344         .name             = "device_pwrdm",
345         .prcm_offs        = TI81XX_PRM_DEVICE_MOD,
346         .voltdm           = { .name = "core" },
347 };
348
349 static struct powerdomain gem_814x_pwrdm = {
350         .name           = "gem_pwrdm",
351         .prcm_offs      = TI814X_PRM_DSP_MOD,
352         .pwrsts         = PWRSTS_OFF_ON,
353         .voltdm         = { .name = "dsp" },
354 };
355
356 static struct powerdomain ivahd_814x_pwrdm = {
357         .name           = "ivahd_pwrdm",
358         .prcm_offs      = TI814X_PRM_HDVICP_MOD,
359         .pwrsts         = PWRSTS_OFF_ON,
360         .voltdm         = { .name = "iva" },
361 };
362
363 static struct powerdomain hdvpss_814x_pwrdm = {
364         .name           = "hdvpss_pwrdm",
365         .prcm_offs      = TI814X_PRM_HDVPSS_MOD,
366         .pwrsts         = PWRSTS_OFF_ON,
367         .voltdm         = { .name = "dsp" },
368 };
369
370 static struct powerdomain sgx_814x_pwrdm = {
371         .name           = "sgx_pwrdm",
372         .prcm_offs      = TI814X_PRM_GFX_MOD,
373         .pwrsts         = PWRSTS_OFF_ON,
374         .voltdm         = { .name = "core" },
375 };
376
377 static struct powerdomain isp_814x_pwrdm = {
378         .name           = "isp_pwrdm",
379         .prcm_offs      = TI814X_PRM_ISP_MOD,
380         .pwrsts         = PWRSTS_OFF_ON,
381         .voltdm         = { .name = "core" },
382 };
383
384 static struct powerdomain active_81xx_pwrdm = {
385         .name             = "active_pwrdm",
386         .prcm_offs        = TI816X_PRM_ACTIVE_MOD,
387         .pwrsts           = PWRSTS_OFF_ON,
388         .voltdm           = { .name = "core" },
389 };
390
391 static struct powerdomain default_81xx_pwrdm = {
392         .name             = "default_pwrdm",
393         .prcm_offs        = TI81XX_PRM_DEFAULT_MOD,
394         .pwrsts           = PWRSTS_OFF_ON,
395         .voltdm           = { .name = "core" },
396 };
397
398 static struct powerdomain ivahd0_816x_pwrdm = {
399         .name             = "ivahd0_pwrdm",
400         .prcm_offs        = TI816X_PRM_IVAHD0_MOD,
401         .pwrsts           = PWRSTS_OFF_ON,
402         .voltdm           = { .name = "mpu_iva" },
403 };
404
405 static struct powerdomain ivahd1_816x_pwrdm = {
406         .name             = "ivahd1_pwrdm",
407         .prcm_offs        = TI816X_PRM_IVAHD1_MOD,
408         .pwrsts           = PWRSTS_OFF_ON,
409         .voltdm           = { .name = "mpu_iva" },
410 };
411
412 static struct powerdomain ivahd2_816x_pwrdm = {
413         .name             = "ivahd2_pwrdm",
414         .prcm_offs        = TI816X_PRM_IVAHD2_MOD,
415         .pwrsts           = PWRSTS_OFF_ON,
416         .voltdm           = { .name = "mpu_iva" },
417 };
418
419 static struct powerdomain sgx_816x_pwrdm = {
420         .name             = "sgx_pwrdm",
421         .prcm_offs        = TI816X_PRM_SGX_MOD,
422         .pwrsts           = PWRSTS_OFF_ON,
423         .voltdm           = { .name = "core" },
424 };
425
426 /* As powerdomains are added or removed above, this list must also be changed */
427 static struct powerdomain *powerdomains_omap3430_common[] __initdata = {
428         &wkup_omap2_pwrdm,
429         &iva2_pwrdm,
430         &mpu_3xxx_pwrdm,
431         &neon_pwrdm,
432         &cam_pwrdm,
433         &dss_pwrdm,
434         &per_pwrdm,
435         &emu_pwrdm,
436         &dpll1_pwrdm,
437         &dpll2_pwrdm,
438         &dpll3_pwrdm,
439         &dpll4_pwrdm,
440         NULL
441 };
442
443 static struct powerdomain *powerdomains_omap3430es1[] __initdata = {
444         &gfx_omap2_pwrdm,
445         &core_3xxx_pre_es3_1_pwrdm,
446         NULL
447 };
448
449 /* also includes 3630ES1.0 */
450 static struct powerdomain *powerdomains_omap3430es2_es3_0[] __initdata = {
451         &core_3xxx_pre_es3_1_pwrdm,
452         &sgx_pwrdm,
453         &usbhost_pwrdm,
454         &dpll5_pwrdm,
455         NULL
456 };
457
458 /* also includes 3630ES1.1+ */
459 static struct powerdomain *powerdomains_omap3430es3_1plus[] __initdata = {
460         &core_3xxx_es3_1_pwrdm,
461         &sgx_pwrdm,
462         &usbhost_pwrdm,
463         &dpll5_pwrdm,
464         NULL
465 };
466
467 static struct powerdomain *powerdomains_am35x[] __initdata = {
468         &wkup_omap2_pwrdm,
469         &mpu_am35x_pwrdm,
470         &neon_am35x_pwrdm,
471         &core_am35x_pwrdm,
472         &sgx_am35x_pwrdm,
473         &dss_am35x_pwrdm,
474         &per_am35x_pwrdm,
475         &emu_pwrdm,
476         &dpll1_pwrdm,
477         &dpll3_pwrdm,
478         &dpll4_pwrdm,
479         &dpll5_pwrdm,
480         NULL
481 };
482
483 static struct powerdomain *powerdomains_ti814x[] __initdata = {
484         &alwon_81xx_pwrdm,
485         &device_81xx_pwrdm,
486         &active_81xx_pwrdm,
487         &default_81xx_pwrdm,
488         &gem_814x_pwrdm,
489         &ivahd_814x_pwrdm,
490         &hdvpss_814x_pwrdm,
491         &sgx_814x_pwrdm,
492         &isp_814x_pwrdm,
493         NULL
494 };
495
496 static struct powerdomain *powerdomains_ti816x[] __initdata = {
497         &alwon_81xx_pwrdm,
498         &device_81xx_pwrdm,
499         &active_81xx_pwrdm,
500         &default_81xx_pwrdm,
501         &ivahd0_816x_pwrdm,
502         &ivahd1_816x_pwrdm,
503         &ivahd2_816x_pwrdm,
504         &sgx_816x_pwrdm,
505         NULL
506 };
507
508 /* TI81XX specific ops */
509 #define TI81XX_PM_PWSTCTRL                              0x0000
510 #define TI81XX_RM_RSTCTRL                               0x0010
511 #define TI81XX_PM_PWSTST                                0x0004
512
513 static int ti81xx_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
514 {
515         omap2_prm_rmw_mod_reg_bits(OMAP_POWERSTATE_MASK,
516                                    (pwrst << OMAP_POWERSTATE_SHIFT),
517                                    pwrdm->prcm_offs, TI81XX_PM_PWSTCTRL);
518         return 0;
519 }
520
521 static int ti81xx_pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
522 {
523         return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
524                                              TI81XX_PM_PWSTCTRL,
525                                              OMAP_POWERSTATE_MASK);
526 }
527
528 static int ti81xx_pwrdm_read_pwrst(struct powerdomain *pwrdm)
529 {
530         return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
531                 (pwrdm->prcm_offs == TI814X_PRM_GFX_MOD) ? TI81XX_RM_RSTCTRL :
532                                              TI81XX_PM_PWSTST,
533                                              OMAP_POWERSTATEST_MASK);
534 }
535
536 static int ti81xx_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
537 {
538         return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
539                 (pwrdm->prcm_offs == TI814X_PRM_GFX_MOD) ? TI81XX_RM_RSTCTRL :
540                                              TI81XX_PM_PWSTST,
541                                              OMAP3430_LOGICSTATEST_MASK);
542 }
543
544 static int ti81xx_pwrdm_wait_transition(struct powerdomain *pwrdm)
545 {
546         u32 c = 0;
547
548         while ((omap2_prm_read_mod_reg(pwrdm->prcm_offs,
549                 (pwrdm->prcm_offs == TI814X_PRM_GFX_MOD) ? TI81XX_RM_RSTCTRL :
550                                        TI81XX_PM_PWSTST) &
551                 OMAP_INTRANSITION_MASK) &&
552                 (c++ < PWRDM_TRANSITION_BAILOUT))
553                         udelay(1);
554
555         if (c > PWRDM_TRANSITION_BAILOUT) {
556                 pr_err("powerdomain: %s timeout waiting for transition\n",
557                        pwrdm->name);
558                 return -EAGAIN;
559         }
560
561         pr_debug("powerdomain: completed transition in %d loops\n", c);
562
563         return 0;
564 }
565
566 /* For dm814x we need to fix up fix GFX pwstst and rstctrl reg offsets */
567 static struct pwrdm_ops ti81xx_pwrdm_operations = {
568         .pwrdm_set_next_pwrst   = ti81xx_pwrdm_set_next_pwrst,
569         .pwrdm_read_next_pwrst  = ti81xx_pwrdm_read_next_pwrst,
570         .pwrdm_read_pwrst       = ti81xx_pwrdm_read_pwrst,
571         .pwrdm_read_logic_pwrst = ti81xx_pwrdm_read_logic_pwrst,
572         .pwrdm_wait_transition  = ti81xx_pwrdm_wait_transition,
573 };
574
575 void __init omap3xxx_powerdomains_init(void)
576 {
577         unsigned int rev;
578
579         if (!cpu_is_omap34xx() && !cpu_is_ti81xx())
580                 return;
581
582         /* Only 81xx needs custom pwrdm_operations */
583         if (!cpu_is_ti81xx())
584                 pwrdm_register_platform_funcs(&omap3_pwrdm_operations);
585
586         rev = omap_rev();
587
588         if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
589                 pwrdm_register_pwrdms(powerdomains_am35x);
590         } else if (rev == TI8148_REV_ES1_0 || rev == TI8148_REV_ES2_0 ||
591                    rev == TI8148_REV_ES2_1) {
592                 pwrdm_register_platform_funcs(&ti81xx_pwrdm_operations);
593                 pwrdm_register_pwrdms(powerdomains_ti814x);
594         } else if (rev == TI8168_REV_ES1_0 || rev == TI8168_REV_ES1_1
595                         || rev == TI8168_REV_ES2_0 || rev == TI8168_REV_ES2_1) {
596                 pwrdm_register_platform_funcs(&ti81xx_pwrdm_operations);
597                 pwrdm_register_pwrdms(powerdomains_ti816x);
598         } else {
599                 pwrdm_register_pwrdms(powerdomains_omap3430_common);
600
601                 switch (rev) {
602                 case OMAP3430_REV_ES1_0:
603                         pwrdm_register_pwrdms(powerdomains_omap3430es1);
604                         break;
605                 case OMAP3430_REV_ES2_0:
606                 case OMAP3430_REV_ES2_1:
607                 case OMAP3430_REV_ES3_0:
608                 case OMAP3630_REV_ES1_0:
609                         pwrdm_register_pwrdms(powerdomains_omap3430es2_es3_0);
610                         break;
611                 case OMAP3430_REV_ES3_1:
612                 case OMAP3430_REV_ES3_1_2:
613                 case OMAP3630_REV_ES1_1:
614                 case OMAP3630_REV_ES1_2:
615                         pwrdm_register_pwrdms(powerdomains_omap3430es3_1plus);
616                         break;
617                 default:
618                         WARN(1, "OMAP3 powerdomain init: unknown chip type\n");
619                 }
620         }
621
622         pwrdm_complete_init();
623 }