1 /*
   2  * This file and its contents are supplied under the terms of the
   3  * Common Development and Distribution License ("CDDL"), version 1.0.
   4  * You may only use this file in accordance with the terms of version
   5  * 1.0 of the CDDL.
   6  *
   7  * A full copy of the text of the CDDL should have accompanied this
   8  * source.  A copy of the CDDL is also available via the Internet at
   9  * http://www.illumos.org/license/CDDL.
  10  */
  11 
  12 /*
  13  * Copyright 2014 Joyent, Inc.  All rights reserved.
  14  */
  15 
  16         .file   "cpuid.s"
  17 
  18 /*
  19  * Read cpuid values from coprocessors
  20  */
  21 
  22 #include <sys/asm_linkage.h>
  23 
  24 #if defined(lint) || defined(__lint)
  25 
  26 uint32_t
  27 arm_cpuid_midr()
  28 {}
  29 
  30 uint32_t
  31 arm_cpuid_pfr0()
  32 {}
  33 
  34 uint32_t
  35 arm_cpuid_pfr1()
  36 {}
  37 
  38 uint32_t
  39 arm_cpuid_dfr0()
  40 {}
  41 
  42 uint32_t
  43 arm_cpuid_mmfr0()
  44 {}
  45 
  46 uint32_t
  47 arm_cpuid_mmfr1()
  48 {}
  49 
  50 uint32_t
  51 arm_cpuid_mmfr2()
  52 {}
  53 
  54 uint32_t
  55 arm_cpuid_mmfr3()
  56 {}
  57 
  58 uint32_t
  59 arm_cpuid_isar0()
  60 {}
  61 
  62 uint32_t
  63 arm_cpuid_isar1()
  64 {}
  65 
  66 uint32_t
  67 arm_cpuid_isar2()
  68 {}
  69 
  70 uint32_t
  71 arm_cpuid_isar3()
  72 {}
  73 
  74 uint32_t
  75 arm_cpuid_isar4()
  76 {}
  77 
  78 uint32_t
  79 arm_cpuid_isar5()
  80 {}
  81 
  82 uint32_t
  83 arm_cpuid_vfpidreg()
  84 {}
  85 
  86 uint32_t
  87 arm_cpuid_mvfr0()
  88 {}
  89 
  90 uint32_t
  91 arm_cpuid_mvfr1()
  92 {}
  93 
  94 #else   /* __lint */
  95 
  96         ENTRY(arm_cpuid_midr)
  97         mrc     p15, 0, r0, c0, c0, 0
  98         bx      lr
  99         SET_SIZE(arm_cpuid_midr)
 100 
 101         ENTRY(arm_cpuid_pfr0)
 102         mrc     p15, 0, r0, c0, c1, 0
 103         bx      lr
 104         SET_SIZE(arm_cpuid_pfr0)
 105 
 106         ENTRY(arm_cpuid_pfr1)
 107         mrc     p15, 0, r0, c0, c1, 1
 108         bx      lr
 109         SET_SIZE(arm_cpuid_pfr1)
 110 
 111         ENTRY(arm_cpuid_dfr0)
 112         mrc     p15, 0, r0, c0, c1, 2
 113         bx      lr
 114         SET_SIZE(arm_cpuid_dfr0)
 115 
 116         ENTRY(arm_cpuid_mmfr0)
 117         mrc     p15, 0, r0, c0, c1, 4
 118         bx      lr
 119         SET_SIZE(arm_cpuid_mmfr0)
 120 
 121         ENTRY(arm_cpuid_mmfr1)
 122         mrc     p15, 0, r0, c0, c1, 5
 123         bx      lr
 124         SET_SIZE(arm_cpuid_mmfr1)
 125 
 126         ENTRY(arm_cpuid_mmfr2)
 127         mrc     p15, 0, r0, c0, c1, 6
 128         bx      lr
 129         SET_SIZE(arm_cpuid_mmfr2)
 130 
 131         ENTRY(arm_cpuid_mmfr3)
 132         mrc     p15, 0, r0, c0, c1, 7
 133         bx      lr
 134         SET_SIZE(arm_cpuid_mmfr3)
 135 
 136         ENTRY(arm_cpuid_isar0)
 137         mrc     p15, 0, r0, c0, c2, 0
 138         bx      lr
 139         SET_SIZE(arm_cpuid_isar0)
 140 
 141         ENTRY(arm_cpuid_isar1)
 142         mrc     p15, 0, r0, c0, c2, 1
 143         bx      lr
 144         SET_SIZE(arm_cpuid_isar1)
 145 
 146         ENTRY(arm_cpuid_isar2)
 147         mrc     p15, 0, r0, c0, c2, 2
 148         bx      lr
 149         SET_SIZE(arm_cpuid_isar2)
 150 
 151         ENTRY(arm_cpuid_isar3)
 152         mrc     p15, 0, r0, c0, c2, 3
 153         bx      lr
 154         SET_SIZE(arm_cpuid_isar3)
 155 
 156         ENTRY(arm_cpuid_isar4)
 157         mrc     p15, 0, r0, c0, c2, 4
 158         bx      lr
 159         SET_SIZE(arm_cpuid_isar4)
 160 
 161         ENTRY(arm_cpuid_isar5)
 162         mrc     p15, 0, r0, c0, c2, 5
 163         bx      lr
 164         SET_SIZE(arm_cpuid_isar5)
 165 
 166         ENTRY(arm_cpuid_vfpidreg)
 167         vmrs    r0, FPSID
 168         bx      lr
 169         SET_SIZE(arm_cpuid_vfpidreg)
 170 
 171         ENTRY(arm_cpuid_mvfr0)
 172         vmrs    r0, MVFR0
 173         bx      lr
 174         SET_SIZE(arm_cpuid_mvfr0)
 175 
 176         ENTRY(arm_cpuid_mvfr1)
 177         vmrs    r0, MVFR1
 178         bx      lr
 179         SET_SIZE(arm_cpuid_mvfr1)
 180 #endif /* __lint */
 181 
 182         ENTRY(arm_cpuid_clidr)
 183         mrc     p15, 1, r0, c0, c0, 1
 184         bx      lr
 185         SET_SIZE(arm_cpuid_clidr)
 186 
 187         ENTRY(arm_cpuid_ccsidr)
 188         lsl     r0, r0, #1
 189         cmp     r1, #0                          /* icache == B_FALSE */
 190         orrne   r0, r0, #1
 191         mcr     p15, 2, r0, c0, c0, 0           /* write CSSELR */
 192         mrc     p15, 1, r0, c0, c0, 0           /* read selected CCSIDR */
 193         bx      lr
 194         SET_SIZE(arm_cpuid_ccsidr)