.. | .. |
---|
27 | 27 | #define MPP_CLASS_NAME "mpp_class" |
---|
28 | 28 | #define MPP_SERVICE_NAME "mpp_service" |
---|
29 | 29 | |
---|
30 | | -#define MPP_REGISTER_DRIVER(srv, X, x) {\ |
---|
31 | | - if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_##X))\ |
---|
| 30 | +#define HAS_RKVDEC IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVDEC) |
---|
| 31 | +#define HAS_RKVENC IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVENC) |
---|
| 32 | +#define HAS_VDPU1 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPU1) |
---|
| 33 | +#define HAS_VEPU1 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU1) |
---|
| 34 | +#define HAS_VDPU2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPU2) |
---|
| 35 | +#define HAS_VEPU2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU2) |
---|
| 36 | +#define HAS_VEPU22 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU22) |
---|
| 37 | +#define HAS_IEP2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_IEP2) |
---|
| 38 | +#define HAS_JPGDEC IS_ENABLED(CONFIG_ROCKCHIP_MPP_JPGDEC) |
---|
| 39 | +#define HAS_RKVDEC2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVDEC2) |
---|
| 40 | +#define HAS_RKVENC2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVENC2) |
---|
| 41 | +#define HAS_AV1DEC IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC) |
---|
| 42 | +#define HAS_VDPP IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPP) |
---|
| 43 | + |
---|
| 44 | +#define MPP_REGISTER_DRIVER(srv, flag, X, x) {\ |
---|
| 45 | + if (flag)\ |
---|
32 | 46 | mpp_add_driver(srv, MPP_DRIVER_##X, &rockchip_##x##_driver, "grf_"#x);\ |
---|
33 | 47 | } |
---|
34 | 48 | |
---|
.. | .. |
---|
85 | 99 | &srv->grf_infos[type], |
---|
86 | 100 | grf_name); |
---|
87 | 101 | |
---|
88 | | - ret = platform_driver_register(driver); |
---|
| 102 | + if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC) && type == MPP_DRIVER_AV1DEC) |
---|
| 103 | + ret = av1dec_driver_register(driver); |
---|
| 104 | + else |
---|
| 105 | + ret = platform_driver_register(driver); |
---|
89 | 106 | if (ret) |
---|
90 | 107 | return ret; |
---|
91 | 108 | |
---|
.. | .. |
---|
97 | 114 | static int mpp_remove_driver(struct mpp_service *srv, int i) |
---|
98 | 115 | { |
---|
99 | 116 | if (srv && srv->sub_drivers[i]) { |
---|
100 | | - mpp_set_grf(&srv->grf_infos[i]); |
---|
101 | | - platform_driver_unregister(srv->sub_drivers[i]); |
---|
| 117 | + if (i != MPP_DRIVER_AV1DEC) { |
---|
| 118 | + mpp_set_grf(&srv->grf_infos[i]); |
---|
| 119 | + platform_driver_unregister(srv->sub_drivers[i]); |
---|
| 120 | + } else if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC)) { |
---|
| 121 | + av1dec_driver_unregister(srv->sub_drivers[i]); |
---|
| 122 | + } |
---|
102 | 123 | srv->sub_drivers[i] = NULL; |
---|
103 | 124 | } |
---|
104 | 125 | |
---|
.. | .. |
---|
162 | 183 | return 0; |
---|
163 | 184 | } |
---|
164 | 185 | |
---|
| 186 | +static int mpp_dump_session(struct mpp_session *session, struct seq_file *s) |
---|
| 187 | +{ |
---|
| 188 | + struct mpp_dma_session *dma = session->dma; |
---|
| 189 | + struct mpp_dma_buffer *n; |
---|
| 190 | + struct mpp_dma_buffer *buffer; |
---|
| 191 | + phys_addr_t end; |
---|
| 192 | + unsigned long z = 0, t = 0; |
---|
| 193 | + int i = 0; |
---|
| 194 | +#define K(size) ((unsigned long)((size) >> 10)) |
---|
| 195 | + |
---|
| 196 | + if (!dma) |
---|
| 197 | + return 0; |
---|
| 198 | + |
---|
| 199 | + seq_puts(s, "session iova range dump:\n"); |
---|
| 200 | + |
---|
| 201 | + mutex_lock(&dma->list_mutex); |
---|
| 202 | + list_for_each_entry_safe(buffer, n, &dma->used_list, link) { |
---|
| 203 | + end = buffer->iova + buffer->size - 1; |
---|
| 204 | + z = (unsigned long)buffer->size; |
---|
| 205 | + t += z; |
---|
| 206 | + |
---|
| 207 | + seq_printf(s, "%4d: ", i++); |
---|
| 208 | + seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end, |
---|
| 209 | + (z >= 1024) ? (K(z)) : z, |
---|
| 210 | + (z >= 1024) ? "KiB" : "Bytes"); |
---|
| 211 | + } |
---|
| 212 | + i = 0; |
---|
| 213 | + list_for_each_entry_safe(buffer, n, &dma->unused_list, link) { |
---|
| 214 | + if (!buffer->dmabuf) |
---|
| 215 | + continue; |
---|
| 216 | + |
---|
| 217 | + end = buffer->iova + buffer->size - 1; |
---|
| 218 | + z = (unsigned long)buffer->size; |
---|
| 219 | + t += z; |
---|
| 220 | + |
---|
| 221 | + seq_printf(s, "%4d: ", i++); |
---|
| 222 | + seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end, |
---|
| 223 | + (z >= 1024) ? (K(z)) : z, |
---|
| 224 | + (z >= 1024) ? "KiB" : "Bytes"); |
---|
| 225 | + } |
---|
| 226 | + |
---|
| 227 | + mutex_unlock(&dma->list_mutex); |
---|
| 228 | + seq_printf(s, "session: pid=%d index=%d\n", session->pid, session->index); |
---|
| 229 | + seq_printf(s, " device: %s\n", dev_name(session->mpp->dev)); |
---|
| 230 | + seq_printf(s, " memory: %lu MiB\n", K(K(t))); |
---|
| 231 | + |
---|
| 232 | + return 0; |
---|
| 233 | +} |
---|
| 234 | + |
---|
165 | 235 | static int mpp_show_session_summary(struct seq_file *seq, void *offset) |
---|
166 | 236 | { |
---|
167 | 237 | struct mpp_session *session = NULL, *n; |
---|
.. | .. |
---|
179 | 249 | if (!session->mpp) |
---|
180 | 250 | continue; |
---|
181 | 251 | mpp = session->mpp; |
---|
| 252 | + |
---|
| 253 | + mpp_dump_session(session, seq); |
---|
182 | 254 | |
---|
183 | 255 | if (mpp->dev_ops->dump_session) |
---|
184 | 256 | mpp->dev_ops->dump_session(session, seq); |
---|
.. | .. |
---|
261 | 333 | /* show support devices */ |
---|
262 | 334 | proc_create_single_data("supports-device", 0444, |
---|
263 | 335 | srv->procfs, mpp_show_support_device, srv); |
---|
| 336 | + mpp_procfs_create_u32("timing_en", 0644, srv->procfs, &srv->timing_en); |
---|
264 | 337 | |
---|
265 | 338 | return 0; |
---|
266 | 339 | } |
---|
.. | .. |
---|
349 | 422 | mpp_procfs_init(srv); |
---|
350 | 423 | |
---|
351 | 424 | /* register sub drivers */ |
---|
352 | | - MPP_REGISTER_DRIVER(srv, RKVDEC, rkvdec); |
---|
353 | | - MPP_REGISTER_DRIVER(srv, RKVENC, rkvenc); |
---|
354 | | - MPP_REGISTER_DRIVER(srv, VDPU1, vdpu1); |
---|
355 | | - MPP_REGISTER_DRIVER(srv, VEPU1, vepu1); |
---|
356 | | - MPP_REGISTER_DRIVER(srv, VDPU2, vdpu2); |
---|
357 | | - MPP_REGISTER_DRIVER(srv, VEPU2, vepu2); |
---|
358 | | - MPP_REGISTER_DRIVER(srv, VEPU22, vepu22); |
---|
359 | | - MPP_REGISTER_DRIVER(srv, IEP2, iep2); |
---|
360 | | - MPP_REGISTER_DRIVER(srv, JPGDEC, jpgdec); |
---|
361 | | - MPP_REGISTER_DRIVER(srv, RKVDEC2, rkvdec2); |
---|
362 | | - MPP_REGISTER_DRIVER(srv, VDPP, vdpp); |
---|
363 | | - MPP_REGISTER_DRIVER(srv, RKVENC2, rkvenc2); |
---|
| 425 | + MPP_REGISTER_DRIVER(srv, HAS_RKVDEC, RKVDEC, rkvdec); |
---|
| 426 | + MPP_REGISTER_DRIVER(srv, HAS_RKVENC, RKVENC, rkvenc); |
---|
| 427 | + MPP_REGISTER_DRIVER(srv, HAS_VDPU1, VDPU1, vdpu1); |
---|
| 428 | + MPP_REGISTER_DRIVER(srv, HAS_VEPU1, VEPU1, vepu1); |
---|
| 429 | + MPP_REGISTER_DRIVER(srv, HAS_VDPU2, VDPU2, vdpu2); |
---|
| 430 | + MPP_REGISTER_DRIVER(srv, HAS_VEPU2, VEPU2, vepu2); |
---|
| 431 | + MPP_REGISTER_DRIVER(srv, HAS_VEPU22, VEPU22, vepu22); |
---|
| 432 | + MPP_REGISTER_DRIVER(srv, HAS_IEP2, IEP2, iep2); |
---|
| 433 | + MPP_REGISTER_DRIVER(srv, HAS_JPGDEC, JPGDEC, jpgdec); |
---|
| 434 | + MPP_REGISTER_DRIVER(srv, HAS_RKVDEC2, RKVDEC2, rkvdec2); |
---|
| 435 | + MPP_REGISTER_DRIVER(srv, HAS_RKVENC2, RKVENC2, rkvenc2); |
---|
| 436 | + MPP_REGISTER_DRIVER(srv, HAS_AV1DEC, AV1DEC, av1dec); |
---|
| 437 | + MPP_REGISTER_DRIVER(srv, HAS_VDPP, VDPP, vdpp); |
---|
364 | 438 | |
---|
365 | 439 | dev_info(dev, "probe success\n"); |
---|
366 | 440 | |
---|