blob: 17058e49faaa56353e08214334eb35e6701b901e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2024 Intel Corporation <www.intel.com>
*/
#include <cadence-nand.h>
#include <dm.h>
#include <hang.h>
#include <nand.h>
#include <system-constants.h>
/* Unselect after operation */
void nand_deselect(void)
{
struct mtd_info *mtd;
struct nand_chip *chip;
mtd = get_nand_dev_by_index(nand_curr_device);
if (!mtd)
hang();
chip = mtd_to_nand(mtd);
if (chip->select_chip)
chip->select_chip(mtd, -1);
}
static int nand_is_bad_block(int block)
{
struct mtd_info *mtd;
struct nand_chip *chip;
loff_t ofs = block * CONFIG_SYS_NAND_BLOCK_SIZE;
mtd = get_nand_dev_by_index(nand_curr_device);
if (!mtd)
hang();
chip = mtd_to_nand(mtd);
return chip->block_bad(mtd, ofs);
}
static int nand_read_page(int block, int page, uchar *dst)
{
struct mtd_info *mtd;
int page_addr = block * SYS_NAND_BLOCK_PAGES + page;
loff_t ofs = page_addr * CONFIG_SYS_NAND_PAGE_SIZE;
int ret;
size_t len = CONFIG_SYS_NAND_PAGE_SIZE;
mtd = get_nand_dev_by_index(nand_curr_device);
if (!mtd)
hang();
ret = nand_read(mtd, ofs, &len, dst);
if (ret)
printf("nand_read failed %d\n", ret);
return ret;
}
#include "nand_spl_loaders.c"
|