1 /* 2 * Register definitions for the Power Manager (PM) 3 */ 4 #ifndef __ARCH_AVR32_MACH_AT32AP_PM_H__ 5 #define __ARCH_AVR32_MACH_AT32AP_PM_H__ 6 7 /* PM register offsets */ 8 #define PM_MCCTRL 0x0000 9 #define PM_CKSEL 0x0004 10 #define PM_CPU_MASK 0x0008 11 #define PM_HSB_MASK 0x000c 12 #define PM_PBA_MASK 0x0010 13 #define PM_PBB_MASK 0x0014 14 #define PM_PLL0 0x0020 15 #define PM_PLL1 0x0024 16 #define PM_IER 0x0040 17 #define PM_IDR 0x0044 18 #define PM_IMR 0x0048 19 #define PM_ISR 0x004c 20 #define PM_ICR 0x0050 21 #define PM_GCCTRL(x) (0x0060 + 4 * (x)) 22 #define PM_RCAUSE 0x00c0 23 24 /* Bitfields in CKSEL */ 25 #define PM_CPUSEL_OFFSET 0 26 #define PM_CPUSEL_SIZE 3 27 #define PM_CPUDIV_OFFSET 7 28 #define PM_CPUDIV_SIZE 1 29 #define PM_HSBSEL_OFFSET 8 30 #define PM_HSBSEL_SIZE 3 31 #define PM_HSBDIV_OFFSET 15 32 #define PM_HSBDIV_SIZE 1 33 #define PM_PBASEL_OFFSET 16 34 #define PM_PBASEL_SIZE 3 35 #define PM_PBADIV_OFFSET 23 36 #define PM_PBADIV_SIZE 1 37 #define PM_PBBSEL_OFFSET 24 38 #define PM_PBBSEL_SIZE 3 39 #define PM_PBBDIV_OFFSET 31 40 #define PM_PBBDIV_SIZE 1 41 42 /* Bitfields in PLL0 */ 43 #define PM_PLLEN_OFFSET 0 44 #define PM_PLLEN_SIZE 1 45 #define PM_PLLOSC_OFFSET 1 46 #define PM_PLLOSC_SIZE 1 47 #define PM_PLLOPT_OFFSET 2 48 #define PM_PLLOPT_SIZE 3 49 #define PM_PLLDIV_OFFSET 8 50 #define PM_PLLDIV_SIZE 8 51 #define PM_PLLMUL_OFFSET 16 52 #define PM_PLLMUL_SIZE 8 53 #define PM_PLLCOUNT_OFFSET 24 54 #define PM_PLLCOUNT_SIZE 6 55 #define PM_PLLTEST_OFFSET 31 56 #define PM_PLLTEST_SIZE 1 57 58 /* Bitfields in ICR */ 59 #define PM_LOCK0_OFFSET 0 60 #define PM_LOCK0_SIZE 1 61 #define PM_LOCK1_OFFSET 1 62 #define PM_LOCK1_SIZE 1 63 #define PM_WAKE_OFFSET 2 64 #define PM_WAKE_SIZE 1 65 #define PM_CKRDY_OFFSET 5 66 #define PM_CKRDY_SIZE 1 67 #define PM_MSKRDY_OFFSET 6 68 #define PM_MSKRDY_SIZE 1 69 70 /* Bitfields in GCCTRL0 */ 71 #define PM_OSCSEL_OFFSET 0 72 #define PM_OSCSEL_SIZE 1 73 #define PM_PLLSEL_OFFSET 1 74 #define PM_PLLSEL_SIZE 1 75 #define PM_CEN_OFFSET 2 76 #define PM_CEN_SIZE 1 77 #define PM_DIVEN_OFFSET 4 78 #define PM_DIVEN_SIZE 1 79 #define PM_DIV_OFFSET 8 80 #define PM_DIV_SIZE 8 81 82 /* Bitfields in RCAUSE */ 83 #define PM_POR_OFFSET 0 84 #define PM_POR_SIZE 1 85 #define PM_EXT_OFFSET 2 86 #define PM_EXT_SIZE 1 87 #define PM_WDT_OFFSET 3 88 #define PM_WDT_SIZE 1 89 #define PM_NTAE_OFFSET 4 90 #define PM_NTAE_SIZE 1 91 92 /* Bit manipulation macros */ 93 #define PM_BIT(name) \ 94 (1 << PM_##name##_OFFSET) 95 #define PM_BF(name,value) \ 96 (((value) & ((1 << PM_##name##_SIZE) - 1)) \ 97 << PM_##name##_OFFSET) 98 #define PM_BFEXT(name,value) \ 99 (((value) >> PM_##name##_OFFSET) \ 100 & ((1 << PM_##name##_SIZE) - 1)) 101 #define PM_BFINS(name,value,old)\ 102 (((old) & ~(((1 << PM_##name##_SIZE) - 1) \ 103 << PM_##name##_OFFSET)) \ 104 | PM_BF(name,value)) 105 106 /* Register access macros */ 107 #define pm_readl(reg) \ 108 __raw_readl((void __iomem __force *)PM_BASE + PM_##reg) 109 #define pm_writel(reg,value) \ 110 __raw_writel((value), (void __iomem __force *)PM_BASE + PM_##reg) 111 112 #endif /* __ARCH_AVR32_MACH_AT32AP_PM_H__ */ 113