xref: /OK3568_Linux_fs/u-boot/drivers/ram/ramdisk-uclass.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier:     GPL-2.0+
2 /*
3  * (C) Copyright 2018 Rockchip Electronics Co., Ltd
4  */
5 
6 #include <common.h>
7 #include <dm.h>
8 #include <ramdisk.h>
9 #include <dm/device-internal.h>
10 #include <dm/lists.h>
11 #include <dm/root.h>
12 #include <asm/arch/rk_atags.h>
13 
14 DECLARE_GLOBAL_DATA_PTR;
15 
ramdisk_bread(struct udevice * dev,lbaint_t start,lbaint_t blkcnt,void * dst)16 static ulong ramdisk_bread(struct udevice *dev, lbaint_t start,
17 			   lbaint_t blkcnt, void *dst)
18 {
19 	const struct ramdisk_ops *ops = dev_get_driver_ops(dev->parent);
20 	struct blk_desc *desc = dev_get_uclass_platdata(dev);
21 
22 	if (!blkcnt)
23 		return 0;
24 
25 	if (!ops->read)
26 		return -ENOSYS;
27 
28 	return ops->read(desc, start, blkcnt, dst);
29 }
30 
ramdisk_bwrite(struct udevice * dev,lbaint_t start,lbaint_t blkcnt,const void * src)31 static ulong ramdisk_bwrite(struct udevice *dev, lbaint_t start,
32 			    lbaint_t blkcnt, const void *src)
33 {
34 	const struct ramdisk_ops *ops = dev_get_driver_ops(dev->parent);
35 	struct blk_desc *desc = dev_get_uclass_platdata(dev);
36 
37 	if (!blkcnt)
38 		return 0;
39 
40 	if (!ops->write)
41 		return -ENOSYS;
42 
43 	return ops->write(desc, start, blkcnt, src);
44 }
45 
ramdisk_berase(struct udevice * dev,lbaint_t start,lbaint_t blkcnt)46 static ulong ramdisk_berase(struct udevice *dev,
47 			    lbaint_t start, lbaint_t blkcnt)
48 {
49 	const struct ramdisk_ops *ops = dev_get_driver_ops(dev->parent);
50 	struct blk_desc *desc = dev_get_uclass_platdata(dev);
51 
52 	if (!blkcnt)
53 		return 0;
54 
55 	if (!ops->erase)
56 		return -ENOSYS;
57 
58 	return ops->erase(desc, start, blkcnt);
59 }
60 
dm_ramdisk_is_enabled(void)61 int dm_ramdisk_is_enabled(void)
62 {
63 	return (atags_is_available() && atags_get_tag(ATAG_RAM_PARTITION));
64 }
65 
66 static const struct blk_ops ramdisk_blk_ops = {
67 	.read	= ramdisk_bread,
68 #ifndef CONFIG_SPL_BUILD
69 	.write	= ramdisk_bwrite,
70 	.erase	= ramdisk_berase,
71 #endif
72 };
73 
74 U_BOOT_DRIVER(ramdisk_blk) = {
75 	.name		= "ramdisk_blk",
76 	.id		= UCLASS_BLK,
77 	.ops		= &ramdisk_blk_ops,
78 };
79 
80 UCLASS_DRIVER(ramdisk) = {
81 	.id		= UCLASS_RAMDISK,
82 	.name		= "ramdisk",
83 	.flags		= DM_UC_FLAG_SEQ_ALIAS,
84 };
85