1983e3700STom Rini /* 2983e3700STom Rini * 3983e3700STom Rini * HW data initialization for OMAP5 4983e3700STom Rini * 5983e3700STom Rini * (C) Copyright 2013 6983e3700STom Rini * Texas Instruments, <www.ti.com> 7983e3700STom Rini * 8983e3700STom Rini * Sricharan R <r.sricharan@ti.com> 9983e3700STom Rini * 10983e3700STom Rini * SPDX-License-Identifier: GPL-2.0+ 11983e3700STom Rini */ 12983e3700STom Rini #include <common.h> 13983e3700STom Rini #include <palmas.h> 14983e3700STom Rini #include <asm/arch/omap.h> 15983e3700STom Rini #include <asm/arch/sys_proto.h> 16983e3700STom Rini #include <asm/omap_common.h> 17983e3700STom Rini #include <asm/arch/clock.h> 18983e3700STom Rini #include <asm/omap_gpio.h> 19983e3700STom Rini #include <asm/io.h> 20983e3700STom Rini #include <asm/emif.h> 21983e3700STom Rini 22983e3700STom Rini struct prcm_regs const **prcm = 23983e3700STom Rini (struct prcm_regs const **) OMAP_SRAM_SCRATCH_PRCM_PTR; 24983e3700STom Rini struct dplls const **dplls_data = 25983e3700STom Rini (struct dplls const **) OMAP_SRAM_SCRATCH_DPLLS_PTR; 26983e3700STom Rini struct vcores_data const **omap_vcores = 27983e3700STom Rini (struct vcores_data const **) OMAP_SRAM_SCRATCH_VCORES_PTR; 28983e3700STom Rini struct omap_sys_ctrl_regs const **ctrl = 29983e3700STom Rini (struct omap_sys_ctrl_regs const **)OMAP_SRAM_SCRATCH_SYS_CTRL; 30983e3700STom Rini 31983e3700STom Rini /* OPP NOM FREQUENCY for ES1.0 */ 32983e3700STom Rini static const struct dpll_params mpu_dpll_params_800mhz[NUM_SYS_CLKS] = { 33983e3700STom Rini {200, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 34983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */ 35983e3700STom Rini {1000, 20, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 36983e3700STom Rini {375, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 37983e3700STom Rini {400, 12, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 38983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 39983e3700STom Rini {375, 17, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */ 40983e3700STom Rini }; 41983e3700STom Rini 42983e3700STom Rini /* OPP NOM FREQUENCY for OMAP5 ES2.0, and DRA7 ES1.0 */ 43983e3700STom Rini static const struct dpll_params mpu_dpll_params_1ghz[NUM_SYS_CLKS] = { 44983e3700STom Rini {250, 2, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 45983e3700STom Rini {500, 9, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */ 46983e3700STom Rini {119, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 47983e3700STom Rini {625, 11, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 48983e3700STom Rini {500, 12, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 49983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 50983e3700STom Rini {625, 23, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */ 51983e3700STom Rini }; 52983e3700STom Rini 53983e3700STom Rini static const struct dpll_params 54983e3700STom Rini core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = { 55983e3700STom Rini {266, 2, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 12 MHz */ 56983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */ 57983e3700STom Rini {443, 6, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 16.8 MHz */ 58983e3700STom Rini {277, 4, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 19.2 MHz */ 59983e3700STom Rini {368, 8, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 26 MHz */ 60983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 61983e3700STom Rini {277, 9, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1} /* 38.4 MHz */ 62983e3700STom Rini }; 63983e3700STom Rini 64983e3700STom Rini static const struct dpll_params 65983e3700STom Rini core_dpll_params_2128mhz_ddr532_es2[NUM_SYS_CLKS] = { 66983e3700STom Rini {266, 2, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 12 MHz */ 67983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */ 68983e3700STom Rini {443, 6, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 16.8 MHz */ 69983e3700STom Rini {277, 4, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 19.2 MHz */ 70983e3700STom Rini {368, 8, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 26 MHz */ 71983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 72983e3700STom Rini {277, 9, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6} /* 38.4 MHz */ 73983e3700STom Rini }; 74983e3700STom Rini 75983e3700STom Rini static const struct dpll_params 76983e3700STom Rini core_dpll_params_2128mhz_dra7xx[NUM_SYS_CLKS] = { 77983e3700STom Rini {266, 2, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 12 MHz */ 78983e3700STom Rini {266, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 20 MHz */ 79983e3700STom Rini {443, 6, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 16.8 MHz */ 80983e3700STom Rini {277, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 19.2 MHz */ 81983e3700STom Rini {368, 8, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 26 MHz */ 82983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 83983e3700STom Rini {277, 9, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 38.4 MHz */ 84983e3700STom Rini }; 85983e3700STom Rini 86983e3700STom Rini static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = { 87983e3700STom Rini {32, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 12 MHz */ 88983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */ 89983e3700STom Rini {160, 6, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 16.8 MHz */ 90983e3700STom Rini {20, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 19.2 MHz */ 91983e3700STom Rini {192, 12, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 26 MHz */ 92983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 93983e3700STom Rini {10, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1} /* 38.4 MHz */ 94983e3700STom Rini }; 95983e3700STom Rini 96983e3700STom Rini static const struct dpll_params per_dpll_params_768mhz_es2[NUM_SYS_CLKS] = { 97983e3700STom Rini {32, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 12 MHz */ 98983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */ 99983e3700STom Rini {160, 6, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 16.8 MHz */ 100983e3700STom Rini {20, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 19.2 MHz */ 101983e3700STom Rini {192, 12, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 26 MHz */ 102983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 103983e3700STom Rini {10, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1} /* 38.4 MHz */ 104983e3700STom Rini }; 105983e3700STom Rini 106983e3700STom Rini static const struct dpll_params per_dpll_params_768mhz_dra7xx[NUM_SYS_CLKS] = { 107983e3700STom Rini {32, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 12 MHz */ 108983e3700STom Rini {96, 4, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1}, /* 20 MHz */ 109983e3700STom Rini {160, 6, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 16.8 MHz */ 110983e3700STom Rini {20, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 19.2 MHz */ 111983e3700STom Rini {192, 12, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 26 MHz */ 112983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 113983e3700STom Rini {10, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 38.4 MHz */ 114983e3700STom Rini }; 115983e3700STom Rini 116983e3700STom Rini static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = { 117983e3700STom Rini {1165, 11, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 118983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */ 119983e3700STom Rini {208, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 120983e3700STom Rini {182, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 121983e3700STom Rini {224, 4, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 122983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 123983e3700STom Rini {91, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */ 124983e3700STom Rini }; 125983e3700STom Rini 126983e3700STom Rini static const struct dpll_params iva_dpll_params_2330mhz_dra7xx[NUM_SYS_CLKS] = { 127983e3700STom Rini {1165, 11, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 128983e3700STom Rini {233, 3, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */ 129983e3700STom Rini {208, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 130983e3700STom Rini {182, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 131983e3700STom Rini {224, 4, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 132983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 133983e3700STom Rini {91, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */ 134983e3700STom Rini }; 135983e3700STom Rini 136983e3700STom Rini /* ABE M & N values with sys_clk as source */ 137*fc4dd72eSLokesh Vutla #ifdef CONFIG_SYS_OMAP_ABE_SYSCK 138983e3700STom Rini static const struct dpll_params 139983e3700STom Rini abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = { 140983e3700STom Rini {49, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 141983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */ 142983e3700STom Rini {35, 5, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 143983e3700STom Rini {46, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 144983e3700STom Rini {34, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 145983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 146983e3700STom Rini {64, 24, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */ 147983e3700STom Rini }; 148*fc4dd72eSLokesh Vutla #endif 149983e3700STom Rini 150983e3700STom Rini /* ABE M & N values with 32K clock as source */ 151*fc4dd72eSLokesh Vutla #ifndef CONFIG_SYS_OMAP_ABE_SYSCK 152983e3700STom Rini static const struct dpll_params abe_dpll_params_32k_196608khz = { 153983e3700STom Rini 750, 0, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1 154983e3700STom Rini }; 155*fc4dd72eSLokesh Vutla #endif 156983e3700STom Rini 157983e3700STom Rini /* ABE M & N values with sysclk2(22.5792 MHz) as input */ 158983e3700STom Rini static const struct dpll_params 159983e3700STom Rini abe_dpll_params_sysclk2_361267khz[NUM_SYS_CLKS] = { 160983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 161983e3700STom Rini {16, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */ 162983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 163983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 164983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 165983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 166983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */ 167983e3700STom Rini }; 168983e3700STom Rini 169983e3700STom Rini static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = { 170983e3700STom Rini {400, 4, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 171983e3700STom Rini {480, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */ 172983e3700STom Rini {400, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 173983e3700STom Rini {400, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 174983e3700STom Rini {480, 12, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 175983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 176983e3700STom Rini {400, 15, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */ 177983e3700STom Rini }; 178983e3700STom Rini 179983e3700STom Rini static const struct dpll_params ddr_dpll_params_2664mhz[NUM_SYS_CLKS] = { 180983e3700STom Rini {111, 0, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 181983e3700STom Rini {333, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */ 182983e3700STom Rini {555, 6, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 183983e3700STom Rini {555, 7, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 184983e3700STom Rini {666, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 185983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 186983e3700STom Rini {555, 15, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */ 187983e3700STom Rini }; 188983e3700STom Rini 189983e3700STom Rini static const struct dpll_params ddr_dpll_params_2128mhz[NUM_SYS_CLKS] = { 190983e3700STom Rini {266, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */ 191983e3700STom Rini {266, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */ 192983e3700STom Rini {190, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 193983e3700STom Rini {665, 11, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 194983e3700STom Rini {532, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */ 195983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 196983e3700STom Rini {665, 23, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */ 197983e3700STom Rini }; 198983e3700STom Rini 199983e3700STom Rini static const struct dpll_params gmac_dpll_params_2000mhz[NUM_SYS_CLKS] = { 200983e3700STom Rini {250, 2, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 12 MHz */ 201983e3700STom Rini {250, 4, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 20 MHz */ 202983e3700STom Rini {119, 1, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 16.8 MHz */ 203983e3700STom Rini {625, 11, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 19.2 MHz */ 204983e3700STom Rini {500, 12, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 26 MHz */ 205983e3700STom Rini {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */ 206983e3700STom Rini {625, 23, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 38.4 MHz */ 207983e3700STom Rini }; 208983e3700STom Rini 209983e3700STom Rini struct dplls omap5_dplls_es1 = { 210983e3700STom Rini .mpu = mpu_dpll_params_800mhz, 211983e3700STom Rini .core = core_dpll_params_2128mhz_ddr532, 212983e3700STom Rini .per = per_dpll_params_768mhz, 213983e3700STom Rini .iva = iva_dpll_params_2330mhz, 214983e3700STom Rini #ifdef CONFIG_SYS_OMAP_ABE_SYSCK 215983e3700STom Rini .abe = abe_dpll_params_sysclk_196608khz, 216983e3700STom Rini #else 217983e3700STom Rini .abe = &abe_dpll_params_32k_196608khz, 218983e3700STom Rini #endif 219983e3700STom Rini .usb = usb_dpll_params_1920mhz, 220983e3700STom Rini .ddr = NULL 221983e3700STom Rini }; 222983e3700STom Rini 223983e3700STom Rini struct dplls omap5_dplls_es2 = { 224983e3700STom Rini .mpu = mpu_dpll_params_1ghz, 225983e3700STom Rini .core = core_dpll_params_2128mhz_ddr532_es2, 226983e3700STom Rini .per = per_dpll_params_768mhz_es2, 227983e3700STom Rini .iva = iva_dpll_params_2330mhz, 228983e3700STom Rini #ifdef CONFIG_SYS_OMAP_ABE_SYSCK 229983e3700STom Rini .abe = abe_dpll_params_sysclk_196608khz, 230983e3700STom Rini #else 231983e3700STom Rini .abe = &abe_dpll_params_32k_196608khz, 232983e3700STom Rini #endif 233983e3700STom Rini .usb = usb_dpll_params_1920mhz, 234983e3700STom Rini .ddr = NULL 235983e3700STom Rini }; 236983e3700STom Rini 237983e3700STom Rini struct dplls dra7xx_dplls = { 238983e3700STom Rini .mpu = mpu_dpll_params_1ghz, 239983e3700STom Rini .core = core_dpll_params_2128mhz_dra7xx, 240983e3700STom Rini .per = per_dpll_params_768mhz_dra7xx, 241983e3700STom Rini .abe = abe_dpll_params_sysclk2_361267khz, 242983e3700STom Rini .iva = iva_dpll_params_2330mhz_dra7xx, 243983e3700STom Rini .usb = usb_dpll_params_1920mhz, 244983e3700STom Rini .ddr = ddr_dpll_params_2128mhz, 245983e3700STom Rini .gmac = gmac_dpll_params_2000mhz, 246983e3700STom Rini }; 247983e3700STom Rini 248983e3700STom Rini struct dplls dra72x_dplls = { 249983e3700STom Rini .mpu = mpu_dpll_params_1ghz, 250983e3700STom Rini .core = core_dpll_params_2128mhz_dra7xx, 251983e3700STom Rini .per = per_dpll_params_768mhz_dra7xx, 252983e3700STom Rini .abe = abe_dpll_params_sysclk2_361267khz, 253983e3700STom Rini .iva = iva_dpll_params_2330mhz_dra7xx, 254983e3700STom Rini .usb = usb_dpll_params_1920mhz, 255983e3700STom Rini .ddr = ddr_dpll_params_2664mhz, 256983e3700STom Rini .gmac = gmac_dpll_params_2000mhz, 257983e3700STom Rini }; 258983e3700STom Rini 259983e3700STom Rini struct pmic_data palmas = { 260983e3700STom Rini .base_offset = PALMAS_SMPS_BASE_VOLT_UV, 261983e3700STom Rini .step = 10000, /* 10 mV represented in uV */ 262983e3700STom Rini /* 263983e3700STom Rini * Offset codes 1-6 all give the base voltage in Palmas 264983e3700STom Rini * Offset code 0 switches OFF the SMPS 265983e3700STom Rini */ 266983e3700STom Rini .start_code = 6, 267983e3700STom Rini .i2c_slave_addr = SMPS_I2C_SLAVE_ADDR, 268983e3700STom Rini .pmic_bus_init = sri2c_init, 269983e3700STom Rini .pmic_write = omap_vc_bypass_send_value, 270983e3700STom Rini .gpio_en = 0, 271983e3700STom Rini }; 272983e3700STom Rini 273983e3700STom Rini /* The TPS659038 and TPS65917 are software-compatible, use common struct */ 274983e3700STom Rini struct pmic_data tps659038 = { 275983e3700STom Rini .base_offset = PALMAS_SMPS_BASE_VOLT_UV, 276983e3700STom Rini .step = 10000, /* 10 mV represented in uV */ 277983e3700STom Rini /* 278983e3700STom Rini * Offset codes 1-6 all give the base voltage in Palmas 279983e3700STom Rini * Offset code 0 switches OFF the SMPS 280983e3700STom Rini */ 281983e3700STom Rini .start_code = 6, 282983e3700STom Rini .i2c_slave_addr = TPS659038_I2C_SLAVE_ADDR, 283983e3700STom Rini .pmic_bus_init = gpi2c_init, 284983e3700STom Rini .pmic_write = palmas_i2c_write_u8, 285983e3700STom Rini .gpio_en = 0, 286983e3700STom Rini }; 287983e3700STom Rini 288f56e6350SKeerthy /* The LP8732 and LP8733 are software-compatible, use common struct */ 289f56e6350SKeerthy struct pmic_data lp8733 = { 290f56e6350SKeerthy .base_offset = LP873X_BUCK_BASE_VOLT_UV, 291f56e6350SKeerthy .step = 5000, /* 5 mV represented in uV */ 292f56e6350SKeerthy /* 293f56e6350SKeerthy * Offset codes 0 - 0x13 Invalid. 294f56e6350SKeerthy * Offset codes 0x14 0x17 give 10mV steps 295f56e6350SKeerthy * Offset codes 0x17 through 0x9D give 5mV steps 296f56e6350SKeerthy * So let us start with our operating range from .73V 297f56e6350SKeerthy */ 298f56e6350SKeerthy .start_code = 0x17, 299f56e6350SKeerthy .i2c_slave_addr = 0x60, 300f56e6350SKeerthy .pmic_bus_init = gpi2c_init, 301f56e6350SKeerthy .pmic_write = palmas_i2c_write_u8, 302f56e6350SKeerthy }; 303f56e6350SKeerthy 304983e3700STom Rini struct vcores_data omap5430_volts = { 305beb71279SLokesh Vutla .mpu.value[OPP_NOM] = VDD_MPU, 306983e3700STom Rini .mpu.addr = SMPS_REG_ADDR_12_MPU, 307983e3700STom Rini .mpu.pmic = &palmas, 308983e3700STom Rini 309beb71279SLokesh Vutla .core.value[OPP_NOM] = VDD_CORE, 310983e3700STom Rini .core.addr = SMPS_REG_ADDR_8_CORE, 311983e3700STom Rini .core.pmic = &palmas, 312983e3700STom Rini 313beb71279SLokesh Vutla .mm.value[OPP_NOM] = VDD_MM, 314983e3700STom Rini .mm.addr = SMPS_REG_ADDR_45_IVA, 315983e3700STom Rini .mm.pmic = &palmas, 316983e3700STom Rini }; 317983e3700STom Rini 318983e3700STom Rini struct vcores_data omap5430_volts_es2 = { 319beb71279SLokesh Vutla .mpu.value[OPP_NOM] = VDD_MPU_ES2, 320983e3700STom Rini .mpu.addr = SMPS_REG_ADDR_12_MPU, 321983e3700STom Rini .mpu.pmic = &palmas, 322983e3700STom Rini .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK, 323983e3700STom Rini 324beb71279SLokesh Vutla .core.value[OPP_NOM] = VDD_CORE_ES2, 325983e3700STom Rini .core.addr = SMPS_REG_ADDR_8_CORE, 326983e3700STom Rini .core.pmic = &palmas, 327983e3700STom Rini 328beb71279SLokesh Vutla .mm.value[OPP_NOM] = VDD_MM_ES2, 329983e3700STom Rini .mm.addr = SMPS_REG_ADDR_45_IVA, 330983e3700STom Rini .mm.pmic = &palmas, 331983e3700STom Rini .mm.abb_tx_done_mask = OMAP_ABB_MM_TXDONE_MASK, 332983e3700STom Rini }; 333983e3700STom Rini 334983e3700STom Rini /* 335983e3700STom Rini * Enable essential clock domains, modules and 336983e3700STom Rini * do some additional special settings needed 337983e3700STom Rini */ 338983e3700STom Rini void enable_basic_clocks(void) 339983e3700STom Rini { 340983e3700STom Rini u32 const clk_domains_essential[] = { 341983e3700STom Rini (*prcm)->cm_l4per_clkstctrl, 342983e3700STom Rini (*prcm)->cm_l3init_clkstctrl, 343983e3700STom Rini (*prcm)->cm_memif_clkstctrl, 344983e3700STom Rini (*prcm)->cm_l4cfg_clkstctrl, 345983e3700STom Rini #ifdef CONFIG_DRIVER_TI_CPSW 346983e3700STom Rini (*prcm)->cm_gmac_clkstctrl, 347983e3700STom Rini #endif 348983e3700STom Rini 0 349983e3700STom Rini }; 350983e3700STom Rini 351983e3700STom Rini u32 const clk_modules_hw_auto_essential[] = { 352983e3700STom Rini (*prcm)->cm_l3_gpmc_clkctrl, 353983e3700STom Rini (*prcm)->cm_memif_emif_1_clkctrl, 354983e3700STom Rini (*prcm)->cm_memif_emif_2_clkctrl, 355983e3700STom Rini (*prcm)->cm_l4cfg_l4_cfg_clkctrl, 356983e3700STom Rini (*prcm)->cm_wkup_gpio1_clkctrl, 357983e3700STom Rini (*prcm)->cm_l4per_gpio2_clkctrl, 358983e3700STom Rini (*prcm)->cm_l4per_gpio3_clkctrl, 359983e3700STom Rini (*prcm)->cm_l4per_gpio4_clkctrl, 360983e3700STom Rini (*prcm)->cm_l4per_gpio5_clkctrl, 361983e3700STom Rini (*prcm)->cm_l4per_gpio6_clkctrl, 362983e3700STom Rini (*prcm)->cm_l4per_gpio7_clkctrl, 363983e3700STom Rini (*prcm)->cm_l4per_gpio8_clkctrl, 364983e3700STom Rini 0 365983e3700STom Rini }; 366983e3700STom Rini 367983e3700STom Rini u32 const clk_modules_explicit_en_essential[] = { 368983e3700STom Rini (*prcm)->cm_wkup_gptimer1_clkctrl, 369983e3700STom Rini (*prcm)->cm_l3init_hsmmc1_clkctrl, 370983e3700STom Rini (*prcm)->cm_l3init_hsmmc2_clkctrl, 371983e3700STom Rini (*prcm)->cm_l4per_gptimer2_clkctrl, 372983e3700STom Rini (*prcm)->cm_wkup_wdtimer2_clkctrl, 373983e3700STom Rini (*prcm)->cm_l4per_uart3_clkctrl, 374983e3700STom Rini (*prcm)->cm_l4per_i2c1_clkctrl, 375983e3700STom Rini #ifdef CONFIG_DRIVER_TI_CPSW 376983e3700STom Rini (*prcm)->cm_gmac_gmac_clkctrl, 377983e3700STom Rini #endif 378983e3700STom Rini 379983e3700STom Rini #ifdef CONFIG_TI_QSPI 380983e3700STom Rini (*prcm)->cm_l4per_qspi_clkctrl, 381983e3700STom Rini #endif 382983e3700STom Rini 0 383983e3700STom Rini }; 384983e3700STom Rini 385983e3700STom Rini /* Enable optional additional functional clock for GPIO4 */ 386983e3700STom Rini setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl, 387983e3700STom Rini GPIO4_CLKCTRL_OPTFCLKEN_MASK); 388983e3700STom Rini 389983e3700STom Rini /* Enable 96 MHz clock for MMC1 & MMC2 */ 390983e3700STom Rini setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl, 391983e3700STom Rini HSMMC_CLKCTRL_CLKSEL_MASK); 392983e3700STom Rini setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl, 393983e3700STom Rini HSMMC_CLKCTRL_CLKSEL_MASK); 394983e3700STom Rini 395983e3700STom Rini /* Set the correct clock dividers for mmc */ 396983e3700STom Rini setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl, 397983e3700STom Rini HSMMC_CLKCTRL_CLKSEL_DIV_MASK); 398983e3700STom Rini setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl, 399983e3700STom Rini HSMMC_CLKCTRL_CLKSEL_DIV_MASK); 400983e3700STom Rini 401983e3700STom Rini /* Select 32KHz clock as the source of GPTIMER1 */ 402983e3700STom Rini setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl, 403983e3700STom Rini GPTIMER1_CLKCTRL_CLKSEL_MASK); 404983e3700STom Rini 405983e3700STom Rini do_enable_clocks(clk_domains_essential, 406983e3700STom Rini clk_modules_hw_auto_essential, 407983e3700STom Rini clk_modules_explicit_en_essential, 408983e3700STom Rini 1); 409983e3700STom Rini 410983e3700STom Rini #ifdef CONFIG_TI_QSPI 411983e3700STom Rini setbits_le32((*prcm)->cm_l4per_qspi_clkctrl, (1<<24)); 412983e3700STom Rini #endif 413983e3700STom Rini 414983e3700STom Rini /* Enable SCRM OPT clocks for PER and CORE dpll */ 415983e3700STom Rini setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl, 416983e3700STom Rini OPTFCLKEN_SCRM_PER_MASK); 417983e3700STom Rini setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl, 418983e3700STom Rini OPTFCLKEN_SCRM_CORE_MASK); 419983e3700STom Rini } 420983e3700STom Rini 421983e3700STom Rini void enable_basic_uboot_clocks(void) 422983e3700STom Rini { 423983e3700STom Rini u32 const clk_domains_essential[] = { 4243891a54fSNishanth Menon #if defined(CONFIG_DRA7XX) 425983e3700STom Rini (*prcm)->cm_ipu_clkstctrl, 426983e3700STom Rini #endif 427983e3700STom Rini 0 428983e3700STom Rini }; 429983e3700STom Rini 430983e3700STom Rini u32 const clk_modules_hw_auto_essential[] = { 431983e3700STom Rini (*prcm)->cm_l3init_hsusbtll_clkctrl, 432983e3700STom Rini 0 433983e3700STom Rini }; 434983e3700STom Rini 435983e3700STom Rini u32 const clk_modules_explicit_en_essential[] = { 436983e3700STom Rini (*prcm)->cm_l4per_mcspi1_clkctrl, 437983e3700STom Rini (*prcm)->cm_l4per_i2c2_clkctrl, 438983e3700STom Rini (*prcm)->cm_l4per_i2c3_clkctrl, 439983e3700STom Rini (*prcm)->cm_l4per_i2c4_clkctrl, 4403891a54fSNishanth Menon #if defined(CONFIG_DRA7XX) 441983e3700STom Rini (*prcm)->cm_ipu_i2c5_clkctrl, 442983e3700STom Rini #else 443983e3700STom Rini (*prcm)->cm_l4per_i2c5_clkctrl, 444983e3700STom Rini #endif 445983e3700STom Rini (*prcm)->cm_l3init_hsusbhost_clkctrl, 446983e3700STom Rini (*prcm)->cm_l3init_fsusb_clkctrl, 447983e3700STom Rini 0 448983e3700STom Rini }; 449983e3700STom Rini do_enable_clocks(clk_domains_essential, 450983e3700STom Rini clk_modules_hw_auto_essential, 451983e3700STom Rini clk_modules_explicit_en_essential, 452983e3700STom Rini 1); 453983e3700STom Rini } 454983e3700STom Rini 455983e3700STom Rini #ifdef CONFIG_TI_EDMA3 456983e3700STom Rini void enable_edma3_clocks(void) 457983e3700STom Rini { 458983e3700STom Rini u32 const clk_domains_edma3[] = { 459983e3700STom Rini 0 460983e3700STom Rini }; 461983e3700STom Rini 462983e3700STom Rini u32 const clk_modules_hw_auto_edma3[] = { 463983e3700STom Rini (*prcm)->cm_l3main1_tptc1_clkctrl, 464983e3700STom Rini (*prcm)->cm_l3main1_tptc2_clkctrl, 465983e3700STom Rini 0 466983e3700STom Rini }; 467983e3700STom Rini 468983e3700STom Rini u32 const clk_modules_explicit_en_edma3[] = { 469983e3700STom Rini 0 470983e3700STom Rini }; 471983e3700STom Rini 472983e3700STom Rini do_enable_clocks(clk_domains_edma3, 473983e3700STom Rini clk_modules_hw_auto_edma3, 474983e3700STom Rini clk_modules_explicit_en_edma3, 475983e3700STom Rini 1); 476983e3700STom Rini } 477983e3700STom Rini 478983e3700STom Rini void disable_edma3_clocks(void) 479983e3700STom Rini { 480983e3700STom Rini u32 const clk_domains_edma3[] = { 481983e3700STom Rini 0 482983e3700STom Rini }; 483983e3700STom Rini 484983e3700STom Rini u32 const clk_modules_disable_edma3[] = { 485983e3700STom Rini (*prcm)->cm_l3main1_tptc1_clkctrl, 486983e3700STom Rini (*prcm)->cm_l3main1_tptc2_clkctrl, 487983e3700STom Rini 0 488983e3700STom Rini }; 489983e3700STom Rini 490983e3700STom Rini do_disable_clocks(clk_domains_edma3, 491983e3700STom Rini clk_modules_disable_edma3, 492983e3700STom Rini 1); 493983e3700STom Rini } 494983e3700STom Rini #endif 495983e3700STom Rini 496983e3700STom Rini #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP) 497983e3700STom Rini void enable_usb_clocks(int index) 498983e3700STom Rini { 499983e3700STom Rini u32 cm_l3init_usb_otg_ss_clkctrl = 0; 500983e3700STom Rini 501983e3700STom Rini if (index == 0) { 502983e3700STom Rini cm_l3init_usb_otg_ss_clkctrl = 503983e3700STom Rini (*prcm)->cm_l3init_usb_otg_ss1_clkctrl; 504983e3700STom Rini /* Enable 960 MHz clock for dwc3 */ 505983e3700STom Rini setbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl, 506983e3700STom Rini OPTFCLKEN_REFCLK960M); 507983e3700STom Rini 508983e3700STom Rini /* Enable 32 KHz clock for USB_PHY1 */ 509983e3700STom Rini setbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl, 510983e3700STom Rini USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); 511983e3700STom Rini 512983e3700STom Rini /* Enable 32 KHz clock for USB_PHY3 */ 513983e3700STom Rini if (is_dra7xx()) 514983e3700STom Rini setbits_le32((*prcm)->cm_coreaon_usb_phy3_core_clkctrl, 515983e3700STom Rini USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); 516983e3700STom Rini } else if (index == 1) { 517983e3700STom Rini cm_l3init_usb_otg_ss_clkctrl = 518983e3700STom Rini (*prcm)->cm_l3init_usb_otg_ss2_clkctrl; 519983e3700STom Rini /* Enable 960 MHz clock for dwc3 */ 520983e3700STom Rini setbits_le32((*prcm)->cm_l3init_usb_otg_ss2_clkctrl, 521983e3700STom Rini OPTFCLKEN_REFCLK960M); 522983e3700STom Rini 523983e3700STom Rini /* Enable 32 KHz clock for dwc3 */ 524983e3700STom Rini setbits_le32((*prcm)->cm_coreaon_usb_phy2_core_clkctrl, 525983e3700STom Rini USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); 526983e3700STom Rini 527983e3700STom Rini /* Enable 60 MHz clock for USB2PHY2 */ 528983e3700STom Rini setbits_le32((*prcm)->cm_coreaon_l3init_60m_gfclk_clkctrl, 529983e3700STom Rini L3INIT_CLKCTRL_OPTFCLKEN_60M_GFCLK); 530983e3700STom Rini } 531983e3700STom Rini 532983e3700STom Rini u32 const clk_domains_usb[] = { 533983e3700STom Rini 0 534983e3700STom Rini }; 535983e3700STom Rini 536983e3700STom Rini u32 const clk_modules_hw_auto_usb[] = { 537983e3700STom Rini (*prcm)->cm_l3init_ocp2scp1_clkctrl, 538983e3700STom Rini cm_l3init_usb_otg_ss_clkctrl, 539983e3700STom Rini 0 540983e3700STom Rini }; 541983e3700STom Rini 542983e3700STom Rini u32 const clk_modules_explicit_en_usb[] = { 543983e3700STom Rini 0 544983e3700STom Rini }; 545983e3700STom Rini 546983e3700STom Rini do_enable_clocks(clk_domains_usb, 547983e3700STom Rini clk_modules_hw_auto_usb, 548983e3700STom Rini clk_modules_explicit_en_usb, 549983e3700STom Rini 1); 550983e3700STom Rini } 551983e3700STom Rini 552983e3700STom Rini void disable_usb_clocks(int index) 553983e3700STom Rini { 554983e3700STom Rini u32 cm_l3init_usb_otg_ss_clkctrl = 0; 555983e3700STom Rini 556983e3700STom Rini if (index == 0) { 557983e3700STom Rini cm_l3init_usb_otg_ss_clkctrl = 558983e3700STom Rini (*prcm)->cm_l3init_usb_otg_ss1_clkctrl; 559983e3700STom Rini /* Disable 960 MHz clock for dwc3 */ 560983e3700STom Rini clrbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl, 561983e3700STom Rini OPTFCLKEN_REFCLK960M); 562983e3700STom Rini 563983e3700STom Rini /* Disable 32 KHz clock for USB_PHY1 */ 564983e3700STom Rini clrbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl, 565983e3700STom Rini USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); 566983e3700STom Rini 567983e3700STom Rini /* Disable 32 KHz clock for USB_PHY3 */ 568983e3700STom Rini if (is_dra7xx()) 569983e3700STom Rini clrbits_le32((*prcm)->cm_coreaon_usb_phy3_core_clkctrl, 570983e3700STom Rini USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); 571983e3700STom Rini } else if (index == 1) { 572983e3700STom Rini cm_l3init_usb_otg_ss_clkctrl = 573983e3700STom Rini (*prcm)->cm_l3init_usb_otg_ss2_clkctrl; 574983e3700STom Rini /* Disable 960 MHz clock for dwc3 */ 575983e3700STom Rini clrbits_le32((*prcm)->cm_l3init_usb_otg_ss2_clkctrl, 576983e3700STom Rini OPTFCLKEN_REFCLK960M); 577983e3700STom Rini 578983e3700STom Rini /* Disable 32 KHz clock for dwc3 */ 579983e3700STom Rini clrbits_le32((*prcm)->cm_coreaon_usb_phy2_core_clkctrl, 580983e3700STom Rini USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); 581983e3700STom Rini 582983e3700STom Rini /* Disable 60 MHz clock for USB2PHY2 */ 583983e3700STom Rini clrbits_le32((*prcm)->cm_coreaon_l3init_60m_gfclk_clkctrl, 584983e3700STom Rini L3INIT_CLKCTRL_OPTFCLKEN_60M_GFCLK); 585983e3700STom Rini } 586983e3700STom Rini 587983e3700STom Rini u32 const clk_domains_usb[] = { 588983e3700STom Rini 0 589983e3700STom Rini }; 590983e3700STom Rini 591983e3700STom Rini u32 const clk_modules_disable[] = { 592983e3700STom Rini (*prcm)->cm_l3init_ocp2scp1_clkctrl, 593983e3700STom Rini cm_l3init_usb_otg_ss_clkctrl, 594983e3700STom Rini 0 595983e3700STom Rini }; 596983e3700STom Rini 597983e3700STom Rini do_disable_clocks(clk_domains_usb, 598983e3700STom Rini clk_modules_disable, 599983e3700STom Rini 1); 600983e3700STom Rini } 601983e3700STom Rini #endif 602983e3700STom Rini 603983e3700STom Rini const struct ctrl_ioregs ioregs_omap5430 = { 604983e3700STom Rini .ctrl_ddrch = DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN, 605983e3700STom Rini .ctrl_lpddr2ch = DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN, 606983e3700STom Rini .ctrl_ddrio_0 = DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL, 607983e3700STom Rini .ctrl_ddrio_1 = DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL, 608983e3700STom Rini .ctrl_ddrio_2 = DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL, 609983e3700STom Rini }; 610983e3700STom Rini 611983e3700STom Rini const struct ctrl_ioregs ioregs_omap5432_es1 = { 612983e3700STom Rini .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL, 613983e3700STom Rini .ctrl_lpddr2ch = 0x0, 614983e3700STom Rini .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL, 615983e3700STom Rini .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE, 616983e3700STom Rini .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE, 617983e3700STom Rini .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE, 618983e3700STom Rini .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES, 619983e3700STom Rini .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES, 620983e3700STom Rini }; 621983e3700STom Rini 622983e3700STom Rini const struct ctrl_ioregs ioregs_omap5432_es2 = { 623983e3700STom Rini .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2, 624983e3700STom Rini .ctrl_lpddr2ch = 0x0, 625983e3700STom Rini .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2, 626983e3700STom Rini .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE_ES2, 627983e3700STom Rini .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE_ES2, 628983e3700STom Rini .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE_ES2, 629983e3700STom Rini .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES, 630983e3700STom Rini .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES, 631983e3700STom Rini }; 632983e3700STom Rini 633983e3700STom Rini const struct ctrl_ioregs ioregs_dra7xx_es1 = { 634983e3700STom Rini .ctrl_ddrch = 0x40404040, 635983e3700STom Rini .ctrl_lpddr2ch = 0x40404040, 636983e3700STom Rini .ctrl_ddr3ch = 0x80808080, 637983e3700STom Rini .ctrl_ddrio_0 = 0x00094A40, 638983e3700STom Rini .ctrl_ddrio_1 = 0x04A52000, 639983e3700STom Rini .ctrl_ddrio_2 = 0x84210000, 640983e3700STom Rini .ctrl_emif_sdram_config_ext = 0x0001C1A7, 641983e3700STom Rini .ctrl_emif_sdram_config_ext_final = 0x0001C1A7, 642983e3700STom Rini .ctrl_ddr_ctrl_ext_0 = 0xA2000000, 643983e3700STom Rini }; 644983e3700STom Rini 645983e3700STom Rini const struct ctrl_ioregs ioregs_dra72x_es1 = { 646983e3700STom Rini .ctrl_ddrch = 0x40404040, 647983e3700STom Rini .ctrl_lpddr2ch = 0x40404040, 648983e3700STom Rini .ctrl_ddr3ch = 0x60606080, 649983e3700STom Rini .ctrl_ddrio_0 = 0x00094A40, 650983e3700STom Rini .ctrl_ddrio_1 = 0x04A52000, 651983e3700STom Rini .ctrl_ddrio_2 = 0x84210000, 652983e3700STom Rini .ctrl_emif_sdram_config_ext = 0x0001C1A7, 653983e3700STom Rini .ctrl_emif_sdram_config_ext_final = 0x0001C1A7, 654983e3700STom Rini .ctrl_ddr_ctrl_ext_0 = 0xA2000000, 655983e3700STom Rini }; 656983e3700STom Rini 657983e3700STom Rini const struct ctrl_ioregs ioregs_dra72x_es2 = { 658983e3700STom Rini .ctrl_ddrch = 0x40404040, 659983e3700STom Rini .ctrl_lpddr2ch = 0x40404040, 660983e3700STom Rini .ctrl_ddr3ch = 0x60606060, 661983e3700STom Rini .ctrl_ddrio_0 = 0x00094A40, 662983e3700STom Rini .ctrl_ddrio_1 = 0x00000000, 663983e3700STom Rini .ctrl_ddrio_2 = 0x00000000, 664983e3700STom Rini .ctrl_emif_sdram_config_ext = 0x0001C1A7, 665983e3700STom Rini .ctrl_emif_sdram_config_ext_final = 0x0001C1A7, 666983e3700STom Rini .ctrl_ddr_ctrl_ext_0 = 0xA2000000, 667983e3700STom Rini }; 668983e3700STom Rini 669983e3700STom Rini void __weak hw_data_init(void) 670983e3700STom Rini { 671983e3700STom Rini u32 omap_rev = omap_revision(); 672983e3700STom Rini 673983e3700STom Rini switch (omap_rev) { 674983e3700STom Rini 675983e3700STom Rini case OMAP5430_ES1_0: 676983e3700STom Rini case OMAP5432_ES1_0: 677983e3700STom Rini *prcm = &omap5_es1_prcm; 678983e3700STom Rini *dplls_data = &omap5_dplls_es1; 679983e3700STom Rini *omap_vcores = &omap5430_volts; 680983e3700STom Rini *ctrl = &omap5_ctrl; 681983e3700STom Rini break; 682983e3700STom Rini 683983e3700STom Rini case OMAP5430_ES2_0: 684983e3700STom Rini case OMAP5432_ES2_0: 685983e3700STom Rini *prcm = &omap5_es2_prcm; 686983e3700STom Rini *dplls_data = &omap5_dplls_es2; 687983e3700STom Rini *omap_vcores = &omap5430_volts_es2; 688983e3700STom Rini *ctrl = &omap5_ctrl; 689983e3700STom Rini break; 690983e3700STom Rini 691983e3700STom Rini case DRA752_ES1_0: 692983e3700STom Rini case DRA752_ES1_1: 693983e3700STom Rini case DRA752_ES2_0: 694983e3700STom Rini *prcm = &dra7xx_prcm; 695983e3700STom Rini *dplls_data = &dra7xx_dplls; 696983e3700STom Rini *ctrl = &dra7xx_ctrl; 697983e3700STom Rini break; 698983e3700STom Rini 699983e3700STom Rini case DRA722_ES1_0: 700983e3700STom Rini case DRA722_ES2_0: 701983e3700STom Rini *prcm = &dra7xx_prcm; 702983e3700STom Rini *dplls_data = &dra72x_dplls; 703983e3700STom Rini *ctrl = &dra7xx_ctrl; 704983e3700STom Rini break; 705983e3700STom Rini 706983e3700STom Rini default: 707983e3700STom Rini printf("\n INVALID OMAP REVISION "); 708983e3700STom Rini } 709983e3700STom Rini } 710983e3700STom Rini 711983e3700STom Rini void get_ioregs(const struct ctrl_ioregs **regs) 712983e3700STom Rini { 713983e3700STom Rini u32 omap_rev = omap_revision(); 714983e3700STom Rini 715983e3700STom Rini switch (omap_rev) { 716983e3700STom Rini case OMAP5430_ES1_0: 717983e3700STom Rini case OMAP5430_ES2_0: 718983e3700STom Rini *regs = &ioregs_omap5430; 719983e3700STom Rini break; 720983e3700STom Rini case OMAP5432_ES1_0: 721983e3700STom Rini *regs = &ioregs_omap5432_es1; 722983e3700STom Rini break; 723983e3700STom Rini case OMAP5432_ES2_0: 724983e3700STom Rini *regs = &ioregs_omap5432_es2; 725983e3700STom Rini break; 726983e3700STom Rini case DRA752_ES1_0: 727983e3700STom Rini case DRA752_ES1_1: 728983e3700STom Rini case DRA752_ES2_0: 729983e3700STom Rini *regs = &ioregs_dra7xx_es1; 730983e3700STom Rini break; 731983e3700STom Rini case DRA722_ES1_0: 732983e3700STom Rini *regs = &ioregs_dra72x_es1; 733983e3700STom Rini break; 734983e3700STom Rini case DRA722_ES2_0: 735983e3700STom Rini *regs = &ioregs_dra72x_es2; 736983e3700STom Rini break; 737983e3700STom Rini 738983e3700STom Rini default: 739983e3700STom Rini printf("\n INVALID OMAP REVISION "); 740983e3700STom Rini } 741983e3700STom Rini } 742