* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
unsigned found = 0;
struct nand_device *nand;
- for (nand = nand_devices; NULL != nand; nand = nand->next) {
+ for (nand = nand_devices; nand; nand = nand->next) {
if (strcmp(nand->name, name) == 0)
return nand;
if (!flash_driver_name_matches(nand->controller->name, name))
COMMAND_PARSE_NUMBER(uint, str, num);
*nand = get_nand_device_by_num(num);
if (!*nand) {
- command_print(CMD_CTX, "NAND flash device '%s' not found", str);
+ command_print(CMD, "NAND flash device '%s' not found", str);
return ERROR_COMMAND_SYNTAX_ERROR;
}
return ERROR_OK;
return ERROR_NAND_DEVICE_NOT_PROBED;
/* Send read status command */
+ /* FIXME: errors returned from nand->controller are mostly ignored! */
nand->controller->command(nand, NAND_CMD_STATUS);
alive_sleep(1);
int nand_probe(struct nand_device *nand)
{
uint8_t manufacturer_id, device_id;
- uint8_t id_buff[6];
+ uint8_t id_buff[6] = { 0 }; /* zero buff to silence false warning
+ * from clang static analyzer */
int retval;
int i;
if (nand->device->page_size == 0 ||
nand->device->erase_size == 0) {
if (nand->bus_width == 8) {
- nand->controller->read_data(nand, id_buff + 3);
- nand->controller->read_data(nand, id_buff + 4);
- nand->controller->read_data(nand, id_buff + 5);
+ retval = nand->controller->read_data(nand, id_buff + 3);
+ if (retval != ERROR_OK)
+ return retval;
+
+ retval = nand->controller->read_data(nand, id_buff + 4);
+ if (retval != ERROR_OK)
+ return retval;
+
+ retval = nand->controller->read_data(nand, id_buff + 5);
+ if (retval != ERROR_OK)
+ return retval;
+
} else {
uint16_t data_buf;
- nand->controller->read_data(nand, &data_buf);
+ retval = nand->controller->read_data(nand, &data_buf);
+ if (retval != ERROR_OK)
+ return retval;
id_buff[3] = data_buf;
- nand->controller->read_data(nand, &data_buf);
+ retval = nand->controller->read_data(nand, &data_buf);
+ if (retval != ERROR_OK)
+ return retval;
id_buff[4] = data_buf;
- nand->controller->read_data(nand, &data_buf);
+ retval = nand->controller->read_data(nand, &data_buf);
+ if (retval != ERROR_OK)
+ return retval;
id_buff[5] = data_buf >> 8;
}
}
if (nand->blocks[block].is_erased == 1)
nand->blocks[block].is_erased = 0;
- if (nand->use_raw || nand->controller->write_page == NULL)
+ if (nand->use_raw || !nand->controller->write_page)
return nand_write_page_raw(nand, page, data, data_size, oob, oob_size);
else
return nand->controller->write_page(nand, page, data, data_size, oob, oob_size);
if (!nand->device)
return ERROR_NAND_DEVICE_NOT_PROBED;
- if (nand->use_raw || nand->controller->read_page == NULL)
+ if (nand->use_raw || !nand->controller->read_page)
return nand_read_page_raw(nand, page, data, data_size, oob, oob_size);
else
return nand->controller->read_page(nand, page, data, data_size, oob, oob_size);
nand->controller->address(nand, (page >> 16) & 0xff);
/* large page devices need a start command if reading */
- if (NAND_CMD_READ0 == cmd)
+ if (cmd == NAND_CMD_READ0)
nand->controller->command(nand, NAND_CMD_READSTART);
}
{
int retval = ERROR_NAND_NO_BUFFER;
- if (nand->controller->read_block_data != NULL)
+ if (nand->controller->read_block_data)
retval = (nand->controller->read_block_data)(nand, data, size);
- if (ERROR_NAND_NO_BUFFER == retval) {
+ if (retval == ERROR_NAND_NO_BUFFER) {
uint32_t i;
int incr = (nand->device->options & NAND_BUSWIDTH_16) ? 2 : 1;
int retval;
retval = nand_page_command(nand, page, NAND_CMD_READ0, !data);
- if (ERROR_OK != retval)
+ if (retval != ERROR_OK)
return retval;
if (data)
{
int retval = ERROR_NAND_NO_BUFFER;
- if (nand->controller->write_block_data != NULL)
+ if (nand->controller->write_block_data)
retval = (nand->controller->write_block_data)(nand, data, size);
- if (ERROR_NAND_NO_BUFFER == retval) {
+ if (retval == ERROR_NAND_NO_BUFFER) {
bool is16bit = nand->device->options & NAND_BUSWIDTH_16;
uint32_t incr = is16bit ? 2 : 1;
uint16_t write_data;
write_data = *data;
retval = nand->controller->write_data(nand, write_data);
- if (ERROR_OK != retval)
+ if (retval != ERROR_OK)
break;
data += incr;
return ERROR_NAND_OPERATION_TIMEOUT;
retval = nand_read_status(nand, &status);
- if (ERROR_OK != retval) {
+ if (retval != ERROR_OK) {
LOG_ERROR("couldn't read status");
return ERROR_NAND_OPERATION_FAILED;
}
int retval;
retval = nand_page_command(nand, page, NAND_CMD_SEQIN, !data);
- if (ERROR_OK != retval)
+ if (retval != ERROR_OK)
return retval;
if (data) {
retval = nand_write_data_page(nand, data, data_size);
- if (ERROR_OK != retval) {
+ if (retval != ERROR_OK) {
LOG_ERROR("Unable to write data to NAND device");
return retval;
}
if (oob) {
retval = nand_write_data_page(nand, oob, oob_size);
- if (ERROR_OK != retval) {
+ if (retval != ERROR_OK) {
LOG_ERROR("Unable to write OOB data to NAND device");
return retval;
}