forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 95099d4622f8cb224d94e314c7a8e0df60b13f87
kernel/drivers/video/rockchip/mpp/mpp_common.h
....@@ -22,6 +22,7 @@
2222 #include <linux/reset.h>
2323 #include <linux/irqreturn.h>
2424 #include <linux/poll.h>
25
+#include <linux/platform_device.h>
2526 #include <soc/rockchip/pm_domains.h>
2627
2728 #define MHZ (1000 * 1000)
....@@ -41,6 +42,9 @@
4142 /* grf mask for get value */
4243 #define MPP_GRF_VAL_MASK (0xFFFF)
4344
45
+/* max 4 cores supported */
46
+#define MPP_MAX_CORE_NUM (4)
47
+
4448 /**
4549 * Device type: classified by hardware feature
4650 */
....@@ -48,16 +52,18 @@
4852 MPP_DEVICE_VDPU1 = 0, /* 0x00000001 */
4953 MPP_DEVICE_VDPU2 = 1, /* 0x00000002 */
5054 MPP_DEVICE_VDPU1_PP = 2, /* 0x00000004 */
51
- MPP_DEVICE_VDPU2_PP = 3, /* 0x00000008 */
55
+ MPP_DEVICE_VDPU2_PP = 3, /* 0x00000008 */
56
+ MPP_DEVICE_AV1DEC = 4, /* 0x00000010 */
5257
5358 MPP_DEVICE_HEVC_DEC = 8, /* 0x00000100 */
5459 MPP_DEVICE_RKVDEC = 9, /* 0x00000200 */
5560 MPP_DEVICE_AVSPLUS_DEC = 12, /* 0x00001000 */
56
- MPP_DEVICE_JPGDEC = 13, /* 0x00002000 */
61
+ MPP_DEVICE_RKJPEGD = 13, /* 0x00002000 */
5762
5863 MPP_DEVICE_RKVENC = 16, /* 0x00010000 */
5964 MPP_DEVICE_VEPU1 = 17, /* 0x00020000 */
6065 MPP_DEVICE_VEPU2 = 18, /* 0x00040000 */
66
+ MPP_DEVICE_VEPU2_JPEG = 19, /* 0x00080000 */
6167 MPP_DEVICE_VEPU22 = 24, /* 0x01000000 */
6268
6369 MPP_DEVICE_IEP2 = 28, /* 0x10000000 */
....@@ -81,8 +87,9 @@
8187 MPP_DRIVER_IEP2,
8288 MPP_DRIVER_JPGDEC,
8389 MPP_DRIVER_RKVDEC2,
84
- MPP_DRIVER_VDPP,
8590 MPP_DRIVER_RKVENC2,
91
+ MPP_DRIVER_AV1DEC,
92
+ MPP_DRIVER_VDPP,
8693 MPP_DRIVER_BUTT,
8794 };
8895
....@@ -107,10 +114,12 @@
107114 MPP_CMD_SET_REG_READ = MPP_CMD_SEND_BASE + 1,
108115 MPP_CMD_SET_REG_ADDR_OFFSET = MPP_CMD_SEND_BASE + 2,
109116 MPP_CMD_SET_RCB_INFO = MPP_CMD_SEND_BASE + 3,
117
+ MPP_CMD_SET_SESSION_FD = MPP_CMD_SEND_BASE + 4,
110118 MPP_CMD_SEND_BUTT,
111119
112120 MPP_CMD_POLL_BASE = 0x300,
113121 MPP_CMD_POLL_HW_FINISH = MPP_CMD_POLL_BASE + 0,
122
+ MPP_CMD_POLL_HW_IRQ = MPP_CMD_POLL_BASE + 1,
114123 MPP_CMD_POLL_BUTT,
115124
116125 MPP_CMD_CONTROL_BASE = 0x400,
....@@ -118,7 +127,6 @@
118127 MPP_CMD_TRANS_FD_TO_IOVA = MPP_CMD_CONTROL_BASE + 1,
119128 MPP_CMD_RELEASE_FD = MPP_CMD_CONTROL_BASE + 2,
120129 MPP_CMD_SEND_CODEC_INFO = MPP_CMD_CONTROL_BASE + 3,
121
- MPP_CMD_SET_ERR_REF_HACK = MPP_CMD_CONTROL_BASE + 4,
122130 MPP_CMD_CONTROL_BUTT,
123131
124132 MPP_CMD_BUTT,
....@@ -181,6 +189,12 @@
181189 CODEC_INFO_FLAG_BUTT,
182190 };
183191
192
+struct mpp_task;
193
+struct mpp_session;
194
+struct mpp_dma_session;
195
+struct mpp_taskqueue;
196
+struct iommu_domain;
197
+
184198 /* data common struct for parse out */
185199 struct mpp_request {
186200 __u32 cmd;
....@@ -192,22 +206,31 @@
192206
193207 /* struct use to collect task set and poll message */
194208 struct mpp_task_msgs {
209
+ /* for ioctl msgs bat process */
210
+ struct list_head list;
211
+ struct list_head list_session;
212
+
213
+ struct mpp_session *session;
214
+ struct mpp_taskqueue *queue;
215
+ struct mpp_task *task;
216
+ struct mpp_dev *mpp;
217
+
218
+ /* for fd reference */
219
+ int ext_fd;
220
+ struct fd f;
221
+
195222 u32 flags;
196223 u32 req_cnt;
197
- struct mpp_request reqs[MPP_MAX_MSG_NUM];
198224 u32 set_cnt;
199225 u32 poll_cnt;
226
+
227
+ struct mpp_request reqs[MPP_MAX_MSG_NUM];
228
+ struct mpp_request *poll_req;
200229 };
201230
202231 struct mpp_grf_info {
203232 u32 offset;
204233 u32 val;
205
-
206
- /* close mem when module is not working*/
207
- u32 mem_offset;
208
- u32 val_mem_on;
209
- u32 val_mem_off;
210
-
211234 struct regmap *grf;
212235 };
213236
....@@ -289,9 +312,6 @@
289312 bool is_dup;
290313 };
291314
292
-struct mpp_dma_session;
293
-
294
-struct mpp_taskqueue;
295315
296316 struct mpp_dev {
297317 struct device *dev;
....@@ -311,13 +331,24 @@
311331 * Default 1 means normal hardware can only accept one task at once.
312332 */
313333 u32 task_capacity;
334
+ /*
335
+ * The message capacity is the max message parallel process capacity.
336
+ * Default 1 means normal hardware can only accept one message at one
337
+ * shot ioctl.
338
+ * Multi-core hardware can accept more message at one shot ioctl.
339
+ */
340
+ u32 msgs_cap;
314341
315342 int irq;
343
+ bool is_irq_startup;
316344 u32 irq_status;
317345
318346 void __iomem *reg_base;
319347 struct mpp_grf_info *grf_info;
320348 struct mpp_iommu_info *iommu_info;
349
+ int (*fault_handler)(struct iommu_domain *iommu, struct device *iommu_dev,
350
+ unsigned long iova, int status, void *arg);
351
+ resource_size_t io_base;
321352
322353 atomic_t reset_request;
323354 atomic_t session_index;
....@@ -330,16 +361,16 @@
330361 struct mpp_taskqueue *queue;
331362 struct mpp_reset_group *reset_group;
332363 /* point to MPP Service */
333
- struct platform_device *pdev_srv;
334364 struct mpp_service *srv;
335365
366
+ /* multi-core data */
336367 struct list_head queue_link;
368
+ s32 core_id;
337369
338370 /* common per-device procfs */
371
+ u32 disable;
339372 u32 timing_check;
340373 };
341
-
342
-struct mpp_task;
343374
344375 struct mpp_session {
345376 enum MPP_DEVICE_TYPE device_type;
....@@ -379,6 +410,12 @@
379410 int (*wait_result)(struct mpp_session *session,
380411 struct mpp_task_msgs *msgs);
381412 void (*deinit)(struct mpp_session *session);
413
+
414
+ /* max message count */
415
+ int msgs_cnt;
416
+ struct list_head list_msgs;
417
+ struct list_head list_msgs_idle;
418
+ spinlock_t lock_msgs;
382419 };
383420
384421 /* task state in work thread */
....@@ -452,11 +489,16 @@
452489 /* hardware info for current task */
453490 struct mpp_hw_info *hw_info;
454491 u32 task_index;
492
+ u32 task_id;
455493 u32 *reg;
456
- /* hw cycles */
457
- u32 hw_cycles;
458494 /* event for session wait thread */
459495 wait_queue_head_t wait;
496
+
497
+ /* for multi-core */
498
+ struct mpp_dev *mpp;
499
+ s32 core_id;
500
+ /* hw cycles */
501
+ u32 hw_cycles;
460502 };
461503
462504 struct mpp_taskqueue {
....@@ -473,6 +515,7 @@
473515 struct list_head session_detach;
474516 atomic_t detach_count;
475517
518
+ atomic_t task_id;
476519 /* lock for pending list */
477520 struct mutex pending_lock;
478521 struct list_head pending_list;
....@@ -494,14 +537,14 @@
494537 */
495538 u32 task_capacity;
496539
497
- /*
498
- * when we need to set grf_mem config to close mem shared by combo modules,
499
- * use runtime_cnt to make sure every combo module are not working
500
- */
501
- /* lock for runtime counting */
502
- struct mutex ref_lock;
503
- atomic_t runtime_cnt;
504
-
540
+ /* multi-core task distribution */
541
+ atomic_t reset_request;
542
+ struct mpp_dev *cores[MPP_MAX_CORE_NUM];
543
+ unsigned long core_idle;
544
+ u32 core_id_max;
545
+ u32 core_count;
546
+ unsigned long dev_active_flags;
547
+ u32 iommu_fault;
505548 };
506549
507550 struct mpp_reset_group {
....@@ -639,18 +682,23 @@
639682 struct mpp_task *task);
640683 int mpp_task_dump_reg(struct mpp_dev *mpp,
641684 struct mpp_task *task);
642
-int mpp_task_dump_hw_reg(struct mpp_dev *mpp,
643
- struct mpp_task *task);
685
+int mpp_task_dump_hw_reg(struct mpp_dev *mpp);
644686 void mpp_task_dump_timing(struct mpp_task *task, s64 time_diff);
687
+
645688 void mpp_reg_show(struct mpp_dev *mpp, u32 offset);
689
+void mpp_reg_show_range(struct mpp_dev *mpp, u32 start, u32 end);
690
+void mpp_free_task(struct kref *ref);
646691
647692 void mpp_session_deinit(struct mpp_session *session);
648693 void mpp_session_cleanup_detach(struct mpp_taskqueue *queue,
649694 struct kthread_work *work);
650695
696
+int mpp_taskqueue_pending_to_run(struct mpp_taskqueue *queue, struct mpp_task *task);
697
+
651698 int mpp_dev_probe(struct mpp_dev *mpp,
652699 struct platform_device *pdev);
653700 int mpp_dev_remove(struct mpp_dev *mpp);
701
+void mpp_dev_shutdown(struct platform_device *pdev);
654702 int mpp_dev_register_srv(struct mpp_dev *mpp, struct mpp_service *srv);
655703
656704 int mpp_power_on(struct mpp_dev *mpp);
....@@ -807,6 +855,13 @@
807855 return rockchip_pmu_idle_request(mpp->dev, idle);
808856 }
809857
858
+static inline struct mpp_dev *
859
+mpp_get_task_used_device(const struct mpp_task *task,
860
+ const struct mpp_session *session)
861
+{
862
+ return task->mpp ? task->mpp : session->mpp;
863
+}
864
+
810865 #ifdef CONFIG_ROCKCHIP_MPP_PROC_FS
811866 struct proc_dir_entry *
812867 mpp_procfs_create_u32(const char *name, umode_t mode,
....@@ -841,7 +896,13 @@
841896 extern struct platform_driver rockchip_iep2_driver;
842897 extern struct platform_driver rockchip_jpgdec_driver;
843898 extern struct platform_driver rockchip_rkvdec2_driver;
844
-extern struct platform_driver rockchip_vdpp_driver;
845899 extern struct platform_driver rockchip_rkvenc2_driver;
900
+extern struct platform_driver rockchip_av1dec_driver;
901
+extern struct platform_driver rockchip_av1_iommu_driver;
902
+
903
+extern int av1dec_driver_register(struct platform_driver *drv);
904
+extern void av1dec_driver_unregister(struct platform_driver *drv);
905
+extern struct bus_type av1dec_bus;
906
+extern struct platform_driver rockchip_vdpp_driver;
846907
847908 #endif