Sanjeev Premi <pr...@ti.com> writes:

> Added runtime check via omap2_set_globals_35xx()
> Also added runtime check for the OMAP35x variants.
>
> Signed-off-by: Sanjeev Premi <pr...@ti.com>
> ---
>  arch/arm/mach-omap2/id.c                 |   90 
> ++++++++++++++++++++++++------
>  arch/arm/plat-omap/common.c              |   19 ++++++
>  arch/arm/plat-omap/include/mach/common.h |    1 +
>  arch/arm/plat-omap/include/mach/cpu.h    |   88 ++++++++++++++++++++++++++++-
>  4 files changed, 178 insertions(+), 20 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
> index 2c5e0a3..5815c33 100644
> --- a/arch/arm/mach-omap2/id.c
> +++ b/arch/arm/mach-omap2/id.c
> @@ -152,9 +152,11 @@ void __init omap24xx_check_revision(void)
>       pr_info("\n");
>  }
>  
> +#define OMAP_CTRL_STATUS     OMAP2_IO_ADDRESS(0x4800244C)
> +
>  void __init omap34xx_check_revision(void)
>  {
> -     u32 cpuid, idcode;
> +     u32 cpuid, idcode, ctrl_status;
>       u16 hawkeye;
>       u8 rev;
>       char *rev_name = "ES1.0";
> @@ -180,24 +182,76 @@ void __init omap34xx_check_revision(void)
>       hawkeye = (idcode >> 12) & 0xffff;
>       rev = (idcode >> 28) & 0xff;
>  
> +     /*
> +      * The OMAP35x family was derived off the OMAP34xx ES2.0 Si.
> +      * Added specific check for the OMAP35x family here.
> +      */
> +
>       if (hawkeye == 0xb7ae) {
> -             switch (rev) {
> -             case 0:
> -                     omap_revision = OMAP3430_REV_ES2_0;
> -                     rev_name = "ES2.0";
> -                     break;
> -             case 2:
> -                     omap_revision = OMAP3430_REV_ES2_1;
> -                     rev_name = "ES2.1";
> -                     break;
> -             case 3:
> -                     omap_revision = OMAP3430_REV_ES3_0;
> -                     rev_name = "ES3.0";
> -                     break;
> -             default:
> -                     /* Use the latest known revision as default */
> -                     omap_revision = OMAP3430_REV_ES3_0;
> -                     rev_name = "Unknown revision\n";
> +             if (cpu_is_omap35xx()) {
> +                     omap_revision = OMAP35XX_CLASS ;
> +
> +                     /*
> +                      * Get the chip ID
> +                      */
> +                     ctrl_status = __raw_readl(OMAP_CTRL_STATUS);
> +
> +                     switch (ctrl_status) {
> +                     case 0x05C00 :
> +                             omap_revision |= OMAP3503_MASK;
> +                             break;
> +                     case 0x01C00 :
> +                             omap_revision |= OMAP3515_MASK;
> +                             break;
> +                     case 0x04C00 :
> +                             omap_revision |= OMAP3525_MASK;
> +                             break;
> +                     case 0x00C00 :
> +                             omap_revision |= OMAP3530_MASK;
> +                             break;
> +                     }
> +
> +                     /*
> +                      * Get the silicon version information
> +                      */
> +                     switch (rev) {
> +                     case 1:
> +                             omap_revision |= OMAP35XX_MASK_ES2_0;
> +                             rev_name = "ES2.0";
> +                             break;
> +                     case 2:
> +                             omap_revision |= OMAP35XX_MASK_ES2_1;
> +                             rev_name = "ES2.1";
> +                             break;
> +                     case 3:
> +                             omap_revision |= OMAP35XX_MASK_ES3_0;
> +                             rev_name = "ES3.0";
> +                             break;
> +                     default:
> +                             /* Use the latest known revision as default */
> +                             omap_revision |= OMAP35XX_MASK_ES3_0;
> +                             rev_name = "Unknown revision\n";
> +                     }
> +             }
> +             else {
> +                     switch (rev) {
> +                     case 0:
> +                             omap_revision = OMAP3430_REV_ES2_0;
> +                             rev_name = "ES2.0";
> +                             break;
> +                     case 2:
> +                             omap_revision = OMAP3430_REV_ES2_1;
> +                             rev_name = "ES2.1";
> +                             break;
> +                     case 3:
> +                             omap_revision = OMAP3430_REV_ES3_0;
> +                             rev_name = "ES3.0";
> +                             break;
> +                     default:
> +                             /* Use the latest known revision as default */
> +                             omap_revision = OMAP3430_REV_ES3_0;
> +                             rev_name = "Unknown revision\n";
> +                     }
>               }
>       }
>  
> diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c
> index 8c53125..1056d3d 100644
> --- a/arch/arm/plat-omap/common.c
> +++ b/arch/arm/plat-omap/common.c
> @@ -333,3 +333,22 @@ void __init omap2_set_globals_343x(void)
>  }
>  #endif
>  
> +#ifdef CONFIG_ARCH_OMAP35XX
> +static struct omap_globals omap35xx_globals = {
> +     .class  = OMAP35XX_CLASS,
> +     .tap    = OMAP2_IO_ADDRESS(0x4830A000),
> +     .sdrc   = OMAP2_IO_ADDRESS(OMAP343X_SDRC_BASE),
> +     .sms    = OMAP2_IO_ADDRESS(OMAP343X_SMS_BASE),
> +     .ctrl   = OMAP2_IO_ADDRESS(OMAP343X_CTRL_BASE),
> +     .prm    = OMAP2_IO_ADDRESS(OMAP3430_PRM_BASE),
> +     .cm     = OMAP2_IO_ADDRESS(OMAP3430_CM_BASE),
> +};

This is exactly the same as omap34xx_globals.  Why is this needed?

> +
> +void __init omap2_set_globals_35xx(void)
> +{
> +     omap2_globals = &omap35xx_globals;
> +
> +     __omap2_set_globals();
> +}
> +#endif       /* CONFIG_ARCH_OMAP35XX */
> +

What is the problem of the init code just leaving
omap2_set_globals_343x()

If you really think this will confuse folks, then how about just
changing the #ifdef of the 343x defines to:

#if defined(CONFIG_ARCH_OMAP3430) || defined(CONFIG_ARCH_OMAP35XX)

and then adding this:

#define omap2_set_globals_35xx omap2_set_globals_343x()

Kevin

> diff --git a/arch/arm/plat-omap/include/mach/common.h 
> b/arch/arm/plat-omap/include/mach/common.h
> index af4105f..f41cba2 100644
> --- a/arch/arm/plat-omap/include/mach/common.h
> +++ b/arch/arm/plat-omap/include/mach/common.h
> @@ -60,6 +60,7 @@ struct omap_globals {
>  void omap2_set_globals_242x(void);
>  void omap2_set_globals_243x(void);
>  void omap2_set_globals_343x(void);
> +void omap2_set_globals_35xx(void);
>  
>  /* These get called from omap2_set_globals_xxxx(), do not call these */
>  void omap2_set_globals_tap(struct omap_globals *);
> diff --git a/arch/arm/plat-omap/include/mach/cpu.h 
> b/arch/arm/plat-omap/include/mach/cpu.h
> index b2062f1..447e053 100644
> --- a/arch/arm/plat-omap/include/mach/cpu.h
> +++ b/arch/arm/plat-omap/include/mach/cpu.h
> @@ -93,7 +93,7 @@ unsigned int omap_rev(void);
>  #  define OMAP_NAME omap2430
>  # endif
>  #endif
> -#ifdef CONFIG_ARCH_OMAP3430
> +#if defined(CONFIG_ARCH_OMAP3430) && !defined(CONFIG_ARCH_OMAP35XX)
>  # ifdef OMAP_NAME
>  #  undef  MULTI_OMAP2
>  #  define MULTI_OMAP2
> @@ -102,6 +102,46 @@ unsigned int omap_rev(void);
>  # endif
>  #endif
>  
> +#ifdef CONFIG_ARCH_OMAP35XX
> +# ifdef CONFIG_ARCH_OMAP3503
> +#  ifdef OMAP_NAME
> +#   undef  MULTI_OMAP2
> +#   define MULTI_OMAP2
> +#  else
> +#   define OMAP_NAME omap3503
> +#  endif
> +# endif  /* ifdef CONFIG_ARCH_OMAP3503 */
> +
> +# ifdef CONFIG_ARCH_OMAP3515
> +#  ifdef OMAP_NAME
> +#   undef  MULTI_OMAP2
> +#   define MULTI_OMAP2
> +#  else
> +#   define OMAP_NAME omap3515
> +#  endif
> +# endif  /* ifdef CONFIG_ARCH_OMAP3515 */
> +
> +# ifdef CONFIG_ARCH_OMAP3525
> +#  ifdef OMAP_NAME
> +#   undef  MULTI_OMAP2
> +#   define MULTI_OMAP2
> +#  else
> +#   define OMAP_NAME omap3525
> +#  endif
> +# endif  /* ifdef CONFIG_ARCH_OMAP3525 */
> +
> +# ifdef CONFIG_ARCH_OMAP3530
> +#  ifdef OMAP_NAME
> +#   undef  MULTI_OMAP2
> +#   define MULTI_OMAP2
> +#  else
> +#   define OMAP_NAME omap3530
> +#  endif
> +# endif  /* ifdef CONFIG_ARCH_OMAP3530 */
> +
> +#endif  /* ifdef CONFIG_ARCH_OMAP35XX */
> +
> +
>  /*
>   * Macros to group OMAP into cpu classes.
>   * These can be used in most places.
> @@ -112,6 +152,7 @@ unsigned int omap_rev(void);
>   * cpu_is_omap242x():        True for OMAP2420, OMAP2422, OMAP2423
>   * cpu_is_omap243x():        True for OMAP2430
>   * cpu_is_omap343x():        True for OMAP3430
> + * cpu_is_omap35xx():        True for OMAP35XX
>   */
>  #define GET_OMAP_CLASS       (omap_rev() & 0xff)
>  
> @@ -147,6 +188,7 @@ IS_OMAP_SUBCLASS(343x, 0x343)
>  #define cpu_is_omap243x()            0
>  #define cpu_is_omap34xx()            0
>  #define cpu_is_omap343x()            0
> +#define cpu_is_omap35xx()            0
>  
>  #if defined(MULTI_OMAP1)
>  # if defined(CONFIG_ARCH_OMAP730)
> @@ -191,6 +233,10 @@ IS_OMAP_SUBCLASS(343x, 0x343)
>  #  define cpu_is_omap34xx()          is_omap34xx()
>  #  define cpu_is_omap343x()          is_omap343x()
>  # endif
> +# if defined(CONFIG_ARCH_OMAP35XX)
> +#  undef  cpu_is_omap35xx
> +#  define cpu_is_omap35xx()          is_omap35xx()
> +# endif
>  #else
>  # if defined(CONFIG_ARCH_OMAP24XX)
>  #  undef  cpu_is_omap24xx
> @@ -212,6 +258,10 @@ IS_OMAP_SUBCLASS(343x, 0x343)
>  #  undef  cpu_is_omap343x
>  #  define cpu_is_omap343x()          1
>  # endif
> +# if defined(CONFIG_ARCH_OMAP35XX)
> +#  undef  cpu_is_omap35xx
> +#  define cpu_is_omap35xx()          1
> +# endif
>  #endif
>  
>  /*
> @@ -230,7 +280,11 @@ IS_OMAP_SUBCLASS(343x, 0x343)
>   * cpu_is_omap2423():        True for OMAP2423
>   * cpu_is_omap2430():        True for OMAP2430
>   * cpu_is_omap3430():        True for OMAP3430
> - */
> + * cpu_is_omap3503():        True for OMAP3503
> + * cpu_is_omap3515():        True for OMAP3515
> + * cpu_is_omap3525():        True for OMAP3525
> + * cpu_is_omap3530():        True for OMAP3530
> + */;
>  #define GET_OMAP_TYPE        ((omap_rev() >> 16) & 0xffff)
>  
>  #define IS_OMAP_TYPE(type, id)                               \
> @@ -252,6 +306,10 @@ IS_OMAP_TYPE(2422, 0x2422)
>  IS_OMAP_TYPE(2423, 0x2423)
>  IS_OMAP_TYPE(2430, 0x2430)
>  IS_OMAP_TYPE(3430, 0x3430)
> +IS_OMAP_TYPE(3503, 0x3503)
> +IS_OMAP_TYPE(3515, 0x3515)
> +IS_OMAP_TYPE(3525, 0x3525)
> +IS_OMAP_TYPE(3530, 0x3530)
>  
>  #define cpu_is_omap310()             0
>  #define cpu_is_omap730()             0
> @@ -266,6 +324,10 @@ IS_OMAP_TYPE(3430, 0x3430)
>  #define cpu_is_omap2423()            0
>  #define cpu_is_omap2430()            0
>  #define cpu_is_omap3430()            0
> +#define cpu_is_omap3503()            0
> +#define cpu_is_omap3515()            0
> +#define cpu_is_omap3525()            0
> +#define cpu_is_omap3530()            0
>  
>  #if defined(MULTI_OMAP1)
>  # if defined(CONFIG_ARCH_OMAP730)
> @@ -319,6 +381,18 @@ IS_OMAP_TYPE(3430, 0x3430)
>  # define cpu_is_omap3430()           is_omap3430()
>  #endif
>  
> +#if defined(CONFIG_ARCH_OMAP35XX)
> +# undef cpu_is_omap3503
> +# undef cpu_is_omap3515
> +# undef cpu_is_omap3525
> +# undef cpu_is_omap3530
> +
> +# define cpu_is_omap3503()           is_omap3503()
> +# define cpu_is_omap3515()           is_omap3515()
> +# define cpu_is_omap3525()           is_omap3525()
> +# define cpu_is_omap3530()           is_omap3530()
> +#endif       /* if defined(CONFIG_ARCH_OMAP35XX) */
> +
>  /* Macros to detect if we have OMAP1 or OMAP2 */
>  #define cpu_class_is_omap1() (cpu_is_omap730() || cpu_is_omap15xx() || \
>                               cpu_is_omap16xx())
> @@ -340,6 +414,16 @@ IS_OMAP_TYPE(3430, 0x3430)
>  #define OMAP3430_REV_ES2_1   0x34302034
>  #define OMAP3430_REV_ES3_0   0x34303034
>  
> +#define OMAP35XX_CLASS               0x35000035
> +#define OMAP3503_MASK                0x00030000
> +#define OMAP3515_MASK                0x00150000
> +#define OMAP3525_MASK                0x00250000
> +#define OMAP3530_MASK                0x00300000
> +
> +#define OMAP35XX_MASK_ES2_0  0x00001000
> +#define OMAP35XX_MASK_ES2_1  0x00002000
> +#define OMAP35XX_MASK_ES3_0  0x00003000
> +
>  /*
>   * omap_chip bits
>   *
> -- 
> 1.5.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to