1d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm/** @file 2d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 3d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> 4d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 5d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm This program and the accompanying materials 6d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm are licensed and made available under the terms and conditions of the BSD License 7d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm which accompanies this distribution. The full text of the license may be found at 8d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm http://opensource.org/licenses/bsd-license.php 9d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 10d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 13d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm**/ 14d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 15d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#ifndef FLASH_H 16d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define FLASH_H 17d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 18d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Uefi.h> 19d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 20d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/BaseLib.h> 21d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/BaseMemoryLib.h> 22d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/MemoryAllocationLib.h> 23d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/DebugLib.h> 24d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/IoLib.h> 25d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/PcdLib.h> 26d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/UefiBootServicesTableLib.h> 27d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Library/IoLib.h> 28d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 29d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Protocol/BlockIo.h> 30d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Protocol/Cpu.h> 31d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#include <Omap3530/Omap3530.h> 32d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 33d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PAGE_SIZE(x) ((x) & 0x01) 34d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PAGE_SIZE_2K_VAL (0x01UL) 35d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 36d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define SPARE_AREA_SIZE(x) (((x) >> 2) & 0x01) 37d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define SPARE_AREA_SIZE_64B_VAL (0x1UL) 38d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 39d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define BLOCK_SIZE(x) (((x) >> 4) & 0x01) 40d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define BLOCK_SIZE_128K_VAL (0x01UL) 41d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 42d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define ORGANIZATION(x) (((x) >> 6) & 0x01) 43d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define ORGANIZATION_X8 (0x0UL) 44d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define ORGANIZATION_X16 (0x1UL) 45d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 46d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PAGE_SIZE_512B (512) 47d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PAGE_SIZE_2K (2048) 48d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PAGE_SIZE_4K (4096) 49d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define SPARE_AREA_SIZE_16B (16) 50d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define SPARE_AREA_SIZE_64B (64) 51d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 52d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define BLOCK_SIZE_16K (16*1024) 53d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define BLOCK_SIZE_128K (128*1024) 54d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 55d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define BLOCK_COUNT (2048) 56d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define LAST_BLOCK (BLOCK_COUNT - 1) 57d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 58d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define ECC_POSITION 2 59d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 60d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm//List of commands. 61d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define RESET_CMD 0xFF 62d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define READ_ID_CMD 0x90 63d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 64d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define READ_STATUS_CMD 0x70 65d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 66d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PAGE_READ_CMD 0x00 67d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PAGE_READ_CONFIRM_CMD 0x30 68d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 69d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define BLOCK_ERASE_CMD 0x60 70d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define BLOCK_ERASE_CONFIRM_CMD 0xD0 71d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 72d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PROGRAM_PAGE_CMD 0x80 73d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define PROGRAM_PAGE_CONFIRM_CMD 0x10 74d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 75d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm//Nand status register bit definition 76d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define NAND_SUCCESS (0x0UL << 0) 77d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define NAND_FAILURE BIT0 78d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 79d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define NAND_BUSY (0x0UL << 6) 80d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define NAND_READY BIT6 81d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 82d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define NAND_RESET_STATUS (0x60UL << 0) 83d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 84d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#define MAX_RETRY_COUNT 1500 85d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 86d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 87d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholmtypedef struct { 88d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 ManufactureId; 89d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 DeviceId; 90d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 BlockAddressStart; //Start of the Block address in actual NAND 91d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 PageAddressStart; //Start of the Page address in actual NAND 92d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm} NAND_PART_INFO_TABLE; 93d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 94d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholmtypedef struct { 95d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 ManufactureId; 96d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 DeviceId; 97d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 Organization; //x8 or x16 98d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT32 PageSize; 99d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT32 SparePageSize; 100d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT32 BlockSize; 101d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT32 NumPagesPerBlock; 102d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 BlockAddressStart; //Start of the Block address in actual NAND 103d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm UINT8 PageAddressStart; //Start of the Page address in actual NAND 104d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm} NAND_FLASH_INFO; 105d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm 106d6d2a59a443ba5ba5ba75fbbd176ed9a051d2db0Leif Lindholm#endif //FLASH_H 107