hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/remoteproc/remoteproc_internal.h
....@@ -1,3 +1,4 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * Remote processor framework
34 *
....@@ -6,15 +7,6 @@
67 *
78 * Ohad Ben-Cohen <ohad@wizery.com>
89 * Brian Swetland <swetland@google.com>
9
- *
10
- * This software is licensed under the terms of the GNU General Public
11
- * License version 2, as published by the Free Software Foundation, and
12
- * may be copied, distributed, and modified under those terms.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- * GNU General Public License for more details.
1810 */
1911
2012 #ifndef REMOTEPROC_INTERNAL_H
....@@ -25,19 +17,28 @@
2517
2618 struct rproc;
2719
20
+struct rproc_debug_trace {
21
+ struct rproc *rproc;
22
+ struct dentry *tfile;
23
+ struct list_head node;
24
+ struct rproc_mem_entry trace_mem;
25
+};
26
+
2827 /* from remoteproc_core.c */
2928 void rproc_release(struct kref *kref);
3029 irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int vq_id);
3130 void rproc_vdev_release(struct kref *ref);
31
+int rproc_of_parse_firmware(struct device *dev, int index,
32
+ const char **fw_name);
3233
3334 /* from remoteproc_virtio.c */
3435 int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id);
35
-void rproc_remove_virtio_dev(struct rproc_vdev *rvdev);
36
+int rproc_remove_virtio_dev(struct device *dev, void *data);
3637
3738 /* from remoteproc_debugfs.c */
3839 void rproc_remove_trace_file(struct dentry *tfile);
3940 struct dentry *rproc_create_trace_file(const char *name, struct rproc *rproc,
40
- struct rproc_mem_entry *trace);
41
+ struct rproc_debug_trace *trace);
4142 void rproc_delete_debug_dir(struct rproc *rproc);
4243 void rproc_create_debug_dir(struct rproc *rproc);
4344 void rproc_init_debugfs(void);
....@@ -48,18 +49,73 @@
4849 int rproc_init_sysfs(void);
4950 void rproc_exit_sysfs(void);
5051
52
+#ifdef CONFIG_REMOTEPROC_CDEV
53
+void rproc_init_cdev(void);
54
+void rproc_exit_cdev(void);
55
+int rproc_char_device_add(struct rproc *rproc);
56
+void rproc_char_device_remove(struct rproc *rproc);
57
+#else
58
+static inline void rproc_init_cdev(void)
59
+{
60
+}
61
+
62
+static inline void rproc_exit_cdev(void)
63
+{
64
+}
65
+
66
+/*
67
+ * The character device interface is an optional feature, if it is not enabled
68
+ * the function should not return an error.
69
+ */
70
+static inline int rproc_char_device_add(struct rproc *rproc)
71
+{
72
+ return 0;
73
+}
74
+
75
+static inline void rproc_char_device_remove(struct rproc *rproc)
76
+{
77
+}
78
+#endif
79
+
5180 void rproc_free_vring(struct rproc_vring *rvring);
5281 int rproc_alloc_vring(struct rproc_vdev *rvdev, int i);
5382
54
-void *rproc_da_to_va(struct rproc *rproc, u64 da, int len);
83
+void *rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is_iomem);
84
+phys_addr_t rproc_va_to_pa(void *cpu_addr);
5585 int rproc_trigger_recovery(struct rproc *rproc);
5686
5787 int rproc_elf_sanity_check(struct rproc *rproc, const struct firmware *fw);
58
-u32 rproc_elf_get_boot_addr(struct rproc *rproc, const struct firmware *fw);
88
+u64 rproc_elf_get_boot_addr(struct rproc *rproc, const struct firmware *fw);
5989 int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw);
6090 int rproc_elf_load_rsc_table(struct rproc *rproc, const struct firmware *fw);
6191 struct resource_table *rproc_elf_find_loaded_rsc_table(struct rproc *rproc,
6292 const struct firmware *fw);
93
+struct rproc_mem_entry *
94
+rproc_find_carveout_by_name(struct rproc *rproc, const char *name, ...);
95
+
96
+static inline int rproc_prepare_device(struct rproc *rproc)
97
+{
98
+ if (rproc->ops->prepare)
99
+ return rproc->ops->prepare(rproc);
100
+
101
+ return 0;
102
+}
103
+
104
+static inline int rproc_unprepare_device(struct rproc *rproc)
105
+{
106
+ if (rproc->ops->unprepare)
107
+ return rproc->ops->unprepare(rproc);
108
+
109
+ return 0;
110
+}
111
+
112
+static inline int rproc_attach_device(struct rproc *rproc)
113
+{
114
+ if (rproc->ops->attach)
115
+ return rproc->ops->attach(rproc);
116
+
117
+ return 0;
118
+}
63119
64120 static inline
65121 int rproc_fw_sanity_check(struct rproc *rproc, const struct firmware *fw)
....@@ -71,7 +127,7 @@
71127 }
72128
73129 static inline
74
-u32 rproc_get_boot_addr(struct rproc *rproc, const struct firmware *fw)
130
+u64 rproc_get_boot_addr(struct rproc *rproc, const struct firmware *fw)
75131 {
76132 if (rproc->ops->get_boot_addr)
77133 return rproc->ops->get_boot_addr(rproc, fw);
....@@ -97,6 +153,17 @@
97153 }
98154
99155 static inline
156
+int rproc_handle_rsc(struct rproc *rproc, u32 rsc_type, void *rsc, int offset,
157
+ int avail)
158
+{
159
+ if (rproc->ops->handle_rsc)
160
+ return rproc->ops->handle_rsc(rproc, rsc_type, rsc, offset,
161
+ avail);
162
+
163
+ return RSC_IGNORED;
164
+}
165
+
166
+static inline
100167 struct resource_table *rproc_find_loaded_rsc_table(struct rproc *rproc,
101168 const struct firmware *fw)
102169 {
....@@ -106,4 +173,13 @@
106173 return NULL;
107174 }
108175
176
+static inline
177
+bool rproc_u64_fit_in_size_t(u64 val)
178
+{
179
+ if (sizeof(size_t) == sizeof(u64))
180
+ return true;
181
+
182
+ return (val <= (size_t) -1);
183
+}
184
+
109185 #endif /* REMOTEPROC_INTERNAL_H */