]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPlatformPkg/ArmVExpressPkg/Library/NorFlashArmVExpressLib/NorFlashArmVExpress.c
ArmPlatformPkg/NorFlashDxe: Fixed CFI NOR Flash driver
[mirror_edk2.git] / ArmPlatformPkg / ArmVExpressPkg / Library / NorFlashArmVExpressLib / NorFlashArmVExpress.c
1 /** @file
2
3 Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>
4
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 <PiDxe.h>
16 #include <Library/DebugLib.h>
17 #include <Library/IoLib.h>
18 #include <Library/NorFlashPlatformLib.h>
19 #include <ArmPlatform.h>
20
21 #define NOR_FLASH_DEVICE_COUNT 4
22
23 NOR_FLASH_DESCRIPTION mNorFlashDevices[NOR_FLASH_DEVICE_COUNT] = {
24 { // BootMon
25 ARM_VE_SMB_NOR0_BASE,
26 ARM_VE_SMB_NOR0_BASE,
27 SIZE_256KB * 255,
28 SIZE_256KB,
29 {0xE7223039, 0x5836, 0x41E1, 0xB5, 0x42, 0xD7, 0xEC, 0x73, 0x6C, 0x5E, 0x59}
30 },
31 { // BootMon non-volatile storage
32 ARM_VE_SMB_NOR0_BASE,
33 ARM_VE_SMB_NOR0_BASE + SIZE_256KB * 255,
34 SIZE_64KB * 4,
35 SIZE_64KB,
36 {0x02118005, 0x9DA7, 0x443A, 0x92, 0xD5, 0x78, 0x1F, 0x02, 0x2A, 0xED, 0xBB}
37 },
38 { // UEFI
39 ARM_VE_SMB_NOR1_BASE,
40 ARM_VE_SMB_NOR1_BASE,
41 SIZE_256KB * 255,
42 SIZE_256KB,
43 {0x1F15DA3C, 0x37FF, 0x4070, 0xB4, 0x71, 0xBB, 0x4A, 0xF1, 0x2A, 0x72, 0x4A}
44 },
45 { // UEFI Variable Services non-volatile storage
46 ARM_VE_SMB_NOR1_BASE,
47 ARM_VE_SMB_NOR1_BASE + SIZE_256KB * 255,
48 SIZE_64KB * 3, //FIXME: Set 3 blocks because I did not succeed to copy 4 blocks into the ARM Versatile Express NOR Flash in the last NOR Flash. It should be 4 blocks
49 SIZE_64KB,
50 {0xCC2CBF29, 0x1498, 0x4CDD, 0x81, 0x71, 0xF8, 0xB6, 0xB4, 0x1D, 0x09, 0x09}
51 }
52 };
53
54 EFI_STATUS
55 NorFlashPlatformInitialization (
56 VOID
57 )
58 {
59 // Everything seems ok so far, so now we need to disable the platform-specific
60 // flash write protection for Versatile Express
61 if ((MmioRead32 (ARM_VE_SYS_FLASH) & 0x1) == 0) {
62 // Writing to NOR FLASH is disabled, so enable it
63 MmioWrite32 (ARM_VE_SYS_FLASH,1);
64 DEBUG((DEBUG_BLKIO, "NorFlashWriteBlocks: informational - Had to enable HSYS_FLASH flag.\n" ));
65 }
66
67 return EFI_SUCCESS;
68 }
69
70 EFI_STATUS
71 NorFlashPlatformGetDevices (
72 OUT NOR_FLASH_DESCRIPTION **NorFlashDevices,
73 OUT UINT32 *Count
74 )
75 {
76 if ((NorFlashDevices == NULL) || (Count == NULL)) {
77 return EFI_INVALID_PARAMETER;
78 }
79
80 *NorFlashDevices = mNorFlashDevices;
81 *Count = NOR_FLASH_DEVICE_COUNT;
82
83 return EFI_SUCCESS;
84 }