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