aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoen Kooi <koen@openembedded.org>2010-04-13 14:24:56 +0200
committerKoen Kooi <koen@openembedded.org>2010-04-13 14:26:03 +0200
commit155bf8bbaebb49d68219d3ccb3a3174697a0d363 (patch)
tree5f8f22459ac47b613544a95984bebf77a52419e6
parentb2e5ed3a547523f928fdcccf43effded538eba83 (diff)
downloadopenembedded-155bf8bbaebb49d68219d3ccb3a3174697a0d363.tar.gz
linux-omap-zoomsync: add patch to add more options to detect silicon at runtime (needed for recent SGX drivers)
-rw-r--r--conf/machine/include/omap3.inc2
-rw-r--r--recipes/linux/linux-omap-zoomsync-2.6.32/rev.patch291
-rw-r--r--recipes/linux/linux-omap-zoomsync_2.6.32.bb3
3 files changed, 295 insertions, 1 deletions
diff --git a/conf/machine/include/omap3.inc b/conf/machine/include/omap3.inc
index ba2a4935fa..de82901b51 100644
--- a/conf/machine/include/omap3.inc
+++ b/conf/machine/include/omap3.inc
@@ -3,7 +3,7 @@ SOC_FAMILY = "omap3"
require conf/machine/include/tune-cortexa8.inc
PREFERRED_PROVIDER_virtual/kernel = "linux-omap"
# Increase this everytime you change something in the kernel
-MACHINE_KERNEL_PR = "r69"
+MACHINE_KERNEL_PR = "r70"
KERNEL_IMAGETYPE = "uImage"
diff --git a/recipes/linux/linux-omap-zoomsync-2.6.32/rev.patch b/recipes/linux/linux-omap-zoomsync-2.6.32/rev.patch
new file mode 100644
index 0000000000..dd3789f677
--- /dev/null
+++ b/recipes/linux/linux-omap-zoomsync-2.6.32/rev.patch
@@ -0,0 +1,291 @@
+From patchwork Fri Jan 8 15:26:15 2010
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [1/1] omap3: Add macros for comparing si revision
+Date: Fri, 08 Jan 2010 15:26:15 -0000
+From: Sanjeev Premi <premi@ti.com>
+X-Patchwork-Id: 71802
+Message-Id: <1262964375-21873-1-git-send-email-premi@ti.com>
+To: linux-omap@vger.kernel.org
+Cc: Sanjeev Premi <premi@ti.com>
+
+This patch adds verbose macros for comparing silicon
+revision bits. Current mechanism of comparing complete
+'omap_revision' does not work/ represent the multiple
+processors, and their revisions.
+
+Existing instances of comparison via omap_rev() have
+been replaced with new macros.
+
+Signed-off-by: Sanjeev Premi <premi@ti.com>
+
+---
+arch/arm/mach-omap2/clock34xx.c | 2 +-
+ arch/arm/mach-omap2/clock34xx_data.c | 6 ++-
+ arch/arm/mach-omap2/control.c | 7 ++--
+ arch/arm/mach-omap2/id.c | 13 +++----
+ arch/arm/mach-omap2/pm34xx.c | 35 ++++++++++++++++-----
+ arch/arm/plat-omap/include/plat/cpu.h | 55 +++++++++++++++++++++++++++++++++
+ 6 files changed, 97 insertions(+), 21 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
+index d4217b9..6cef2f1 100644
+--- a/arch/arm/mach-omap2/clock34xx.c
++++ b/arch/arm/mach-omap2/clock34xx.c
+@@ -154,7 +154,7 @@ int omap3_dpll4_set_rate(struct clk *clk, unsigned long rate)
+ * on 3430ES1 prevents us from changing DPLL multipliers or dividers
+ * on DPLL4.
+ */
+- if (omap_rev() == OMAP3430_REV_ES1_0) {
++ if (cpu_is_omap34xx() && omap_rev_is_1_0()) {
+ printk(KERN_ERR "clock: DPLL4 cannot change rate due to "
+ "silicon 'Limitation 2.5' on 3430ES1.\n");
+ return -EINVAL;
+diff --git a/arch/arm/mach-omap2/clock34xx_data.c b/arch/arm/mach-omap2/clock34xx_data.c
+index c6031d7..0a00a49 100644
+--- a/arch/arm/mach-omap2/clock34xx_data.c
++++ b/arch/arm/mach-omap2/clock34xx_data.c
+@@ -3230,7 +3230,7 @@ int __init omap2_clk_init(void)
+ * Update this if there are further clock changes between ES2
+ * and production parts
+ */
+- if (omap_rev() == OMAP3430_REV_ES1_0) {
++ if (cpu_is_omap34xx() && omap_rev_is_1_0()) {
+ /* No 3430ES1-only rates exist, so no RATE_IN_3430ES1 */
+ cpu_clkflg |= CK_3430ES1;
+ } else {
+@@ -3282,7 +3282,9 @@ int __init omap2_clk_init(void)
+ /*
+ * Lock DPLL5 and put it in autoidle.
+ */
+- if (omap_rev() >= OMAP3430_REV_ES2_0)
++ if ((cpu_is_omap34xx() && omap_rev_ge_2_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630())
+ omap3_clk_lock_dpll5();
+
+ /* Avoid sleeping during omap3_core_dpll_m2_set_rate() */
+diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c
+index cdd1f35..55e9b0a 100644
+--- a/arch/arm/mach-omap2/control.c
++++ b/arch/arm/mach-omap2/control.c
+@@ -209,8 +209,7 @@ void omap3_save_scratchpad_contents(void)
+
+ /* Populate the Scratchpad contents */
+ scratchpad_contents.boot_config_ptr = 0x0;
+- if (omap_rev() != OMAP3430_REV_ES3_0 &&
+- omap_rev() != OMAP3430_REV_ES3_1)
++ if (cpu_is_omap34xx() && omap_rev_le_3_0())
+ scratchpad_contents.public_restore_ptr =
+ virt_to_phys(get_restore_pointer());
+ else
+@@ -271,7 +270,9 @@ void omap3_save_scratchpad_contents(void)
+ * of AUTO_CNT = 1 prior to any transition to OFF mode.
+ */
+ if ((omap_type() != OMAP2_DEVICE_TYPE_GP)
+- && (omap_rev() >= OMAP3430_REV_ES3_0))
++ && ((cpu_is_omap34xx() && omap_rev_ge_3_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()))
+ sdrc_block_contents.power = (sdrc_read_reg(SDRC_POWER) &
+ ~(SDRC_POWER_AUTOCOUNT_MASK|
+ SDRC_POWER_CLKCTRL_MASK)) |
+diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
+index a091b53..2d4c246 100644
+--- a/arch/arm/mach-omap2/id.c
++++ b/arch/arm/mach-omap2/id.c
+@@ -379,19 +379,18 @@ void __init omap2_check_revision(void)
+ omap_chip.oc |= CHIP_IS_OMAP2420;
+ } else if (cpu_is_omap3505() || cpu_is_omap3517()) {
+ omap_chip.oc = CHIP_IS_OMAP3430 | CHIP_IS_OMAP3430ES3_1;
++ } else if (cpu_is_omap3630()) {
++ omap_chip.oc = CHIP_IS_OMAP3430 | CHIP_IS_OMAP3630ES1;
+ } else if (cpu_is_omap343x()) {
+ omap_chip.oc = CHIP_IS_OMAP3430;
+- if (omap_rev() == OMAP3430_REV_ES1_0)
++ if (omap_rev_is_1_0())
+ omap_chip.oc |= CHIP_IS_OMAP3430ES1;
+- else if (omap_rev() >= OMAP3430_REV_ES2_0 &&
+- omap_rev() <= OMAP3430_REV_ES2_1)
++ else if (omap_rev_is_2_0() || omap_rev_is_2_1())
+ omap_chip.oc |= CHIP_IS_OMAP3430ES2;
+- else if (omap_rev() == OMAP3430_REV_ES3_0)
++ else if (omap_rev_is_3_0())
+ omap_chip.oc |= CHIP_IS_OMAP3430ES3_0;
+- else if (omap_rev() == OMAP3430_REV_ES3_1)
++ else if (omap_rev_is_3_1())
+ omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;
+- else if (omap_rev() == OMAP3630_REV_ES1_0)
+- omap_chip.oc |= CHIP_IS_OMAP3630ES1;
+ } else {
+ pr_err("Uninitialized omap_chip, please fix!\n");
+ }
+diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
+index 81ed252..dc4050f 100644
+--- a/arch/arm/mach-omap2/pm34xx.c
++++ b/arch/arm/mach-omap2/pm34xx.c
+@@ -27,6 +27,7 @@
+ #include <linux/gpio.h>
+ #include <linux/clk.h>
+
++#include <plat/cpu.h>
+ #include <plat/sram.h>
+ #include <plat/clockdomain.h>
+ #include <plat/powerdomain.h>
+@@ -90,7 +91,9 @@ static void omap3_enable_io_chain(void)
+ {
+ int timeout = 0;
+
+- if (omap_rev() >= OMAP3430_REV_ES3_1) {
++ if ((cpu_is_omap34xx() && omap_rev_ge_3_1())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()) {
+ prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN, WKUP_MOD, PM_WKEN);
+ /* Do a readback to assure write has been done */
+ prm_read_mod_reg(WKUP_MOD, PM_WKEN);
+@@ -111,7 +114,9 @@ static void omap3_enable_io_chain(void)
+
+ static void omap3_disable_io_chain(void)
+ {
+- if (omap_rev() >= OMAP3430_REV_ES3_1)
++ if ((cpu_is_omap34xx() && omap_rev_ge_3_1())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630())
+ prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN, WKUP_MOD, PM_WKEN);
+ }
+
+@@ -230,7 +235,10 @@ static int _prcm_int_handle_wakeup(void)
+ c = prcm_clear_mod_irqs(WKUP_MOD, 1);
+ c += prcm_clear_mod_irqs(CORE_MOD, 1);
+ c += prcm_clear_mod_irqs(OMAP3430_PER_MOD, 1);
+- if (omap_rev() > OMAP3430_REV_ES1_0) {
++
++ if ((cpu_is_omap34xx() && omap_rev_gt_1_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()) {
+ c += prcm_clear_mod_irqs(CORE_MOD, 3);
+ c += prcm_clear_mod_irqs(OMAP3430ES2_USBHOST_MOD, 1);
+ }
+@@ -399,7 +407,9 @@ void omap_sram_idle(void)
+ * of AUTO_CNT = 1 enabled. This takes care of errata 1.142.
+ * Hence store/restore the SDRC_POWER register here.
+ */
+- if (omap_rev() >= OMAP3430_REV_ES3_0 &&
++ if (((cpu_is_omap34xx() && omap_rev_ge_3_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()) &&
+ omap_type() != OMAP2_DEVICE_TYPE_GP &&
+ core_next_state == PWRDM_POWER_OFF)
+ sdrc_pwr = sdrc_read_reg(SDRC_POWER);
+@@ -413,7 +423,9 @@ void omap_sram_idle(void)
+ cpu_init();
+
+ /* Restore normal SDRC POWER settings */
+- if (omap_rev() >= OMAP3430_REV_ES3_0 &&
++ if (((cpu_is_omap34xx() && omap_rev_ge_3_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()) &&
+ omap_type() != OMAP2_DEVICE_TYPE_GP &&
+ core_next_state == PWRDM_POWER_OFF)
+ sdrc_write_reg(sdrc_pwr, SDRC_POWER);
+@@ -729,7 +741,10 @@ static void __init prcm_setup_regs(void)
+ prm_write_mod_reg(0, OMAP3430_NEON_MOD, PM_WKDEP);
+ prm_write_mod_reg(0, OMAP3430_CAM_MOD, PM_WKDEP);
+ prm_write_mod_reg(0, OMAP3430_PER_MOD, PM_WKDEP);
+- if (omap_rev() > OMAP3430_REV_ES1_0) {
++
++ if ((cpu_is_omap34xx() && omap_rev_gt_1_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()) {
+ prm_write_mod_reg(0, OMAP3430ES2_SGX_MOD, PM_WKDEP);
+ prm_write_mod_reg(0, OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
+ } else
+@@ -780,7 +795,9 @@ static void __init prcm_setup_regs(void)
+ OMAP3430_AUTO_DES1,
+ CORE_MOD, CM_AUTOIDLE2);
+
+- if (omap_rev() > OMAP3430_REV_ES1_0) {
++ if ((cpu_is_omap34xx() && omap_rev_gt_1_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()) {
+ cm_write_mod_reg(
+ OMAP3430_AUTO_MAD2D |
+ OMAP3430ES2_AUTO_USBTLL,
+@@ -828,7 +845,9 @@ static void __init prcm_setup_regs(void)
+ OMAP3430_PER_MOD,
+ CM_AUTOIDLE);
+
+- if (omap_rev() > OMAP3430_REV_ES1_0) {
++ if ((cpu_is_omap34xx() && omap_rev_gt_1_0())
++ || cpu_is_omap3505() || cpu_is_omap3517()
++ || cpu_is_omap3630()) {
+ cm_write_mod_reg(
+ OMAP3430ES2_AUTO_USBHOST,
+ OMAP3430ES2_USBHOST_MOD,
+diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
+index 9a028bd..534171a 100644
+--- a/arch/arm/plat-omap/include/plat/cpu.h
++++ b/arch/arm/plat-omap/include/plat/cpu.h
+@@ -449,6 +449,61 @@ IS_OMAP_TYPE(3517, 0x3517)
+ #define OMAP4430_REV_ES1_0 0x44300044
+
+ /*
++ * Silicon revisions
++ */
++#define OMAP_ES_1_0 0x00
++#define OMAP_ES_2_0 0x10
++#define OMAP_ES_2_1 0x20
++#define OMAP_ES_3_0 0x30
++#define OMAP_ES_3_1 0x40
++
++#define OMAP_REV_MASK 0x0000ff00
++#define OMAP_REV_BITS ((omap_rev() & OMAP_REV_MASK) >> 8)
++
++#define OMAP_REV_IS(revid) \
++static inline u8 omap_rev_is_ ##revid (void) \
++{ \
++ return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0; \
++}
++
++#define OMAP_REV_LT(revid) \
++static inline u8 omap_rev_lt_ ##revid (void) \
++{ \
++ return (OMAP_REV_BITS < OMAP_ES_ ##revid) ? 1 : 0; \
++}
++
++#define OMAP_REV_LE(revid) \
++static inline u8 omap_rev_le_ ##revid (void) \
++{ \
++ return (OMAP_REV_BITS <= OMAP_ES_ ##revid) ? 1 : 0; \
++}
++
++#define OMAP_REV_GT(revid) \
++static inline u8 omap_rev_gt_ ##revid (void) \
++{ \
++ return (OMAP_REV_BITS > OMAP_ES_ ##revid) ? 1 : 0; \
++}
++
++#define OMAP_REV_GE(revid) \
++static inline u8 omap_rev_ge_ ##revid (void) \
++{ \
++ return (OMAP_REV_BITS >= OMAP_ES_ ##revid) ? 1 : 0; \
++}
++
++#define OMAP_REV_FUNCTIONS(revid) \
++ OMAP_REV_IS(revid) \
++ OMAP_REV_LT(revid) \
++ OMAP_REV_LE(revid) \
++ OMAP_REV_GT(revid) \
++ OMAP_REV_GE(revid)
++
++OMAP_REV_FUNCTIONS(1_0)
++OMAP_REV_FUNCTIONS(2_0)
++OMAP_REV_FUNCTIONS(2_1)
++OMAP_REV_FUNCTIONS(3_0)
++OMAP_REV_FUNCTIONS(3_1)
++
++/*
+ * omap_chip bits
+ *
+ * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
diff --git a/recipes/linux/linux-omap-zoomsync_2.6.32.bb b/recipes/linux/linux-omap-zoomsync_2.6.32.bb
index 78e10c9655..4202c29bd0 100644
--- a/recipes/linux/linux-omap-zoomsync_2.6.32.bb
+++ b/recipes/linux/linux-omap-zoomsync_2.6.32.bb
@@ -23,11 +23,14 @@ PV_omapzoom36x = "2.6.32-rc7-${OEV}"
PR_append = "+gitr${SRCREV}"
+
SRC_URI_omapzoom2 = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=master;protocol=git \
+ file://rev.patch;patch=1 \
file://logo_linux_clut224.ppm \
file://defconfig"
SRC_URI_omapzoom36x = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=L23.I3.3;protocol=git \
+ file://rev.patch;patch=1 \
file://logo_linux_clut224.ppm \
file://defconfig"