2 * Copyright (c) 2013-2019 Arm Limited. All rights reserved.
4 * SPDX-License-Identifier: Apache-2.0
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 #include "Driver_NAND.h"
21 #define ARM_NAND_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1, 0) /* driver version */
24 static const ARM_DRIVER_VERSION DriverVersion = {
29 /* Driver Capabilities */
30 static const ARM_NAND_CAPABILITIES DriverCapabilities = {
31 0, /* Signal Device Ready event (R/Bn rising edge) */
32 0, /* Supports re-entrant operation (SendCommand/Address, Read/WriteData) */
33 0, /* Supports Sequence operation (ExecuteSequence, AbortSequence) */
34 0, /* Supports VCC Power Supply Control */
35 0, /* Supports 1.8 VCC Power Supply */
36 0, /* Supports VCCQ I/O Power Supply Control */
37 0, /* Supports 1.8 VCCQ I/O Power Supply */
38 0, /* Supports VPP High Voltage Power Supply Control */
39 0, /* Supports WPn (Write Protect) Control */
40 0, /* Number of CEn (Chip Enable) lines: ce_lines + 1 */
41 0, /* Supports manual CEn (Chip Enable) Control */
42 0, /* Supports R/Bn (Ready/Busy) Monitoring */
43 0, /* Supports 16-bit data */
44 0, /* Supports NV-DDR Data Interface (ONFI) */
45 0, /* Supports NV-DDR2 Data Interface (ONFI) */
46 0, /* Fastest (highest) SDR Timing Mode supported (ONFI) */
47 0, /* Fastest (highest) NV_DDR Timing Mode supported (ONFI) */
48 0, /* Fastest (highest) NV_DDR2 Timing Mode supported (ONFI) */
49 0, /* Supports Driver Strength 2.0x = 18 Ohms */
50 0, /* Supports Driver Strength 1.4x = 25 Ohms */
51 0, /* Supports Driver Strength 0.7x = 50 Ohms */
52 #if (ARM_NAND_API_VERSION > 0x201U)
53 0 /* Reserved (must be zero) */
57 /* Exported functions */
59 static ARM_DRIVER_VERSION GetVersion (void) {
63 static ARM_NAND_CAPABILITIES GetCapabilities (void) {
64 return DriverCapabilities;
67 static int32_t Initialize (ARM_NAND_SignalEvent_t cb_event) {
69 return ARM_DRIVER_ERROR_UNSUPPORTED;
72 static int32_t Uninitialize (void) {
73 return ARM_DRIVER_ERROR_UNSUPPORTED;
76 static int32_t PowerControl (ARM_POWER_STATE state) {
78 switch ((int32_t)state) {
80 return ARM_DRIVER_ERROR_UNSUPPORTED;
83 return ARM_DRIVER_ERROR_UNSUPPORTED;
86 return ARM_DRIVER_ERROR_UNSUPPORTED;
89 return ARM_DRIVER_ERROR_UNSUPPORTED;
94 static int32_t DevicePower (uint32_t voltage) {
96 return ARM_DRIVER_ERROR_UNSUPPORTED;
99 static int32_t WriteProtect (uint32_t dev_num, bool enable) {
100 (void)dev_num; (void)enable;
101 return ARM_DRIVER_ERROR_UNSUPPORTED;
104 static int32_t ChipEnable (uint32_t dev_num, bool enable) {
105 (void)dev_num; (void)enable;
106 return ARM_DRIVER_ERROR_UNSUPPORTED;
109 static int32_t GetDeviceBusy (uint32_t dev_num) {
111 return ARM_DRIVER_ERROR_UNSUPPORTED;
114 static int32_t SendCommand (uint32_t dev_num, uint8_t cmd) {
115 (void)dev_num; (void)cmd;
116 return ARM_DRIVER_ERROR_UNSUPPORTED;
119 static int32_t SendAddress (uint32_t dev_num, uint8_t addr) {
120 (void)dev_num; (void)addr;
121 return ARM_DRIVER_ERROR_UNSUPPORTED;
124 static int32_t ReadData (uint32_t dev_num, void *data, uint32_t cnt, uint32_t mode) {
125 (void)dev_num; (void)data; (void)cnt; (void)mode;
126 return ARM_DRIVER_ERROR_UNSUPPORTED;
129 static int32_t WriteData (uint32_t dev_num, const void *data, uint32_t cnt, uint32_t mode) {
130 (void)dev_num; (void)data; (void)cnt; (void)mode;
131 return ARM_DRIVER_ERROR_UNSUPPORTED;
134 static int32_t ExecuteSequence (uint32_t dev_num, uint32_t code, uint32_t cmd,
135 uint32_t addr_col, uint32_t addr_row,
136 void *data, uint32_t data_cnt,
137 uint8_t *status, uint32_t *count) {
138 (void)dev_num; (void)code; (void)cmd;
139 (void)addr_col; (void)addr_row;
140 (void)data; (void)data_cnt;
141 (void)status; (void)count;
143 return ARM_DRIVER_ERROR_UNSUPPORTED;
146 static int32_t AbortSequence (uint32_t dev_num) {
149 return ARM_DRIVER_ERROR_UNSUPPORTED;
152 static int32_t Control (uint32_t dev_num, uint32_t control, uint32_t arg) {
155 case ARM_NAND_BUS_MODE:
156 return ARM_DRIVER_ERROR_UNSUPPORTED;
158 case ARM_NAND_BUS_DATA_WIDTH:
159 return ARM_DRIVER_ERROR_UNSUPPORTED;
161 case ARM_NAND_DEVICE_READY_EVENT:
162 return ARM_DRIVER_ERROR_UNSUPPORTED;
165 return ARM_DRIVER_ERROR_UNSUPPORTED;
168 return ARM_DRIVER_ERROR;
171 static ARM_NAND_STATUS GetStatus (uint32_t dev_num) {
180 static int32_t InquireECC (int32_t index, ARM_NAND_ECC_INFO *info) {
181 (void)index; (void)info;
182 return ARM_DRIVER_ERROR_UNSUPPORTED;
185 /* NAND Driver Control Block */
187 ARM_DRIVER_NAND Driver_NAND_(NAND_DRIVER);
188 ARM_DRIVER_NAND Driver_NAND_(NAND_DRIVER) = {