xref: /utopia/UTPA2-700.0.x/projects/verify/bdma/main.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //#include <nuttx/config.h>
2*53ee8cc1Swenshuai.xi #include <stdio.h>
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi #include "MsTypes.h"
5*53ee8cc1Swenshuai.xi 
6*53ee8cc1Swenshuai.xi /****************************************************************************
7*53ee8cc1Swenshuai.xi  * Definitions
8*53ee8cc1Swenshuai.xi  ****************************************************************************/
9*53ee8cc1Swenshuai.xi 
10*53ee8cc1Swenshuai.xi /****************************************************************************
11*53ee8cc1Swenshuai.xi  * Private Data
12*53ee8cc1Swenshuai.xi  ****************************************************************************/
13*53ee8cc1Swenshuai.xi 
14*53ee8cc1Swenshuai.xi /****************************************************************************
15*53ee8cc1Swenshuai.xi  * Public Functions
16*53ee8cc1Swenshuai.xi  ****************************************************************************/
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi /****************************************************************************
19*53ee8cc1Swenshuai.xi  * user_start
20*53ee8cc1Swenshuai.xi  ****************************************************************************/
21*53ee8cc1Swenshuai.xi #include "stdlib.h"
22*53ee8cc1Swenshuai.xi //#include "utopia_core.h"
23*53ee8cc1Swenshuai.xi #include "utopia.h"
24*53ee8cc1Swenshuai.xi #include "MsTypes.h"
25*53ee8cc1Swenshuai.xi #include "MsOS.h"
26*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
27*53ee8cc1Swenshuai.xi #include <stdio.h>
28*53ee8cc1Swenshuai.xi #include "drvBDMA_priv.h"
29*53ee8cc1Swenshuai.xi #include <string.h>
30*53ee8cc1Swenshuai.xi #include <unistd.h>
31*53ee8cc1Swenshuai.xi #include "drvMIU.h"
32*53ee8cc1Swenshuai.xi 
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi 
36*53ee8cc1Swenshuai.xi // enable or diable the BDMA test app
37*53ee8cc1Swenshuai.xi #define BDMA_UTOPIA_TEST
38*53ee8cc1Swenshuai.xi 
39*53ee8cc1Swenshuai.xi #ifdef BDMA_UTOPIA_TEST
40*53ee8cc1Swenshuai.xi #define BDMA_MEMCOPY_TESTCOUNT      (10)
41*53ee8cc1Swenshuai.xi #endif
42*53ee8cc1Swenshuai.xi 
43*53ee8cc1Swenshuai.xi 
__aeabi_unwind_cpp_pr1(void)44*53ee8cc1Swenshuai.xi void __aeabi_unwind_cpp_pr1(void)
45*53ee8cc1Swenshuai.xi {
46*53ee8cc1Swenshuai.xi }
47*53ee8cc1Swenshuai.xi 
__aeabi_unwind_cpp_pr0(void)48*53ee8cc1Swenshuai.xi void __aeabi_unwind_cpp_pr0(void)
49*53ee8cc1Swenshuai.xi {
50*53ee8cc1Swenshuai.xi }
51*53ee8cc1Swenshuai.xi 
simulateMsosShmInit(void)52*53ee8cc1Swenshuai.xi void simulateMsosShmInit(void)
53*53ee8cc1Swenshuai.xi {
54*53ee8cc1Swenshuai.xi 	MsOS_SHM_Init();
55*53ee8cc1Swenshuai.xi }
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi /*__attribute__((weak)) void AESDMARegisterToUtopia(void)
58*53ee8cc1Swenshuai.xi {
59*53ee8cc1Swenshuai.xi 	printf("\nweak\n");
60*53ee8cc1Swenshuai.xi }
61*53ee8cc1Swenshuai.xi __attribute__((weak)) void DSCMBRegisterToUtopia(void)
62*53ee8cc1Swenshuai.xi {
63*53ee8cc1Swenshuai.xi 	printf("\nweak\n");
64*53ee8cc1Swenshuai.xi }*/
65*53ee8cc1Swenshuai.xi 
66*53ee8cc1Swenshuai.xi #ifdef BDMA_UTOPIA_TEST
BDMA_MemChkSum(MS_U32 Addr,MS_U32 len)67*53ee8cc1Swenshuai.xi MS_U32 BDMA_MemChkSum(MS_U32 Addr, MS_U32 len)
68*53ee8cc1Swenshuai.xi {
69*53ee8cc1Swenshuai.xi     MS_U8 *s = (MS_U8 *)MsOS_PA2KSEG1(Addr);
70*53ee8cc1Swenshuai.xi     MS_U32 idx, val = 0x98765432;
71*53ee8cc1Swenshuai.xi 
72*53ee8cc1Swenshuai.xi     for (idx = 0; idx < len; idx++)
73*53ee8cc1Swenshuai.xi         val ^= s[idx];
74*53ee8cc1Swenshuai.xi 
75*53ee8cc1Swenshuai.xi     return val;
76*53ee8cc1Swenshuai.xi }
77*53ee8cc1Swenshuai.xi #endif //
78*53ee8cc1Swenshuai.xi 
main(int argc,char * argv[])79*53ee8cc1Swenshuai.xi int main(int argc, char *argv[])
80*53ee8cc1Swenshuai.xi {
81*53ee8cc1Swenshuai.xi 	// simple test
82*53ee8cc1Swenshuai.xi 	#if 0
83*53ee8cc1Swenshuai.xi 	AESDMARegisterToUtopia();
84*53ee8cc1Swenshuai.xi 	return 0;
85*53ee8cc1Swenshuai.xi 	#endif
86*53ee8cc1Swenshuai.xi 
87*53ee8cc1Swenshuai.xi 
88*53ee8cc1Swenshuai.xi 
89*53ee8cc1Swenshuai.xi #if 1
90*53ee8cc1Swenshuai.xi     MS_U32 bEnable;
91*53ee8cc1Swenshuai.xi     MS_U32 virtaddr;
92*53ee8cc1Swenshuai.xi     MS_U32* pVirtaddr;
93*53ee8cc1Swenshuai.xi     bEnable = 1;
94*53ee8cc1Swenshuai.xi 	void* pAttribute = NULL;
95*53ee8cc1Swenshuai.xi 	int i;
96*53ee8cc1Swenshuai.xi 
97*53ee8cc1Swenshuai.xi 
98*53ee8cc1Swenshuai.xi     MS_U32 bSegment;
99*53ee8cc1Swenshuai.xi     bSegment = 1;
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi     // Below is BDMA variable declare part
102*53ee8cc1Swenshuai.xi #ifdef BDMA_UTOPIA_TEST
103*53ee8cc1Swenshuai.xi     void* pInstantBdma;
104*53ee8cc1Swenshuai.xi     PBDMA_MEMCOPY_PARAM pMemCpyParam;
105*53ee8cc1Swenshuai.xi     PBDMA_SEARCH_PARAM pSearchParam;
106*53ee8cc1Swenshuai.xi     MS_U32 virtual_addr;
107*53ee8cc1Swenshuai.xi     MS_U8* pbyte;
108*53ee8cc1Swenshuai.xi     MS_U32 checksum=0;
109*53ee8cc1Swenshuai.xi     MS_U8 freecounter=0;
110*53ee8cc1Swenshuai.xi     MS_U32 processid=0;
111*53ee8cc1Swenshuai.xi     MS_U32 memcopycount=0;
112*53ee8cc1Swenshuai.xi     MS_U32 u32SearchAddr;
113*53ee8cc1Swenshuai.xi #endif
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi     MDrv_MMIO_Init();
117*53ee8cc1Swenshuai.xi     if(TRUE != MsOS_MPool_Init())
118*53ee8cc1Swenshuai.xi     {
119*53ee8cc1Swenshuai.xi         printf("MsOS_MPool_Init fail\n");
120*53ee8cc1Swenshuai.xi     }
121*53ee8cc1Swenshuai.xi     MDrv_MIU_SetIOMapBase();
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi     MsOS_MPool_SetDbgLevel(1);
124*53ee8cc1Swenshuai.xi     MsOS_MPool_Mapping(0, 0x10000000, 0x10000, 2);
125*53ee8cc1Swenshuai.xi     MsOS_MPool_Mapping(0, 0x10000000, 0x10000, 0);
126*53ee8cc1Swenshuai.xi     UtopiaInit();
127*53ee8cc1Swenshuai.xi 
128*53ee8cc1Swenshuai.xi     virtaddr = MsOS_MPool_PA2KSEG1(0x10000000);
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi     printf("virtaddr = %x\n", virtaddr);
131*53ee8cc1Swenshuai.xi     pVirtaddr = (MS_U32 *)virtaddr;
132*53ee8cc1Swenshuai.xi     #if 1
133*53ee8cc1Swenshuai.xi     *pVirtaddr = 0x01020304;
134*53ee8cc1Swenshuai.xi     *(pVirtaddr+1) = 0x05060708;
135*53ee8cc1Swenshuai.xi     *(pVirtaddr+2) = 0x090A0B0C;
136*53ee8cc1Swenshuai.xi     *(pVirtaddr+3) = 0x0D0E0F00;
137*53ee8cc1Swenshuai.xi     #else
138*53ee8cc1Swenshuai.xi     *pVirtaddr = 0x0BD7B8E4;
139*53ee8cc1Swenshuai.xi     *(pVirtaddr+1) = 0x284939A7;
140*53ee8cc1Swenshuai.xi     *(pVirtaddr+2) = 0x8C54998D;
141*53ee8cc1Swenshuai.xi     *(pVirtaddr+3) = 0x1E2F3F57;
142*53ee8cc1Swenshuai.xi     #endif
143*53ee8cc1Swenshuai.xi     MsOS_Dcache_Flush(virtaddr, 4);
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi     // below is the bdma test code
146*53ee8cc1Swenshuai.xi #ifdef BDMA_UTOPIA_TEST
147*53ee8cc1Swenshuai.xi     processid = (MS_U32)getpid();
148*53ee8cc1Swenshuai.xi 	void** ppModule;
149*53ee8cc1Swenshuai.xi 	printf("\n%s, %d\n", __FUNCTION__, __LINE__); // bob.fu
150*53ee8cc1Swenshuai.xi     if(UtopiaOpen(MODULE_BDMA, &pInstantBdma, 0, pAttribute) < 0)
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi     {
153*53ee8cc1Swenshuai.xi         printf("Open BDMA fail\n");
154*53ee8cc1Swenshuai.xi 		return 0;
155*53ee8cc1Swenshuai.xi     }
156*53ee8cc1Swenshuai.xi     // BDMA search pattern test code
157*53ee8cc1Swenshuai.xi 	printf("\n%s, %d\n", __FUNCTION__, __LINE__); // bob.fu
158*53ee8cc1Swenshuai.xi     pSearchParam = (PBDMA_SEARCH_PARAM)utopia_malloc(sizeof(BDMA_SEARCH_PARAM));
159*53ee8cc1Swenshuai.xi     pSearchParam->u32Addr = 0x10000000;
160*53ee8cc1Swenshuai.xi     pSearchParam->u32Len = 0x100;
161*53ee8cc1Swenshuai.xi     pSearchParam->u32Pattern = 0xABABABAB;
162*53ee8cc1Swenshuai.xi     pSearchParam->u32ExcluBit = 0;
163*53ee8cc1Swenshuai.xi     pSearchParam->eDev = E_BDMA_SRCDEV_MIU0;
164*53ee8cc1Swenshuai.xi     virtual_addr=MsOS_PA2KSEG1(pSearchParam->u32Addr);
165*53ee8cc1Swenshuai.xi     pbyte = (MS_U8*)virtual_addr;
166*53ee8cc1Swenshuai.xi     pbyte[16] = 0xAB;
167*53ee8cc1Swenshuai.xi     pbyte[17] = 0xAB;
168*53ee8cc1Swenshuai.xi     pbyte[18] = 0xAB;
169*53ee8cc1Swenshuai.xi     pbyte[19] = 0xAB;
170*53ee8cc1Swenshuai.xi     u32SearchAddr= UtopiaIoctl(pInstantBdma,MDrv_CMD_BDMA_Search,(MS_U32*)pSearchParam);
171*53ee8cc1Swenshuai.xi     printf("Search Addr is: %lx\n",u32SearchAddr);
172*53ee8cc1Swenshuai.xi     utopia_free(pSearchParam);
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi     // BDMA mem copy test code
175*53ee8cc1Swenshuai.xi     pMemCpyParam = (PBDMA_MEMCOPY_PARAM)utopia_malloc(sizeof(BDMA_MEMCOPY_PARAM));
176*53ee8cc1Swenshuai.xi     pMemCpyParam->u32SrcAddr = 0x10000000+(processid%10)*0x100;
177*53ee8cc1Swenshuai.xi     pMemCpyParam->u32DstAddr = 0x10001000+(processid%10)*0x100;
178*53ee8cc1Swenshuai.xi     pMemCpyParam->u32Len = 0x80;
179*53ee8cc1Swenshuai.xi     virtual_addr=MsOS_PA2KSEG1(pMemCpyParam->u32SrcAddr);
180*53ee8cc1Swenshuai.xi     pbyte = (MS_U8*)virtual_addr;
181*53ee8cc1Swenshuai.xi     while (1)
182*53ee8cc1Swenshuai.xi     {
183*53ee8cc1Swenshuai.xi         for (i=0;i<pMemCpyParam->u32Len;i++)
184*53ee8cc1Swenshuai.xi         {
185*53ee8cc1Swenshuai.xi             pbyte[i]=freecounter++;
186*53ee8cc1Swenshuai.xi         }
187*53ee8cc1Swenshuai.xi         checksum = BDMA_MemChkSum(pMemCpyParam->u32SrcAddr,pMemCpyParam->u32Len);
188*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantBdma,MDrv_CMD_BDMA_MemCopy,(MS_U32*)pMemCpyParam) < 0)
189*53ee8cc1Swenshuai.xi         {
190*53ee8cc1Swenshuai.xi             printf("Ioctl BDMA Start fail\n");
191*53ee8cc1Swenshuai.xi             utopia_free(pMemCpyParam);
192*53ee8cc1Swenshuai.xi     		return 0;
193*53ee8cc1Swenshuai.xi         }
194*53ee8cc1Swenshuai.xi         if (checksum == BDMA_MemChkSum(pMemCpyParam->u32DstAddr,pMemCpyParam->u32Len))
195*53ee8cc1Swenshuai.xi             printf("BDMA Copy OK by Process:%d !!\n,",processid);
196*53ee8cc1Swenshuai.xi         else
197*53ee8cc1Swenshuai.xi             printf("BDMA Copy FAIL by Process:%d !!\n",processid);
198*53ee8cc1Swenshuai.xi         //MsOS_DelayTask(50);
199*53ee8cc1Swenshuai.xi         memcopycount++;
200*53ee8cc1Swenshuai.xi         if (memcopycount >= BDMA_MEMCOPY_TESTCOUNT)
201*53ee8cc1Swenshuai.xi             break;
202*53ee8cc1Swenshuai.xi     }
203*53ee8cc1Swenshuai.xi     utopia_free(pMemCpyParam);
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi     if(UtopiaClose(pInstantBdma) < 0)
206*53ee8cc1Swenshuai.xi     {
207*53ee8cc1Swenshuai.xi         printf("close BDMA fail\n");
208*53ee8cc1Swenshuai.xi 		return 0;
209*53ee8cc1Swenshuai.xi     }
210*53ee8cc1Swenshuai.xi     // bdma test code end here
211*53ee8cc1Swenshuai.xi #endif
212*53ee8cc1Swenshuai.xi 
213*53ee8cc1Swenshuai.xi 	printf("\n%s, %d, utopia2 verifation end\n", __FUNCTION__, __LINE__);
214*53ee8cc1Swenshuai.xi 	return 0;
215*53ee8cc1Swenshuai.xi #endif
216*53ee8cc1Swenshuai.xi }
217