linux/arch/arm/mach-omap1/include/mach/soc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * OMAP cpu type detection
   4 *
   5 * Copyright (C) 2004, 2008 Nokia Corporation
   6 *
   7 * Copyright (C) 2009-11 Texas Instruments.
   8 *
   9 * Written by Tony Lindgren <tony.lindgren@nokia.com>
  10 *
  11 * Added OMAP4/5 specific defines - Santosh Shilimkar<santosh.shilimkar@ti.com>
  12 */
  13
  14#ifndef __ASM_ARCH_OMAP_CPU_H
  15#define __ASM_ARCH_OMAP_CPU_H
  16
  17#include <asm/irq.h>
  18#include <mach/hardware.h>
  19#include <mach/irqs.h>
  20
  21#ifndef __ASSEMBLY__
  22
  23#include <linux/bitops.h>
  24
  25/*
  26 * Test if multicore OMAP support is needed
  27 */
  28#undef MULTI_OMAP1
  29#undef OMAP_NAME
  30
  31#ifdef CONFIG_ARCH_OMAP730
  32# ifdef OMAP_NAME
  33#  undef  MULTI_OMAP1
  34#  define MULTI_OMAP1
  35# else
  36#  define OMAP_NAME omap730
  37# endif
  38#endif
  39#ifdef CONFIG_ARCH_OMAP850
  40# ifdef OMAP_NAME
  41#  undef  MULTI_OMAP1
  42#  define MULTI_OMAP1
  43# else
  44#  define OMAP_NAME omap850
  45# endif
  46#endif
  47#ifdef CONFIG_ARCH_OMAP15XX
  48# ifdef OMAP_NAME
  49#  undef  MULTI_OMAP1
  50#  define MULTI_OMAP1
  51# else
  52#  define OMAP_NAME omap1510
  53# endif
  54#endif
  55#ifdef CONFIG_ARCH_OMAP16XX
  56# ifdef OMAP_NAME
  57#  undef  MULTI_OMAP1
  58#  define MULTI_OMAP1
  59# else
  60#  define OMAP_NAME omap16xx
  61# endif
  62#endif
  63
  64/*
  65 * omap_rev bits:
  66 * CPU id bits  (0730, 1510, 1710, 2422...)     [31:16]
  67 * CPU revision (See _REV_ defined in cpu.h)    [15:08]
  68 * CPU class bits (15xx, 16xx, 24xx, 34xx...)   [07:00]
  69 */
  70unsigned int omap_rev(void);
  71
  72/*
  73 * Get the CPU revision for OMAP devices
  74 */
  75#define GET_OMAP_REVISION()     ((omap_rev() >> 8) & 0xff)
  76
  77/*
  78 * Macros to group OMAP into cpu classes.
  79 * These can be used in most places.
  80 * cpu_is_omap7xx():    True for OMAP730, OMAP850
  81 * cpu_is_omap15xx():   True for OMAP1510, OMAP5910 and OMAP310
  82 * cpu_is_omap16xx():   True for OMAP1610, OMAP5912 and OMAP1710
  83 */
  84#define GET_OMAP_CLASS  (omap_rev() & 0xff)
  85
  86#define IS_OMAP_CLASS(class, id)                        \
  87static inline int is_omap ##class (void)                \
  88{                                                       \
  89        return (GET_OMAP_CLASS == (id)) ? 1 : 0;        \
  90}
  91
  92#define GET_OMAP_SUBCLASS       ((omap_rev() >> 20) & 0x0fff)
  93
  94#define IS_OMAP_SUBCLASS(subclass, id)                  \
  95static inline int is_omap ##subclass (void)             \
  96{                                                       \
  97        return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0;     \
  98}
  99
 100IS_OMAP_CLASS(7xx, 0x07)
 101IS_OMAP_CLASS(15xx, 0x15)
 102IS_OMAP_CLASS(16xx, 0x16)
 103
 104#define cpu_is_omap7xx()                0
 105#define cpu_is_omap15xx()               0
 106#define cpu_is_omap16xx()               0
 107
 108#if defined(MULTI_OMAP1)
 109# if defined(CONFIG_ARCH_OMAP730)
 110#  undef  cpu_is_omap7xx
 111#  define cpu_is_omap7xx()              is_omap7xx()
 112# endif
 113# if defined(CONFIG_ARCH_OMAP850)
 114#  undef  cpu_is_omap7xx
 115#  define cpu_is_omap7xx()              is_omap7xx()
 116# endif
 117# if defined(CONFIG_ARCH_OMAP15XX)
 118#  undef  cpu_is_omap15xx
 119#  define cpu_is_omap15xx()             is_omap15xx()
 120# endif
 121# if defined(CONFIG_ARCH_OMAP16XX)
 122#  undef  cpu_is_omap16xx
 123#  define cpu_is_omap16xx()             is_omap16xx()
 124# endif
 125#else
 126# if defined(CONFIG_ARCH_OMAP730)
 127#  undef  cpu_is_omap7xx
 128#  define cpu_is_omap7xx()              1
 129# endif
 130# if defined(CONFIG_ARCH_OMAP850)
 131#  undef  cpu_is_omap7xx
 132#  define cpu_is_omap7xx()              1
 133# endif
 134# if defined(CONFIG_ARCH_OMAP15XX)
 135#  undef  cpu_is_omap15xx
 136#  define cpu_is_omap15xx()             1
 137# endif
 138# if defined(CONFIG_ARCH_OMAP16XX)
 139#  undef  cpu_is_omap16xx
 140#  define cpu_is_omap16xx()             1
 141# endif
 142#endif
 143
 144/*
 145 * Macros to detect individual cpu types.
 146 * These are only rarely needed.
 147 * cpu_is_omap310():    True for OMAP310
 148 * cpu_is_omap1510():   True for OMAP1510
 149 * cpu_is_omap1610():   True for OMAP1610
 150 * cpu_is_omap1611():   True for OMAP1611
 151 * cpu_is_omap5912():   True for OMAP5912
 152 * cpu_is_omap1621():   True for OMAP1621
 153 * cpu_is_omap1710():   True for OMAP1710
 154 */
 155#define GET_OMAP_TYPE   ((omap_rev() >> 16) & 0xffff)
 156
 157#define IS_OMAP_TYPE(type, id)                          \
 158static inline int is_omap ##type (void)                 \
 159{                                                       \
 160        return (GET_OMAP_TYPE == (id)) ? 1 : 0;         \
 161}
 162
 163IS_OMAP_TYPE(310, 0x0310)
 164IS_OMAP_TYPE(1510, 0x1510)
 165IS_OMAP_TYPE(1610, 0x1610)
 166IS_OMAP_TYPE(1611, 0x1611)
 167IS_OMAP_TYPE(5912, 0x1611)
 168IS_OMAP_TYPE(1621, 0x1621)
 169IS_OMAP_TYPE(1710, 0x1710)
 170
 171#define cpu_is_omap310()                0
 172#define cpu_is_omap1510()               0
 173#define cpu_is_omap1610()               0
 174#define cpu_is_omap5912()               0
 175#define cpu_is_omap1611()               0
 176#define cpu_is_omap1621()               0
 177#define cpu_is_omap1710()               0
 178
 179/* These are needed to compile common code */
 180#ifdef CONFIG_ARCH_OMAP1
 181#define cpu_is_omap242x()               0
 182#define cpu_is_omap2430()               0
 183#define cpu_is_omap243x()               0
 184#define cpu_is_omap24xx()               0
 185#define cpu_is_omap34xx()               0
 186#define cpu_is_omap44xx()               0
 187#define soc_is_omap54xx()               0
 188#define soc_is_dra7xx()                 0
 189#define soc_is_am33xx()                 0
 190#define cpu_class_is_omap1()            1
 191#define cpu_class_is_omap2()            0
 192#endif
 193
 194/*
 195 * Whether we have MULTI_OMAP1 or not, we still need to distinguish
 196 * between 310 vs. 1510 and 1611B/5912 vs. 1710.
 197 */
 198
 199#if defined(CONFIG_ARCH_OMAP15XX)
 200# undef  cpu_is_omap310
 201# undef  cpu_is_omap1510
 202# define cpu_is_omap310()               is_omap310()
 203# define cpu_is_omap1510()              is_omap1510()
 204#endif
 205
 206#if defined(CONFIG_ARCH_OMAP16XX)
 207# undef  cpu_is_omap1610
 208# undef  cpu_is_omap1611
 209# undef  cpu_is_omap5912
 210# undef  cpu_is_omap1621
 211# undef  cpu_is_omap1710
 212# define cpu_is_omap1610()              is_omap1610()
 213# define cpu_is_omap1611()              is_omap1611()
 214# define cpu_is_omap5912()              is_omap5912()
 215# define cpu_is_omap1621()              is_omap1621()
 216# define cpu_is_omap1710()              is_omap1710()
 217#endif
 218
 219#endif  /* __ASSEMBLY__ */
 220#endif
 221