qemu/include/hw/misc/imx7_ccm.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2017, Impinj, Inc.
   3 *
   4 * i.MX7 CCM, PMU and ANALOG IP blocks emulation code
   5 *
   6 * Author: Andrey Smirnov <andrew.smirnov@gmail.com>
   7 *
   8 * This work is licensed under the terms of the GNU GPL, version 2 or later.
   9 * See the COPYING file in the top-level directory.
  10 */
  11
  12#ifndef IMX7_CCM_H
  13#define IMX7_CCM_H
  14
  15#include "hw/misc/imx_ccm.h"
  16#include "qemu/bitops.h"
  17
  18enum IMX7AnalogRegisters {
  19    ANALOG_PLL_ARM,
  20    ANALOG_PLL_ARM_SET,
  21    ANALOG_PLL_ARM_CLR,
  22    ANALOG_PLL_ARM_TOG,
  23    ANALOG_PLL_DDR,
  24    ANALOG_PLL_DDR_SET,
  25    ANALOG_PLL_DDR_CLR,
  26    ANALOG_PLL_DDR_TOG,
  27    ANALOG_PLL_DDR_SS,
  28    ANALOG_PLL_DDR_SS_SET,
  29    ANALOG_PLL_DDR_SS_CLR,
  30    ANALOG_PLL_DDR_SS_TOG,
  31    ANALOG_PLL_DDR_NUM,
  32    ANALOG_PLL_DDR_NUM_SET,
  33    ANALOG_PLL_DDR_NUM_CLR,
  34    ANALOG_PLL_DDR_NUM_TOG,
  35    ANALOG_PLL_DDR_DENOM,
  36    ANALOG_PLL_DDR_DENOM_SET,
  37    ANALOG_PLL_DDR_DENOM_CLR,
  38    ANALOG_PLL_DDR_DENOM_TOG,
  39    ANALOG_PLL_480,
  40    ANALOG_PLL_480_SET,
  41    ANALOG_PLL_480_CLR,
  42    ANALOG_PLL_480_TOG,
  43    ANALOG_PLL_480A,
  44    ANALOG_PLL_480A_SET,
  45    ANALOG_PLL_480A_CLR,
  46    ANALOG_PLL_480A_TOG,
  47    ANALOG_PLL_480B,
  48    ANALOG_PLL_480B_SET,
  49    ANALOG_PLL_480B_CLR,
  50    ANALOG_PLL_480B_TOG,
  51    ANALOG_PLL_ENET,
  52    ANALOG_PLL_ENET_SET,
  53    ANALOG_PLL_ENET_CLR,
  54    ANALOG_PLL_ENET_TOG,
  55    ANALOG_PLL_AUDIO,
  56    ANALOG_PLL_AUDIO_SET,
  57    ANALOG_PLL_AUDIO_CLR,
  58    ANALOG_PLL_AUDIO_TOG,
  59    ANALOG_PLL_AUDIO_SS,
  60    ANALOG_PLL_AUDIO_SS_SET,
  61    ANALOG_PLL_AUDIO_SS_CLR,
  62    ANALOG_PLL_AUDIO_SS_TOG,
  63    ANALOG_PLL_AUDIO_NUM,
  64    ANALOG_PLL_AUDIO_NUM_SET,
  65    ANALOG_PLL_AUDIO_NUM_CLR,
  66    ANALOG_PLL_AUDIO_NUM_TOG,
  67    ANALOG_PLL_AUDIO_DENOM,
  68    ANALOG_PLL_AUDIO_DENOM_SET,
  69    ANALOG_PLL_AUDIO_DENOM_CLR,
  70    ANALOG_PLL_AUDIO_DENOM_TOG,
  71    ANALOG_PLL_VIDEO,
  72    ANALOG_PLL_VIDEO_SET,
  73    ANALOG_PLL_VIDEO_CLR,
  74    ANALOG_PLL_VIDEO_TOG,
  75    ANALOG_PLL_VIDEO_SS,
  76    ANALOG_PLL_VIDEO_SS_SET,
  77    ANALOG_PLL_VIDEO_SS_CLR,
  78    ANALOG_PLL_VIDEO_SS_TOG,
  79    ANALOG_PLL_VIDEO_NUM,
  80    ANALOG_PLL_VIDEO_NUM_SET,
  81    ANALOG_PLL_VIDEO_NUM_CLR,
  82    ANALOG_PLL_VIDEO_NUM_TOG,
  83    ANALOG_PLL_VIDEO_DENOM,
  84    ANALOG_PLL_VIDEO_DENOM_SET,
  85    ANALOG_PLL_VIDEO_DENOM_CLR,
  86    ANALOG_PLL_VIDEO_DENOM_TOG,
  87    ANALOG_PLL_MISC0,
  88    ANALOG_PLL_MISC0_SET,
  89    ANALOG_PLL_MISC0_CLR,
  90    ANALOG_PLL_MISC0_TOG,
  91
  92    ANALOG_DIGPROG = 0x800 / sizeof(uint32_t),
  93    ANALOG_MAX,
  94
  95    ANALOG_PLL_LOCK = BIT(31)
  96};
  97
  98enum IMX7CCMRegisters {
  99    CCM_MAX = 0xBE00 / sizeof(uint32_t) + 1,
 100};
 101
 102enum IMX7PMURegisters {
 103    PMU_MAX = 0x140 / sizeof(uint32_t),
 104};
 105
 106#define TYPE_IMX7_CCM "imx7.ccm"
 107#define IMX7_CCM(obj) OBJECT_CHECK(IMX7CCMState, (obj), TYPE_IMX7_CCM)
 108
 109typedef struct IMX7CCMState {
 110    /* <private> */
 111    IMXCCMState parent_obj;
 112
 113    /* <public> */
 114    MemoryRegion iomem;
 115
 116    uint32_t ccm[CCM_MAX];
 117} IMX7CCMState;
 118
 119
 120#define TYPE_IMX7_ANALOG "imx7.analog"
 121#define IMX7_ANALOG(obj) OBJECT_CHECK(IMX7AnalogState, (obj), TYPE_IMX7_ANALOG)
 122
 123typedef struct IMX7AnalogState {
 124    /* <private> */
 125    IMXCCMState parent_obj;
 126
 127    /* <public> */
 128    struct {
 129        MemoryRegion container;
 130        MemoryRegion analog;
 131        MemoryRegion digprog;
 132        MemoryRegion pmu;
 133    } mmio;
 134
 135    uint32_t analog[ANALOG_MAX];
 136    uint32_t pmu[PMU_MAX];
 137} IMX7AnalogState;
 138
 139#endif /* IMX7_CCM_H */
 140