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