linux/arch/arm/mach-omap2/powerdomains44xx_data.c
<<
>>
Prefs
   1/*
   2 * OMAP4 Power domains framework
   3 *
   4 * Copyright (C) 2009-2011 Texas Instruments, Inc.
   5 * Copyright (C) 2009-2011 Nokia Corporation
   6 *
   7 * Abhijit Pagare (abhijitpagare@ti.com)
   8 * Benoit Cousson (b-cousson@ti.com)
   9 * Paul Walmsley (paul@pwsan.com)
  10 *
  11 * This file is automatically generated from the OMAP hardware databases.
  12 * We respectfully ask that any modifications to this file be coordinated
  13 * with the public linux-omap@vger.kernel.org mailing list and the
  14 * authors above to ensure that the autogeneration scripts are kept
  15 * up-to-date with the file contents.
  16 *
  17 * This program is free software; you can redistribute it and/or modify
  18 * it under the terms of the GNU General Public License version 2 as
  19 * published by the Free Software Foundation.
  20 */
  21
  22#include <linux/kernel.h>
  23#include <linux/init.h>
  24
  25#include "powerdomain.h"
  26
  27#include "prcm-common.h"
  28#include "prcm44xx.h"
  29#include "prm-regbits-44xx.h"
  30#include "prm44xx.h"
  31#include "prcm_mpu44xx.h"
  32
  33/* core_44xx_pwrdm: CORE power domain */
  34static struct powerdomain core_44xx_pwrdm = {
  35        .name             = "core_pwrdm",
  36        .voltdm           = { .name = "core" },
  37        .prcm_offs        = OMAP4430_PRM_CORE_INST,
  38        .prcm_partition   = OMAP4430_PRM_PARTITION,
  39        .pwrsts           = PWRSTS_RET_ON,
  40        .pwrsts_logic_ret = PWRSTS_OFF_RET,
  41        .banks            = 5,
  42        .pwrsts_mem_ret = {
  43                [0] = PWRSTS_OFF,       /* core_nret_bank */
  44                [1] = PWRSTS_RET,       /* core_ocmram */
  45                [2] = PWRSTS_RET,       /* core_other_bank */
  46                [3] = PWRSTS_OFF_RET,   /* ducati_l2ram */
  47                [4] = PWRSTS_OFF_RET,   /* ducati_unicache */
  48        },
  49        .pwrsts_mem_on  = {
  50                [0] = PWRSTS_ON,        /* core_nret_bank */
  51                [1] = PWRSTS_ON,        /* core_ocmram */
  52                [2] = PWRSTS_ON,        /* core_other_bank */
  53                [3] = PWRSTS_ON,        /* ducati_l2ram */
  54                [4] = PWRSTS_ON,        /* ducati_unicache */
  55        },
  56        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
  57};
  58
  59/* gfx_44xx_pwrdm: 3D accelerator power domain */
  60static struct powerdomain gfx_44xx_pwrdm = {
  61        .name             = "gfx_pwrdm",
  62        .voltdm           = { .name = "core" },
  63        .prcm_offs        = OMAP4430_PRM_GFX_INST,
  64        .prcm_partition   = OMAP4430_PRM_PARTITION,
  65        .pwrsts           = PWRSTS_OFF_ON,
  66        .banks            = 1,
  67        .pwrsts_mem_ret = {
  68                [0] = PWRSTS_OFF,       /* gfx_mem */
  69        },
  70        .pwrsts_mem_on  = {
  71                [0] = PWRSTS_ON,        /* gfx_mem */
  72        },
  73        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
  74};
  75
  76/* abe_44xx_pwrdm: Audio back end power domain */
  77static struct powerdomain abe_44xx_pwrdm = {
  78        .name             = "abe_pwrdm",
  79        .voltdm           = { .name = "iva" },
  80        .prcm_offs        = OMAP4430_PRM_ABE_INST,
  81        .prcm_partition   = OMAP4430_PRM_PARTITION,
  82        .pwrsts           = PWRSTS_OFF_RET_ON,
  83        .pwrsts_logic_ret = PWRSTS_OFF,
  84        .banks            = 2,
  85        .pwrsts_mem_ret = {
  86                [0] = PWRSTS_RET,       /* aessmem */
  87                [1] = PWRSTS_OFF,       /* periphmem */
  88        },
  89        .pwrsts_mem_on  = {
  90                [0] = PWRSTS_ON,        /* aessmem */
  91                [1] = PWRSTS_ON,        /* periphmem */
  92        },
  93        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
  94};
  95
  96/* dss_44xx_pwrdm: Display subsystem power domain */
  97static struct powerdomain dss_44xx_pwrdm = {
  98        .name             = "dss_pwrdm",
  99        .voltdm           = { .name = "core" },
 100        .prcm_offs        = OMAP4430_PRM_DSS_INST,
 101        .prcm_partition   = OMAP4430_PRM_PARTITION,
 102        .pwrsts           = PWRSTS_OFF_RET_ON,
 103        .pwrsts_logic_ret = PWRSTS_OFF,
 104        .banks            = 1,
 105        .pwrsts_mem_ret = {
 106                [0] = PWRSTS_OFF,       /* dss_mem */
 107        },
 108        .pwrsts_mem_on  = {
 109                [0] = PWRSTS_ON,        /* dss_mem */
 110        },
 111        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
 112};
 113
 114/* tesla_44xx_pwrdm: Tesla processor power domain */
 115static struct powerdomain tesla_44xx_pwrdm = {
 116        .name             = "tesla_pwrdm",
 117        .voltdm           = { .name = "iva" },
 118        .prcm_offs        = OMAP4430_PRM_TESLA_INST,
 119        .prcm_partition   = OMAP4430_PRM_PARTITION,
 120        .pwrsts           = PWRSTS_OFF_RET_ON,
 121        .pwrsts_logic_ret = PWRSTS_OFF_RET,
 122        .banks            = 3,
 123        .pwrsts_mem_ret = {
 124                [0] = PWRSTS_RET,       /* tesla_edma */
 125                [1] = PWRSTS_OFF_RET,   /* tesla_l1 */
 126                [2] = PWRSTS_OFF_RET,   /* tesla_l2 */
 127        },
 128        .pwrsts_mem_on  = {
 129                [0] = PWRSTS_ON,        /* tesla_edma */
 130                [1] = PWRSTS_ON,        /* tesla_l1 */
 131                [2] = PWRSTS_ON,        /* tesla_l2 */
 132        },
 133        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
 134};
 135
 136/* wkup_44xx_pwrdm: Wake-up power domain */
 137static struct powerdomain wkup_44xx_pwrdm = {
 138        .name             = "wkup_pwrdm",
 139        .voltdm           = { .name = "wakeup" },
 140        .prcm_offs        = OMAP4430_PRM_WKUP_INST,
 141        .prcm_partition   = OMAP4430_PRM_PARTITION,
 142        .pwrsts           = PWRSTS_ON,
 143        .banks            = 1,
 144        .pwrsts_mem_ret = {
 145                [0] = PWRSTS_OFF,       /* wkup_bank */
 146        },
 147        .pwrsts_mem_on  = {
 148                [0] = PWRSTS_ON,        /* wkup_bank */
 149        },
 150};
 151
 152/* cpu0_44xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
 153static struct powerdomain cpu0_44xx_pwrdm = {
 154        .name             = "cpu0_pwrdm",
 155        .voltdm           = { .name = "mpu" },
 156        .prcm_offs        = OMAP4430_PRCM_MPU_CPU0_INST,
 157        .prcm_partition   = OMAP4430_PRCM_MPU_PARTITION,
 158        .pwrsts           = PWRSTS_OFF_RET_ON,
 159        .pwrsts_logic_ret = PWRSTS_OFF_RET,
 160        .banks            = 1,
 161        .pwrsts_mem_ret = {
 162                [0] = PWRSTS_OFF_RET,   /* cpu0_l1 */
 163        },
 164        .pwrsts_mem_on  = {
 165                [0] = PWRSTS_ON,        /* cpu0_l1 */
 166        },
 167};
 168
 169/* cpu1_44xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
 170static struct powerdomain cpu1_44xx_pwrdm = {
 171        .name             = "cpu1_pwrdm",
 172        .voltdm           = { .name = "mpu" },
 173        .prcm_offs        = OMAP4430_PRCM_MPU_CPU1_INST,
 174        .prcm_partition   = OMAP4430_PRCM_MPU_PARTITION,
 175        .pwrsts           = PWRSTS_OFF_RET_ON,
 176        .pwrsts_logic_ret = PWRSTS_OFF_RET,
 177        .banks            = 1,
 178        .pwrsts_mem_ret = {
 179                [0] = PWRSTS_OFF_RET,   /* cpu1_l1 */
 180        },
 181        .pwrsts_mem_on  = {
 182                [0] = PWRSTS_ON,        /* cpu1_l1 */
 183        },
 184};
 185
 186/* emu_44xx_pwrdm: Emulation power domain */
 187static struct powerdomain emu_44xx_pwrdm = {
 188        .name             = "emu_pwrdm",
 189        .voltdm           = { .name = "wakeup" },
 190        .prcm_offs        = OMAP4430_PRM_EMU_INST,
 191        .prcm_partition   = OMAP4430_PRM_PARTITION,
 192        .pwrsts           = PWRSTS_OFF_ON,
 193        .banks            = 1,
 194        .pwrsts_mem_ret = {
 195                [0] = PWRSTS_OFF,       /* emu_bank */
 196        },
 197        .pwrsts_mem_on  = {
 198                [0] = PWRSTS_ON,        /* emu_bank */
 199        },
 200};
 201
 202/* mpu_44xx_pwrdm: Modena processor and the Neon coprocessor power domain */
 203static struct powerdomain mpu_44xx_pwrdm = {
 204        .name             = "mpu_pwrdm",
 205        .voltdm           = { .name = "mpu" },
 206        .prcm_offs        = OMAP4430_PRM_MPU_INST,
 207        .prcm_partition   = OMAP4430_PRM_PARTITION,
 208        .pwrsts           = PWRSTS_RET_ON,
 209        .pwrsts_logic_ret = PWRSTS_OFF_RET,
 210        .banks            = 3,
 211        .pwrsts_mem_ret = {
 212                [0] = PWRSTS_OFF_RET,   /* mpu_l1 */
 213                [1] = PWRSTS_OFF_RET,   /* mpu_l2 */
 214                [2] = PWRSTS_RET,       /* mpu_ram */
 215        },
 216        .pwrsts_mem_on  = {
 217                [0] = PWRSTS_ON,        /* mpu_l1 */
 218                [1] = PWRSTS_ON,        /* mpu_l2 */
 219                [2] = PWRSTS_ON,        /* mpu_ram */
 220        },
 221};
 222
 223/* ivahd_44xx_pwrdm: IVA-HD power domain */
 224static struct powerdomain ivahd_44xx_pwrdm = {
 225        .name             = "ivahd_pwrdm",
 226        .voltdm           = { .name = "iva" },
 227        .prcm_offs        = OMAP4430_PRM_IVAHD_INST,
 228        .prcm_partition   = OMAP4430_PRM_PARTITION,
 229        .pwrsts           = PWRSTS_OFF_RET_ON,
 230        .pwrsts_logic_ret = PWRSTS_OFF,
 231        .banks            = 4,
 232        .pwrsts_mem_ret = {
 233                [0] = PWRSTS_OFF,       /* hwa_mem */
 234                [1] = PWRSTS_OFF_RET,   /* sl2_mem */
 235                [2] = PWRSTS_OFF_RET,   /* tcm1_mem */
 236                [3] = PWRSTS_OFF_RET,   /* tcm2_mem */
 237        },
 238        .pwrsts_mem_on  = {
 239                [0] = PWRSTS_ON,        /* hwa_mem */
 240                [1] = PWRSTS_ON,        /* sl2_mem */
 241                [2] = PWRSTS_ON,        /* tcm1_mem */
 242                [3] = PWRSTS_ON,        /* tcm2_mem */
 243        },
 244        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
 245};
 246
 247/* cam_44xx_pwrdm: Camera subsystem power domain */
 248static struct powerdomain cam_44xx_pwrdm = {
 249        .name             = "cam_pwrdm",
 250        .voltdm           = { .name = "core" },
 251        .prcm_offs        = OMAP4430_PRM_CAM_INST,
 252        .prcm_partition   = OMAP4430_PRM_PARTITION,
 253        .pwrsts           = PWRSTS_OFF_ON,
 254        .banks            = 1,
 255        .pwrsts_mem_ret = {
 256                [0] = PWRSTS_OFF,       /* cam_mem */
 257        },
 258        .pwrsts_mem_on  = {
 259                [0] = PWRSTS_ON,        /* cam_mem */
 260        },
 261        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
 262};
 263
 264/* l3init_44xx_pwrdm: L3 initators pheripherals power domain  */
 265static struct powerdomain l3init_44xx_pwrdm = {
 266        .name             = "l3init_pwrdm",
 267        .voltdm           = { .name = "core" },
 268        .prcm_offs        = OMAP4430_PRM_L3INIT_INST,
 269        .prcm_partition   = OMAP4430_PRM_PARTITION,
 270        .pwrsts           = PWRSTS_RET_ON,
 271        .pwrsts_logic_ret = PWRSTS_OFF_RET,
 272        .banks            = 1,
 273        .pwrsts_mem_ret = {
 274                [0] = PWRSTS_OFF,       /* l3init_bank1 */
 275        },
 276        .pwrsts_mem_on  = {
 277                [0] = PWRSTS_ON,        /* l3init_bank1 */
 278        },
 279        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
 280};
 281
 282/* l4per_44xx_pwrdm: Target peripherals power domain */
 283static struct powerdomain l4per_44xx_pwrdm = {
 284        .name             = "l4per_pwrdm",
 285        .voltdm           = { .name = "core" },
 286        .prcm_offs        = OMAP4430_PRM_L4PER_INST,
 287        .prcm_partition   = OMAP4430_PRM_PARTITION,
 288        .pwrsts           = PWRSTS_RET_ON,
 289        .pwrsts_logic_ret = PWRSTS_OFF_RET,
 290        .banks            = 2,
 291        .pwrsts_mem_ret = {
 292                [0] = PWRSTS_OFF,       /* nonretained_bank */
 293                [1] = PWRSTS_RET,       /* retained_bank */
 294        },
 295        .pwrsts_mem_on  = {
 296                [0] = PWRSTS_ON,        /* nonretained_bank */
 297                [1] = PWRSTS_ON,        /* retained_bank */
 298        },
 299        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
 300};
 301
 302/*
 303 * always_on_core_44xx_pwrdm: Always ON logic that sits in VDD_CORE voltage
 304 * domain
 305 */
 306static struct powerdomain always_on_core_44xx_pwrdm = {
 307        .name             = "always_on_core_pwrdm",
 308        .voltdm           = { .name = "core" },
 309        .prcm_offs        = OMAP4430_PRM_ALWAYS_ON_INST,
 310        .prcm_partition   = OMAP4430_PRM_PARTITION,
 311        .pwrsts           = PWRSTS_ON,
 312};
 313
 314/* cefuse_44xx_pwrdm: Customer efuse controller power domain */
 315static struct powerdomain cefuse_44xx_pwrdm = {
 316        .name             = "cefuse_pwrdm",
 317        .voltdm           = { .name = "core" },
 318        .prcm_offs        = OMAP4430_PRM_CEFUSE_INST,
 319        .prcm_partition   = OMAP4430_PRM_PARTITION,
 320        .pwrsts           = PWRSTS_OFF_ON,
 321        .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
 322};
 323
 324/*
 325 * The following power domains are not under SW control
 326 *
 327 * always_on_iva
 328 * always_on_mpu
 329 * stdefuse
 330 */
 331
 332/* As powerdomains are added or removed above, this list must also be changed */
 333static struct powerdomain *powerdomains_omap44xx[] __initdata = {
 334        &core_44xx_pwrdm,
 335        &gfx_44xx_pwrdm,
 336        &abe_44xx_pwrdm,
 337        &dss_44xx_pwrdm,
 338        &tesla_44xx_pwrdm,
 339        &wkup_44xx_pwrdm,
 340        &cpu0_44xx_pwrdm,
 341        &cpu1_44xx_pwrdm,
 342        &emu_44xx_pwrdm,
 343        &mpu_44xx_pwrdm,
 344        &ivahd_44xx_pwrdm,
 345        &cam_44xx_pwrdm,
 346        &l3init_44xx_pwrdm,
 347        &l4per_44xx_pwrdm,
 348        &always_on_core_44xx_pwrdm,
 349        &cefuse_44xx_pwrdm,
 350        NULL
 351};
 352
 353void __init omap44xx_powerdomains_init(void)
 354{
 355        pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
 356        pwrdm_register_pwrdms(powerdomains_omap44xx);
 357        pwrdm_complete_init();
 358}
 359