xref: /openbmc/u-boot/test/dm/dma.c (revision 3589025867274ff28f689029ab8323301771c8ec)
1*b3309918SGrygorii Strashko // SPDX-License-Identifier: GPL-2.0+
2*b3309918SGrygorii Strashko /*
3*b3309918SGrygorii Strashko  * Direct Memory Access U-Class tests
4*b3309918SGrygorii Strashko  *
5*b3309918SGrygorii Strashko  * Copyright (C) 2018 Texas Instruments Incorporated <www.ti.com>
6*b3309918SGrygorii Strashko  * Grygorii Strashko <grygorii.strashko@ti.com>
7*b3309918SGrygorii Strashko  */
8*b3309918SGrygorii Strashko 
9*b3309918SGrygorii Strashko #include <common.h>
10*b3309918SGrygorii Strashko #include <dm.h>
11*b3309918SGrygorii Strashko #include <dm/test.h>
12*b3309918SGrygorii Strashko #include <dma.h>
13*b3309918SGrygorii Strashko #include <test/ut.h>
14*b3309918SGrygorii Strashko 
dm_test_dma_m2m(struct unit_test_state * uts)15*b3309918SGrygorii Strashko static int dm_test_dma_m2m(struct unit_test_state *uts)
16*b3309918SGrygorii Strashko {
17*b3309918SGrygorii Strashko 	struct udevice *dev;
18*b3309918SGrygorii Strashko 	struct dma dma_m2m;
19*b3309918SGrygorii Strashko 	u8 src_buf[512];
20*b3309918SGrygorii Strashko 	u8 dst_buf[512];
21*b3309918SGrygorii Strashko 	size_t len = 512;
22*b3309918SGrygorii Strashko 	int i;
23*b3309918SGrygorii Strashko 
24*b3309918SGrygorii Strashko 	ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
25*b3309918SGrygorii Strashko 	ut_assertok(dma_get_by_name(dev, "m2m", &dma_m2m));
26*b3309918SGrygorii Strashko 
27*b3309918SGrygorii Strashko 	memset(dst_buf, 0, len);
28*b3309918SGrygorii Strashko 	for (i = 0; i < len; i++)
29*b3309918SGrygorii Strashko 		src_buf[i] = i;
30*b3309918SGrygorii Strashko 
31*b3309918SGrygorii Strashko 	ut_assertok(dma_memcpy(dst_buf, src_buf, len));
32*b3309918SGrygorii Strashko 
33*b3309918SGrygorii Strashko 	ut_assertok(memcmp(src_buf, dst_buf, len));
34*b3309918SGrygorii Strashko 	return 0;
35*b3309918SGrygorii Strashko }
36*b3309918SGrygorii Strashko DM_TEST(dm_test_dma_m2m, DM_TESTF_SCAN_FDT);
37*b3309918SGrygorii Strashko 
dm_test_dma(struct unit_test_state * uts)38*b3309918SGrygorii Strashko static int dm_test_dma(struct unit_test_state *uts)
39*b3309918SGrygorii Strashko {
40*b3309918SGrygorii Strashko 	struct udevice *dev;
41*b3309918SGrygorii Strashko 	struct dma dma_tx, dma_rx;
42*b3309918SGrygorii Strashko 	u8 src_buf[512];
43*b3309918SGrygorii Strashko 	u8 dst_buf[512];
44*b3309918SGrygorii Strashko 	void *dst_ptr;
45*b3309918SGrygorii Strashko 	size_t len = 512;
46*b3309918SGrygorii Strashko 	u32 meta1, meta2;
47*b3309918SGrygorii Strashko 	int i;
48*b3309918SGrygorii Strashko 
49*b3309918SGrygorii Strashko 	ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
50*b3309918SGrygorii Strashko 
51*b3309918SGrygorii Strashko 	ut_assertok(dma_get_by_name(dev, "tx0", &dma_tx));
52*b3309918SGrygorii Strashko 	ut_assertok(dma_get_by_name(dev, "rx0", &dma_rx));
53*b3309918SGrygorii Strashko 
54*b3309918SGrygorii Strashko 	ut_assertok(dma_enable(&dma_tx));
55*b3309918SGrygorii Strashko 	ut_assertok(dma_enable(&dma_rx));
56*b3309918SGrygorii Strashko 
57*b3309918SGrygorii Strashko 	memset(dst_buf, 0, len);
58*b3309918SGrygorii Strashko 	for (i = 0; i < len; i++)
59*b3309918SGrygorii Strashko 		src_buf[i] = i;
60*b3309918SGrygorii Strashko 	meta1 = 0xADADDEAD;
61*b3309918SGrygorii Strashko 	meta2 = 0;
62*b3309918SGrygorii Strashko 	dst_ptr = &dst_buf;
63*b3309918SGrygorii Strashko 
64*b3309918SGrygorii Strashko 	ut_assertok(dma_send(&dma_tx, src_buf, len, &meta1));
65*b3309918SGrygorii Strashko 
66*b3309918SGrygorii Strashko 	ut_asserteq(len, dma_receive(&dma_rx, &dst_ptr, &meta2));
67*b3309918SGrygorii Strashko 	ut_asserteq(0xADADDEAD, meta2);
68*b3309918SGrygorii Strashko 
69*b3309918SGrygorii Strashko 	ut_assertok(dma_disable(&dma_tx));
70*b3309918SGrygorii Strashko 	ut_assertok(dma_disable(&dma_rx));
71*b3309918SGrygorii Strashko 
72*b3309918SGrygorii Strashko 	ut_assertok(dma_free(&dma_tx));
73*b3309918SGrygorii Strashko 	ut_assertok(dma_free(&dma_rx));
74*b3309918SGrygorii Strashko 	ut_assertok(memcmp(src_buf, dst_buf, len));
75*b3309918SGrygorii Strashko 
76*b3309918SGrygorii Strashko 	return 0;
77*b3309918SGrygorii Strashko }
78*b3309918SGrygorii Strashko DM_TEST(dm_test_dma, DM_TESTF_SCAN_FDT);
79*b3309918SGrygorii Strashko 
dm_test_dma_rx(struct unit_test_state * uts)80*b3309918SGrygorii Strashko static int dm_test_dma_rx(struct unit_test_state *uts)
81*b3309918SGrygorii Strashko {
82*b3309918SGrygorii Strashko 	struct udevice *dev;
83*b3309918SGrygorii Strashko 	struct dma dma_tx, dma_rx;
84*b3309918SGrygorii Strashko 	u8 src_buf[512];
85*b3309918SGrygorii Strashko 	u8 dst_buf[512];
86*b3309918SGrygorii Strashko 	void *dst_ptr;
87*b3309918SGrygorii Strashko 	size_t len = 512;
88*b3309918SGrygorii Strashko 	u32 meta1, meta2;
89*b3309918SGrygorii Strashko 	int i;
90*b3309918SGrygorii Strashko 
91*b3309918SGrygorii Strashko 	ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
92*b3309918SGrygorii Strashko 
93*b3309918SGrygorii Strashko 	ut_assertok(dma_get_by_name(dev, "tx0", &dma_tx));
94*b3309918SGrygorii Strashko 	ut_assertok(dma_get_by_name(dev, "rx0", &dma_rx));
95*b3309918SGrygorii Strashko 
96*b3309918SGrygorii Strashko 	ut_assertok(dma_enable(&dma_tx));
97*b3309918SGrygorii Strashko 	ut_assertok(dma_enable(&dma_rx));
98*b3309918SGrygorii Strashko 
99*b3309918SGrygorii Strashko 	memset(dst_buf, 0, len);
100*b3309918SGrygorii Strashko 	for (i = 0; i < len; i++)
101*b3309918SGrygorii Strashko 		src_buf[i] = i;
102*b3309918SGrygorii Strashko 	meta1 = 0xADADDEAD;
103*b3309918SGrygorii Strashko 	meta2 = 0;
104*b3309918SGrygorii Strashko 	dst_ptr = NULL;
105*b3309918SGrygorii Strashko 
106*b3309918SGrygorii Strashko 	ut_assertok(dma_prepare_rcv_buf(&dma_tx, dst_buf, len));
107*b3309918SGrygorii Strashko 
108*b3309918SGrygorii Strashko 	ut_assertok(dma_send(&dma_tx, src_buf, len, &meta1));
109*b3309918SGrygorii Strashko 
110*b3309918SGrygorii Strashko 	ut_asserteq(len, dma_receive(&dma_rx, &dst_ptr, &meta2));
111*b3309918SGrygorii Strashko 	ut_asserteq(0xADADDEAD, meta2);
112*b3309918SGrygorii Strashko 	ut_asserteq_ptr(dst_buf, dst_ptr);
113*b3309918SGrygorii Strashko 
114*b3309918SGrygorii Strashko 	ut_assertok(dma_disable(&dma_tx));
115*b3309918SGrygorii Strashko 	ut_assertok(dma_disable(&dma_rx));
116*b3309918SGrygorii Strashko 
117*b3309918SGrygorii Strashko 	ut_assertok(dma_free(&dma_tx));
118*b3309918SGrygorii Strashko 	ut_assertok(dma_free(&dma_rx));
119*b3309918SGrygorii Strashko 	ut_assertok(memcmp(src_buf, dst_buf, len));
120*b3309918SGrygorii Strashko 
121*b3309918SGrygorii Strashko 	return 0;
122*b3309918SGrygorii Strashko }
123*b3309918SGrygorii Strashko DM_TEST(dm_test_dma_rx, DM_TESTF_SCAN_FDT);
124