1 #include "sample.h"
3 /**
4 * \brief EDMA3 misc test cases.
5 * This test case will read/write to some CC registers.
6 *
7 * \return EDMA3_DRV_SOK or EDMA3_DRV Error Code
8 */
9 EDMA3_DRV_Result edma3_misc_test()
10 {
11 EDMA3_DRV_Result drvResult = EDMA3_DRV_SOK;
12 unsigned int ccRegOffset = 0u;
13 unsigned int ccRegVal = 0u;
14 unsigned int newRegVal = 0u;
15 unsigned int origRegVal = 0u;
18 /**
19 *1. Try fetching some CC registers value.
20 * It should PASS.
21 */
22 /* PID Register */
23 ccRegOffset = 0x0u;
24 ccRegVal = 0;
25 drvResult = EDMA3_DRV_getCCRegister(hEdma, ccRegOffset, &ccRegVal);
27 if (drvResult != EDMA3_DRV_SOK)
28 {
29 #ifdef EDMA3_DRV_DEBUG
30 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Failed, test FAILED\r\n", ccRegOffset);
31 #endif
32 }
33 else
34 {
35 #ifdef EDMA3_DRV_DEBUG
36 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Passed, test PASSED\r\n", ccRegOffset);
37 #endif
39 #ifdef EDMA3_DEBUG_PRINT
40 EDMA3_DEBUG_PRINTF ("Fetched CC Register at Offset 0X%x, Value = 0X%x\r\n", ccRegOffset, ccRegVal);
41 #endif /* EDMA3_DEBUG_PRINT */
42 }
45 if (drvResult == EDMA3_DRV_SOK)
46 {
47 /* Fetch DRAE1 Register */
48 ccRegOffset = 0x0348u;
49 ccRegVal = 0;
50 drvResult = EDMA3_DRV_getCCRegister(hEdma, ccRegOffset, &ccRegVal);
52 if (drvResult != EDMA3_DRV_SOK)
53 {
54 #ifdef EDMA3_DRV_DEBUG
55 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Failed, test FAILED\r\n", ccRegOffset);
56 #endif
57 }
58 else
59 {
60 #ifdef EDMA3_DRV_DEBUG
61 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Passed, test PASSED\r\n", ccRegOffset);
62 #endif
64 #ifdef EDMA3_DEBUG_PRINT
65 EDMA3_DEBUG_PRINTF ("Fetched CC Register at Offset 0X%x, Value = 0X%x\r\n", ccRegOffset, ccRegVal);
66 #endif /* EDMA3_DEBUG_PRINT */
67 }
68 }
71 if (drvResult == EDMA3_DRV_SOK)
72 {
73 /* Fetch QWMTHRA Register */
74 ccRegOffset = 0x0620u;
75 ccRegVal = 0;
76 drvResult = EDMA3_DRV_getCCRegister(hEdma, ccRegOffset, &ccRegVal);
78 if (drvResult != EDMA3_DRV_SOK)
79 {
80 #ifdef EDMA3_DRV_DEBUG
81 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Failed, test FAILED\r\n", ccRegOffset);
82 #endif
83 return drvResult;
84 }
85 else
86 {
87 #ifdef EDMA3_DRV_DEBUG
88 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Passed, test PASSED\r\n", ccRegOffset);
89 #endif
91 #ifdef EDMA3_DEBUG_PRINT
92 EDMA3_DEBUG_PRINTF ("Fetched CC Register at Offset 0X%x, Value = 0X%x\r\n", ccRegOffset, ccRegVal);
93 #endif /* EDMA3_DEBUG_PRINT */
94 }
95 }
99 /**
100 * 2. Try fetching some CC registers value, whose offset is not 4-bytes
101 * aligned. It should FAIL.
102 */
103 if (drvResult == EDMA3_DRV_SOK)
104 {
105 ccRegOffset = 0x1002u;
106 ccRegVal = 0x0u;
107 drvResult = EDMA3_DRV_getCCRegister(hEdma, ccRegOffset, &ccRegVal);
109 if (drvResult == EDMA3_DRV_E_INVALID_PARAM)
110 {
111 #ifdef EDMA3_DEBUG_PRINT
112 EDMA3_DEBUG_PRINTF ("Fetching Invalid CC Register (offset 0X%x) Failed, test PASSED\r\n", ccRegOffset);
113 #endif /* EDMA3_DEBUG_PRINT */
114 drvResult = EDMA3_DRV_SOK;
115 }
116 else
117 {
118 #ifdef EDMA3_DEBUG_PRINT
119 EDMA3_DEBUG_PRINTF ("Fetching Invalid CC Register (offset 0X%x) Passed, test FAILED\r\n", ccRegOffset);
120 #endif /* EDMA3_DEBUG_PRINT */
121 }
122 }
126 /**
127 * 3. Read CC Register QWMTHRA. Store the current value. Write a different
128 * value on it. Read it back. Write the original value again. Read it back to
129 * cross-check. It should PASS.
130 */
131 if (drvResult == EDMA3_DRV_SOK)
132 {
133 ccRegOffset = 0x0620u;
134 origRegVal = 0x0u;
135 drvResult = EDMA3_DRV_getCCRegister(hEdma, ccRegOffset, &origRegVal);
137 if (drvResult != EDMA3_DRV_SOK)
138 {
139 #ifdef EDMA3_DRV_DEBUG
140 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Failed, test FAILED\r\n", ccRegOffset);
141 #endif
142 }
143 else
144 {
145 #ifdef EDMA3_DRV_DEBUG
146 EDMA3_DRV_PRINTF ("Fetching CC Register (offset 0X%x) Passed, test PASSED\r\n", ccRegOffset);
147 #endif
149 #ifdef EDMA3_DEBUG_PRINT
150 EDMA3_DEBUG_PRINTF ("Fetched CC Register at Offset 0X%x, Value = 0X%x\r\n", ccRegOffset, origRegVal);
151 #endif /* EDMA3_DEBUG_PRINT */
153 /* Find the new value to be written, it depends on the no of event queues */
154 switch (origRegVal)
155 {
156 /* Write a new value on the same register */
157 case 0x10:
158 /* 1 TC */
159 newRegVal = 0x0Fu;
160 break;
162 case 0x1010:
163 /* 2 TC */
164 newRegVal = 0x0F0Fu;
165 break;
167 case 0x101010:
168 /* 3 TC */
169 newRegVal = 0x0F0F0Fu;
170 break;
172 case 0x10101010:
173 /* 4 TC */
174 newRegVal = 0x0F0F0F0Fu;
175 break;
177 default:
178 newRegVal = origRegVal;
179 break;
180 }
182 drvResult = EDMA3_DRV_setCCRegister (hEdma, ccRegOffset, newRegVal);
183 if (drvResult == EDMA3_DRV_SOK)
184 {
185 /* If write is successful, read it back to check */
186 ccRegVal = 0x0u;
188 drvResult = EDMA3_DRV_getCCRegister (hEdma, ccRegOffset, &ccRegVal);
189 if (drvResult == EDMA3_DRV_SOK)
190 {
191 /* Check with the value which we have written */
192 if (newRegVal == ccRegVal)
193 {
194 #ifdef EDMA3_DEBUG_PRINT
195 EDMA3_DEBUG_PRINTF ("Value written successfully \r\n");
196 #endif /* EDMA3_DEBUG_PRINT */
197 }
198 else
199 {
200 #ifdef EDMA3_DRV_DEBUG
201 EDMA3_DRV_PRINTF ("QWMTHRA write FAILED \r\n");
202 #endif
203 drvResult = EDMA3_DRV_E_INVALID_PARAM;
204 }
205 }
207 /* Restore the original value */
208 if (drvResult == EDMA3_DRV_SOK)
209 {
210 drvResult = EDMA3_DRV_setCCRegister (hEdma, ccRegOffset, origRegVal);
211 if (drvResult != EDMA3_DRV_SOK)
212 {
213 #ifdef EDMA3_DEBUG_PRINT
214 EDMA3_DEBUG_PRINTF ("QWMTHRA Restore FAILED\r\n");
215 #endif /* EDMA3_DEBUG_PRINT */
216 }
217 else
218 {
219 #ifdef EDMA3_DEBUG_PRINT
220 EDMA3_DEBUG_PRINTF ("QWMTHRA Restore Successful\r\n");
221 #endif /* EDMA3_DEBUG_PRINT */
222 }
223 }
224 }
225 }
226 }
229 return drvResult;
230 }