embeddedsw/XilinxProcessorIPLib/drivers/emc/data/emc_tapp.tcl
git perforce import user a539aa2c1a Initial import of //Rodin/HEAD/data/embeddedsw/ from the state at revision #head
[git-p4: depot-paths = "//Rodin/HEAD/data/embeddedsw/": change = 884492]
2014-04-09 17:06:57 +05:30

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
}