47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <unistd.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| #include <fcntl.h>
 | |
| #include <comm/ddr_arb.h>
 | |
| #include <kwrap/examsys.h>
 | |
| #if !defined(__FREERTOS)
 | |
| #include <sys/ioctl.h>
 | |
| #include "ddr_arb_ioctl.h"
 | |
| #endif
 | |
| 
 | |
| #if !defined(__FREERTOS)
 | |
| unsigned short arb_chksum(DDR_ARB id, unsigned int addr, unsigned int len)
 | |
| {
 | |
| 	ARB_CHKSUM chksum = {
 | |
| 		.version = DDR_ARB_IOC_VERSION,
 | |
| 		.ddr_id = (unsigned int)id,
 | |
| 		.phy_addr = addr,
 | |
| 		.len = len,
 | |
| 		.sum = 0,
 | |
| 	};
 | |
| 
 | |
| 
 | |
| 	int fd = open("/dev/nvt_ddr_arb0", O_RDWR);
 | |
| 	if (fd < 0) {
 | |
| 		printf("Error to open /dev/nvt_ddr_arb0\n");
 | |
| 		return 0;
 | |
| 	}
 | |
| 	if (ioctl(fd, DDR_ARB_IOC_CHKSUM, (void *)&chksum) < 0) {
 | |
| 		printf("DDR_ARB_IOC_CHKSUM failed.\n");
 | |
| 		return 0;
 | |
| 	}
 | |
| 	close(fd);
 | |
| 	return chksum.sum;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| EXAMFUNC_ENTRY(vendor_chksum, argc, argv)
 | |
| {
 | |
| 	unsigned int phy_addr = 0x100000; // must be word alignment
 | |
| 	unsigned int len = 0x100000; // must be word alignment
 | |
| 	unsigned short sum = arb_chksum(0, phy_addr, len);
 | |
| 	printf("the sum value on phy_addr(0x%08X) with len(0x%08X) is 0x%08X.\n", phy_addr, len, sum);
 | |
| 	return 0;
 | |
| }
 | 
