Home | History | Annotate | Download | only in ForceRecovery
      1 /** @file
      2   Application that sets a sticky bit to force recovery on next reset.
      3 
      4   Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #include <Uefi.h>
     16 
     17 #include <Library/UefiRuntimeServicesTableLib.h>
     18 #include <Library/QNCAccessLib.h>
     19 
     20 /**
     21   The user Entry Point for Application. The user code starts with this function
     22   as the real entry point for the application.
     23 
     24   @param[in] ImageHandle    The firmware allocated handle for the EFI image.
     25   @param[in] SystemTable    A pointer to the EFI System Table.
     26 
     27   @retval EFI_SUCCESS       The entry point is executed successfully.
     28   @retval other             Some error occurs when executing this entry point.
     29 
     30 **/
     31 EFI_STATUS
     32 EFIAPI
     33 UefiMain (
     34   IN EFI_HANDLE        ImageHandle,
     35   IN EFI_SYSTEM_TABLE  *SystemTable
     36   )
     37 {
     38   //
     39   // Set 'B_CFG_STICKY_RW_FORCE_RECOVERY' sticky bit so we know we need to do a recovery following warm reset
     40   //
     41   QNCAltPortWrite (
     42     QUARK_SCSS_SOC_UNIT_SB_PORT_ID,
     43     QUARK_SCSS_SOC_UNIT_CFG_STICKY_RW,
     44     QNCAltPortRead (QUARK_SCSS_SOC_UNIT_SB_PORT_ID, QUARK_SCSS_SOC_UNIT_CFG_STICKY_RW) | B_CFG_STICKY_RW_FORCE_RECOVERY
     45     );
     46 
     47   //
     48   // Do a warm reset
     49   //
     50   gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
     51 
     52   return EFI_SUCCESS;
     53 }
     54