qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

imx6ul_ccm.h (6777B)


      1 /*
      2  * IMX6UL Clock Control Module
      3  *
      4  * Copyright (C) 2018 by Jean-Christophe Dubois <jcd@tribudubois.net>
      5  *
      6  * This work is licensed under the terms of the GNU GPL, version 2 or later.
      7  * See the COPYING file in the top-level directory.
      8  */
      9 
     10 #ifndef IMX6UL_CCM_H
     11 #define IMX6UL_CCM_H
     12 
     13 #include "hw/misc/imx_ccm.h"
     14 #include "qemu/bitops.h"
     15 #include "qom/object.h"
     16 
     17 #define CCM_CCR 0
     18 #define CCM_CCDR 1
     19 #define CCM_CSR 2
     20 #define CCM_CCSR 3
     21 #define CCM_CACRR 4
     22 #define CCM_CBCDR 5
     23 #define CCM_CBCMR 6
     24 #define CCM_CSCMR1 7
     25 #define CCM_CSCMR2 8
     26 #define CCM_CSCDR1 9
     27 #define CCM_CS1CDR 10
     28 #define CCM_CS2CDR 11
     29 #define CCM_CDCDR 12
     30 #define CCM_CHSCCDR 13
     31 #define CCM_CSCDR2 14
     32 #define CCM_CSCDR3 15
     33 #define CCM_CDHIPR 18
     34 #define CCM_CTOR 20
     35 #define CCM_CLPCR 21
     36 #define CCM_CISR 22
     37 #define CCM_CIMR 23
     38 #define CCM_CCOSR 24
     39 #define CCM_CGPR 25
     40 #define CCM_CCGR0 26
     41 #define CCM_CCGR1 27
     42 #define CCM_CCGR2 28
     43 #define CCM_CCGR3 29
     44 #define CCM_CCGR4 30
     45 #define CCM_CCGR5 31
     46 #define CCM_CCGR6 32
     47 #define CCM_CMEOR 34
     48 #define CCM_MAX 35
     49 
     50 #define CCM_ANALOG_PLL_ARM 0
     51 #define CCM_ANALOG_PLL_ARM_SET 1
     52 #define CCM_ANALOG_PLL_ARM_CLR 2
     53 #define CCM_ANALOG_PLL_ARM_TOG 3
     54 #define CCM_ANALOG_PLL_USB1 4
     55 #define CCM_ANALOG_PLL_USB1_SET 5
     56 #define CCM_ANALOG_PLL_USB1_CLR 6
     57 #define CCM_ANALOG_PLL_USB1_TOG 7
     58 #define CCM_ANALOG_PLL_USB2 8
     59 #define CCM_ANALOG_PLL_USB2_SET 9
     60 #define CCM_ANALOG_PLL_USB2_CLR 10
     61 #define CCM_ANALOG_PLL_USB2_TOG 11
     62 #define CCM_ANALOG_PLL_SYS 12
     63 #define CCM_ANALOG_PLL_SYS_SET 13
     64 #define CCM_ANALOG_PLL_SYS_CLR 14
     65 #define CCM_ANALOG_PLL_SYS_TOG 15
     66 #define CCM_ANALOG_PLL_SYS_SS 16
     67 #define CCM_ANALOG_PLL_SYS_NUM 20
     68 #define CCM_ANALOG_PLL_SYS_DENOM 24
     69 #define CCM_ANALOG_PLL_AUDIO 28
     70 #define CCM_ANALOG_PLL_AUDIO_SET 29
     71 #define CCM_ANALOG_PLL_AUDIO_CLR 30
     72 #define CCM_ANALOG_PLL_AUDIO_TOG 31
     73 #define CCM_ANALOG_PLL_AUDIO_NUM 32
     74 #define CCM_ANALOG_PLL_AUDIO_DENOM 36
     75 #define CCM_ANALOG_PLL_VIDEO 40
     76 #define CCM_ANALOG_PLL_VIDEO_SET 41
     77 #define CCM_ANALOG_PLL_VIDEO_CLR 42
     78 #define CCM_ANALOG_PLL_VIDEO_TOG 44
     79 #define CCM_ANALOG_PLL_VIDEO_NUM 46
     80 #define CCM_ANALOG_PLL_VIDEO_DENOM 48
     81 #define CCM_ANALOG_PLL_ENET 56
     82 #define CCM_ANALOG_PLL_ENET_SET 57
     83 #define CCM_ANALOG_PLL_ENET_CLR 58
     84 #define CCM_ANALOG_PLL_ENET_TOG 59
     85 #define CCM_ANALOG_PFD_480 60
     86 #define CCM_ANALOG_PFD_480_SET 61
     87 #define CCM_ANALOG_PFD_480_CLR 62
     88 #define CCM_ANALOG_PFD_480_TOG 63
     89 #define CCM_ANALOG_PFD_528 64
     90 #define CCM_ANALOG_PFD_528_SET 65
     91 #define CCM_ANALOG_PFD_528_CLR 66
     92 #define CCM_ANALOG_PFD_528_TOG 67
     93 
     94 /* PMU registers */
     95 #define PMU_REG_1P1 68
     96 #define PMU_REG_3P0 72
     97 #define PMU_REG_2P5 76
     98 #define PMU_REG_CORE 80
     99 
    100 #define CCM_ANALOG_MISC0 84
    101 #define PMU_MISC0 CCM_ANALOG_MISC0
    102 #define CCM_ANALOG_MISC0_SET 85
    103 #define PMU_MISC0_SET CCM_ANALOG_MISC0_SET
    104 #define CCM_ANALOG_MISC0_CLR 86
    105 #define PMU_MISC0_CLR CCM_ANALOG_MISC0_CLR
    106 #define CCM_ANALOG_MISC0_TOG 87
    107 #define PMU_MISC0_TOG CCM_ANALOG_MISC0_TOG
    108 
    109 #define CCM_ANALOG_MISC1 88
    110 #define PMU_MISC1 CCM_ANALOG_MISC1
    111 #define CCM_ANALOG_MISC1_SET 89
    112 #define PMU_MISC1_SET CCM_ANALOG_MISC1_SET
    113 #define CCM_ANALOG_MISC1_CLR 90
    114 #define PMU_MISC1_CLR CCM_ANALOG_MISC1_CLR
    115 #define CCM_ANALOG_MISC1_TOG 91
    116 #define PMU_MISC1_TOG CCM_ANALOG_MISC1_TOG
    117 
    118 #define CCM_ANALOG_MISC2 92
    119 #define PMU_MISC2 CCM_ANALOG_MISC2
    120 #define CCM_ANALOG_MISC2_SET 93
    121 #define PMU_MISC2_SET CCM_ANALOG_MISC2_SET
    122 #define CCM_ANALOG_MISC2_CLR 94
    123 #define PMU_MISC2_CLR CCM_ANALOG_MISC2_CLR
    124 #define CCM_ANALOG_MISC2_TOG 95
    125 #define PMU_MISC2_TOG CCM_ANALOG_MISC2_TOG
    126 
    127 #define TEMPMON_TEMPSENSE0 96
    128 #define TEMPMON_TEMPSENSE0_SET 97
    129 #define TEMPMON_TEMPSENSE0_CLR 98
    130 #define TEMPMON_TEMPSENSE0_TOG 99
    131 #define TEMPMON_TEMPSENSE1 100
    132 #define TEMPMON_TEMPSENSE1_SET 101
    133 #define TEMPMON_TEMPSENSE1_CLR 102
    134 #define TEMPMON_TEMPSENSE1_TOG 103
    135 #define TEMPMON_TEMPSENSE2 164
    136 #define TEMPMON_TEMPSENSE2_SET 165
    137 #define TEMPMON_TEMPSENSE2_CLR 166
    138 #define TEMPMON_TEMPSENSE2_TOG 167
    139 
    140 #define PMU_LOWPWR_CTRL 155
    141 #define PMU_LOWPWR_CTRL_SET 156
    142 #define PMU_LOWPWR_CTRL_CLR 157
    143 #define PMU_LOWPWR_CTRL_TOG 158
    144 
    145 #define USB_ANALOG_USB1_VBUS_DETECT 104
    146 #define USB_ANALOG_USB1_VBUS_DETECT_SET 105
    147 #define USB_ANALOG_USB1_VBUS_DETECT_CLR 106
    148 #define USB_ANALOG_USB1_VBUS_DETECT_TOG 107
    149 #define USB_ANALOG_USB1_CHRG_DETECT 108
    150 #define USB_ANALOG_USB1_CHRG_DETECT_SET 109
    151 #define USB_ANALOG_USB1_CHRG_DETECT_CLR 110
    152 #define USB_ANALOG_USB1_CHRG_DETECT_TOG 111
    153 #define USB_ANALOG_USB1_VBUS_DETECT_STAT 112
    154 #define USB_ANALOG_USB1_CHRG_DETECT_STAT 116
    155 #define USB_ANALOG_USB1_MISC 124
    156 #define USB_ANALOG_USB1_MISC_SET 125
    157 #define USB_ANALOG_USB1_MISC_CLR 126
    158 #define USB_ANALOG_USB1_MISC_TOG 127
    159 #define USB_ANALOG_USB2_VBUS_DETECT 128
    160 #define USB_ANALOG_USB2_VBUS_DETECT_SET 129
    161 #define USB_ANALOG_USB2_VBUS_DETECT_CLR 130
    162 #define USB_ANALOG_USB2_VBUS_DETECT_TOG 131
    163 #define USB_ANALOG_USB2_CHRG_DETECT 132
    164 #define USB_ANALOG_USB2_CHRG_DETECT_SET 133
    165 #define USB_ANALOG_USB2_CHRG_DETECT_CLR 134
    166 #define USB_ANALOG_USB2_CHRG_DETECT_TOG 135
    167 #define USB_ANALOG_USB2_VBUS_DETECT_STAT 136
    168 #define USB_ANALOG_USB2_CHRG_DETECT_STAT 140
    169 #define USB_ANALOG_USB2_MISC 148
    170 #define USB_ANALOG_USB2_MISC_SET 149
    171 #define USB_ANALOG_USB2_MISC_CLR 150
    172 #define USB_ANALOG_USB2_MISC_TOG 151
    173 #define USB_ANALOG_DIGPROG 152
    174 #define CCM_ANALOG_MAX 4096
    175 
    176 /* CCM_CBCMR */
    177 #define R_CBCMR_PRE_PERIPH_CLK_SEL_SHIFT  (18)
    178 #define R_CBCMR_PRE_PERIPH_CLK_SEL_LENGTH (2)
    179 #define R_CBCMR_PERIPH_CLK2_SEL_SHIFT    (12)
    180 #define R_CBCMR_PERIPH_CLK2_SEL_LENGTH   (2)
    181 
    182 /* CCM_CBCDR */
    183 #define R_CBCDR_AHB_PODF_SHIFT           (10)
    184 #define R_CBCDR_AHB_PODF_LENGTH          (3)
    185 #define R_CBCDR_IPG_PODF_SHIFT           (8)
    186 #define R_CBCDR_IPG_PODF_LENGTH          (2)
    187 #define R_CBCDR_PERIPH_CLK_SEL_SHIFT     (25)
    188 #define R_CBCDR_PERIPH_CLK_SEL_LENGTH    (1)
    189 #define R_CBCDR_PERIPH_CLK2_PODF_SHIFT   (27)
    190 #define R_CBCDR_PERIPH_CLK2_PODF_LENGTH  (3)
    191 
    192 /* CCM_CSCMR1 */
    193 #define R_CSCMR1_PERCLK_PODF_SHIFT        (0)
    194 #define R_CSCMR1_PERCLK_PODF_LENGTH       (6)
    195 #define R_CSCMR1_PERCLK_CLK_SEL_SHIFT     (6)
    196 #define R_CSCMR1_PERCLK_CLK_SEL_LENGTH    (1)
    197 
    198 /* CCM_ANALOG_PFD_528 */
    199 #define R_ANALOG_PFD_528_PFD0_FRAC_SHIFT          (0)
    200 #define R_ANALOG_PFD_528_PFD0_FRAC_LENGTH         (6)
    201 #define R_ANALOG_PFD_528_PFD2_FRAC_SHIFT          (16)
    202 #define R_ANALOG_PFD_528_PFD2_FRAC_LENGTH         (6)
    203 
    204 /* CCM_ANALOG_PLL_SYS */
    205 #define R_ANALOG_PLL_SYS_DIV_SELECT_SHIFT         (0)
    206 #define R_ANALOG_PLL_SYS_DIV_SELECT_LENGTH        (1)
    207 
    208 #define CCM_ANALOG_PLL_LOCK      (1 << 31);
    209 
    210 #define TYPE_IMX6UL_CCM "imx6ul.ccm"
    211 OBJECT_DECLARE_SIMPLE_TYPE(IMX6ULCCMState, IMX6UL_CCM)
    212 
    213 struct IMX6ULCCMState {
    214     /* <private> */
    215     IMXCCMState parent_obj;
    216 
    217     /* <public> */
    218     MemoryRegion container;
    219     MemoryRegion ioccm;
    220     MemoryRegion ioanalog;
    221 
    222     uint32_t ccm[CCM_MAX];
    223     uint32_t analog[CCM_ANALOG_MAX];
    224 
    225 };
    226 
    227 #endif /* IMX6UL_CCM_H */