xref: /OK3568_Linux_fs/kernel/drivers/rkflash/nand_boot.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 /* Copyright (c) 2018 Rockchip Electronics Co. Ltd. */
4 
5 #include <linux/kernel.h>
6 #include <linux/mutex.h>
7 
8 #include "flash.h"
9 #include "rkflash_api.h"
10 #include "rk_sftl.h"
11 
sftl_flash_init(void __iomem * reg_addr)12 static int sftl_flash_init(void __iomem *reg_addr)
13 {
14 	int ret;
15 
16 	ret = nandc_flash_init(reg_addr);
17 	if (ret == 0)
18 		ret = sftl_init();
19 
20 	return ret;
21 }
22 
sftl_flash_get_capacity(void)23 static unsigned int sftl_flash_get_capacity(void)
24 {
25 	return sftl_get_density();
26 }
27 
sftl_flash_read(u32 sec,u32 n_sec,void * p_data)28 static int sftl_flash_read(u32 sec, u32 n_sec, void *p_data)
29 {
30 	return sftl_read(sec, n_sec, p_data);
31 }
32 
sftl_flash_write(u32 sec,u32 n_sec,void * p_data)33 static int sftl_flash_write(u32 sec, u32 n_sec, void *p_data)
34 {
35 	return sftl_write(sec, n_sec, p_data);
36 }
37 
sftl_flash_vendor_read(u32 sec,u32 n_sec,void * p_data)38 static int sftl_flash_vendor_read(u32 sec, u32 n_sec, void *p_data)
39 {
40 	return sftl_vendor_read(sec, n_sec, p_data);
41 }
42 
sftl_flash_vendor_write(u32 sec,u32 n_sec,void * p_data)43 static int sftl_flash_vendor_write(u32 sec, u32 n_sec, void *p_data)
44 {
45 	return sftl_vendor_write(sec, n_sec, p_data);
46 }
47 
sftl_flash_gc(void)48 static int sftl_flash_gc(void)
49 {
50 	return sftl_gc();
51 }
52 
sftl_flash_discard(u32 sec,u32 n_sec)53 static int sftl_flash_discard(u32 sec, u32 n_sec)
54 {
55 	return sftl_discard(sec, n_sec);
56 }
57 
sftl_flash_deinit(void)58 static void sftl_flash_deinit(void)
59 {
60 	u8 chip_sel = 0;
61 
62 	sftl_deinit();
63 	nandc_flash_reset(chip_sel);
64 }
65 
sftl_flash_resume(void __iomem * reg_addr)66 static int sftl_flash_resume(void __iomem *reg_addr)
67 {
68 	return nandc_flash_init(reg_addr);
69 }
70 
71 const struct flash_boot_ops nandc_nand_ops = {
72 	sftl_flash_init,
73 	sftl_flash_read,
74 	sftl_flash_write,
75 	sftl_flash_get_capacity,
76 	sftl_flash_deinit,
77 	sftl_flash_resume,
78 	sftl_flash_vendor_read,
79 	sftl_flash_vendor_write,
80 	sftl_flash_gc,
81 	sftl_flash_discard,
82 };
83 
84