1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3 * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
4 */
5
6 #define MODULE_TAG "mpp_dmabuf_test"
7
8 #include <string.h>
9 #include <errno.h>
10
11 #include "mpp_log.h"
12 #include "mpp_buffer.h"
13 #include "mpp_common.h"
14 #include "mpp_dmabuf.h"
15
main()16 int main()
17 {
18 MppBufferGroup grp = NULL;
19 MppBuffer buf = NULL;
20 RK_S32 fd = -1;
21 RK_U8 *ptr = NULL;
22 MPP_RET ret = MPP_NOK;
23
24 mpp_logi("mpp dmabuf test start\n");
25
26 do {
27 ret = mpp_buffer_group_get_internal(&grp, MPP_BUFFER_TYPE_DMA_HEAP | MPP_BUFFER_FLAGS_CACHABLE);
28 if (ret) {
29 mpp_loge("get dmaheap buffer group failed ret %d\n", ret);
30 break;
31 }
32
33 ret = mpp_buffer_get(grp, &buf, SZ_1M);
34 if (ret) {
35 mpp_loge("get 1M dmaheap buffer failed ret %d\n", ret);
36 break;
37 }
38
39 fd = mpp_buffer_get_fd(buf);
40 ptr = mpp_buffer_get_ptr(buf);
41
42 ret = mpp_dmabuf_sync_begin(fd, 0, MODULE_TAG);
43 if (ret) {
44 mpp_loge("get dmaheap buffer sync begin failed ret %d\n", ret);
45 break;
46 }
47
48 ptr[0] = 'a';
49 ptr[1] = 'b';
50 ptr[2] = 'c';
51 ptr[3] = 'd';
52
53 mpp_logi("ioctl begin cpu access success\n");
54
55 ret = mpp_dmabuf_sync_end(fd, 0, MODULE_TAG);
56 if (ret) {
57 mpp_loge("get dmaheap buffer sync begin failed ret %d\n", ret);
58 break;
59 }
60
61 mpp_logi("ioctl end cpu access success\n");
62
63 ret = mpp_dmabuf_sync_partial_begin(fd, 0, 0, SZ_512K, MODULE_TAG);
64 mpp_logi("ioctl begin cpu access partial %s\n", ret ? "failed" : "success");
65
66 ret = mpp_dmabuf_sync_partial_end(fd, 0, 0, SZ_512K, MODULE_TAG);
67 mpp_logi("ioctl end cpu access partial %s\n", ret ? "failed" : "success");
68
69 ret = mpp_dmabuf_set_name(fd, "dmabuf_test", MODULE_TAG);
70 mpp_logi("ioctl set name %s\n", ret ? "failed" : "success");
71
72 ret = mpp_dmabuf_sync_partial_support();
73 mpp_logi("ioctl sync partial %s\n", ret ? "YES" : "NO");
74
75 ret = MPP_OK;
76 } while (0);
77
78 if (buf) {
79 mpp_buffer_put(buf);
80 buf = NULL;
81 }
82
83 if (grp) {
84 mpp_buffer_group_put(grp);
85 grp = NULL;
86 }
87
88 mpp_logi("mpp dmabuf test done %s\n", ret ? "failed" : "success");
89
90 return 0;
91 }
92