140 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			140 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  * Copyright (c) 2017, Impinj, Inc. | ||
|  |  * | ||
|  |  * i.MX7 CCM, PMU and ANALOG IP blocks emulation code | ||
|  |  * | ||
|  |  * Author: Andrey Smirnov <andrew.smirnov@gmail.com> | ||
|  |  * | ||
|  |  * This work is licensed under the terms of the GNU GPL, version 2 or later. | ||
|  |  * See the COPYING file in the top-level directory. | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef IMX7_CCM_H
 | ||
|  | #define IMX7_CCM_H
 | ||
|  | 
 | ||
|  | #include "hw/misc/imx_ccm.h"
 | ||
|  | #include "qemu/bitops.h"
 | ||
|  | 
 | ||
|  | enum IMX7AnalogRegisters { | ||
|  |     ANALOG_PLL_ARM, | ||
|  |     ANALOG_PLL_ARM_SET, | ||
|  |     ANALOG_PLL_ARM_CLR, | ||
|  |     ANALOG_PLL_ARM_TOG, | ||
|  |     ANALOG_PLL_DDR, | ||
|  |     ANALOG_PLL_DDR_SET, | ||
|  |     ANALOG_PLL_DDR_CLR, | ||
|  |     ANALOG_PLL_DDR_TOG, | ||
|  |     ANALOG_PLL_DDR_SS, | ||
|  |     ANALOG_PLL_DDR_SS_SET, | ||
|  |     ANALOG_PLL_DDR_SS_CLR, | ||
|  |     ANALOG_PLL_DDR_SS_TOG, | ||
|  |     ANALOG_PLL_DDR_NUM, | ||
|  |     ANALOG_PLL_DDR_NUM_SET, | ||
|  |     ANALOG_PLL_DDR_NUM_CLR, | ||
|  |     ANALOG_PLL_DDR_NUM_TOG, | ||
|  |     ANALOG_PLL_DDR_DENOM, | ||
|  |     ANALOG_PLL_DDR_DENOM_SET, | ||
|  |     ANALOG_PLL_DDR_DENOM_CLR, | ||
|  |     ANALOG_PLL_DDR_DENOM_TOG, | ||
|  |     ANALOG_PLL_480, | ||
|  |     ANALOG_PLL_480_SET, | ||
|  |     ANALOG_PLL_480_CLR, | ||
|  |     ANALOG_PLL_480_TOG, | ||
|  |     ANALOG_PLL_480A, | ||
|  |     ANALOG_PLL_480A_SET, | ||
|  |     ANALOG_PLL_480A_CLR, | ||
|  |     ANALOG_PLL_480A_TOG, | ||
|  |     ANALOG_PLL_480B, | ||
|  |     ANALOG_PLL_480B_SET, | ||
|  |     ANALOG_PLL_480B_CLR, | ||
|  |     ANALOG_PLL_480B_TOG, | ||
|  |     ANALOG_PLL_ENET, | ||
|  |     ANALOG_PLL_ENET_SET, | ||
|  |     ANALOG_PLL_ENET_CLR, | ||
|  |     ANALOG_PLL_ENET_TOG, | ||
|  |     ANALOG_PLL_AUDIO, | ||
|  |     ANALOG_PLL_AUDIO_SET, | ||
|  |     ANALOG_PLL_AUDIO_CLR, | ||
|  |     ANALOG_PLL_AUDIO_TOG, | ||
|  |     ANALOG_PLL_AUDIO_SS, | ||
|  |     ANALOG_PLL_AUDIO_SS_SET, | ||
|  |     ANALOG_PLL_AUDIO_SS_CLR, | ||
|  |     ANALOG_PLL_AUDIO_SS_TOG, | ||
|  |     ANALOG_PLL_AUDIO_NUM, | ||
|  |     ANALOG_PLL_AUDIO_NUM_SET, | ||
|  |     ANALOG_PLL_AUDIO_NUM_CLR, | ||
|  |     ANALOG_PLL_AUDIO_NUM_TOG, | ||
|  |     ANALOG_PLL_AUDIO_DENOM, | ||
|  |     ANALOG_PLL_AUDIO_DENOM_SET, | ||
|  |     ANALOG_PLL_AUDIO_DENOM_CLR, | ||
|  |     ANALOG_PLL_AUDIO_DENOM_TOG, | ||
|  |     ANALOG_PLL_VIDEO, | ||
|  |     ANALOG_PLL_VIDEO_SET, | ||
|  |     ANALOG_PLL_VIDEO_CLR, | ||
|  |     ANALOG_PLL_VIDEO_TOG, | ||
|  |     ANALOG_PLL_VIDEO_SS, | ||
|  |     ANALOG_PLL_VIDEO_SS_SET, | ||
|  |     ANALOG_PLL_VIDEO_SS_CLR, | ||
|  |     ANALOG_PLL_VIDEO_SS_TOG, | ||
|  |     ANALOG_PLL_VIDEO_NUM, | ||
|  |     ANALOG_PLL_VIDEO_NUM_SET, | ||
|  |     ANALOG_PLL_VIDEO_NUM_CLR, | ||
|  |     ANALOG_PLL_VIDEO_NUM_TOG, | ||
|  |     ANALOG_PLL_VIDEO_DENOM, | ||
|  |     ANALOG_PLL_VIDEO_DENOM_SET, | ||
|  |     ANALOG_PLL_VIDEO_DENOM_CLR, | ||
|  |     ANALOG_PLL_VIDEO_DENOM_TOG, | ||
|  |     ANALOG_PLL_MISC0, | ||
|  |     ANALOG_PLL_MISC0_SET, | ||
|  |     ANALOG_PLL_MISC0_CLR, | ||
|  |     ANALOG_PLL_MISC0_TOG, | ||
|  | 
 | ||
|  |     ANALOG_DIGPROG = 0x800 / sizeof(uint32_t), | ||
|  |     ANALOG_MAX, | ||
|  | 
 | ||
|  |     ANALOG_PLL_LOCK = BIT(31) | ||
|  | }; | ||
|  | 
 | ||
