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
UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE * SystemTable)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