| /******************************************************************************** |
| * Marvell GPL License Option |
| * |
| * If you received this File from Marvell, you may opt to use, redistribute and/or |
| * modify this File in accordance with the terms and conditions of the General |
| * Public License Version 2, June 1991 (the "GPL License"), a copy of which is |
| * available along with the File in the license.txt file or by writing to the Free |
| * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or |
| * on the worldwide web at http://www.gnu.org/licenses/gpl.txt. |
| * |
| * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY |
| * DISCLAIMED. The GPL License provides additional details about this warranty |
| * disclaimer. |
| ******************************************************************************/ |
| |
| //#include "Diag.h" |
| #include "io.h" |
| //#include "pllDiag.h" |
| #include "memmap.h" |
| #include "global.h" |
| //#include "clockDiag.h" |
| |
| #ifndef BOOTLOADER |
| #define UBOOT |
| #endif |
| |
| #define dbg_printf(a, ...) |
| enum divider_index |
| { |
| DIVIDED_BY_2 = 1, |
| DIVIDED_BY_4, |
| DIVIDED_BY_6, |
| DIVIDED_BY_8, |
| DIVIDED_BY_12 |
| }; |
| #if 0 |
| const char *AVPLL[] = |
| { |
| "AVPllB4", |
| "AVPllB5", |
| "AVPllB6", |
| "AVPllB7", |
| }; |
| |
| float VcoDiv[] = |
| { |
| 1, /// * 0000: 1 |
| 1.5, /// * 0001: 1.5 |
| 2, /// * 0010: 2 |
| 2.5, /// * 0011: 2.5 |
| 3, /// * 0100: 3 |
| 4, /// * 0101: 4 |
| 5, /// * 0110: 5 |
| 6, /// * 0111: 6 |
| 8, /// * 1000: 8 |
| }; |
| #endif |
| enum Clocks |
| { |
| SYSCLK, |
| DRMCLK, |
| CFGCLK, |
| GFXCLK, |
| ZSPCLK, |
| PERIFCLK, |
| PCUBECLK, |
| VSCOPECLK, |
| NFCECCCLK, |
| VPPSYSCLK, |
| APPCLK, |
| GFX3DCORECLK, |
| GFX3DSYSCLK, |
| ARCREFCLK, |
| // HDMIRXFPLLREFCLK, |
| // HDMIRXTCLK, |
| VIPCLK, |
| SDIOXINCLK, |
| SDIO1XINCLK, |
| GFX3DEXTRACLK, |
| GC360CLK, |
| NONCLK, |
| }; |
| |
| #if defined(UBOOT) |
| const char* g_aClocks[] = |
| { |
| "sysClk", |
| "drmClk", |
| "cfgClk", |
| "gfxClk", |
| "zspClk", |
| "perifClk", |
| "pCubeClk", |
| "vScopeClk", |
| "nfcEccClk", |
| "vppSysClk", |
| "appClk", |
| "gfx3DCoreClk", |
| "gfx3DSysClk", |
| "arcRefClk", |
| // "hdmirxFpllRefClk", |
| // "hdmirxTclk", |
| "vipClk", |
| "sdioXinClk", |
| "sdio1XinClk", |
| "gfx3DExtraClk", |
| "gc360Clk" |
| }; |
| #endif |
| |
| #if 0 |
| enum ClockDiagCmds |
| { |
| // Exit submenu |
| CMD_CLOCK_EXIT, |
| CMD_CLOCK_HELP, |
| // Tests |
| CMD_CLOCK_LIST_AVPLL_VCO_FREQUENCIES, |
| CMD_CLOCK_SET_AVPLL_B, |
| CMD_CLOCK_CHANGE_CPUCLK, |
| CMD_CLOCK_CHANGE_CPUPLL, |
| CMD_CLOCK_LIST_INDICES, |
| CMD_CLOCK_CHANGE_OTHER_CLOCK, |
| CMD_CLOCK_CHANGE_SYSPLL, |
| CMD_CLOCK_MAX, |
| CMD_CLOCK_UNKNOWN |
| }; |
| |
| static const char* g_aClockCmds[] = |
| { |
| "EXIT", |
| "HELP", |
| "APVCO", |
| "AVPLLB", |
| "CPUCLK", |
| "CPUPLL", |
| "LIST", |
| "OTHER", |
| "SYSPLL" |
| }; |
| |
| static const char* g_aClockCmdHelp[] = |
| { |
| "N/A", |
| "[]; Help", |
| "[]; list AVPLL VCO frequencies", |
| "[Channel] [freq_index]; set AVPLL_B frequency", |
| "[PllSwitch] [PllSelect] [div]; change cpuClk source and divider", |
| "[frequency]; change cpuPll frequency", |
| "[]; list clock indices", |
| "[index] [PllSwitch] [PllSelect] [div]; change source and divider of other clocks", |
| "[frequency]; change sysPll frequency", |
| }; |
| |
| const unsigned int clock_divider[] = |
| { |
| 1, |
| 2, |
| 4, |
| 6, |
| 8, |
| 12, |
| 1, |
| 1 |
| }; |
| |
| int speed_cpu; |
| unsigned int RefClkIn = 25; |
| unsigned int RefDiv = 2; |
| extern float current_freq[2][8]; |
| |
| int parseClockCmd(char *pCmd) // Pointer to a text string that contains the command and its arguments. |
| { |
| int cmdIndex; |
| unsigned int data1, data2, data3, data4; |
| unsigned int result; |
| int iResult = 0; |
| int i; |
| |
| // Find the command index based on user input |
| skipSpace( &pCmd ); |
| |
| // Ignore blank command and/or comment only lines. |
| if (( *pCmd == '\0' ) || ( *pCmd == ';' )) |
| return 0; |
| |
| // Parse the command. |
| cmdIndex = findCmdIndex( &pCmd, g_aClockCmds, (int)CMD_CLOCK_MAX ); |
| |
| // Handle the case where a command is entered without arguments |
| switch ( cmdIndex ) |
| { |
| case CMD_CLOCK_LIST_AVPLL_VCO_FREQUENCIES: |
| dbg_printf(PRN_RES, " AVPLL VCO frequencies\n"); |
| for (i = 0; i < 6; i++) |
| dbg_printf(PRN_RES, " %d: %f\n", i, diag_vcoFreqs[i]); |
| dbg_printf(PRN_RES, " use AVPLL LSCLK command to find out available frequencies\n"); |
| break; |
| case CMD_CLOCK_SET_AVPLL_B: |
| data1 = 7; // Channel |
| data2 = 0; // Index |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data1 ); |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data2 ); |
| |
| iResult = diag_clockFreq_B(data2, data1); |
| |
| dbg_printf(PRN_RES, " Setting AVPLL_B%d to index %d", data1, data2); |
| if (!iResult) |
| dbg_printf(PRN_RES, " Passed.\n"); |
| else |
| dbg_printf(PRN_RES, " Failed.\n Please pick a different frequency scheme\n"); |
| break; |
| case CMD_CLOCK_CHANGE_CPUCLK: |
| data1 = 0; // PllSwitch |
| data2 = 0; // PllSelect |
| data3 = 1; // Divider |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data1 ); |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data2 ); |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data3 ); |
| |
| if (data1 > 1 || data2 > 4) |
| { |
| iResult = 1; |
| dbg_printf(PRN_ERR, " invalid parameter\n"); |
| } |
| else if ((data3 != 1) && (data3 != 2) && (data3 != 3) && (data3 != 4) && (data3 != 6) && (data3 != 8) && (data3 != 12)) |
| { |
| iResult = 1; |
| dbg_printf(PRN_ERR, " invalid divider\n"); |
| } |
| else |
| { |
| diag_clock_change_cpuClk(data1, data2, data3); |
| |
| dbg_printf(PRN_RES, " Changed cpuClk, now\n"); |
| list_speed(LIST_ALL_SPEEDS); |
| } |
| break; |
| case CMD_CLOCK_CHANGE_CPUPLL: |
| data1 = 400; // Frequency |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data1 ); |
| |
| result = diag_clock_change_cpuPll(data1); |
| dbg_printf(PRN_RES, " cpuPll set to %d\n", result); |
| break; |
| case CMD_CLOCK_LIST_INDICES: |
| for (i = 0; i < NONCLK; i++) |
| dbg_printf(PRN_RES, " %-2d: %s\n", i, g_aClocks[i]); |
| break; |
| case CMD_CLOCK_CHANGE_OTHER_CLOCK: |
| data1 = 0; // Index |
| data2 = 0; // PllSwitch |
| data3 = 0; // PllSelect |
| data4 = 1; // Divider |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data1 ); |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data2 ); |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data3 ); |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data4 ); |
| |
| if ((data1 >= NONCLK)|| (data2 > 1) || (data3 > 4)) |
| { |
| iResult = 1; |
| dbg_printf(PRN_ERR, " invalid parameter\n"); |
| } |
| else if ((data4 != 1) && (data4 != 2) && (data4 != 3) && (data4 != 4) && (data4 != 6) && (data4 != 8) && (data4 != 12)) |
| { |
| iResult = 1; |
| dbg_printf(PRN_ERR, " invalid divider\n"); |
| } |
| else |
| { |
| diag_clock_change_otherClk(data1, data2, data3, data4); |
| |
| dbg_printf(PRN_RES, " Changed %s, now\n", g_aClocks[data1]); |
| list_speed(LIST_ALL_SPEEDS); |
| } |
| break; |
| case CMD_CLOCK_CHANGE_SYSPLL: |
| data1 = 400; // Frequency |
| skipSpace( &pCmd ); |
| if ( *pCmd != '\0' ) |
| pCmd = getIntToken( pCmd, &data1 ); |
| |
| result = diag_clock_change_sysPll(data1); |
| dbg_printf(PRN_RES, " sysPll set to %d\n", result); |
| break; |
| case CMD_CLOCK_HELP: |
| default: |
| printCommandHelp(g_aClockCmds, g_aClockCmdHelp, CMD_CLOCK_MAX); |
| break; |
| } |
| return iResult; |
| } |
| |
| int diag_clock_change_cpuPll(unsigned int frequency) |
| { |
| #if BG2_DV_BOARD |
| unsigned int vcoDiv_sel_setting; |
| unsigned int kvco; |
| unsigned int vco_vrng; |
| unsigned int FbDiv; |
| unsigned int vco; |
| unsigned int cpuPll; |
| TGbl_ClkSwitch ClkSwitch; |
| TGbl_cpuPllCtl cpuPllCtl; |
| T32Gbl_ResetTrigger ResetTrigger; |
| int i; |
| |
| if (frequency >= 1250 && frequency <= 2500) |
| vcoDiv_sel_setting = 0; |
| else if (frequency < 1250 && frequency >= 625) |
| vcoDiv_sel_setting = 2; |
| else if (frequency < 625 && frequency >= 313) |
| vcoDiv_sel_setting = 5; |
| else if (frequency < 313 && frequency >= 157) |
| vcoDiv_sel_setting = 8; |
| else |
| { |
| dbg_printf(PRN_RES, " invalid frequency %d MHz\n", frequency); |
| return -1; |
| } |
| |
| vco = frequency * VcoDiv[vcoDiv_sel_setting]; |
| if (vco < 1300) |
| kvco = 1; |
| else if (vco < 1500) |
| kvco = 2; |
| else if (vco < 1700) |
| kvco = 3; |
| else if (vco < 1950) |
| kvco = 4; |
| else if (vco < 2200) |
| kvco = 5; |
| else if (vco < 2500) |
| kvco = 6; |
| else |
| { |
| dbg_printf(PRN_RES, " invalid vco %d MHz. Won't happen\n", frequency); |
| return -1; |
| } |
| |
| vco_vrng = kvco - 1; |
| |
| FbDiv = vco * RefDiv / RefClkIn; |
| |
| // bypass ON |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), &ClkSwitch.u32[0]); |
| ClkSwitch.uClkSwitch_cpu1PLLSWBypass = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // change Pll frequency |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl), &cpuPllCtl.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl1), &cpuPllCtl.u32[1]); |
| cpuPllCtl.ucpuPllCtl_cpuPllRfDiv = RefDiv; |
| cpuPllCtl.ucpuPllCtl_cpuPllFbDiv = FbDiv; |
| cpuPllCtl.ucpuPllCtl_cpuPllKvco = kvco; |
| cpuPllCtl.ucpuPllCtl_cpuPllVcoRng = vco_vrng; |
| cpuPllCtl.ucpuPllCtl_cpuPllVcoDivSelSe = vcoDiv_sel_setting; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl), cpuPllCtl.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl1), cpuPllCtl.u32[1]); |
| |
| // reset |
| ResetTrigger.u32 = 0; |
| ResetTrigger.uResetTrigger_sysPllSyncReset = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ResetTrigger), ResetTrigger.u32); |
| for (i = 0; i < 400000; i++); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ResetTrigger), 0); |
| |
| // bypass OFF |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), &ClkSwitch.u32[0]); |
| ClkSwitch.uClkSwitch_cpu1PLLSWBypass = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // read Pll frequency |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl), &cpuPllCtl.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl1), &cpuPllCtl.u32[1]); |
| FbDiv = cpuPllCtl.ucpuPllCtl_cpuPllFbDiv; |
| RefDiv = cpuPllCtl.ucpuPllCtl_cpuPllRfDiv; |
| vcoDiv_sel_setting = cpuPllCtl.ucpuPllCtl_cpuPllVcoDivSelSe; |
| cpuPll = FbDiv * RefClkIn / RefDiv / VcoDiv[vcoDiv_sel_setting]; |
| |
| return cpuPll; |
| #endif |
| } |
| |
| int diag_clock_change_sysPll(unsigned int frequency) |
| { |
| #if BG2_DV_BOARD //YH: this needs to be updated for new PLL IP |
| unsigned int vcoDiv_sel_setting; |
| unsigned int kvco; |
| unsigned int vco_vrng; |
| unsigned int FbDiv; |
| unsigned int vco; |
| unsigned int sysPll; |
| TGbl_ClkSwitch ClkSwitch; |
| TGbl_sysPllCtl sysPllCtl; |
| T32Gbl_ResetTrigger ResetTrigger; |
| int i; |
| |
| if (frequency >= 1250 && frequency <= 2500) |
| vcoDiv_sel_setting = 0; |
| else if (frequency < 1250 && frequency >= 625) |
| vcoDiv_sel_setting = 2; |
| else if (frequency < 625 && frequency >= 313) |
| vcoDiv_sel_setting = 5; |
| else if (frequency < 313 && frequency >= 157) |
| vcoDiv_sel_setting = 8; |
| else |
| { |
| dbg_printf(PRN_RES, " invalid frequency %d MHz\n", frequency); |
| return -1; |
| } |
| |
| vco = frequency * VcoDiv[vcoDiv_sel_setting]; |
| if (vco < 1300) |
| kvco = 1; |
| else if (vco < 1500) |
| kvco = 2; |
| else if (vco < 1700) |
| kvco = 3; |
| else if (vco < 1950) |
| kvco = 4; |
| else if (vco < 2200) |
| kvco = 5; |
| else if (vco < 2500) |
| kvco = 6; |
| else |
| { |
| dbg_printf(PRN_RES, " invalid vco %d MHz. Won't happen\n", frequency); |
| return -1; |
| } |
| |
| vco_vrng = kvco - 1; |
| |
| FbDiv = vco * RefDiv / RefClkIn; |
| |
| // bypass ON |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), &ClkSwitch.u32[0]); |
| ClkSwitch.uClkSwitch_sysPLLSWBypass = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // change Pll frequency |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl), &sysPllCtl.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl1), &sysPllCtl.u32[1]); |
| sysPllCtl.usysPllCtl_sysPllRfDiv = RefDiv; |
| sysPllCtl.usysPllCtl_sysPllFbDiv = FbDiv; |
| sysPllCtl.usysPllCtl_sysPllKvco = kvco; |
| sysPllCtl.usysPllCtl_sysPllVcoRng = vco_vrng; |
| sysPllCtl.usysPllCtl_sysPllVcoDivSelSe = vcoDiv_sel_setting; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl), sysPllCtl.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl1), sysPllCtl.u32[1]); |
| |
| // reset |
| ResetTrigger.u32 = 0; |
| ResetTrigger.uResetTrigger_sysPllSyncReset = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ResetTrigger), ResetTrigger.u32); |
| for (i = 0; i < 400000; i++); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ResetTrigger), 0); |
| |
| // bypass OFF |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), &ClkSwitch.u32[0]); |
| ClkSwitch.uClkSwitch_sysPLLSWBypass = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // read Pll frequency |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl), &sysPllCtl.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl1), &sysPllCtl.u32[1]); |
| |
| FbDiv = sysPllCtl.usysPllCtl_sysPllFbDiv; |
| RefDiv = sysPllCtl.usysPllCtl_sysPllRfDiv; |
| vcoDiv_sel_setting = sysPllCtl.usysPllCtl_sysPllVcoDivSelSe; |
| sysPll = FbDiv * RefClkIn / RefDiv / VcoDiv[vcoDiv_sel_setting]; |
| |
| return sysPll; |
| #endif |
| } |
| |
| void diag_clock_change_cpuClk(unsigned int pllSwitch, unsigned int pllSelect, unsigned int divider) |
| { |
| #if BG2_DV_BOARD //YH: this needs to be updated for new PLL IP |
| TGbl_clkSelect clkSelect; |
| TGbl_ClkSwitch ClkSwitch; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), &ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), &clkSelect.u32[0]); |
| |
| // cpuPll bypass ON |
| ClkSwitch.uClkSwitch_cpu1PLLSWBypass = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // cpuClk use default |
| ClkSwitch.uClkSwitch_cpu0ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_cpu0ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_cpu0ClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_cpu0ClkSwitch = 1; |
| clkSelect.uclkSelect_cpu0ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_cpu0ClkSwitch = 1; |
| clkSelect.uclkSelect_cpu0ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_cpu0ClkSwitch = 1; |
| clkSelect.uclkSelect_cpu0ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_cpu0ClkSwitch = 1; |
| clkSelect.uclkSelect_cpu0ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_cpu0ClkSwitch = 1; |
| clkSelect.uclkSelect_cpu0ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_cpu0ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_cpu0ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_cpu0ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| // bypass OFF |
| ClkSwitch.uClkSwitch_cpu1PLLSWBypass = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| #endif |
| } |
| |
| #endif |
| |
| void diag_clock_change_otherClk(unsigned int index, unsigned int pllSwitch, unsigned int pllSelect, unsigned int divider) |
| { |
| #if 1//YH: this needs to be updated for new PLL IP |
| TGbl_clkSelect clkSelect; |
| TGbl_ClkSwitch ClkSwitch; |
| |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), &ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), &ClkSwitch.u32[1]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), &clkSelect.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), &clkSelect.u32[1]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), &clkSelect.u32[2]); |
| |
| // sysPll bypass ON |
| ClkSwitch.uClkSwitch_sysPLLSWBypass = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| |
| if (index == SYSCLK) |
| { |
| // sysClk use default sysPll |
| ClkSwitch.uClkSwitch_sysClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_sysClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_sysClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_sysClkSwitch = 1; |
| clkSelect.uclkSelect_sysClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_sysClkSwitch = 1; |
| clkSelect.uclkSelect_sysClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_sysClkSwitch = 1; |
| clkSelect.uclkSelect_sysClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_sysClkSwitch = 1; |
| clkSelect.uclkSelect_sysClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_sysClkSwitch = 1; |
| clkSelect.uclkSelect_sysClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_sysClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_sysClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_sysClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == DRMCLK) |
| { |
| // drmFigoClk use default sysPll |
| ClkSwitch.uClkSwitch_drmFigoClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_drmFigoClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_drmFigoClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_drmFigoClkSwitch = 1; |
| clkSelect.uclkSelect_drmFigoClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_drmFigoClkSwitch = 1; |
| clkSelect.uclkSelect_drmFigoClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_drmFigoClkSwitch = 1; |
| clkSelect.uclkSelect_drmFigoClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_drmFigoClkSwitch = 1; |
| clkSelect.uclkSelect_drmFigoClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_drmFigoClkSwitch = 1; |
| clkSelect.uclkSelect_drmFigoClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_drmFigoClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_drmFigoClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_drmFigoClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == CFGCLK) |
| { |
| // cfgClk use default sysPll |
| ClkSwitch.uClkSwitch_cfgClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_cfgClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_cfgClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_cfgClkSwitch = 1; |
| clkSelect.uclkSelect_cfgClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_cfgClkSwitch = 1; |
| clkSelect.uclkSelect_cfgClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_cfgClkSwitch = 1; |
| clkSelect.uclkSelect_cfgClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_cfgClkSwitch = 1; |
| clkSelect.uclkSelect_cfgClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_cfgClkSwitch = 1; |
| clkSelect.uclkSelect_cfgClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_cfgClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_cfgClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_cfgClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == GFXCLK) |
| { |
| // gfxClk use default sysPll |
| ClkSwitch.uClkSwitch_gfxClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_gfxClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_gfxClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_gfxClkSwitch = 1; |
| clkSelect.uclkSelect_gfxClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_gfxClkSwitch = 1; |
| clkSelect.uclkSelect_gfxClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_gfxClkSwitch = 1; |
| clkSelect.uclkSelect_gfxClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_gfxClkSwitch = 1; |
| clkSelect.uclkSelect_gfxClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_gfxClkSwitch = 1; |
| clkSelect.uclkSelect_gfxClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_gfxClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_gfxClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_gfxClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == ZSPCLK) |
| { |
| // zspClk use default sysPll |
| ClkSwitch.uClkSwitch_zspClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_zspClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_zspClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_zspClkSwitch = 1; |
| clkSelect.uclkSelect_zspClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_zspClkSwitch = 1; |
| clkSelect.uclkSelect_zspClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_zspClkSwitch = 1; |
| clkSelect.uclkSelect_zspClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_zspClkSwitch = 1; |
| clkSelect.uclkSelect_zspClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_zspClkSwitch = 1; |
| clkSelect.uclkSelect_zspClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_zspClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_zspClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_zspClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == PERIFCLK) |
| { |
| // perifClk use default sysPll |
| ClkSwitch.uClkSwitch_perifClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_perifClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_perifClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_perifClkSwitch = 1; |
| clkSelect.uclkSelect_perifClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_perifClkSwitch = 1; |
| clkSelect.uclkSelect_perifClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_perifClkSwitch = 1; |
| clkSelect.uclkSelect_perifClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_perifClkSwitch = 1; |
| clkSelect.uclkSelect_perifClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_perifClkSwitch = 1; |
| clkSelect.uclkSelect_perifClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_perifClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_perifClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_perifClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == PCUBECLK) |
| { |
| // pCubeClk use default sysPll |
| ClkSwitch.uClkSwitch_pCubeClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_pCubeClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_pCubeClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_pCubeClkSwitch = 1; |
| clkSelect.uclkSelect_pCubeClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_pCubeClkSwitch = 1; |
| clkSelect.uclkSelect_pCubeClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_pCubeClkSwitch = 1; |
| clkSelect.uclkSelect_pCubeClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_pCubeClkSwitch = 1; |
| clkSelect.uclkSelect_pCubeClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_pCubeClkSwitch = 1; |
| clkSelect.uclkSelect_pCubeClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_pCubeClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_pCubeClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_pCubeClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == VSCOPECLK) |
| { |
| // vScopeClk use default sysPll |
| ClkSwitch.uClkSwitch_vScopeClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_vScopeClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_vScopeClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_vScopeClkSwitch = 1; |
| clkSelect.uclkSelect_vScopeClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_vScopeClkSwitch = 1; |
| clkSelect.uclkSelect_vScopeClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_vScopeClkSwitch = 1; |
| clkSelect.uclkSelect_vScopeClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_vScopeClkSwitch = 1; |
| clkSelect.uclkSelect_vScopeClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_vScopeClkSwitch = 1; |
| clkSelect.uclkSelect_vScopeClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_vScopeClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_vScopeClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_vScopeClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == NFCECCCLK) |
| { |
| // nfcEccClk use default sysPll |
| ClkSwitch.uClkSwitch_nfcEccClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_nfcEccClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_nfcEccClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_nfcEccClkSwitch = 1; |
| clkSelect.uclkSelect_nfcEccClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_nfcEccClkSwitch = 1; |
| clkSelect.uclkSelect_nfcEccClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_nfcEccClkSwitch = 1; |
| clkSelect.uclkSelect_nfcEccClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_nfcEccClkSwitch = 1; |
| clkSelect.uclkSelect_nfcEccClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_nfcEccClkSwitch = 1; |
| clkSelect.uclkSelect_nfcEccClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_nfcEccClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_nfcEccClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_nfcEccClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == VPPSYSCLK) |
| { |
| // vppSysClk use default sysPll |
| ClkSwitch.uClkSwitch_vppSysClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_vppSysClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_vppSysClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_vppSysClkSwitch = 1; |
| clkSelect.uclkSelect_vppSysClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_vppSysClkSwitch = 1; |
| clkSelect.uclkSelect_vppSysClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_vppSysClkSwitch = 1; |
| clkSelect.uclkSelect_vppSysClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_vppSysClkSwitch = 1; |
| clkSelect.uclkSelect_vppSysClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_vppSysClkSwitch = 1; |
| clkSelect.uclkSelect_vppSysClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_vppSysClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_vppSysClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_vppSysClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == APPCLK) |
| { |
| // appClk use default sysPll |
| ClkSwitch.uClkSwitch_appClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to divided-by-3 first |
| ClkSwitch.uClkSwitch_appClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| ClkSwitch.uClkSwitch_appClkSwitch = 0; |
| break; |
| case 2: |
| ClkSwitch.uClkSwitch_appClkSwitch = 1; |
| clkSelect.uclkSelect_appClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| ClkSwitch.uClkSwitch_appClkSwitch = 1; |
| clkSelect.uclkSelect_appClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| ClkSwitch.uClkSwitch_appClkSwitch = 1; |
| clkSelect.uclkSelect_appClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| ClkSwitch.uClkSwitch_appClkSwitch = 1; |
| clkSelect.uclkSelect_appClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| ClkSwitch.uClkSwitch_appClkSwitch = 1; |
| clkSelect.uclkSelect_appClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| ClkSwitch.uClkSwitch_appClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| |
| // change Pll Select |
| clkSelect.uclkSelect_appClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), clkSelect.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), clkSelect.u32[1]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), clkSelect.u32[2]); |
| |
| // change Pll Switch |
| ClkSwitch.uClkSwitch_appClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), ClkSwitch.u32[1]); |
| } |
| else if (index == GFX3DCORECLK) |
| { |
| T32Gbl_gfx3DCoreClkCtrl gfx3DCoreClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), &gfx3DCoreClkCtrl.u32); |
| |
| // use default sysPll |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), gfx3DCoreClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), gfx3DCoreClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSwitch = 1; |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSwitch = 1; |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSwitch = 1; |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSwitch = 1; |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSwitch = 1; |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), gfx3DCoreClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), gfx3DCoreClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), gfx3DCoreClkCtrl.u32); |
| |
| // change Pll Switch |
| gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), gfx3DCoreClkCtrl.u32); |
| } |
| else if (index == GFX3DSYSCLK) |
| { |
| T32Gbl_gfx3DSysClkCtrl gfx3DSysClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), &gfx3DSysClkCtrl.u32); |
| |
| // use default sysPll |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), gfx3DSysClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), gfx3DSysClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSwitch = 1; |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSwitch = 1; |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSwitch = 1; |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSwitch = 1; |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSwitch = 1; |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), gfx3DSysClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), gfx3DSysClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), gfx3DSysClkCtrl.u32); |
| |
| // change Pll Switch |
| gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), gfx3DSysClkCtrl.u32); |
| } |
| else if (index == ARCREFCLK) |
| { |
| T32Gbl_arcRefClkCtrl arcRefClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), &arcRefClkCtrl.u32); |
| |
| // use default sysPll |
| arcRefClkCtrl.uarcRefClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), arcRefClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| arcRefClkCtrl.uarcRefClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), arcRefClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSwitch = 1; |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSwitch = 1; |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSwitch = 1; |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSwitch = 1; |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSwitch = 1; |
| arcRefClkCtrl.uarcRefClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), arcRefClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| arcRefClkCtrl.uarcRefClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), arcRefClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| arcRefClkCtrl.uarcRefClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), arcRefClkCtrl.u32); |
| |
| // change Pll Switch |
| arcRefClkCtrl.uarcRefClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), arcRefClkCtrl.u32); |
| } |
| #if 0 //not in A0 |
| else if (index == HDMIRXFPLLREFCLK) |
| { |
| T32Gbl_hdmirxFpllRefClkCtrl hdmirxFpllRefClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), &hdmirxFpllRefClkCtrl.u32); |
| |
| // use default sysPll |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), hdmirxFpllRefClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), hdmirxFpllRefClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSwitch = 1; |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSwitch = 1; |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSwitch = 1; |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSwitch = 1; |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSwitch = 1; |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), hdmirxFpllRefClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), hdmirxFpllRefClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), hdmirxFpllRefClkCtrl.u32); |
| |
| // change Pll Switch |
| hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), hdmirxFpllRefClkCtrl.u32); |
| } |
| else if (index == HDMIRXTCLK) |
| { |
| T32Gbl_hdmirxTclkCtrl hdmirxTclkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), &hdmirxTclkCtrl.u32); |
| |
| // use default sysPll |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), hdmirxTclkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), hdmirxTclkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSwitch = 1; |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSwitch = 1; |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSwitch = 1; |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSwitch = 1; |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSwitch = 1; |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), hdmirxTclkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), hdmirxTclkCtrl.u32); |
| } |
| |
| // change Pll Select |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), hdmirxTclkCtrl.u32); |
| |
| // change Pll Switch |
| hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), hdmirxTclkCtrl.u32); |
| } |
| #endif |
| else if (index == VIPCLK) |
| { |
| T32Gbl_vipClkCtrl vipClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), &vipClkCtrl.u32); |
| |
| // use default sysPll |
| vipClkCtrl.uvipClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), vipClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| vipClkCtrl.uvipClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), vipClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| vipClkCtrl.uvipClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| vipClkCtrl.uvipClkCtrl_ClkSwitch = 1; |
| vipClkCtrl.uvipClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| vipClkCtrl.uvipClkCtrl_ClkSwitch = 1; |
| vipClkCtrl.uvipClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| vipClkCtrl.uvipClkCtrl_ClkSwitch = 1; |
| vipClkCtrl.uvipClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| vipClkCtrl.uvipClkCtrl_ClkSwitch = 1; |
| vipClkCtrl.uvipClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| vipClkCtrl.uvipClkCtrl_ClkSwitch = 1; |
| vipClkCtrl.uvipClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), vipClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| vipClkCtrl.uvipClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), vipClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| vipClkCtrl.uvipClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), vipClkCtrl.u32); |
| |
| // change Pll Switch |
| vipClkCtrl.uvipClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), vipClkCtrl.u32); |
| } |
| else if (index == SDIOXINCLK) |
| { |
| T32Gbl_sdioXinClkCtrl sdioXinClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), &sdioXinClkCtrl.u32); |
| |
| // use default sysPll |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), sdioXinClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), sdioXinClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSwitch = 1; |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSwitch = 1; |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSwitch = 1; |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSwitch = 1; |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSwitch = 1; |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), sdioXinClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), sdioXinClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), sdioXinClkCtrl.u32); |
| |
| // change Pll Switch |
| sdioXinClkCtrl.usdioXinClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), sdioXinClkCtrl.u32); |
| } |
| else if (index == SDIO1XINCLK) |
| { |
| T32Gbl_sdio1XinClkCtrl sdio1XinClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), &sdio1XinClkCtrl.u32); |
| |
| // use default sysPll |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), sdio1XinClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), sdio1XinClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSwitch = 1; |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSwitch = 1; |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSwitch = 1; |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSwitch = 1; |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSwitch = 1; |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), sdio1XinClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), sdio1XinClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), sdio1XinClkCtrl.u32); |
| |
| // change Pll Switch |
| sdio1XinClkCtrl.usdio1XinClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), sdio1XinClkCtrl.u32); |
| } |
| else if (index == GFX3DEXTRACLK) |
| { |
| T32Gbl_gfx3DExtraClkCtrl gfx3DExtraClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), &gfx3DExtraClkCtrl.u32); |
| |
| // use default sysPll |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), gfx3DExtraClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), gfx3DExtraClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSwitch = 1; |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSwitch = 1; |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSwitch = 1; |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSwitch = 1; |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSwitch = 1; |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), gfx3DExtraClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), gfx3DExtraClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), gfx3DExtraClkCtrl.u32); |
| |
| // change Pll Switch |
| gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), gfx3DExtraClkCtrl.u32); |
| } |
| else if (index == GC360CLK) |
| { |
| T32Gbl_gc360ClkCtrl gc360ClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), &gc360ClkCtrl.u32); |
| |
| // use default sysPll |
| gc360ClkCtrl.ugc360ClkCtrl_ClkPllSwitch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), gc360ClkCtrl.u32); |
| |
| // change divider to divided-by-3 first |
| gc360ClkCtrl.ugc360ClkCtrl_ClkD3Switch = 1; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), gc360ClkCtrl.u32); |
| |
| // change divider to target |
| switch (divider) |
| { |
| case 1: |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSwitch = 0; |
| break; |
| case 2: |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSwitch = 1; |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSel = DIVIDED_BY_2; |
| break; |
| case 3: |
| break; |
| case 4: |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSwitch = 1; |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSel = DIVIDED_BY_4; |
| break; |
| case 6: |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSwitch = 1; |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSel = DIVIDED_BY_6; |
| break; |
| case 8: |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSwitch = 1; |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSel = DIVIDED_BY_8; |
| break; |
| case 12: |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSwitch = 1; |
| gc360ClkCtrl.ugc360ClkCtrl_ClkSel = DIVIDED_BY_12; |
| break; |
| default: |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| break; |
| } |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), gc360ClkCtrl.u32); |
| |
| // turn off divided-by-3 if not divided by 3 |
| if (divider != 3) |
| { |
| gc360ClkCtrl.ugc360ClkCtrl_ClkD3Switch = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), gc360ClkCtrl.u32); |
| } |
| |
| // change Pll Select |
| gc360ClkCtrl.ugc360ClkCtrl_ClkPllSel = pllSelect; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), gc360ClkCtrl.u32); |
| |
| // change Pll Switch |
| gc360ClkCtrl.ugc360ClkCtrl_ClkPllSwitch = pllSwitch; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), gc360ClkCtrl.u32); |
| } |
| else |
| dbg_printf(PRN_ERR, " this is impossible\n"); |
| |
| // bypass OFF |
| ClkSwitch.uClkSwitch_sysPLLSWBypass = 0; |
| BFM_HOST_Bus_Write32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), ClkSwitch.u32[0]); |
| #endif |
| } |
| #if 0 |
| unsigned int get_divider(unsigned int D3Switch, unsigned int Switch, unsigned int Select) |
| { |
| unsigned int divider; |
| if (D3Switch) |
| divider = 3; |
| else |
| { |
| if (!Switch) |
| divider = 1; |
| else |
| divider = clock_divider[Select]; |
| } |
| return divider; |
| } |
| |
| void list_speed(int level) |
| { |
| #if BG2_DV_BOARD //YH: this needs to be updated for new PLL IP |
| unsigned int FbDiv; |
| unsigned int RfDiv; |
| unsigned int vcoDiv_sel_setting; |
| TGbl_memPllCtl memPllCtl; |
| TGbl_sysPllCtl sysPllCtl; |
| TGbl_cpuPllCtl cpuPllCtl; |
| unsigned int memPll; |
| unsigned int sysPll; |
| unsigned int cpuPll; |
| unsigned int divider; |
| unsigned int D3Switch, Switch, Select; |
| TGbl_ClkSwitch ClkSwitch; |
| TGbl_clkSelect clkSelect; |
| unsigned int PllSel; |
| |
| // memPll |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_memPllCtl), &memPllCtl.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_memPllCtl1), &memPllCtl.u32[1]); |
| FbDiv = memPllCtl.umemPllCtl_memPllFbDiv; |
| RfDiv = memPllCtl.umemPllCtl_memPllRfDiv; |
| vcoDiv_sel_setting = memPllCtl.umemPllCtl_memPllVcoDivSelDiff; |
| memPll = FbDiv * RefClkIn / RfDiv; |
| memPll = (float)memPll / VcoDiv[vcoDiv_sel_setting]; |
| dbg_printf(PRN_RES, " memPll frequency %d\n", memPll); |
| |
| // sysPll |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl), &sysPllCtl.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sysPllCtl1), &sysPllCtl.u32[1]); |
| FbDiv = sysPllCtl.usysPllCtl_sysPllFbDiv; |
| RfDiv = sysPllCtl.usysPllCtl_sysPllRfDiv; |
| vcoDiv_sel_setting = sysPllCtl.usysPllCtl_sysPllVcoDivSelSe; |
| sysPll = FbDiv * RefClkIn / RfDiv; |
| sysPll = (float)sysPll / VcoDiv[vcoDiv_sel_setting]; |
| dbg_printf(PRN_RES, " sysPll frequency %d\n", sysPll); |
| |
| // cpuPll |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl), &cpuPllCtl.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_cpuPllCtl1), &cpuPllCtl.u32[1]); |
| FbDiv = cpuPllCtl.ucpuPllCtl_cpuPllFbDiv; |
| RfDiv = cpuPllCtl.ucpuPllCtl_cpuPllRfDiv; |
| vcoDiv_sel_setting = cpuPllCtl.ucpuPllCtl_cpuPllVcoDivSelSe; |
| cpuPll = FbDiv * RefClkIn / RfDiv; |
| cpuPll = (float)cpuPll / VcoDiv[vcoDiv_sel_setting]; |
| dbg_printf(PRN_RES, " cpuPll frequency %d\n", cpuPll); |
| |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch), &ClkSwitch.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_ClkSwitch1), &ClkSwitch.u32[1]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect), &clkSelect.u32[0]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect1), &clkSelect.u32[1]); |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_clkSelect2), &clkSelect.u32[2]); |
| |
| // DDR |
| dbg_printf(PRN_RES, " dClk frequency %d\n", memPll / 4); |
| |
| // CPU |
| D3Switch = ClkSwitch.uClkSwitch_cpu0ClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_cpu0ClkSwitch; |
| Select = clkSelect.uclkSelect_cpu0ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_cpu0ClkPllSel; |
| if (ClkSwitch.uClkSwitch_cpu0ClkPllSwitch) // AVPLL or memPll |
| { |
| if (PllSel == 4) // memPll |
| { |
| speed_cpu = memPll / divider; |
| dbg_printf(PRN_RES, " cpuClk frequency %d\n", speed_cpu); |
| } |
| else |
| { |
| speed_cpu = current_freq[1][PllSel + 4] / divider; |
| dbg_printf(PRN_RES, " cpuClk frequency %d [%s]\n", |
| speed_cpu, AVPLL[PllSel]); |
| } |
| } |
| else |
| { |
| speed_cpu = cpuPll / divider; |
| dbg_printf(PRN_RES, " cpuClk frequency %d\n", speed_cpu); |
| } |
| |
| if (level == LIST_ALL_SPEEDS) |
| { |
| // sysClk |
| D3Switch = ClkSwitch.uClkSwitch_sysClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_sysClkSwitch; |
| Select = clkSelect.uclkSelect_sysClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_sysClkPllSel; |
| if (ClkSwitch.uClkSwitch_sysClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " sysClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " sysClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " sysClk frequency %d\n", sysPll / divider); |
| |
| // drmFigoClk |
| D3Switch = ClkSwitch.uClkSwitch_drmFigoClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_drmFigoClkSwitch; |
| Select = clkSelect.uclkSelect_drmFigoClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_drmFigoClkPllSel; |
| if (ClkSwitch.uClkSwitch_drmFigoClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " drmClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " drmClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " drmClk frequency %d\n", sysPll / divider); |
| |
| // cfgClk |
| D3Switch = ClkSwitch.uClkSwitch_cfgClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_cfgClkSwitch; |
| Select = clkSelect.uclkSelect_cfgClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_cfgClkPllSel; |
| if (ClkSwitch.uClkSwitch_cfgClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " cfgClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " cfgClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " cfgClk frequency %d\n", sysPll / divider); |
| |
| // gfxClk |
| D3Switch = ClkSwitch.uClkSwitch_gfxClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_gfxClkSwitch; |
| Select = clkSelect.uclkSelect_gfxClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_gfxClkPllSel; |
| if (ClkSwitch.uClkSwitch_gfxClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " gfxClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " gfxClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " gfxClk frequency %d\n", sysPll / divider); |
| |
| // zspClk |
| D3Switch = ClkSwitch.uClkSwitch_zspClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_zspClkSwitch; |
| Select = clkSelect.uclkSelect_zspClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_zspClkPllSel; |
| if (ClkSwitch.uClkSwitch_zspClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " zspClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " zspClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " zspClk frequency %d\n", sysPll / divider); |
| |
| // perifClk |
| D3Switch = ClkSwitch.uClkSwitch_perifClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_perifClkSwitch; |
| Select = clkSelect.uclkSelect_perifClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_perifClkPllSel; |
| if (ClkSwitch.uClkSwitch_perifClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " perifClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " perifClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " perifClk frequency %d\n", sysPll / divider); |
| |
| // pCubeClk |
| D3Switch = ClkSwitch.uClkSwitch_pCubeClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_pCubeClkSwitch; |
| Select = clkSelect.uclkSelect_pCubeClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_pCubeClkPllSel; |
| if (ClkSwitch.uClkSwitch_pCubeClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " pCubeClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " pCubeClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " pCubeClk frequency %d\n", sysPll / divider); |
| |
| // vScopeClk |
| D3Switch = ClkSwitch.uClkSwitch_vScopeClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_vScopeClkSwitch; |
| Select = clkSelect.uclkSelect_vScopeClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_vScopeClkPllSel; |
| if (ClkSwitch.uClkSwitch_vScopeClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " vScopeClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " vScopeClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " vScopeClk frequency %d\n", sysPll / divider); |
| |
| // nfcEccClk |
| D3Switch = ClkSwitch.uClkSwitch_nfcEccClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_nfcEccClkSwitch; |
| Select = clkSelect.uclkSelect_nfcEccClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_nfcEccClkPllSel; |
| if (ClkSwitch.uClkSwitch_nfcEccClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " nfcEccClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " nfcEccClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " nfcEccClk frequency %d\n", sysPll / divider); |
| |
| // vppSysClk |
| D3Switch = ClkSwitch.uClkSwitch_vppSysClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_vppSysClkSwitch; |
| Select = clkSelect.uclkSelect_vppSysClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_vppSysClkPllSel; |
| if (ClkSwitch.uClkSwitch_vppSysClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " vppSysClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " vppSysClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " vppSysClk frequency %d\n", sysPll / divider); |
| |
| // appClk |
| D3Switch = ClkSwitch.uClkSwitch_appClkD3Switch; |
| Switch = ClkSwitch.uClkSwitch_appClkSwitch; |
| Select = clkSelect.uclkSelect_appClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = clkSelect.uclkSelect_appClkPllSel; |
| if (ClkSwitch.uClkSwitch_appClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " appClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " appClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " appClk frequency %d\n", sysPll / divider); |
| |
| // gfx3DCoreClk |
| T32Gbl_gfx3DCoreClkCtrl gfx3DCoreClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DCoreClkCtrl), &gfx3DCoreClkCtrl.u32); |
| D3Switch = gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkD3Switch; |
| Switch = gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSwitch; |
| Select = gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkPllSel; |
| if (gfx3DCoreClkCtrl.ugfx3DCoreClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " gfx3DCoreClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " gfx3DCoreClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " gfx3DCoreClk frequency %d\n", sysPll / divider); |
| |
| // gfx3DSysClk |
| T32Gbl_gfx3DSysClkCtrl gfx3DSysClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DSysClkCtrl), &gfx3DSysClkCtrl.u32); |
| D3Switch = gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkD3Switch; |
| Switch = gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSwitch; |
| Select = gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkPllSel; |
| if (gfx3DSysClkCtrl.ugfx3DSysClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " gfx3DSysClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " gfx3DSysClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " gfx3DSysClk frequency %d\n", sysPll / divider); |
| |
| // arcRefClk |
| T32Gbl_arcRefClkCtrl arcRefClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_arcRefClkCtrl), &arcRefClkCtrl.u32); |
| D3Switch = arcRefClkCtrl.uarcRefClkCtrl_ClkD3Switch; |
| Switch = arcRefClkCtrl.uarcRefClkCtrl_ClkSwitch; |
| Select = arcRefClkCtrl.uarcRefClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = arcRefClkCtrl.uarcRefClkCtrl_ClkPllSel; |
| if (arcRefClkCtrl.uarcRefClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " arcRefClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " arcRefClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " arcRefClk frequency %d\n", sysPll / divider); |
| |
| #if 0 //not in A0 |
| // hdmirxFpllRefClk |
| T32Gbl_hdmirxFpllRefClkCtrl hdmirxFpllRefClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxFpllRefClkCtrl), &hdmirxFpllRefClkCtrl.u32); |
| D3Switch = hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkD3Switch; |
| Switch = hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSwitch; |
| Select = hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkPllSel; |
| if (hdmirxFpllRefClkCtrl.uhdmirxFpllRefClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " hdmirxFpllRefClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " hdmirxFpllRefClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " hdmirxFpllRefClk frequency %d\n", sysPll / divider); |
| |
| // hdmirxTclk |
| T32Gbl_hdmirxTclkCtrl hdmirxTclkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_hdmirxTclkCtrl), &hdmirxTclkCtrl.u32); |
| D3Switch = hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkD3Switch; |
| Switch = hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSwitch; |
| Select = hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkPllSel; |
| if (hdmirxTclkCtrl.uhdmirxTclkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " hdmirxTclk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " hdmirxTclk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " hdmirxTclk frequency %d\n", sysPll / divider); |
| #endif |
| // vipClk |
| T32Gbl_vipClkCtrl vipClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_vipClkCtrl), &vipClkCtrl.u32); |
| D3Switch = vipClkCtrl.uvipClkCtrl_ClkD3Switch; |
| Switch = vipClkCtrl.uvipClkCtrl_ClkSwitch; |
| Select = vipClkCtrl.uvipClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = vipClkCtrl.uvipClkCtrl_ClkPllSel; |
| if (vipClkCtrl.uvipClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " vipClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " vipClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " vipClk frequency %d\n", sysPll / divider); |
| |
| // sdioXinClk |
| T32Gbl_sdioXinClkCtrl sdioXinClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdioXinClkCtrl), &sdioXinClkCtrl.u32); |
| D3Switch = sdioXinClkCtrl.usdioXinClkCtrl_ClkD3Switch; |
| Switch = sdioXinClkCtrl.usdioXinClkCtrl_ClkSwitch; |
| Select = sdioXinClkCtrl.usdioXinClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = sdioXinClkCtrl.usdioXinClkCtrl_ClkPllSel; |
| if (sdioXinClkCtrl.usdioXinClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " sdioXinClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " sdioXinClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " sdioXinClk frequency %d\n", sysPll / divider); |
| |
| // sdio1XinClk |
| T32Gbl_sdio1XinClkCtrl sdio1XinClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_sdio1XinClkCtrl), &sdio1XinClkCtrl.u32); |
| D3Switch = sdio1XinClkCtrl.usdio1XinClkCtrl_ClkD3Switch; |
| Switch = sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSwitch; |
| Select = sdio1XinClkCtrl.usdio1XinClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = sdio1XinClkCtrl.usdio1XinClkCtrl_ClkPllSel; |
| if (sdio1XinClkCtrl.usdio1XinClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " sdio1XinClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " sdio1XinClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " sdio1XinClk frequency %d\n", sysPll / divider); |
| |
| // gfx3DExtraClk |
| T32Gbl_gfx3DExtraClkCtrl gfx3DExtraClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gfx3DExtraClkCtrl), &gfx3DExtraClkCtrl.u32); |
| D3Switch = gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkD3Switch; |
| Switch = gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSwitch; |
| Select = gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkPllSel; |
| if (gfx3DExtraClkCtrl.ugfx3DExtraClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " gfx3DExtraClk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " gfx3DExtraClk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " gfx3DExtraClk frequency %d\n", sysPll / divider); |
| |
| // gc360Clk |
| T32Gbl_gc360ClkCtrl gc360ClkCtrl; |
| BFM_HOST_Bus_Read32((MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_gc360ClkCtrl), &gc360ClkCtrl.u32); |
| D3Switch = gc360ClkCtrl.ugc360ClkCtrl_ClkD3Switch; |
| Switch = gc360ClkCtrl.ugc360ClkCtrl_ClkSwitch; |
| Select = gc360ClkCtrl.ugc360ClkCtrl_ClkSel; |
| divider = get_divider(D3Switch, Switch, Select); |
| PllSel = gc360ClkCtrl.ugc360ClkCtrl_ClkPllSel; |
| if (gc360ClkCtrl.ugc360ClkCtrl_ClkPllSwitch) // AVPLL |
| if (PllSel < 4) |
| dbg_printf(PRN_RES, " gc360Clk frequency %.0f [%s]\n", |
| current_freq[1][PllSel + 4] / divider, AVPLL[PllSel]); |
| else |
| dbg_printf(PRN_ERR, " gc360Clk invalid PllSel %d\n", PllSel); |
| else // sysPll |
| dbg_printf(PRN_RES, " gc360Clk frequency %d\n", sysPll / divider); |
| } |
| #endif |
| } |
| #endif |