2008-03-18 16:02:50 +08:00
|
|
|
/*
|
2010-12-22 06:30:55 +08:00
|
|
|
* OMAP2/3/4 Power/Reset Management (PRM) bitfield definitions
|
2008-03-18 16:02:50 +08:00
|
|
|
*
|
2012-10-30 10:57:39 +08:00
|
|
|
* Copyright (C) 2007-2009, 2012 Texas Instruments, Inc.
|
2010-09-22 00:34:10 +08:00
|
|
|
* Copyright (C) 2010 Nokia Corporation
|
2008-03-18 16:02:50 +08:00
|
|
|
*
|
2010-12-22 06:30:55 +08:00
|
|
|
* Paul Walmsley
|
2008-03-18 16:02:50 +08:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*/
|
2010-12-22 06:30:55 +08:00
|
|
|
#ifndef __ARCH_ARM_MACH_OMAP2_PRM_H
|
|
|
|
#define __ARCH_ARM_MACH_OMAP2_PRM_H
|
2008-03-18 16:02:50 +08:00
|
|
|
|
|
|
|
#include "prcm-common.h"
|
|
|
|
|
2012-10-30 10:57:39 +08:00
|
|
|
# ifndef __ASSEMBLER__
|
|
|
|
extern void __iomem *prm_base;
|
|
|
|
extern void omap2_set_globals_prm(void __iomem *prm);
|
|
|
|
# endif
|
|
|
|
|
2012-10-30 10:57:44 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* MAX_MODULE_SOFTRESET_WAIT: Maximum microseconds to wait for OMAP
|
|
|
|
* module to softreset
|
|
|
|
*/
|
|
|
|
#define MAX_MODULE_SOFTRESET_WAIT 10000
|
|
|
|
|
|
|
|
/*
|
|
|
|
* MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP
|
|
|
|
* submodule to exit hardreset
|
|
|
|
*/
|
|
|
|
#define MAX_MODULE_HARDRESET_WAIT 10000
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Register bitfields
|
|
|
|
*/
|
|
|
|
|
2008-03-18 16:02:50 +08:00
|
|
|
/*
|
|
|
|
* 24XX: PM_PWSTST_CORE, PM_PWSTST_GFX, PM_PWSTST_MPU, PM_PWSTST_DSP
|
|
|
|
*
|
|
|
|
* 2430: PM_PWSTST_MDM
|
|
|
|
*
|
|
|
|
* 3430: PM_PWSTST_IVA2, PM_PWSTST_MPU, PM_PWSTST_CORE, PM_PWSTST_GFX,
|
|
|
|
* PM_PWSTST_DSS, PM_PWSTST_CAM, PM_PWSTST_PER, PM_PWSTST_EMU,
|
|
|
|
* PM_PWSTST_NEON
|
|
|
|
*/
|
2010-05-19 08:40:23 +08:00
|
|
|
#define OMAP_INTRANSITION_MASK (1 << 20)
|
2008-03-18 16:02:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 24XX: PM_PWSTST_GFX, PM_PWSTST_DSP
|
|
|
|
*
|
|
|
|
* 2430: PM_PWSTST_MDM
|
|
|
|
*
|
|
|
|
* 3430: PM_PWSTST_IVA2, PM_PWSTST_MPU, PM_PWSTST_CORE, PM_PWSTST_GFX,
|
|
|
|
* PM_PWSTST_DSS, PM_PWSTST_CAM, PM_PWSTST_PER, PM_PWSTST_EMU,
|
|
|
|
* PM_PWSTST_NEON
|
|
|
|
*/
|
|
|
|
#define OMAP_POWERSTATEST_SHIFT 0
|
|
|
|
#define OMAP_POWERSTATEST_MASK (0x3 << 0)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 24XX: PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
|
|
|
|
* PM_PWSTCTRL_DSP, PM_PWSTST_MPU
|
|
|
|
*
|
|
|
|
* 2430: PM_PWSTCTRL_MDM shared bits
|
|
|
|
*
|
|
|
|
* 3430: PM_PWSTCTRL_IVA2, PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE,
|
|
|
|
* PM_PWSTCTRL_GFX, PM_PWSTCTRL_DSS, PM_PWSTCTRL_CAM, PM_PWSTCTRL_PER,
|
|
|
|
* PM_PWSTCTRL_NEON shared bits
|
|
|
|
*/
|
|
|
|
#define OMAP_POWERSTATE_SHIFT 0
|
|
|
|
#define OMAP_POWERSTATE_MASK (0x3 << 0)
|
|
|
|
|
2012-10-21 15:01:13 +08:00
|
|
|
/*
|
|
|
|
* Standardized OMAP reset source bits
|
|
|
|
*
|
|
|
|
* To the extent these happen to match the hardware register bit
|
|
|
|
* shifts, it's purely coincidental. Used by omap-wdt.c.
|
|
|
|
* OMAP_UNKNOWN_RST_SRC_ID_SHIFT is a special value, used whenever
|
|
|
|
* there are any bits remaining in the global PRM_RSTST register that
|
|
|
|
* haven't been identified, or when the PRM code for the current SoC
|
|
|
|
* doesn't know how to interpret the register.
|
|
|
|
*/
|
|
|
|
#define OMAP_GLOBAL_COLD_RST_SRC_ID_SHIFT 0
|
|
|
|
#define OMAP_GLOBAL_WARM_RST_SRC_ID_SHIFT 1
|
|
|
|
#define OMAP_SECU_VIOL_RST_SRC_ID_SHIFT 2
|
|
|
|
#define OMAP_MPU_WD_RST_SRC_ID_SHIFT 3
|
|
|
|
#define OMAP_SECU_WD_RST_SRC_ID_SHIFT 4
|
|
|
|
#define OMAP_EXTWARM_RST_SRC_ID_SHIFT 5
|
|
|
|
#define OMAP_VDD_MPU_VM_RST_SRC_ID_SHIFT 6
|
|
|
|
#define OMAP_VDD_IVA_VM_RST_SRC_ID_SHIFT 7
|
|
|
|
#define OMAP_VDD_CORE_VM_RST_SRC_ID_SHIFT 8
|
|
|
|
#define OMAP_ICEPICK_RST_SRC_ID_SHIFT 9
|
|
|
|
#define OMAP_ICECRUSHER_RST_SRC_ID_SHIFT 10
|
|
|
|
#define OMAP_C2C_RST_SRC_ID_SHIFT 11
|
|
|
|
#define OMAP_UNKNOWN_RST_SRC_ID_SHIFT 12
|
|
|
|
|
ARM: OMAP2+: PRM: prepare for use of prm_ll_data function pointers
There are several PRM operations which behave similarly across OMAP2+
SoCs, but which have slight differences in their underlying
implementations. For example, to fetch the SoC's last reset sources,
different registers are read across OMAP2xxx, 3xxx, and 44xx, and
different bits are used on each SoC. But the information returned is
so similar that a single, common interface for drivers is useful.
This patch creates the support code for this function pointer
registration process. No function pointers are included yet, but a
subsequent patch will create one for the reset source API.
To illustrate the end goal with the above reset source example, each
per-SoC driver will use its own low-level implementation function --
e.g., prm2xxx.c would contain omap2xxx_prm_read_reset_sources(). This
function would read the appropriate register and remap the register
bits to a standard set of reset source bits. When the prm2xxx.c
driver is loaded, it would register this function with the common PRM
driver, prm.c. prm.c would then export a common function,
omap_prm_read_reset_sources(). Calling it would call through to the
function pointer for the currently-registered SoC PRM driver. This
will allow other drivers to use PRM-provided data and operations
without needing to know which SoC is currently in use.
Signed-off-by: Paul Walmsley <paul@pwsan.com>
2012-10-21 15:01:11 +08:00
|
|
|
#ifndef __ASSEMBLER__
|
|
|
|
|
2012-10-21 15:01:13 +08:00
|
|
|
/**
|
|
|
|
* struct prm_reset_src_map - map register bitshifts to standard bitshifts
|
|
|
|
* @reg_shift: bitshift in the PRM reset source register
|
|
|
|
* @std_shift: bitshift equivalent in the standard reset source list
|
|
|
|
*
|
|
|
|
* The fields are signed because -1 is used as a terminator.
|
|
|
|
*/
|
|
|
|
struct prm_reset_src_map {
|
|
|
|
s8 reg_shift;
|
|
|
|
s8 std_shift;
|
|
|
|
};
|
|
|
|
|
ARM: OMAP2+: PRM: prepare for use of prm_ll_data function pointers
There are several PRM operations which behave similarly across OMAP2+
SoCs, but which have slight differences in their underlying
implementations. For example, to fetch the SoC's last reset sources,
different registers are read across OMAP2xxx, 3xxx, and 44xx, and
different bits are used on each SoC. But the information returned is
so similar that a single, common interface for drivers is useful.
This patch creates the support code for this function pointer
registration process. No function pointers are included yet, but a
subsequent patch will create one for the reset source API.
To illustrate the end goal with the above reset source example, each
per-SoC driver will use its own low-level implementation function --
e.g., prm2xxx.c would contain omap2xxx_prm_read_reset_sources(). This
function would read the appropriate register and remap the register
bits to a standard set of reset source bits. When the prm2xxx.c
driver is loaded, it would register this function with the common PRM
driver, prm.c. prm.c would then export a common function,
omap_prm_read_reset_sources(). Calling it would call through to the
function pointer for the currently-registered SoC PRM driver. This
will allow other drivers to use PRM-provided data and operations
without needing to know which SoC is currently in use.
Signed-off-by: Paul Walmsley <paul@pwsan.com>
2012-10-21 15:01:11 +08:00
|
|
|
/**
|
|
|
|
* struct prm_ll_data - fn ptrs to per-SoC PRM function implementations
|
2012-10-21 15:01:13 +08:00
|
|
|
* @read_reset_sources: ptr to the Soc PRM-specific get_reset_source impl
|
ARM: OMAP2+: PRM: prepare for use of prm_ll_data function pointers
There are several PRM operations which behave similarly across OMAP2+
SoCs, but which have slight differences in their underlying
implementations. For example, to fetch the SoC's last reset sources,
different registers are read across OMAP2xxx, 3xxx, and 44xx, and
different bits are used on each SoC. But the information returned is
so similar that a single, common interface for drivers is useful.
This patch creates the support code for this function pointer
registration process. No function pointers are included yet, but a
subsequent patch will create one for the reset source API.
To illustrate the end goal with the above reset source example, each
per-SoC driver will use its own low-level implementation function --
e.g., prm2xxx.c would contain omap2xxx_prm_read_reset_sources(). This
function would read the appropriate register and remap the register
bits to a standard set of reset source bits. When the prm2xxx.c
driver is loaded, it would register this function with the common PRM
driver, prm.c. prm.c would then export a common function,
omap_prm_read_reset_sources(). Calling it would call through to the
function pointer for the currently-registered SoC PRM driver. This
will allow other drivers to use PRM-provided data and operations
without needing to know which SoC is currently in use.
Signed-off-by: Paul Walmsley <paul@pwsan.com>
2012-10-21 15:01:11 +08:00
|
|
|
*/
|
2012-10-21 15:01:13 +08:00
|
|
|
struct prm_ll_data {
|
|
|
|
u32 (*read_reset_sources)(void);
|
|
|
|
};
|
ARM: OMAP2+: PRM: prepare for use of prm_ll_data function pointers
There are several PRM operations which behave similarly across OMAP2+
SoCs, but which have slight differences in their underlying
implementations. For example, to fetch the SoC's last reset sources,
different registers are read across OMAP2xxx, 3xxx, and 44xx, and
different bits are used on each SoC. But the information returned is
so similar that a single, common interface for drivers is useful.
This patch creates the support code for this function pointer
registration process. No function pointers are included yet, but a
subsequent patch will create one for the reset source API.
To illustrate the end goal with the above reset source example, each
per-SoC driver will use its own low-level implementation function --
e.g., prm2xxx.c would contain omap2xxx_prm_read_reset_sources(). This
function would read the appropriate register and remap the register
bits to a standard set of reset source bits. When the prm2xxx.c
driver is loaded, it would register this function with the common PRM
driver, prm.c. prm.c would then export a common function,
omap_prm_read_reset_sources(). Calling it would call through to the
function pointer for the currently-registered SoC PRM driver. This
will allow other drivers to use PRM-provided data and operations
without needing to know which SoC is currently in use.
Signed-off-by: Paul Walmsley <paul@pwsan.com>
2012-10-21 15:01:11 +08:00
|
|
|
|
|
|
|
extern int prm_register(struct prm_ll_data *pld);
|
|
|
|
extern int prm_unregister(struct prm_ll_data *pld);
|
|
|
|
|
2012-10-21 15:01:13 +08:00
|
|
|
extern u32 prm_read_reset_sources(void);
|
|
|
|
|
ARM: OMAP2+: PRM: prepare for use of prm_ll_data function pointers
There are several PRM operations which behave similarly across OMAP2+
SoCs, but which have slight differences in their underlying
implementations. For example, to fetch the SoC's last reset sources,
different registers are read across OMAP2xxx, 3xxx, and 44xx, and
different bits are used on each SoC. But the information returned is
so similar that a single, common interface for drivers is useful.
This patch creates the support code for this function pointer
registration process. No function pointers are included yet, but a
subsequent patch will create one for the reset source API.
To illustrate the end goal with the above reset source example, each
per-SoC driver will use its own low-level implementation function --
e.g., prm2xxx.c would contain omap2xxx_prm_read_reset_sources(). This
function would read the appropriate register and remap the register
bits to a standard set of reset source bits. When the prm2xxx.c
driver is loaded, it would register this function with the common PRM
driver, prm.c. prm.c would then export a common function,
omap_prm_read_reset_sources(). Calling it would call through to the
function pointer for the currently-registered SoC PRM driver. This
will allow other drivers to use PRM-provided data and operations
without needing to know which SoC is currently in use.
Signed-off-by: Paul Walmsley <paul@pwsan.com>
2012-10-21 15:01:11 +08:00
|
|
|
#endif
|
2008-03-18 16:02:50 +08:00
|
|
|
|
2012-10-21 15:01:13 +08:00
|
|
|
|
2008-03-18 16:02:50 +08:00
|
|
|
#endif
|