提交 d41ad520 编写于 作者: P Paul Walmsley 提交者: Russell King

[ARM] OMAP3: update ES level flags to discriminate between post-ES2 revisions

Some OMAP3 chip behaviors change in ES levels after ES2.  Modify the
existing omap_chip flags to add options for ES3.0 and ES3.1.

Add a new macro, CHIP_GE_OMAP3430ES2, to cover ES levels from ES2
onwards - a common pattern for OMAP3 features.  Update all current
users of the omap_chip macros to use this new macro.

Also add CHIP_GE_OMAP3430ES3_1 to cover the USBTLL SAR errata case
(described and fixed in the following patch)
Signed-off-by: NPaul Walmsley <paul@pwsan.com>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 c0bf3132
...@@ -182,7 +182,7 @@ static struct clockdomain sgx_clkdm = { ...@@ -182,7 +182,7 @@ static struct clockdomain sgx_clkdm = {
.pwrdm = { .name = "sgx_pwrdm" }, .pwrdm = { .name = "sgx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
}; };
/* /*
...@@ -237,7 +237,7 @@ static struct clockdomain usbhost_clkdm = { ...@@ -237,7 +237,7 @@ static struct clockdomain usbhost_clkdm = {
.pwrdm = { .name = "usbhost_pwrdm" }, .pwrdm = { .name = "usbhost_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
}; };
static struct clockdomain per_clkdm = { static struct clockdomain per_clkdm = {
...@@ -287,7 +287,7 @@ static struct clockdomain dpll4_clkdm = { ...@@ -287,7 +287,7 @@ static struct clockdomain dpll4_clkdm = {
static struct clockdomain dpll5_clkdm = { static struct clockdomain dpll5_clkdm = {
.name = "dpll5_clkdm", .name = "dpll5_clkdm",
.pwrdm = { .name = "dpll5_pwrdm" }, .pwrdm = { .name = "dpll5_pwrdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
}; };
#endif /* CONFIG_ARCH_OMAP34XX */ #endif /* CONFIG_ARCH_OMAP34XX */
......
...@@ -217,8 +217,13 @@ void __init omap2_check_revision(void) ...@@ -217,8 +217,13 @@ void __init omap2_check_revision(void)
omap_chip.oc = CHIP_IS_OMAP3430; omap_chip.oc = CHIP_IS_OMAP3430;
if (omap_rev() == OMAP3430_REV_ES1_0) if (omap_rev() == OMAP3430_REV_ES1_0)
omap_chip.oc |= CHIP_IS_OMAP3430ES1; omap_chip.oc |= CHIP_IS_OMAP3430ES1;
else if (omap_rev() > OMAP3430_REV_ES1_0) else if (omap_rev() >= OMAP3430_REV_ES2_0 &&
omap_rev() <= OMAP3430_REV_ES2_1)
omap_chip.oc |= CHIP_IS_OMAP3430ES2; omap_chip.oc |= CHIP_IS_OMAP3430ES2;
else if (omap_rev() == OMAP3430_REV_ES3_0)
omap_chip.oc |= CHIP_IS_OMAP3430ES3_0;
else if (omap_rev() == OMAP3430_REV_ES3_1)
omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;
} else { } else {
pr_err("Uninitialized omap_chip, please fix!\n"); pr_err("Uninitialized omap_chip, please fix!\n");
} }
......
...@@ -244,7 +244,7 @@ static struct powerdomain dss_pwrdm = { ...@@ -244,7 +244,7 @@ static struct powerdomain dss_pwrdm = {
static struct powerdomain sgx_pwrdm = { static struct powerdomain sgx_pwrdm = {
.name = "sgx_pwrdm", .name = "sgx_pwrdm",
.prcm_offs = OMAP3430ES2_SGX_MOD, .prcm_offs = OMAP3430ES2_SGX_MOD,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
.wkdep_srcs = gfx_sgx_wkdeps, .wkdep_srcs = gfx_sgx_wkdeps,
.sleepdep_srcs = cam_gfx_sleepdeps, .sleepdep_srcs = cam_gfx_sleepdeps,
/* XXX This is accurate for 3430 SGX, but what about GFX? */ /* XXX This is accurate for 3430 SGX, but what about GFX? */
...@@ -312,7 +312,7 @@ static struct powerdomain neon_pwrdm = { ...@@ -312,7 +312,7 @@ static struct powerdomain neon_pwrdm = {
static struct powerdomain usbhost_pwrdm = { static struct powerdomain usbhost_pwrdm = {
.name = "usbhost_pwrdm", .name = "usbhost_pwrdm",
.prcm_offs = OMAP3430ES2_USBHOST_MOD, .prcm_offs = OMAP3430ES2_USBHOST_MOD,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
.wkdep_srcs = per_usbhost_wkdeps, .wkdep_srcs = per_usbhost_wkdeps,
.sleepdep_srcs = dss_per_usbhost_sleepdeps, .sleepdep_srcs = dss_per_usbhost_sleepdeps,
.pwrsts = PWRSTS_OFF_RET_ON, .pwrsts = PWRSTS_OFF_RET_ON,
...@@ -354,7 +354,7 @@ static struct powerdomain dpll4_pwrdm = { ...@@ -354,7 +354,7 @@ static struct powerdomain dpll4_pwrdm = {
static struct powerdomain dpll5_pwrdm = { static struct powerdomain dpll5_pwrdm = {
.name = "dpll5_pwrdm", .name = "dpll5_pwrdm",
.prcm_offs = PLL_MOD, .prcm_offs = PLL_MOD,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
}; };
......
...@@ -360,9 +360,23 @@ IS_OMAP_TYPE(3430, 0x3430) ...@@ -360,9 +360,23 @@ IS_OMAP_TYPE(3430, 0x3430)
#define CHIP_IS_OMAP3430 (1 << 2) #define CHIP_IS_OMAP3430 (1 << 2)
#define CHIP_IS_OMAP3430ES1 (1 << 3) #define CHIP_IS_OMAP3430ES1 (1 << 3)
#define CHIP_IS_OMAP3430ES2 (1 << 4) #define CHIP_IS_OMAP3430ES2 (1 << 4)
#define CHIP_IS_OMAP3430ES3_0 (1 << 5)
#define CHIP_IS_OMAP3430ES3_1 (1 << 6)
#define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430) #define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430)
/*
* "GE" here represents "greater than or equal to" in terms of ES
* levels. So CHIP_GE_OMAP3430ES2 is intended to match all OMAP3430
* chips at ES2 and beyond, but not, for example, any OMAP lines after
* OMAP3.
*/
#define CHIP_GE_OMAP3430ES2 (CHIP_IS_OMAP3430ES2 | \
CHIP_IS_OMAP3430ES3_0 | \
CHIP_IS_OMAP3430ES3_1)
#define CHIP_GE_OMAP3430ES3_1 (CHIP_IS_OMAP3430ES3_1)
int omap_chip_is(struct omap_chip_id oci); int omap_chip_is(struct omap_chip_id oci);
int omap_type(void); int omap_type(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册