|  | enum IMX7CCMRegisters { | ||
|  |     CCM_MAX = 0xBE00 / sizeof(uint32_t) + 1, | ||
|  | }; | ||
|  | 
 | ||
|  | enum IMX7PMURegisters { | ||
|  |     PMU_MAX = 0x140 / sizeof(uint32_t), | ||
|  | }; | ||
|  | 
 | ||
|  | #define TYPE_IMX7_CCM "imx7.ccm"
 | ||
|  | #define IMX7_CCM(obj) OBJECT_CHECK(IMX7CCMState, (obj), TYPE_IMX7_CCM)
 | ||
|  | 
 | ||
|  | typedef struct IMX7CCMState { | ||
|  |     /* <private> */ | ||
|  |     IMXCCMState parent_obj; | ||
|  | 
 | ||
|  |     /* <public> */ | ||
|  |     MemoryRegion iomem; | ||
|  | 
 | ||
|  |     uint32_t ccm[CCM_MAX]; | ||
|  | } IMX7CCMState; | ||
|  | 
 | ||
|  | 
 | ||
|  | #define TYPE_IMX7_ANALOG "imx7.analog"
 | ||
|  | #define IMX7_ANALOG(obj) OBJECT_CHECK(IMX7AnalogState, (obj), TYPE_IMX7_ANALOG)
 | ||
|  | 
 | ||
|  | typedef struct IMX7AnalogState { | ||
|  |     /* <private> */ | ||
|  |     IMXCCMState parent_obj; | ||
|  | 
 | ||
|  |     /* <public> */ | ||
|  |     struct { | ||
|  |         MemoryRegion container; | ||
|  |         MemoryRegion analog; | ||
|  |         MemoryRegion digprog; | ||
|  |         MemoryRegion pmu; | ||
|  |     } mmio; | ||
|  | 
 | ||
|  |     uint32_t analog[ANALOG_MAX]; | ||
|  |     uint32_t pmu[PMU_MAX]; | ||
|  | } IMX7AnalogState; | ||
|  | 
 | ||
|  | #endif /* IMX7_CCM_H */
 |