217 lines
6.5 KiB
Tcl
Executable file
217 lines
6.5 KiB
Tcl
Executable file
###############################################################
|
|
## (c) Copyright 2009-2014 Xilinx, Inc. All rights reserved.
|
|
##
|
|
## This file contains confidential and proprietary information
|
|
## of Xilinx, Inc. and is protected under U.S. and
|
|
## international copyright and other intellectual property
|
|
## laws.
|
|
##
|
|
## DISCLAIMER
|
|
## This disclaimer is not a license and does not grant any
|
|
## rights to the materials distributed herewith. Except as
|
|
## otherwise provided in a valid license issued to you by
|
|
## Xilinx, and to the maximum extent permitted by applicable
|
|
## law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
|
|
## WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
|
|
## AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
|
|
## BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
|
|
## INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
|
|
## (2) Xilinx shall not be liable (whether in contract or tort,
|
|
## including negligence, or under any other theory of
|
|
## liability) for any loss or damage of any kind or nature
|
|
## related to, arising under or in connection with these
|
|
## materials, including for any direct, or any indirect,
|
|
## special, incidental, or consequential loss or damage
|
|
## (including loss of data, profits, goodwill, or any type of
|
|
## loss or damage suffered as a result of any action brought
|
|
## by a third party) even if such damage or loss was
|
|
## reasonably foreseeable or Xilinx had been advised of the
|
|
## possibility of the same.
|
|
##
|
|
## CRITICAL APPLICATIONS
|
|
## Xilinx products are not designed or intended to be fail-
|
|
## safe, or for use in any application requiring fail-safe
|
|
## performance, such as life-support or safety devices or
|
|
## systems, Class III medical devices, nuclear facilities,
|
|
## applications related to the deployment of airbags, or any
|
|
## other applications that could lead to death, personal
|
|
## injury, or severe property or environmental damage
|
|
## (individually and collectively, "Critical
|
|
## Applications"). Customer assumes the sole risk and
|
|
## liability of any use of Xilinx products in Critical
|
|
## Applications, subject only to applicable laws and
|
|
## regulations governing limitations on product liability.
|
|
##
|
|
## THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
|
|
## PART OF THIS FILE AT ALL TIMES.
|
|
##
|
|
##
|
|
## MODIFICATION HISTORY:
|
|
## Ver Who Date Changes
|
|
## -------- ------ -------- ----------------------------------------------------
|
|
## 4.0 adk 12/10/13 Updated as per the New Tcl API's
|
|
###############################################################
|
|
|
|
## @BEGIN_CHANGELOG EDK_I
|
|
##
|
|
## - Add a new argument to gen_include_files.
|
|
##
|
|
## @END_CHANGELOG
|
|
|
|
## @BEGIN_CHANGELOG EDK_H
|
|
##
|
|
## - Added support for generation of multiple applications.
|
|
## All TCL procedures are now required to have a software
|
|
## project type as its first argument
|
|
##
|
|
## @END_CHANGELOG
|
|
|
|
## @BEGIN_CHANGELOG EDK_M
|
|
##
|
|
## - HAL phase 1 migration to use new test memory functions.
|
|
##
|
|
## @END_CHANGELOG
|
|
|
|
# Uses $XILINX_EDK/bin/lib/xillib_sw.tcl
|
|
|
|
# -----------------------------------------------------------------
|
|
# Software Project Types (swproj):
|
|
# 0 : MemoryTest - Calls basic memorytest routines from common driver dir
|
|
# 1 : PeripheralTest - Calls any existing polled_example and/or selftest
|
|
# -----------------------------------------------------------------
|
|
|
|
# -----------------------------------------------------------------
|
|
# TCL Procedures:
|
|
# -----------------------------------------------------------------
|
|
|
|
proc gen_include_files {swproj mhsinst} {
|
|
if {$swproj == 1} {
|
|
return ""
|
|
}
|
|
if {$swproj == 0} {
|
|
set inc_file_lines {xil_testmem.h xstatus.h}
|
|
return $inc_file_lines
|
|
}
|
|
}
|
|
|
|
proc gen_src_files {swproj mhsinst} {
|
|
return ""
|
|
}
|
|
|
|
proc gen_testfunc_def {swproj mhsinst} {
|
|
return ""
|
|
}
|
|
|
|
proc gen_init_code {swproj mhsinst} {
|
|
return ""
|
|
}
|
|
|
|
proc gen_testfunc_call {swproj mhsinst} {
|
|
|
|
if {$swproj == 1} {
|
|
return ""
|
|
}
|
|
|
|
set ipname [get_property NAME $mhsinst]
|
|
set stdout [get_property CONFIG.STDOUT [get_os]]
|
|
if { $stdout == "" || $stdout == "none" } {
|
|
set hasStdout 0
|
|
} else {
|
|
set hasStdout 1
|
|
}
|
|
|
|
set testfunc_call ""
|
|
|
|
set prog_memranges [get_mem_ranges -filter "IS_INSTRUCTION==1" $mhsinst]
|
|
if {[string compare ${prog_memranges} ""] != 0} {
|
|
foreach progmem $prog_memranges {
|
|
set baseaddrval [get_property CONFIG.${progmem} $mhsinst]
|
|
append testfunc_call "
|
|
/*
|
|
* MemoryTest routine will not be run for the memory at
|
|
* ${baseaddrval} (${ipname})
|
|
* because it is being used to hold a part of this application program
|
|
*/
|
|
"
|
|
}
|
|
}
|
|
|
|
set romemranges [get_mem_ranges $mhsinst]
|
|
if {[string compare ${romemranges} ""] != 0} {
|
|
foreach romem $romemranges {
|
|
set baseaddrval [get_property CONFIG.${romem} $mhsinst]
|
|
append testfunc_call "
|
|
/*
|
|
* MemoryTest routine will not be run for the memory at
|
|
* ${baseaddrval} (${ipname})
|
|
* because it is a read-only memory
|
|
*/
|
|
"
|
|
}
|
|
}
|
|
|
|
set baseaddrs [get_mem_ranges $mhsinst]
|
|
if {[string compare ${baseaddrs} ""] == 0} {
|
|
return $testfunc_call
|
|
}
|
|
|
|
append testfunc_call "
|
|
/* Testing EMC Memory (${ipname})*/
|
|
\{"
|
|
|
|
if {${hasStdout} == 1} {
|
|
append testfunc_call "
|
|
int status;"
|
|
}
|
|
|
|
# Get XPAR_ macro for each baseaddr param
|
|
foreach baseaddr $baseaddrs {
|
|
lappend baseaddr_macros [xget_name $mhsinst $baseaddr]
|
|
}
|
|
|
|
foreach baseaddr $baseaddr_macros {
|
|
if {${hasStdout} == 0} {
|
|
|
|
append testfunc_call "
|
|
|
|
Xil_TestMem32((u32*)${baseaddr}, 1024, 0xAAAA5555, XIL_TESTMEM_ALLMEMTESTS);
|
|
Xil_TestMem16((u16*)${baseaddr}, 2048, 0xAA55, XIL_TESTMEM_ALLMEMTESTS);
|
|
Xil_TestMem8((u8*)${baseaddr}, 4096, 0xA5, XIL_TESTMEM_ALLMEMTESTS);"
|
|
} else {
|
|
|
|
append testfunc_call "
|
|
|
|
print(\"Starting MemoryTest for ${ipname}:\\r\\n\");
|
|
print(\" Running 32-bit test...\");
|
|
status = Xil_TestMem32((u32*)${baseaddr}, 1024, 0xAAAA5555, XIL_TESTMEM_ALLMEMTESTS);
|
|
if (status == 0) {
|
|
print(\"PASSED!\\r\\n\");
|
|
}
|
|
else {
|
|
print(\"FAILED!\\r\\n\");
|
|
}
|
|
print(\" Running 16-bit test...\");
|
|
status = Xil_TestMem16((u16*)${baseaddr}, 2048, 0xAA55, XIL_TESTMEM_ALLMEMTESTS);
|
|
if (status == 0) {
|
|
print(\"PASSED!\\r\\n\");
|
|
}
|
|
else {
|
|
print(\"FAILED!\\r\\n\");
|
|
}
|
|
print(\" Running 8-bit test...\");
|
|
status = Xil_TestMem8((u8*)${baseaddr}, 4096, 0xA5, XIL_TESTMEM_ALLMEMTESTS);
|
|
if (status == 0) {
|
|
print(\"PASSED!\\r\\n\");
|
|
}
|
|
else {
|
|
print(\"FAILED!\\r\\n\");
|
|
}"
|
|
|
|
}
|
|
}
|
|
|
|
append testfunc_call "
|
|
\}"
|
|
|
|
return $testfunc_call
|
|
}
|