/** @file * * Copyright (c) 2011-2012, ARM Limited. All rights reserved. * * This program and the accompanying materials * are licensed and made available under the terms and conditions of the BSD License * which accompanies this distribution. The full text of the license may be found at * http://opensource.org/licenses/bsd-license.php * * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. * **/ #include <Library/IoLib.h> #include <Library/ArmPlatformLib.h> #include <Library/DebugLib.h> #include <Library/PcdLib.h> #include <Omap3530/Omap3530.h> #include <BeagleBoard.h> VOID PadConfiguration ( BEAGLEBOARD_REVISION Revision ); VOID ClockInit ( VOID ); /** Detect board revision @return Board revision **/ BEAGLEBOARD_REVISION BeagleBoardGetRevision ( VOID ) { UINT32 OldPinDir; UINT32 Revision; // Read GPIO 171, 172, 173 OldPinDir = MmioRead32 (GPIO6_BASE + GPIO_OE); MmioWrite32(GPIO6_BASE + GPIO_OE, (OldPinDir | BIT11 | BIT12 | BIT13)); Revision = MmioRead32 (GPIO6_BASE + GPIO_DATAIN); // Restore I/O settings MmioWrite32 (GPIO6_BASE + GPIO_OE, OldPinDir); return (BEAGLEBOARD_REVISION)((Revision >> 11) & 0x7); } /** Return the current Boot Mode This function returns the boot reason on the platform **/ EFI_BOOT_MODE ArmPlatformGetBootMode ( VOID ) { return BOOT_WITH_FULL_CONFIGURATION; } /** Initialize controllers that must setup at the early stage Some peripherals must be initialized in Secure World. For example, some L2x0 requires to be initialized in Secure World **/ RETURN_STATUS ArmPlatformInitialize ( IN UINTN MpId ) { BEAGLEBOARD_REVISION Revision; Revision = BeagleBoardGetRevision(); // Set up Pin muxing. PadConfiguration (Revision); // Set up system clocking ClockInit (); // Turn off the functional clock for Timer 3 MmioAnd32 (CM_FCLKEN_PER, 0xFFFFFFFF ^ CM_ICLKEN_PER_EN_GPT3_ENABLE ); ArmDataSynchronizationBarrier (); // Clear IRQs MmioWrite32 (INTCPS_CONTROL, INTCPS_CONTROL_NEWIRQAGR); ArmDataSynchronizationBarrier (); return RETURN_SUCCESS; } /** Initialize the system (or sometimes called permanent) memory This memory is generally represented by the DRAM. **/ VOID ArmPlatformInitializeSystemMemory ( VOID ) { // We do not need to initialize the System Memory on RTSM } VOID ArmPlatformGetPlatformPpiList ( OUT UINTN *PpiListSize, OUT EFI_PEI_PPI_DESCRIPTOR **PpiList ) { *PpiListSize = 0; *PpiList = NULL; } UINTN ArmPlatformGetCorePosition ( IN UINTN MpId ) { return 1; }