1 /** @file 2 3 Copyright (c) 2008 - 2009, Apple Inc. 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 #ifndef FLASH_H 16 #define FLASH_H 17 18 #include <Uefi.h> 19 20 #include <Library/BaseLib.h> 21 #include <Library/BaseMemoryLib.h> 22 #include <Library/MemoryAllocationLib.h> 23 #include <Library/DebugLib.h> 24 #include <Library/IoLib.h> 25 #include <Library/PcdLib.h> 26 #include <Library/UefiBootServicesTableLib.h> 27 #include <Library/IoLib.h> 28 29 #include <Protocol/BlockIo.h> 30 #include <Protocol/Cpu.h> 31 #include <Omap3530/Omap3530.h> 32 33 #define PAGE_SIZE(x) ((x) & 0x01) 34 #define PAGE_SIZE_2K_VAL (0x01UL) 35 36 #define SPARE_AREA_SIZE(x) (((x) >> 2) & 0x01) 37 #define SPARE_AREA_SIZE_64B_VAL (0x1UL) 38 39 #define BLOCK_SIZE(x) (((x) >> 4) & 0x01) 40 #define BLOCK_SIZE_128K_VAL (0x01UL) 41 42 #define ORGANIZATION(x) (((x) >> 6) & 0x01) 43 #define ORGANIZATION_X8 (0x0UL) 44 #define ORGANIZATION_X16 (0x1UL) 45 46 #define PAGE_SIZE_512B (512) 47 #define PAGE_SIZE_2K (2048) 48 #define PAGE_SIZE_4K (4096) 49 #define SPARE_AREA_SIZE_16B (16) 50 #define SPARE_AREA_SIZE_64B (64) 51 52 #define BLOCK_SIZE_16K (16*1024) 53 #define BLOCK_SIZE_128K (128*1024) 54 55 #define BLOCK_COUNT (2048) 56 #define LAST_BLOCK (BLOCK_COUNT - 1) 57 58 #define ECC_POSITION 2 59 60 //List of commands. 61 #define RESET_CMD 0xFF 62 #define READ_ID_CMD 0x90 63 64 #define READ_STATUS_CMD 0x70 65 66 #define PAGE_READ_CMD 0x00 67 #define PAGE_READ_CONFIRM_CMD 0x30 68 69 #define BLOCK_ERASE_CMD 0x60 70 #define BLOCK_ERASE_CONFIRM_CMD 0xD0 71 72 #define PROGRAM_PAGE_CMD 0x80 73 #define PROGRAM_PAGE_CONFIRM_CMD 0x10 74 75 //Nand status register bit definition 76 #define NAND_SUCCESS (0x0UL << 0) 77 #define NAND_FAILURE BIT0 78 79 #define NAND_BUSY (0x0UL << 6) 80 #define NAND_READY BIT6 81 82 #define NAND_RESET_STATUS (0x60UL << 0) 83 84 #define MAX_RETRY_COUNT 1500 85 86 87 typedef struct { 88 UINT8 ManufactureId; 89 UINT8 DeviceId; 90 UINT8 BlockAddressStart; //Start of the Block address in actual NAND 91 UINT8 PageAddressStart; //Start of the Page address in actual NAND 92 } NAND_PART_INFO_TABLE; 93 94 typedef struct { 95 UINT8 ManufactureId; 96 UINT8 DeviceId; 97 UINT8 Organization; //x8 or x16 98 UINT32 PageSize; 99 UINT32 SparePageSize; 100 UINT32 BlockSize; 101 UINT32 NumPagesPerBlock; 102 UINT8 BlockAddressStart; //Start of the Block address in actual NAND 103 UINT8 PageAddressStart; //Start of the Page address in actual NAND 104 } NAND_FLASH_INFO; 105 106 #endif //FLASH_H 107