void OEMLaunchImage(UINT32 ulLaunchAddr) { UINT32 ulPhysicalJump = 0; // The IPL is running with the MMU on - before we jump to the loaded image, we need to convert // the launch address to a physical address and turn off the MMU. // // Convert jump address to a physical address. ulPhysicalJump = (DWORD)OALVAtoPA((void *)ulLaunchAddr); // Check if Current ARM speed is not matched to Target Arm speed // then To get speed up, set Voltage #if (APLL_CLK == CLK_1332MHz) LTC3714_Init(); LTC3714_VoltageSet(1,1200,100); // ARM LTC3714_VoltageSet(2,1300,100); // INT #endif #if (TARGET_ARM_CLK == CLK_800MHz) LTC3714_Init(); LTC3714_VoltageSet(1,1300,100); // ARM LTC3714_VoltageSet(2,1200,100); // INT #endif RETAILMSG(1, (L"LaunchAddr=0x%x PhysicalJump=0x%x\r\n", ulLaunchAddr, ulPhysicalJump)); // Jump... Launch(ulPhysicalJump); }
/////////////////////////////////////////////////////////////////////////////// // Required OEM IPL routines. /////////////////////////////////////////////////////////////////////////////// // --- These are used by iplcommon (start) --- BOOLEAN OEMIPLInit(void) { // Initialize the UART. // OEMInitDebugSerial(); OALLog(L"\r\nMicrosoft Windows CE IPL for SMDK6410 Ref board\r\n"); // Set the flash address g_ulFlashBase = NAND_FLASH_START_UA; // Messaging handler callback. // g_pfnMessageHandler = OEMMessageHandler; // Check if Current ARM speed is not matched to Target Arm speed // then To get speed up, set Voltage #if (APLL_CLK == CLK_1332MHz) LTC3714_Init(); LTC3714_VoltageSet(1,1200,100); // ARM LTC3714_VoltageSet(2,1300,100); // INT #elif (APLL_CLK == CLK_800MHz) LTC3714_Init(); LTC3714_VoltageSet(1,1300,100); // ARM LTC3714_VoltageSet(2,1200,100); // INT #endif return(TRUE); }