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