Home | History | Annotate | Download | only in omap5
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  *
      4  * HW data initialization for OMAP5
      5  *
      6  * (C) Copyright 2013
      7  * Texas Instruments, <www.ti.com>
      8  *
      9  * Sricharan R <r.sricharan (at) ti.com>
     10  */
     11 #include <common.h>
     12 #include <palmas.h>
     13 #include <asm/arch/omap.h>
     14 #include <asm/arch/sys_proto.h>
     15 #include <asm/omap_common.h>
     16 #include <asm/arch/clock.h>
     17 #include <asm/omap_gpio.h>
     18 #include <asm/io.h>
     19 #include <asm/emif.h>
     20 
     21 struct prcm_regs const **prcm =
     22 			(struct prcm_regs const **) OMAP_SRAM_SCRATCH_PRCM_PTR;
     23 struct dplls const **dplls_data =
     24 			(struct dplls const **) OMAP_SRAM_SCRATCH_DPLLS_PTR;
     25 struct vcores_data const **omap_vcores =
     26 		(struct vcores_data const **) OMAP_SRAM_SCRATCH_VCORES_PTR;
     27 struct omap_sys_ctrl_regs const **ctrl =
     28 	(struct omap_sys_ctrl_regs const **)OMAP_SRAM_SCRATCH_SYS_CTRL;
     29 
     30 /* OPP NOM FREQUENCY for ES1.0 */
     31 static const struct dpll_params mpu_dpll_params_800mhz[NUM_SYS_CLKS] = {
     32 	{200, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 12 MHz   */
     33 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 13 MHz   */
     34 	{1000, 20, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 16.8 MHz */
     35 	{375, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 19.2 MHz */
     36 	{400, 12, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 26 MHz   */
     37 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
     38 	{375, 17, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}	/* 38.4 MHz */
     39 };
     40 
     41 /* OPP NOM FREQUENCY for OMAP5 ES2.0, and DRA7 ES1.0 */
     42 static const struct dpll_params mpu_dpll_params_1ghz[NUM_SYS_CLKS] = {
     43 	{250, 2, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 12 MHz   */
     44 	{500, 9, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 20 MHz   */
     45 	{119, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 16.8 MHz */
     46 	{625, 11, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 19.2 MHz */
     47 	{500, 12, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 26 MHz   */
     48 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
     49 	{625, 23, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 38.4 MHz */
     50 };
     51 
     52 static const struct dpll_params
     53 			core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = {
     54 	{266, 2, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},		/* 12 MHz   */
     55 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 13 MHz   */
     56 	{443, 6, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},		/* 16.8 MHz */
     57 	{277, 4, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},		/* 19.2 MHz */
     58 	{368, 8, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},		/* 26 MHz   */
     59 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
     60 	{277, 9, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}		/* 38.4 MHz */
     61 };
     62 
     63 static const struct dpll_params
     64 			core_dpll_params_2128mhz_ddr532_es2[NUM_SYS_CLKS] = {
     65 	{266, 2, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},		/* 12 MHz   */
     66 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 13 MHz   */
     67 	{443, 6, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},		/* 16.8 MHz */
     68 	{277, 4, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},		/* 19.2 MHz */
     69 	{368, 8, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},		/* 26 MHz   */
     70 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
     71 	{277, 9, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}		/* 38.4 MHz */
     72 };
     73 
     74 static const struct dpll_params
     75 		core_dpll_params_2128mhz_dra7xx[NUM_SYS_CLKS] = {
     76 	{266, 2, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},		/* 12 MHz   */
     77 	{266, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},		/* 20 MHz   */
     78 	{443, 6, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},		/* 16.8 MHz */
     79 	{277, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},		/* 19.2 MHz */
     80 	{368, 8, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},		/* 26 MHz   */
     81 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
     82 	{277, 9, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},		/* 38.4 MHz */
     83 };
     84 
     85 static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
     86 	{32, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},		/* 12 MHz   */
     87 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 13 MHz   */
     88 	{160, 6, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},		/* 16.8 MHz */
     89 	{20, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},		/* 19.2 MHz */
     90 	{192, 12, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},		/* 26 MHz   */
     91 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
     92 	{10, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}		/* 38.4 MHz */
     93 };
     94 
     95 static const struct dpll_params per_dpll_params_768mhz_es2[NUM_SYS_CLKS] = {
     96 	{32, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},		/* 12 MHz   */
     97 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 13 MHz   */
     98 	{160, 6, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},		/* 16.8 MHz */
     99 	{20, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},		/* 19.2 MHz */
    100 	{192, 12, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},		/* 26 MHz   */
    101 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    102 	{10, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}		/* 38.4 MHz */
    103 };
    104 
    105 static const struct dpll_params per_dpll_params_768mhz_dra7xx[NUM_SYS_CLKS] = {
    106 	{32, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},		/* 12 MHz   */
    107 	{96, 4, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1},		/* 20 MHz   */
    108 	{160, 6, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},		/* 16.8 MHz */
    109 	{20, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},		/* 19.2 MHz */
    110 	{192, 12, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},		/* 26 MHz   */
    111 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    112 	{10, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},		/* 38.4 MHz */
    113 };
    114 
    115 static const struct dpll_params per_dpll_params_768mhz_dra76x[NUM_SYS_CLKS] = {
    116 	{32, 0, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},		/* 12 MHz   */
    117 	{96, 4, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},		/* 20 MHz   */
    118 	{160, 6, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},		/* 16.8 MHz */
    119 	{20, 0, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},		/* 19.2 MHz */
    120 	{192, 12, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},		/* 26 MHz   */
    121 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    122 	{10, 0, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},		/* 38.4 MHz */
    123 };
    124 
    125 static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = {
    126 	{1165, 11, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},	/* 12 MHz   */
    127 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 13 MHz   */
    128 	{208, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},		/* 16.8 MHz */
    129 	{182, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},		/* 19.2 MHz */
    130 	{224, 4, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},		/* 26 MHz   */
    131 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    132 	{91, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}		/* 38.4 MHz */
    133 };
    134 
    135 static const struct dpll_params iva_dpll_params_2330mhz_dra7xx[NUM_SYS_CLKS] = {
    136 	{1165, 11, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 12 MHz   */
    137 	{233, 3, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 20 MHz */
    138 	{208, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 16.8 MHz */
    139 	{182, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 19.2 MHz */
    140 	{224, 4, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 26 MHz   */
    141 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    142 	{91, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 38.4 MHz */
    143 };
    144 
    145 /* ABE M & N values with sys_clk as source */
    146 #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
    147 static const struct dpll_params
    148 		abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = {
    149 	{49, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 12 MHz   */
    150 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 13 MHz   */
    151 	{35, 5, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 16.8 MHz */
    152 	{46, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 19.2 MHz */
    153 	{34, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 26 MHz   */
    154 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    155 	{64, 24, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}		/* 38.4 MHz */
    156 };
    157 #endif
    158 
    159 /* ABE M & N values with 32K clock as source */
    160 #ifndef CONFIG_SYS_OMAP_ABE_SYSCK
    161 static const struct dpll_params abe_dpll_params_32k_196608khz = {
    162 	750, 0, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1
    163 };
    164 #endif
    165 
    166 /* ABE M & N values with sysclk2(22.5792 MHz) as input */
    167 static const struct dpll_params
    168 		abe_dpll_params_sysclk2_361267khz[NUM_SYS_CLKS] = {
    169 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 12 MHz   */
    170 	{16, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},		/* 20 MHz   */
    171 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 16.8 MHz */
    172 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 19.2 MHz */
    173 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 26 MHz   */
    174 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    175 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 38.4 MHz */
    176 };
    177 
    178 static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
    179 	{400, 4, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 12 MHz   */
    180 	{480, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 20 MHz   */
    181 	{400, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 16.8 MHz */
    182 	{400, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 19.2 MHz */
    183 	{480, 12, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 26 MHz   */
    184 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    185 	{400, 15, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 38.4 MHz */
    186 };
    187 
    188 static const struct dpll_params ddr_dpll_params_2664mhz[NUM_SYS_CLKS] = {
    189 	{111, 0, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 12 MHz   */
    190 	{333, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 20 MHz   */
    191 	{555, 6, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 16.8 MHz */
    192 	{555, 7, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 19.2 MHz */
    193 	{666, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 26 MHz   */
    194 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    195 	{555, 15, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 38.4 MHz */
    196 };
    197 
    198 static const struct dpll_params ddr_dpll_params_2128mhz[NUM_SYS_CLKS] = {
    199 	{266, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 12 MHz   */
    200 	{266, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 20 MHz   */
    201 	{190, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 16.8 MHz */
    202 	{665, 11, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 19.2 MHz */
    203 	{532, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 26 MHz   */
    204 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    205 	{665, 23, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},		/* 38.4 MHz */
    206 };
    207 
    208 static const struct dpll_params gmac_dpll_params_2000mhz[NUM_SYS_CLKS] = {
    209 	{250, 2, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},		/* 12 MHz   */
    210 	{250, 4, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},		/* 20 MHz   */
    211 	{119, 1, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},		/* 16.8 MHz */
    212 	{625, 11, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},	/* 19.2 MHz */
    213 	{500, 12, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},	/* 26 MHz   */
    214 	{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 27 MHz   */
    215 	{625, 23, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},	/* 38.4 MHz */
    216 };
    217 
    218 struct dplls omap5_dplls_es1 = {
    219 	.mpu = mpu_dpll_params_800mhz,
    220 	.core = core_dpll_params_2128mhz_ddr532,
    221 	.per = per_dpll_params_768mhz,
    222 	.iva = iva_dpll_params_2330mhz,
    223 #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
    224 	.abe = abe_dpll_params_sysclk_196608khz,
    225 #else
    226 	.abe = &abe_dpll_params_32k_196608khz,
    227 #endif
    228 	.usb = usb_dpll_params_1920mhz,
    229 	.ddr = NULL
    230 };
    231 
    232 struct dplls omap5_dplls_es2 = {
    233 	.mpu = mpu_dpll_params_1ghz,
    234 	.core = core_dpll_params_2128mhz_ddr532_es2,
    235 	.per = per_dpll_params_768mhz_es2,
    236 	.iva = iva_dpll_params_2330mhz,
    237 #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
    238 	.abe = abe_dpll_params_sysclk_196608khz,
    239 #else
    240 	.abe = &abe_dpll_params_32k_196608khz,
    241 #endif
    242 	.usb = usb_dpll_params_1920mhz,
    243 	.ddr = NULL
    244 };
    245 
    246 struct dplls dra76x_dplls = {
    247 	.mpu = mpu_dpll_params_1ghz,
    248 	.core = core_dpll_params_2128mhz_dra7xx,
    249 	.per = per_dpll_params_768mhz_dra76x,
    250 	.abe = abe_dpll_params_sysclk2_361267khz,
    251 	.iva = iva_dpll_params_2330mhz_dra7xx,
    252 	.usb = usb_dpll_params_1920mhz,
    253 	.ddr =	ddr_dpll_params_2664mhz,
    254 	.gmac = gmac_dpll_params_2000mhz,
    255 };
    256 
    257 struct dplls dra7xx_dplls = {
    258 	.mpu = mpu_dpll_params_1ghz,
    259 	.core = core_dpll_params_2128mhz_dra7xx,
    260 	.per = per_dpll_params_768mhz_dra7xx,
    261 	.abe = abe_dpll_params_sysclk2_361267khz,
    262 	.iva = iva_dpll_params_2330mhz_dra7xx,
    263 	.usb = usb_dpll_params_1920mhz,
    264 	.ddr = ddr_dpll_params_2128mhz,
    265 	.gmac = gmac_dpll_params_2000mhz,
    266 };
    267 
    268 struct dplls dra72x_dplls = {
    269 	.mpu = mpu_dpll_params_1ghz,
    270 	.core = core_dpll_params_2128mhz_dra7xx,
    271 	.per = per_dpll_params_768mhz_dra7xx,
    272 	.abe = abe_dpll_params_sysclk2_361267khz,
    273 	.iva = iva_dpll_params_2330mhz_dra7xx,
    274 	.usb = usb_dpll_params_1920mhz,
    275 	.ddr =	ddr_dpll_params_2664mhz,
    276 	.gmac = gmac_dpll_params_2000mhz,
    277 };
    278 
    279 struct pmic_data palmas = {
    280 	.base_offset = PALMAS_SMPS_BASE_VOLT_UV,
    281 	.step = 10000, /* 10 mV represented in uV */
    282 	/*
    283 	 * Offset codes 1-6 all give the base voltage in Palmas
    284 	 * Offset code 0 switches OFF the SMPS
    285 	 */
    286 	.start_code = 6,
    287 	.i2c_slave_addr	= SMPS_I2C_SLAVE_ADDR,
    288 	.pmic_bus_init	= sri2c_init,
    289 	.pmic_write	= omap_vc_bypass_send_value,
    290 	.gpio_en = 0,
    291 };
    292 
    293 /* The TPS659038 and TPS65917 are software-compatible, use common struct */
    294 struct pmic_data tps659038 = {
    295 	.base_offset = PALMAS_SMPS_BASE_VOLT_UV,
    296 	.step = 10000, /* 10 mV represented in uV */
    297 	/*
    298 	 * Offset codes 1-6 all give the base voltage in Palmas
    299 	 * Offset code 0 switches OFF the SMPS
    300 	 */
    301 	.start_code = 6,
    302 	.i2c_slave_addr	= TPS659038_I2C_SLAVE_ADDR,
    303 	.pmic_bus_init	= gpi2c_init,
    304 	.pmic_write	= palmas_i2c_write_u8,
    305 	.gpio_en = 0,
    306 };
    307 
    308 /* The LP87565*/
    309 struct pmic_data lp87565 = {
    310 	.base_offset = LP873X_BUCK_BASE_VOLT_UV,
    311 	.step = 5000, /* 5 mV represented in uV */
    312 	/*
    313 	 * Offset codes 0 - 0x13 Invalid.
    314 	 * Offset codes 0x14 0x17 give 10mV steps
    315 	 * Offset codes 0x17 through 0x9D give 5mV steps
    316 	 * So let us start with our operating range from .73V
    317 	 */
    318 	.start_code = 0x17,
    319 	.i2c_slave_addr = 0x60,
    320 	.pmic_bus_init  = gpi2c_init,
    321 	.pmic_write     = palmas_i2c_write_u8,
    322 };
    323 
    324 /* The LP8732 and LP8733 are software-compatible, use common struct */
    325 struct pmic_data lp8733 = {
    326 	.base_offset = LP873X_BUCK_BASE_VOLT_UV,
    327 	.step = 5000, /* 5 mV represented in uV */
    328 	/*
    329 	 * Offset codes 0 - 0x13 Invalid.
    330 	 * Offset codes 0x14 0x17 give 10mV steps
    331 	 * Offset codes 0x17 through 0x9D give 5mV steps
    332 	 * So let us start with our operating range from .73V
    333 	 */
    334 	.start_code = 0x17,
    335 	.i2c_slave_addr = 0x60,
    336 	.pmic_bus_init  = gpi2c_init,
    337 	.pmic_write     = palmas_i2c_write_u8,
    338 };
    339 
    340 struct vcores_data omap5430_volts = {
    341 	.mpu.value[OPP_NOM] = VDD_MPU,
    342 	.mpu.addr = SMPS_REG_ADDR_12_MPU,
    343 	.mpu.pmic = &palmas,
    344 
    345 	.core.value[OPP_NOM] = VDD_CORE,
    346 	.core.addr = SMPS_REG_ADDR_8_CORE,
    347 	.core.pmic = &palmas,
    348 
    349 	.mm.value[OPP_NOM] = VDD_MM,
    350 	.mm.addr = SMPS_REG_ADDR_45_IVA,
    351 	.mm.pmic = &palmas,
    352 };
    353 
    354 struct vcores_data omap5430_volts_es2 = {
    355 	.mpu.value[OPP_NOM] = VDD_MPU_ES2,
    356 	.mpu.addr = SMPS_REG_ADDR_12_MPU,
    357 	.mpu.pmic = &palmas,
    358 	.mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
    359 
    360 	.core.value[OPP_NOM] = VDD_CORE_ES2,
    361 	.core.addr = SMPS_REG_ADDR_8_CORE,
    362 	.core.pmic = &palmas,
    363 
    364 	.mm.value[OPP_NOM] = VDD_MM_ES2,
    365 	.mm.addr = SMPS_REG_ADDR_45_IVA,
    366 	.mm.pmic = &palmas,
    367 	.mm.abb_tx_done_mask = OMAP_ABB_MM_TXDONE_MASK,
    368 
    369 	.mpu.efuse.reg[OPP_NOM]	= OMAP5_ES2_PROD_MPU_OPNO_VMIN,
    370 	.mpu.efuse.reg_bits	= OMAP5_ES2_PROD_REGBITS,
    371 
    372 	.core.efuse.reg[OPP_NOM] = OMAP5_ES2_PROD_CORE_OPNO_VMIN,
    373 	.core.efuse.reg_bits	= OMAP5_ES2_PROD_REGBITS,
    374 
    375 	.mm.efuse.reg[OPP_NOM]	= OMAP5_ES2_PROD_MM_OPNO_VMIN,
    376 	.mm.efuse.reg_bits	= OMAP5_ES2_PROD_REGBITS,
    377 };
    378 
    379 /*
    380  * Enable essential clock domains, modules and
    381  * do some additional special settings needed
    382  */
    383 void enable_basic_clocks(void)
    384 {
    385 	u32 const clk_domains_essential[] = {
    386 		(*prcm)->cm_l4per_clkstctrl,
    387 		(*prcm)->cm_l3init_clkstctrl,
    388 		(*prcm)->cm_memif_clkstctrl,
    389 		(*prcm)->cm_l4cfg_clkstctrl,
    390 #ifdef CONFIG_DRIVER_TI_CPSW
    391 		(*prcm)->cm_gmac_clkstctrl,
    392 #endif
    393 		0
    394 	};
    395 
    396 	u32 const clk_modules_hw_auto_essential[] = {
    397 		(*prcm)->cm_l3_gpmc_clkctrl,
    398 		(*prcm)->cm_memif_emif_1_clkctrl,
    399 		(*prcm)->cm_memif_emif_2_clkctrl,
    400 		(*prcm)->cm_l4cfg_l4_cfg_clkctrl,
    401 		(*prcm)->cm_wkup_gpio1_clkctrl,
    402 		(*prcm)->cm_l4per_gpio2_clkctrl,
    403 		(*prcm)->cm_l4per_gpio3_clkctrl,
    404 		(*prcm)->cm_l4per_gpio4_clkctrl,
    405 		(*prcm)->cm_l4per_gpio5_clkctrl,
    406 		(*prcm)->cm_l4per_gpio6_clkctrl,
    407 		(*prcm)->cm_l4per_gpio7_clkctrl,
    408 		(*prcm)->cm_l4per_gpio8_clkctrl,
    409 #ifdef CONFIG_SCSI_AHCI_PLAT
    410 		(*prcm)->cm_l3init_ocp2scp3_clkctrl,
    411 #endif
    412 		0
    413 	};
    414 
    415 	u32 const clk_modules_explicit_en_essential[] = {
    416 		(*prcm)->cm_wkup_gptimer1_clkctrl,
    417 		(*prcm)->cm_l3init_hsmmc1_clkctrl,
    418 		(*prcm)->cm_l3init_hsmmc2_clkctrl,
    419 		(*prcm)->cm_l4per_gptimer2_clkctrl,
    420 		(*prcm)->cm_wkup_wdtimer2_clkctrl,
    421 		(*prcm)->cm_l4per_uart3_clkctrl,
    422 		(*prcm)->cm_l4per_i2c1_clkctrl,
    423 #ifdef CONFIG_DRIVER_TI_CPSW
    424 		(*prcm)->cm_gmac_gmac_clkctrl,
    425 #endif
    426 
    427 #ifdef CONFIG_TI_QSPI
    428 		(*prcm)->cm_l4per_qspi_clkctrl,
    429 #endif
    430 #ifdef CONFIG_SCSI_AHCI_PLAT
    431 		(*prcm)->cm_l3init_sata_clkctrl,
    432 #endif
    433 		0
    434 	};
    435 
    436 	/* Enable optional additional functional clock for GPIO4 */
    437 	setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl,
    438 			GPIO4_CLKCTRL_OPTFCLKEN_MASK);
    439 
    440 	/* Enable 192 MHz clock for MMC1 & MMC2 */
    441 	setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
    442 			HSMMC_CLKCTRL_CLKSEL_MASK);
    443 	setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
    444 			HSMMC_CLKCTRL_CLKSEL_MASK);
    445 
    446 	/* Set the correct clock dividers for mmc */
    447 	clrbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
    448 		     HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
    449 	clrbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
    450 		     HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
    451 
    452 	/* Select 32KHz clock as the source of GPTIMER1 */
    453 	setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl,
    454 			GPTIMER1_CLKCTRL_CLKSEL_MASK);
    455 
    456 	do_enable_clocks(clk_domains_essential,
    457 			 clk_modules_hw_auto_essential,
    458 			 clk_modules_explicit_en_essential,
    459 			 1);
    460 
    461 #ifdef CONFIG_TI_QSPI
    462 	setbits_le32((*prcm)->cm_l4per_qspi_clkctrl, (1<<24));
    463 #endif
    464 
    465 #ifdef CONFIG_SCSI_AHCI_PLAT
    466 	/* Enable optional functional clock for SATA */
    467 	setbits_le32((*prcm)->cm_l3init_sata_clkctrl,
    468 		     SATA_CLKCTRL_OPTFCLKEN_MASK);
    469 #endif
    470 
    471 	/* Enable SCRM OPT clocks for PER and CORE dpll */
    472 	setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
    473 			OPTFCLKEN_SCRM_PER_MASK);
    474 	setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
    475 			OPTFCLKEN_SCRM_CORE_MASK);
    476 }
    477 
    478 void enable_basic_uboot_clocks(void)
    479 {
    480 	u32 const clk_domains_essential[] = {
    481 #if defined(CONFIG_DRA7XX)
    482 		(*prcm)->cm_ipu_clkstctrl,
    483 #endif
    484 		0
    485 	};
    486 
    487 	u32 const clk_modules_hw_auto_essential[] = {
    488 		(*prcm)->cm_l3init_hsusbtll_clkctrl,
    489 		0
    490 	};
    491 
    492 	u32 const clk_modules_explicit_en_essential[] = {
    493 		(*prcm)->cm_l4per_mcspi1_clkctrl,
    494 		(*prcm)->cm_l4per_i2c2_clkctrl,
    495 		(*prcm)->cm_l4per_i2c3_clkctrl,
    496 		(*prcm)->cm_l4per_i2c4_clkctrl,
    497 #if defined(CONFIG_DRA7XX)
    498 		(*prcm)->cm_ipu_i2c5_clkctrl,
    499 #else
    500 		(*prcm)->cm_l4per_i2c5_clkctrl,
    501 #endif
    502 		(*prcm)->cm_l3init_hsusbhost_clkctrl,
    503 		(*prcm)->cm_l3init_fsusb_clkctrl,
    504 		0
    505 	};
    506 	do_enable_clocks(clk_domains_essential,
    507 			 clk_modules_hw_auto_essential,
    508 			 clk_modules_explicit_en_essential,
    509 			 1);
    510 }
    511 
    512 #ifdef CONFIG_TI_EDMA3
    513 void enable_edma3_clocks(void)
    514 {
    515 	u32 const clk_domains_edma3[] = {
    516 		0
    517 	};
    518 
    519 	u32 const clk_modules_hw_auto_edma3[] = {
    520 		(*prcm)->cm_l3main1_tptc1_clkctrl,
    521 		(*prcm)->cm_l3main1_tptc2_clkctrl,
    522 		0
    523 	};
    524 
    525 	u32 const clk_modules_explicit_en_edma3[] = {
    526 		0
    527 	};
    528 
    529 	do_enable_clocks(clk_domains_edma3,
    530 			 clk_modules_hw_auto_edma3,
    531 			 clk_modules_explicit_en_edma3,
    532 			 1);
    533 }
    534 
    535 void disable_edma3_clocks(void)
    536 {
    537 	u32 const clk_domains_edma3[] = {
    538 		0
    539 	};
    540 
    541 	u32 const clk_modules_disable_edma3[] = {
    542 		(*prcm)->cm_l3main1_tptc1_clkctrl,
    543 		(*prcm)->cm_l3main1_tptc2_clkctrl,
    544 		0
    545 	};
    546 
    547 	do_disable_clocks(clk_domains_edma3,
    548 			  clk_modules_disable_edma3,
    549 			  1);
    550 }
    551 #endif
    552 
    553 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP)
    554 void enable_usb_clocks(int index)
    555 {
    556 	u32 cm_l3init_usb_otg_ss_clkctrl = 0;
    557 
    558 	if (index == 0) {
    559 		cm_l3init_usb_otg_ss_clkctrl =
    560 			(*prcm)->cm_l3init_usb_otg_ss1_clkctrl;
    561 		/* Enable 960 MHz clock for dwc3 */
    562 		setbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl,
    563 			     OPTFCLKEN_REFCLK960M);
    564 
    565 		/* Enable 32 KHz clock for USB_PHY1 */
    566 		setbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl,
    567 			     USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
    568 
    569 		/* Enable 32 KHz clock for USB_PHY3 */
    570 		if (is_dra7xx())
    571 			setbits_le32((*prcm)->cm_coreaon_usb_phy3_core_clkctrl,
    572 				     USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
    573 	} else if (index == 1) {
    574 		cm_l3init_usb_otg_ss_clkctrl =
    575 			(*prcm)->cm_l3init_usb_otg_ss2_clkctrl;
    576 		/* Enable 960 MHz clock for dwc3 */
    577 		setbits_le32((*prcm)->cm_l3init_usb_otg_ss2_clkctrl,
    578 			     OPTFCLKEN_REFCLK960M);
    579 
    580 		/* Enable 32 KHz clock for dwc3 */
    581 		setbits_le32((*prcm)->cm_coreaon_usb_phy2_core_clkctrl,
    582 			     USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
    583 
    584 		/* Enable 60 MHz clock for USB2PHY2 */
    585 		setbits_le32((*prcm)->cm_coreaon_l3init_60m_gfclk_clkctrl,
    586 			     L3INIT_CLKCTRL_OPTFCLKEN_60M_GFCLK);
    587 	}
    588 
    589 	u32 const clk_domains_usb[] = {
    590 		0
    591 	};
    592 
    593 	u32 const clk_modules_hw_auto_usb[] = {
    594 		(*prcm)->cm_l3init_ocp2scp1_clkctrl,
    595 		cm_l3init_usb_otg_ss_clkctrl,
    596 		0
    597 	};
    598 
    599 	u32 const clk_modules_explicit_en_usb[] = {
    600 		0
    601 	};
    602 
    603 	do_enable_clocks(clk_domains_usb,
    604 			 clk_modules_hw_auto_usb,
    605 			 clk_modules_explicit_en_usb,
    606 			 1);
    607 }
    608 
    609 void disable_usb_clocks(int index)
    610 {
    611 	u32 cm_l3init_usb_otg_ss_clkctrl = 0;
    612 
    613 	if (index == 0) {
    614 		cm_l3init_usb_otg_ss_clkctrl =
    615 			(*prcm)->cm_l3init_usb_otg_ss1_clkctrl;
    616 		/* Disable 960 MHz clock for dwc3 */
    617 		clrbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl,
    618 			     OPTFCLKEN_REFCLK960M);
    619 
    620 		/* Disable 32 KHz clock for USB_PHY1 */
    621 		clrbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl,
    622 			     USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
    623 
    624 		/* Disable 32 KHz clock for USB_PHY3 */
    625 		if (is_dra7xx())
    626 			clrbits_le32((*prcm)->cm_coreaon_usb_phy3_core_clkctrl,
    627 				     USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
    628 	} else if (index == 1) {
    629 		cm_l3init_usb_otg_ss_clkctrl =
    630 			(*prcm)->cm_l3init_usb_otg_ss2_clkctrl;
    631 		/* Disable 960 MHz clock for dwc3 */
    632 		clrbits_le32((*prcm)->cm_l3init_usb_otg_ss2_clkctrl,
    633 			     OPTFCLKEN_REFCLK960M);
    634 
    635 		/* Disable 32 KHz clock for dwc3 */
    636 		clrbits_le32((*prcm)->cm_coreaon_usb_phy2_core_clkctrl,
    637 			     USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
    638 
    639 		/* Disable 60 MHz clock for USB2PHY2 */
    640 		clrbits_le32((*prcm)->cm_coreaon_l3init_60m_gfclk_clkctrl,
    641 			     L3INIT_CLKCTRL_OPTFCLKEN_60M_GFCLK);
    642 	}
    643 
    644 	u32 const clk_domains_usb[] = {
    645 		0
    646 	};
    647 
    648 	u32 const clk_modules_disable[] = {
    649 		(*prcm)->cm_l3init_ocp2scp1_clkctrl,
    650 		cm_l3init_usb_otg_ss_clkctrl,
    651 		0
    652 	};
    653 
    654 	do_disable_clocks(clk_domains_usb,
    655 			  clk_modules_disable,
    656 			  1);
    657 }
    658 #endif
    659 
    660 const struct ctrl_ioregs ioregs_omap5430 = {
    661 	.ctrl_ddrch = DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
    662 	.ctrl_lpddr2ch = DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN,
    663 	.ctrl_ddrio_0 = DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL,
    664 	.ctrl_ddrio_1 = DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL,
    665 	.ctrl_ddrio_2 = DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL,
    666 };
    667 
    668 const struct ctrl_ioregs ioregs_omap5432_es1 = {
    669 	.ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL,
    670 	.ctrl_lpddr2ch = 0x0,
    671 	.ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL,
    672 	.ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE,
    673 	.ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE,
    674 	.ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE,
    675 	.ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
    676 	.ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
    677 };
    678 
    679 const struct ctrl_ioregs ioregs_omap5432_es2 = {
    680 	.ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
    681 	.ctrl_lpddr2ch = 0x0,
    682 	.ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
    683 	.ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE_ES2,
    684 	.ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE_ES2,
    685 	.ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE_ES2,
    686 	.ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
    687 	.ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
    688 };
    689 
    690 const struct ctrl_ioregs ioregs_dra7xx_es1 = {
    691 	.ctrl_ddrch = 0x40404040,
    692 	.ctrl_lpddr2ch = 0x40404040,
    693 	.ctrl_ddr3ch = 0x80808080,
    694 	.ctrl_ddrio_0 = 0x00094A40,
    695 	.ctrl_ddrio_1 = 0x04A52000,
    696 	.ctrl_ddrio_2 = 0x84210000,
    697 	.ctrl_emif_sdram_config_ext = 0x0001C1A7,
    698 	.ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
    699 	.ctrl_ddr_ctrl_ext_0 = 0xA2000000,
    700 };
    701 
    702 const struct ctrl_ioregs ioregs_dra72x_es1 = {
    703 	.ctrl_ddrch = 0x40404040,
    704 	.ctrl_lpddr2ch = 0x40404040,
    705 	.ctrl_ddr3ch = 0x60606080,
    706 	.ctrl_ddrio_0 = 0x00094A40,
    707 	.ctrl_ddrio_1 = 0x04A52000,
    708 	.ctrl_ddrio_2 = 0x84210000,
    709 	.ctrl_emif_sdram_config_ext = 0x0001C1A7,
    710 	.ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
    711 	.ctrl_ddr_ctrl_ext_0 = 0xA2000000,
    712 };
    713 
    714 const struct ctrl_ioregs ioregs_dra72x_es2 = {
    715 	.ctrl_ddrch = 0x40404040,
    716 	.ctrl_lpddr2ch = 0x40404040,
    717 	.ctrl_ddr3ch = 0x60606060,
    718 	.ctrl_ddrio_0 = 0x00094A40,
    719 	.ctrl_ddrio_1 = 0x00000000,
    720 	.ctrl_ddrio_2 = 0x00000000,
    721 	.ctrl_emif_sdram_config_ext = 0x0001C1A7,
    722 	.ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
    723 	.ctrl_ddr_ctrl_ext_0 = 0xA2000000,
    724 };
    725 
    726 void __weak hw_data_init(void)
    727 {
    728 	u32 omap_rev = omap_revision();
    729 
    730 	switch (omap_rev) {
    731 
    732 	case OMAP5430_ES1_0:
    733 	case OMAP5432_ES1_0:
    734 	*prcm = &omap5_es1_prcm;
    735 	*dplls_data = &omap5_dplls_es1;
    736 	*omap_vcores = &omap5430_volts;
    737 	*ctrl = &omap5_ctrl;
    738 	break;
    739 
    740 	case OMAP5430_ES2_0:
    741 	case OMAP5432_ES2_0:
    742 	*prcm = &omap5_es2_prcm;
    743 	*dplls_data = &omap5_dplls_es2;
    744 	*omap_vcores = &omap5430_volts_es2;
    745 	*ctrl = &omap5_ctrl;
    746 	break;
    747 
    748 	case DRA762_ABZ_ES1_0:
    749 	case DRA762_ACD_ES1_0:
    750 	case DRA762_ES1_0:
    751 	*prcm = &dra7xx_prcm;
    752 	*dplls_data = &dra76x_dplls;
    753 	*ctrl = &dra7xx_ctrl;
    754 	break;
    755 
    756 	case DRA752_ES1_0:
    757 	case DRA752_ES1_1:
    758 	case DRA752_ES2_0:
    759 	*prcm = &dra7xx_prcm;
    760 	*dplls_data = &dra7xx_dplls;
    761 	*ctrl = &dra7xx_ctrl;
    762 	break;
    763 
    764 	case DRA722_ES1_0:
    765 	case DRA722_ES2_0:
    766 	case DRA722_ES2_1:
    767 	*prcm = &dra7xx_prcm;
    768 	*dplls_data = &dra72x_dplls;
    769 	*ctrl = &dra7xx_ctrl;
    770 	break;
    771 
    772 	default:
    773 		printf("\n INVALID OMAP REVISION ");
    774 	}
    775 }
    776 
    777 void get_ioregs(const struct ctrl_ioregs **regs)
    778 {
    779 	u32 omap_rev = omap_revision();
    780 
    781 	switch (omap_rev) {
    782 	case OMAP5430_ES1_0:
    783 	case OMAP5430_ES2_0:
    784 		*regs = &ioregs_omap5430;
    785 		break;
    786 	case OMAP5432_ES1_0:
    787 		*regs = &ioregs_omap5432_es1;
    788 		break;
    789 	case OMAP5432_ES2_0:
    790 		*regs = &ioregs_omap5432_es2;
    791 		break;
    792 	case DRA752_ES1_0:
    793 	case DRA752_ES1_1:
    794 	case DRA752_ES2_0:
    795 	case DRA762_ES1_0:
    796 	case DRA762_ACD_ES1_0:
    797 	case DRA762_ABZ_ES1_0:
    798 		*regs = &ioregs_dra7xx_es1;
    799 		break;
    800 	case DRA722_ES1_0:
    801 		*regs = &ioregs_dra72x_es1;
    802 		break;
    803 	case DRA722_ES2_0:
    804 	case DRA722_ES2_1:
    805 		*regs = &ioregs_dra72x_es2;
    806 		break;
    807 
    808 	default:
    809 		printf("\n INVALID OMAP REVISION ");
    810 	}
    811 }
    812