1ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley/* 298fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsley * OMAP3 powerdomain definitions 3ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * 48179488a36985d4929cf89be5d9171145a769511Paul Walmsley * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc. 54cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley * Copyright (C) 2007-2011 Nokia Corporation 6ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * 76e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley * Paul Walmsley, Jouni Högander 8ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * 9ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * This program is free software; you can redistribute it and/or modify 10ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * it under the terms of the GNU General Public License version 2 as 11ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * published by the Free Software Foundation. 12ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley */ 13ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 146e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley#include <linux/kernel.h> 156e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley#include <linux/init.h> 16d9a5f4dd437ceb007e1f118e90ba5587a5e04d20Tony Lindgren#include <linux/bug.h> 17ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 188179488a36985d4929cf89be5d9171145a769511Paul Walmsley#include <plat/cpu.h> 198179488a36985d4929cf89be5d9171145a769511Paul Walmsley 2072e06d087204f3bc9acf281717b90ebf0b9731f7Paul Walmsley#include "powerdomain.h" 216e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley#include "powerdomains2xxx_3xxx_data.h" 22ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 23ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley#include "prcm-common.h" 2459fb659b065f52fcc2deed293cfbfc58f890376cPaul Walmsley#include "prm2xxx_3xxx.h" 25ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley#include "prm-regbits-34xx.h" 2659fb659b065f52fcc2deed293cfbfc58f890376cPaul Walmsley#include "cm2xxx_3xxx.h" 27ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley#include "cm-regbits-34xx.h" 28ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 29ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley/* 30ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * 34XX-specific powerdomains, dependencies 31ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley */ 32ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 33ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley/* 34ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * Powerdomains 35ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley */ 36ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 37ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain iva2_pwrdm = { 38ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "iva2_pwrdm", 39ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430_IVA2_MOD, 40ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 41ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_logic_ret = PWRSTS_OFF_RET, 42ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 4, 43ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 44ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [0] = PWRSTS_OFF_RET, 45ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [1] = PWRSTS_OFF_RET, 46ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [2] = PWRSTS_OFF_RET, 47ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [3] = PWRSTS_OFF_RET, 48ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 49ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 504cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_ON, 514cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [1] = PWRSTS_ON, 52ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [2] = PWRSTS_OFF_ON, 534cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [3] = PWRSTS_ON, 54ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 55da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "mpu_iva" }, 56ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 57ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 5898fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsleystatic struct powerdomain mpu_3xxx_pwrdm = { 59ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "mpu_pwrdm", 60ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = MPU_MOD, 61ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 62ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_logic_ret = PWRSTS_OFF_RET, 633863c74b512c1afd3ce6b2f81d8dea9f1d860968Thara Gopinath .flags = PWRDM_HAS_MPU_QUIRK, 64ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 1, 65ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 66ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [0] = PWRSTS_OFF_RET, 67ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 68ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 69ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [0] = PWRSTS_OFF_ON, 70ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 71da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "mpu_iva" }, 72ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 73ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 7458dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar/* 7558dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar * The USBTLL Save-and-Restore mechanism is broken on 7625985edcedea6396277003854657b5f3cb31a628Lucas De Marchi * 3430s up to ES3.0 and 3630ES1.0. Hence this feature 7758dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar * needs to be disabled on these chips. 7858dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar * Refer: 3430 errata ID i459 and 3630 errata ID i579 79447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet * 80447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet * Note: setting the SAR flag could help for errata ID i478 81447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet * which applies to 3430 <= ES3.1, but since the SAR feature 82447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet * is broken, do not use it. 8358dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar */ 8498fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsleystatic struct powerdomain core_3xxx_pre_es3_1_pwrdm = { 85ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "core_pwrdm", 86ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = CORE_MOD, 877eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 884133a44e28cb65c380903ca69806eec039401f46Thara Gopinath .pwrsts_logic_ret = PWRSTS_OFF_RET, 897eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley .banks = 2, 907eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley .pwrsts_mem_ret = { 917eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley [0] = PWRSTS_OFF_RET, /* MEM1RETSTATE */ 927eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley [1] = PWRSTS_OFF_RET, /* MEM2RETSTATE */ 937eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley }, 947eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley .pwrsts_mem_on = { 957eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */ 967eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */ 977eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley }, 98da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 997eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley}; 1007eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley 10198fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsleystatic struct powerdomain core_3xxx_es3_1_pwrdm = { 1027eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley .name = "core_pwrdm", 1037eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley .prcm_offs = CORE_MOD, 104ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 1054133a44e28cb65c380903ca69806eec039401f46Thara Gopinath .pwrsts_logic_ret = PWRSTS_OFF_RET, 106447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet /* 107447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet * Setting the SAR flag for errata ID i478 which applies 108447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet * to 3430 <= ES3.1 109447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet */ 1107eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley .flags = PWRDM_HAS_HDWR_SAR, /* for USBTLL only */ 111ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 2, 112ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 113ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [0] = PWRSTS_OFF_RET, /* MEM1RETSTATE */ 114ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [1] = PWRSTS_OFF_RET, /* MEM2RETSTATE */ 115ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 116ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 117ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */ 118ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */ 119ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 120da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 121ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 122ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 123ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain dss_pwrdm = { 124ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "dss_pwrdm", 125ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430_DSS_MOD, 126ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 1274cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley .pwrsts_logic_ret = PWRSTS_RET, 128ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 1, 129ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 1304cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_RET, /* MEMRETSTATE */ 131ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 132ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 1334cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_ON, /* MEMONSTATE */ 134ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 135da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 136ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 137ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 138be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley/* 139be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley * Although the 34XX TRM Rev K Table 4-371 notes that retention is a 140be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley * possible SGX powerstate, the SGX device itself does not support 141be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley * retention. 142be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley */ 143ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain sgx_pwrdm = { 144ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "sgx_pwrdm", 145ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430ES2_SGX_MOD, 146ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley /* XXX This is accurate for 3430 SGX, but what about GFX? */ 147be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley .pwrsts = PWRSTS_OFF_ON, 1484cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley .pwrsts_logic_ret = PWRSTS_RET, 149ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 1, 150ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 1514cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_RET, /* MEMRETSTATE */ 152ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 153ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 1544cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_ON, /* MEMONSTATE */ 155ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 156da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 157ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 158ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 159ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain cam_pwrdm = { 160ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "cam_pwrdm", 161ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430_CAM_MOD, 162ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 1634cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley .pwrsts_logic_ret = PWRSTS_RET, 164ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 1, 165ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 1664cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_RET, /* MEMRETSTATE */ 167ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 168ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 1694cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_ON, /* MEMONSTATE */ 170ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 171da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 172ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 173ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 174ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain per_pwrdm = { 175ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "per_pwrdm", 176ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430_PER_MOD, 177ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 178ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_logic_ret = PWRSTS_OFF_RET, 179ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 1, 180ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 1814cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_RET, /* MEMRETSTATE */ 182ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 183ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 1844cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_ON, /* MEMONSTATE */ 185ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 186da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 187ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 188ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 189ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain emu_pwrdm = { 190ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "emu_pwrdm", 191ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430_EMU_MOD, 192da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 193ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 194ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 195ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain neon_pwrdm = { 196ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "neon_pwrdm", 197ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430_NEON_MOD, 198ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 1994cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley .pwrsts_logic_ret = PWRSTS_RET, 200da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "mpu_iva" }, 201ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 202ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 203ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain usbhost_pwrdm = { 204ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .name = "usbhost_pwrdm", 205ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .prcm_offs = OMAP3430ES2_USBHOST_MOD, 206ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 2074cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley .pwrsts_logic_ret = PWRSTS_RET, 208867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi /* 209867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi * REVISIT: Enabling usb host save and restore mechanism seems to 210867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi * leave the usb host domain permanently in ACTIVE mode after 211867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi * changing the usb host power domain state from OFF to active once. 212867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi * Disabling for now. 213867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi */ 214867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi /*.flags = PWRDM_HAS_HDWR_SAR,*/ /* for USBHOST ctrlr only */ 215ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .banks = 1, 216ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_ret = { 2174cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_RET, /* MEMRETSTATE */ 218ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 219ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley .pwrsts_mem_on = { 2204cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley [0] = PWRSTS_ON, /* MEMONSTATE */ 221ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley }, 222da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 223ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley}; 224ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 22546e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll1_pwrdm = { 22646e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .name = "dpll1_pwrdm", 22746e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .prcm_offs = MPU_MOD, 228da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "mpu_iva" }, 22946e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley}; 23046e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley 23146e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll2_pwrdm = { 23246e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .name = "dpll2_pwrdm", 23346e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .prcm_offs = OMAP3430_IVA2_MOD, 234da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "mpu_iva" }, 23546e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley}; 23646e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley 23746e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll3_pwrdm = { 23846e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .name = "dpll3_pwrdm", 23946e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .prcm_offs = PLL_MOD, 240da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 24146e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley}; 24246e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley 24346e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll4_pwrdm = { 24446e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .name = "dpll4_pwrdm", 24546e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .prcm_offs = PLL_MOD, 246da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 24746e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley}; 24846e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley 24946e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll5_pwrdm = { 25046e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .name = "dpll5_pwrdm", 25146e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley .prcm_offs = PLL_MOD, 252da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman .voltdm = { .name = "core" }, 25346e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley}; 25446e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley 2556e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley/* As powerdomains are added or removed above, this list must also be changed */ 2568179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430_common[] __initdata = { 2576e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &wkup_omap2_pwrdm, 2586e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &iva2_pwrdm, 2596e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &mpu_3xxx_pwrdm, 2606e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &neon_pwrdm, 2616e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &cam_pwrdm, 2626e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &dss_pwrdm, 2636e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &per_pwrdm, 2646e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &emu_pwrdm, 2656e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &dpll1_pwrdm, 2666e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &dpll2_pwrdm, 2676e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &dpll3_pwrdm, 2686e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &dpll4_pwrdm, 2698179488a36985d4929cf89be5d9171145a769511Paul Walmsley NULL 2708179488a36985d4929cf89be5d9171145a769511Paul Walmsley}; 2718179488a36985d4929cf89be5d9171145a769511Paul Walmsley 2728179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430es1[] __initdata = { 2738179488a36985d4929cf89be5d9171145a769511Paul Walmsley &gfx_omap2_pwrdm, 2748179488a36985d4929cf89be5d9171145a769511Paul Walmsley &core_3xxx_pre_es3_1_pwrdm, 2758179488a36985d4929cf89be5d9171145a769511Paul Walmsley NULL 2768179488a36985d4929cf89be5d9171145a769511Paul Walmsley}; 2778179488a36985d4929cf89be5d9171145a769511Paul Walmsley 2788179488a36985d4929cf89be5d9171145a769511Paul Walmsley/* also includes 3630ES1.0 */ 2798179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430es2_es3_0[] __initdata = { 2808179488a36985d4929cf89be5d9171145a769511Paul Walmsley &core_3xxx_pre_es3_1_pwrdm, 2818179488a36985d4929cf89be5d9171145a769511Paul Walmsley &sgx_pwrdm, 2828179488a36985d4929cf89be5d9171145a769511Paul Walmsley &usbhost_pwrdm, 2836e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley &dpll5_pwrdm, 2846e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley NULL 2856e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley}; 286ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 2878179488a36985d4929cf89be5d9171145a769511Paul Walmsley/* also includes 3630ES1.1+ */ 2888179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430es3_1plus[] __initdata = { 2898179488a36985d4929cf89be5d9171145a769511Paul Walmsley &core_3xxx_es3_1_pwrdm, 2908179488a36985d4929cf89be5d9171145a769511Paul Walmsley &sgx_pwrdm, 2918179488a36985d4929cf89be5d9171145a769511Paul Walmsley &usbhost_pwrdm, 2928179488a36985d4929cf89be5d9171145a769511Paul Walmsley &dpll5_pwrdm, 2938179488a36985d4929cf89be5d9171145a769511Paul Walmsley NULL 2948179488a36985d4929cf89be5d9171145a769511Paul Walmsley}; 295ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley 2966e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsleyvoid __init omap3xxx_powerdomains_init(void) 2976e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley{ 2988179488a36985d4929cf89be5d9171145a769511Paul Walmsley unsigned int rev; 2998179488a36985d4929cf89be5d9171145a769511Paul Walmsley 3008179488a36985d4929cf89be5d9171145a769511Paul Walmsley if (!cpu_is_omap34xx()) 3018179488a36985d4929cf89be5d9171145a769511Paul Walmsley return; 3028179488a36985d4929cf89be5d9171145a769511Paul Walmsley 303129c65ee66a97fbf663f2f5fce26aacdc7348736Paul Walmsley pwrdm_register_platform_funcs(&omap3_pwrdm_operations); 3048179488a36985d4929cf89be5d9171145a769511Paul Walmsley pwrdm_register_pwrdms(powerdomains_omap3430_common); 3058179488a36985d4929cf89be5d9171145a769511Paul Walmsley 3068179488a36985d4929cf89be5d9171145a769511Paul Walmsley rev = omap_rev(); 3078179488a36985d4929cf89be5d9171145a769511Paul Walmsley 3088179488a36985d4929cf89be5d9171145a769511Paul Walmsley if (rev == OMAP3430_REV_ES1_0) 3098179488a36985d4929cf89be5d9171145a769511Paul Walmsley pwrdm_register_pwrdms(powerdomains_omap3430es1); 3108179488a36985d4929cf89be5d9171145a769511Paul Walmsley else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 || 3118179488a36985d4929cf89be5d9171145a769511Paul Walmsley rev == OMAP3430_REV_ES3_0 || rev == OMAP3630_REV_ES1_0) 3128179488a36985d4929cf89be5d9171145a769511Paul Walmsley pwrdm_register_pwrdms(powerdomains_omap3430es2_es3_0); 3138179488a36985d4929cf89be5d9171145a769511Paul Walmsley else if (rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2 || 3148179488a36985d4929cf89be5d9171145a769511Paul Walmsley rev == OMAP3517_REV_ES1_0 || rev == OMAP3517_REV_ES1_1 || 3158179488a36985d4929cf89be5d9171145a769511Paul Walmsley rev == OMAP3630_REV_ES1_1 || rev == OMAP3630_REV_ES1_2) 3168179488a36985d4929cf89be5d9171145a769511Paul Walmsley pwrdm_register_pwrdms(powerdomains_omap3430es3_1plus); 3178179488a36985d4929cf89be5d9171145a769511Paul Walmsley else 3188179488a36985d4929cf89be5d9171145a769511Paul Walmsley WARN(1, "OMAP3 powerdomain init: unknown chip type\n"); 3198179488a36985d4929cf89be5d9171145a769511Paul Walmsley 320129c65ee66a97fbf663f2f5fce26aacdc7348736Paul Walmsley pwrdm_complete_init(); 3216e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley} 322