/** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : PLL // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_PLL_DEFINED #define HARDWARE_REGS_PLL_DEFINED // ============================================================================= // Register : PLL_CS // Description : Control and Status // GENERAL CONSTRAINTS: // Reference clock frequency min=5MHz, max=800MHz // Feedback divider min=16, max=320 // VCO frequency min=400MHz, max=1600MHz #define PLL_CS_OFFSET 0x00000000 #define PLL_CS_BITS 0x8000013f #define PLL_CS_RESET 0x00000001 // ----------------------------------------------------------------------------- // Field : PLL_CS_LOCK // Description : PLL is locked #define PLL_CS_LOCK_RESET 0x0 #define PLL_CS_LOCK_BITS 0x80000000 #define PLL_CS_LOCK_MSB 31 #define PLL_CS_LOCK_LSB 31 #define PLL_CS_LOCK_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PLL_CS_BYPASS // Description : Passes the reference clock to the output instead of the divided // VCO. The VCO continues to run so the user can switch between // the reference clock and the divided VCO but the output will // glitch when doing so. #define PLL_CS_BYPASS_RESET 0x0 #define PLL_CS_BYPASS_BITS 0x00000100 #define PLL_CS_BYPASS_MSB 8 #define PLL_CS_BYPASS_LSB 8 #define PLL_CS_BYPASS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_CS_REFDIV // Description : Divides the PLL input reference clock. // Behaviour is undefined for div=0. // PLL output will be unpredictable during refdiv changes, wait // for lock=1 before using it. #define PLL_CS_REFDIV_RESET 0x01 #define PLL_CS_REFDIV_BITS 0x0000003f #define PLL_CS_REFDIV_MSB 5 #define PLL_CS_REFDIV_LSB 0 #define PLL_CS_REFDIV_ACCESS "RW" // ============================================================================= // Register : PLL_PWR // Description : Controls the PLL power modes. #define PLL_PWR_OFFSET 0x00000004 #define PLL_PWR_BITS 0x0000002d #define PLL_PWR_RESET 0x0000002d // ----------------------------------------------------------------------------- // Field : PLL_PWR_VCOPD // Description : PLL VCO powerdown // To save power set high when PLL output not required or // bypass=1. #define PLL_PWR_VCOPD_RESET 0x1 #define PLL_PWR_VCOPD_BITS 0x00000020 #define PLL_PWR_VCOPD_MSB 5 #define PLL_PWR_VCOPD_LSB 5 #define PLL_PWR_VCOPD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PWR_POSTDIVPD // Description : PLL post divider powerdown // To save power set high when PLL output not required or // bypass=1. #define PLL_PWR_POSTDIVPD_RESET 0x1 #define PLL_PWR_POSTDIVPD_BITS 0x00000008 #define PLL_PWR_POSTDIVPD_MSB 3 #define PLL_PWR_POSTDIVPD_LSB 3 #define PLL_PWR_POSTDIVPD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PWR_DSMPD // Description : PLL DSM powerdown // Nothing is achieved by setting this low. #define PLL_PWR_DSMPD_RESET 0x1 #define PLL_PWR_DSMPD_BITS 0x00000004 #define PLL_PWR_DSMPD_MSB 2 #define PLL_PWR_DSMPD_LSB 2 #define PLL_PWR_DSMPD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PWR_PD // Description : PLL powerdown // To save power set high when PLL output not required. #define PLL_PWR_PD_RESET 0x1 #define PLL_PWR_PD_BITS 0x00000001 #define PLL_PWR_PD_MSB 0 #define PLL_PWR_PD_LSB 0 #define PLL_PWR_PD_ACCESS "RW" // ============================================================================= // Register : PLL_FBDIV_INT // Description : Feedback divisor // (note: this PLL does not support fractional division) // see ctrl reg description for constraints #define PLL_FBDIV_INT_OFFSET 0x00000008 #define PLL_FBDIV_INT_BITS 0x00000fff #define PLL_FBDIV_INT_RESET 0x00000000 #define PLL_FBDIV_INT_MSB 11 #define PLL_FBDIV_INT_LSB 0 #define PLL_FBDIV_INT_ACCESS "RW" // ============================================================================= // Register : PLL_PRIM // Description : Controls the PLL post dividers for the primary output // (note: this PLL does not have a secondary output) // the primary output is driven from VCO divided by // postdiv1*postdiv2 #define PLL_PRIM_OFFSET 0x0000000c #define PLL_PRIM_BITS 0x00077000 #define PLL_PRIM_RESET 0x00077000 // ----------------------------------------------------------------------------- // Field : PLL_PRIM_POSTDIV1 // Description : divide by 1-7 #define PLL_PRIM_POSTDIV1_RESET 0x7 #define PLL_PRIM_POSTDIV1_BITS 0x00070000 #define PLL_PRIM_POSTDIV1_MSB 18 #define PLL_PRIM_POSTDIV1_LSB 16 #define PLL_PRIM_POSTDIV1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PRIM_POSTDIV2 // Description : divide by 1-7 #define PLL_PRIM_POSTDIV2_RESET 0x7 #define PLL_PRIM_POSTDIV2_BITS 0x00007000 #define PLL_PRIM_POSTDIV2_MSB 14 #define PLL_PRIM_POSTDIV2_LSB 12 #define PLL_PRIM_POSTDIV2_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_PLL_DEFINED