| /** @file |
| |
| Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> |
| |
| 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. |
| |
| **/ |
| |
| #ifndef FLASH_H |
| #define FLASH_H |
| |
| #include <Uefi.h> |
| |
| #include <Library/BaseLib.h> |
| #include <Library/BaseMemoryLib.h> |
| #include <Library/MemoryAllocationLib.h> |
| #include <Library/DebugLib.h> |
| #include <Library/IoLib.h> |
| #include <Library/PcdLib.h> |
| #include <Library/UefiBootServicesTableLib.h> |
| #include <Library/IoLib.h> |
| |
| #include <Protocol/BlockIo.h> |
| #include <Protocol/Cpu.h> |
| #include <Omap3530/Omap3530.h> |
| |
| #define PAGE_SIZE(x) ((x) & 0x01) |
| #define PAGE_SIZE_2K_VAL (0x01UL) |
| |
| #define SPARE_AREA_SIZE(x) (((x) >> 2) & 0x01) |
| #define SPARE_AREA_SIZE_64B_VAL (0x1UL) |
| |
| #define BLOCK_SIZE(x) (((x) >> 4) & 0x01) |
| #define BLOCK_SIZE_128K_VAL (0x01UL) |
| |
| #define ORGANIZATION(x) (((x) >> 6) & 0x01) |
| #define ORGANIZATION_X8 (0x0UL) |
| #define ORGANIZATION_X16 (0x1UL) |
| |
| #define PAGE_SIZE_512B (512) |
| #define PAGE_SIZE_2K (2048) |
| #define PAGE_SIZE_4K (4096) |
| #define SPARE_AREA_SIZE_16B (16) |
| #define SPARE_AREA_SIZE_64B (64) |
| |
| #define BLOCK_SIZE_16K (16*1024) |
| #define BLOCK_SIZE_128K (128*1024) |
| |
| #define BLOCK_COUNT (2048) |
| #define LAST_BLOCK (BLOCK_COUNT - 1) |
| |
| #define ECC_POSITION 2 |
| |
| //List of commands. |
| #define RESET_CMD 0xFF |
| #define READ_ID_CMD 0x90 |
| |
| #define READ_STATUS_CMD 0x70 |
| |
| #define PAGE_READ_CMD 0x00 |
| #define PAGE_READ_CONFIRM_CMD 0x30 |
| |
| #define BLOCK_ERASE_CMD 0x60 |
| #define BLOCK_ERASE_CONFIRM_CMD 0xD0 |
| |
| #define PROGRAM_PAGE_CMD 0x80 |
| #define PROGRAM_PAGE_CONFIRM_CMD 0x10 |
| |
| //Nand status register bit definition |
| #define NAND_SUCCESS (0x0UL << 0) |
| #define NAND_FAILURE BIT0 |
| |
| #define NAND_BUSY (0x0UL << 6) |
| #define NAND_READY BIT6 |
| |
| #define NAND_RESET_STATUS (0x60UL << 0) |
| |
| #define MAX_RETRY_COUNT 1500 |
| |
| |
| typedef struct { |
| UINT8 ManufactureId; |
| UINT8 DeviceId; |
| UINT8 BlockAddressStart; //Start of the Block address in actual NAND |
| UINT8 PageAddressStart; //Start of the Page address in actual NAND |
| } NAND_PART_INFO_TABLE; |
| |
| typedef struct { |
| UINT8 ManufactureId; |
| UINT8 DeviceId; |
| UINT8 Organization; //x8 or x16 |
| UINT32 PageSize; |
| UINT32 SparePageSize; |
| UINT32 BlockSize; |
| UINT32 NumPagesPerBlock; |
| UINT8 BlockAddressStart; //Start of the Block address in actual NAND |
| UINT8 PageAddressStart; //Start of the Page address in actual NAND |
| } NAND_FLASH_INFO; |
| |
| #endif //FLASH_H |