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