Skip to content
Snippets Groups Projects
Commit d5d8d7d7 authored by Julian Maxime Mendez's avatar Julian Maxime Mendez
Browse files

improve: tester

parent acf29c6e
No related branches found
No related tags found
No related merge requests found
[submodule "ipmc-devkit"]
path = ipmc-devkit
url = https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-devkit.git
[submodule "psms-lib"]
path = psms-lib
url = https://gitlab.cern.ch/jumendez/psms-testbench.git
No preview for this file type
C:\HardwarePlatformManagement\ipmc-tester-git\ipmc-config\binaries\TOPLEVEL.fdb
1573134765
1592316091
C:\HardwarePlatformManagement\ipmc-tester-git\ipmc-config\binaries\MSS_UFROM_0.ufc
1361973641
C:\HardwarePlatformManagement\ipmc-tester-git\ipmc-config\binaries\MSS_ENVM_0.efc
......
No preview for this file type
This diff is collapsed.
......@@ -15,7 +15,7 @@ programmer '74463' : Scan Chain...
programmer '74463' : Check Chain...
programmer '74463' : Scan and Check Chain PASSED.
programmer '74463' : device 'A2F200M3F' : Executing action PROGRAM
programmer '74463' : device 'A2F200M3F' : EXPORT FSN[48] = 016e04502854
programmer '74463' : device 'A2F200M3F' : EXPORT FSN[48] = 016e04506044
programmer '74463' : device 'A2F200M3F' : Erase ...
programmer '74463' : device 'A2F200M3F' : Completed erase
programmer '74463' : device 'A2F200M3F' : EXPORT CHECKSUM: [16] = 155c
......@@ -29,10 +29,10 @@ programmer '74463' : device 'A2F200M3F' : Program System Init and Boot Clients..
programmer '74463' : device 'A2F200M3F' : Program Embedded Flash Memory Module ALL....
programmer '74463' : device 'A2F200M3F' : Verify System Init and Boot Clients...
programmer '74463' : device 'A2F200M3F' : Verify Embedded Flash Memory Module ALL...
programmer '74463' : device 'A2F200M3F' : Finished: Thu Nov 07 14:54:12 2019 (Elapsed time 00:01:17)
programmer '74463' : device 'A2F200M3F' : Finished: Tue Jun 16 16:02:45 2020 (Elapsed time 00:01:06)
programmer '74463' : device 'A2F200M3F' : Executing action PROGRAM PASSED.
programmer '74463' : Chain programming PASSED.
Chain Programming Finished: Thu Nov 07 14:54:12 2019 (Elapsed time 00:01:17)
Chain Programming Finished: Tue Jun 16 16:02:45 2020 (Elapsed time 00:01:06)
o - o - o - o - o - o
......
......@@ -6,80 +6,84 @@ from IPMCDevLib.IPMCDevATCA import IPMCDevATCA
from IPMCDevLib.IPMCDevAMC import IPMCDevAMC
class AMCSlotTester:
def __init__(self, IPMCDevATCAObject, IPMCDevAMCObject):
def __init__(self, IPMCDevATCAObject, IPMCDevAMCObject):
IPMCDevAMCObject.EXTRACTAMC()
setha = IPMCDevATCAObject.SETHA(0x00)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < 1000:
TIMEOUT_CONST = 1000
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
setha = IPMCDevATCAObject.SETHA(0x43)
setha = IPMCDevATCAObject.SETHA(0x43)
IPMCDevATCAObject.CONFHSW(IPMCDevATCAObject.VCC)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < 1000:
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
self.IPMCDevATCAObject = IPMCDevATCAObject
self.IPMCDevAMCObject = IPMCDevAMCObject
def testAMCPort(self, port, targetAddr):
self.IPMCDevAMCObject.EXTRACTAMC()
self.IPMCDevAMCObject.SELAMC(port)
self.IPMCDevAMCObject.SETGA(targetAddr)
self.IPMCDevAMCObject.ASSERTMPGOOD()
self.IPMCDevAMCObject.ASSERTPPGOOD()
self.IPMCDevAMCObject.CLOSEHSW()
self.IPMCDevAMCObject.INSERTAMC()
time.sleep(5) #Wait enought to get the init state done
self.IPMCDevAMCObject.CLOSEHSW()
#exit(0)
timeout = 0
while self.IPMCDevAMCObject.GETPPEN() != 1 and timeout < 1000:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= 1000:
self.IPMCDevAMCObject.EXTRACTAMC()
return -1
self.IPMCDevAMCObject.DEASSERTPPGOOD()
timeout = 0
while self.IPMCDevAMCObject.GETPPEN() != 0 and timeout < 1000:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= 1000:
self.IPMCDevAMCObject.EXTRACTAMC()
return -2
self.IPMCDevAMCObject.DEASSERTMPGOOD()
timeout = 0
while self.IPMCDevAMCObject.GETMPEN() != 0 and timeout < 1000:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= 1000:
self.IPMCDevAMCObject.EXTRACTAMC()
return -3
self.IPMCDevAMCObject.EXTRACTAMC()
return 0
......@@ -5,109 +5,110 @@ import time
from IPMCDevLib.IPMCDevATCA import IPMCDevATCA
class ATCATester:
def __init__(self, IPMCDevATCAObject):
def __init__(self, IPMCDevATCAObject, hardwareAddress=0x43):
IPMCDevATCAObject.ASSERTPGOODA()
IPMCDevATCAObject.ASSERTPGOODB()
setha = IPMCDevATCAObject.SETHA(0x00)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < 1000:
self.TIMEOUT_CONST = 1000
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
setha = IPMCDevATCAObject.SETHA(0x43)
setha = IPMCDevATCAObject.SETHA(hardwareAddress)
IPMCDevATCAObject.CONFHSW(IPMCDevATCAObject.VCC)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < 1000:
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
self.IPMCDevATCAObject = IPMCDevATCAObject
def testATCAPowerCycle(self):
# Close handle switch
self.IPMCDevATCAObject.CONFHSW(self.IPMCDevATCAObject.VCC)
# Wait for 12V Enable
timeout = 0
while self.IPMCDevATCAObject.GET12VEN() != 1 and timeout < 1000:
while self.IPMCDevATCAObject.GET12VEN() != 1 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
return -3
# Open handle switch
self.IPMCDevATCAObject.CONFHSW(self.IPMCDevATCAObject.GND)
# Wait for 12V Enable OFF
timeout = 0
while self.IPMCDevATCAObject.GET12VEN() != 0 and timeout < 1000:
while self.IPMCDevATCAObject.GET12VEN() != 0 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
return -6
# Wait for BLUE Led ON (Ready)
timeout = 0
while self.IPMCDevATCAObject.GETBLUELED() != 1 and timeout < 1000:
while self.IPMCDevATCAObject.GETBLUELED() != 1 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
return -2
# Close handle switch
self.IPMCDevATCAObject.CONFHSW(self.IPMCDevATCAObject.VCC)
# Wait for 12V Enable
timeout = 0
while self.IPMCDevATCAObject.GET12VEN() != 1 and timeout < 1000:
while self.IPMCDevATCAObject.GET12VEN() != 1 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
return -7
# De-assert PGOOD signals
self.IPMCDevATCAObject.DEASSERTPGOODA()
self.IPMCDevATCAObject.DEASSERTPGOODB()
# Wait for 12V Enable OFF
timeout = 0
while self.IPMCDevATCAObject.GET12VEN() != 0 and timeout < 1000:
while self.IPMCDevATCAObject.GET12VEN() != 0 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
return -4
self.IPMCDevATCAObject.ASSERTPGOODA()
self.IPMCDevATCAObject.ASSERTPGOODB()
self.IPMCDevATCAObject.CONFHSW(self.IPMCDevATCAObject.GND)
time.sleep(1)
self.IPMCDevATCAObject.CONFHSW(self.IPMCDevATCAObject.VCC)
time.sleep(1)
# Wait for 12V Enable
timeout = 0
while self.IPMCDevATCAObject.GET12VEN() != 1 and timeout < 1000:
while self.IPMCDevATCAObject.GET12VEN() != 1 and timeout < self.TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= self.TIMEOUT_CONST:
return -8
return 0
\ No newline at end of file
......@@ -7,30 +7,31 @@ from IPMCDevLib.IPMCDevATCA import IPMCDevATCA
from IPMCIPMICom import IPMCIPMICom
class I2CTester:
def __init__(self, IPMCDevATCAObject, ipAddr):
def __init__(self, IPMCDevATCAObject, ipAddr):
setha = IPMCDevATCAObject.SETHA(0x00)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < 1000:
TIMEOUT_CONST = 1000
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
setha = IPMCDevATCAObject.SETHA(0x43)
setha = IPMCDevATCAObject.SETHA(0x43)
IPMCDevATCAObject.CONFHSW(IPMCDevATCAObject.VCC)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < 1000:
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
self.IPMCDevATCAObject = IPMCDevATCAObject
self.IPMCDevATCAObject = IPMCDevATCAObject
self.IPMCIPMIComObject = IPMCIPMICom(ipAddr)
def testMGTI2c(self, count):
......@@ -39,17 +40,20 @@ class I2CTester:
addrLSB = random.randint(0, 254)
val = random.randint(0, 254)
geti2c = self.IPMCIPMIComObject.sendIPMICommand(46, 0x50, [96, 0, 0, addrMSB, addrLSB, val]) #Configure I/O in input
if geti2c[4] != val:
print('getval: {}'.format(geti2c[4]))
print('setval: {}'.format(val))
print('rep: {}'.format(geti2c))
return -1
return 0
def testSensorI2c(self):
def testSensorI2c(self):
geti2c = self.IPMCIPMIComObject.sendIPMICommand(46, 0x51, [96, 0, 0, 140])
if geti2c[4] != 0xFF:
return -1
geti2c = self.IPMCIPMIComObject.sendIPMICommand(46, 0x51, [96, 0, 0, 144])
if geti2c[4] != 0x00:
return -2
......
File added
......@@ -6,81 +6,83 @@ from IPMCDevLib.IPMCDevATCA import IPMCDevATCA
from IPMCIPMICom import IPMCIPMICom
class IOTester:
def __init__(self, IPMCDevATCAObject, ipAddr):
def __init__(self, IPMCDevATCAObject, ipAddr):
setha = IPMCDevATCAObject.SETHA(0x00)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < 1000:
TIMEOUT_CONST = 1000
while IPMCDevATCAObject.GET12VEN() != 0 and timeout < TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
setha = IPMCDevATCAObject.SETHA(0x43)
setha = IPMCDevATCAObject.SETHA(0x43)
IPMCDevATCAObject.CONFHSW(IPMCDevATCAObject.VCC)
timeout = 0
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < 1000:
while IPMCDevATCAObject.GET12VEN() != 1 and timeout < TIMEOUT_CONST:
time.sleep(0.1)
timeout = timeout + 1
if timeout >= 50:
if timeout >= TIMEOUT_CONST:
raise ValueError('ATCA Power ON timeout')
self.IPMCDevATCAObject = IPMCDevATCAObject
self.IPMCDevATCAObject = IPMCDevATCAObject
self.IPMCIPMIComObject = IPMCIPMICom(ipAddr)
def readIPMCUSERIOs(self):
compcode = 0
id = 0
arr = []
while compcode != 0xc9:
getio = self.IPMCIPMIComObject.sendIPMICommand(46, 72, [96, 0, 0, id]) #Configure I/O in input
compcode = getio[0]
if compcode != 0xc9:
arr.append({'id': id, 'value': getio[4]})
id = id + 1
return arr
def activateIPMCUSERIOs(self, id):
def activateIPMCUSERIOs(self, id):
iostate = self.IPMCDevATCAObject.GETIO(id)
self.IPMCIPMIComObject.sendIPMICommand(46, 0x44, [96, 0, 0, id])
return self.IPMCDevATCAObject.GETIO(id)
def deactivateIPMCUSERIOs(self, id):
def deactivateIPMCUSERIOs(self, id):
iostate = self.IPMCDevATCAObject.GETIO(id)
self.IPMCIPMIComObject.sendIPMICommand(46, 0x46, [96, 0, 0, id])
return self.IPMCDevATCAObject.GETIO(id)
def readActiveIPMCUSERIO(self, id):
def readActiveIPMCUSERIO(self, id):
getio = self.IPMCIPMIComObject.sendIPMICommand(46, 72, [96, 0, 0, id]) #Configure I/O in input
self.IPMCDevATCAObject.SETIO(id, self.IPMCDevATCAObject.GND)
getio = self.IPMCIPMIComObject.sendIPMICommand(46, 72, [96, 0, 0, id]) #Configure I/O in input
return getio[4]
def readInactiveIPMCUSERIO(self, id):
def readInactiveIPMCUSERIO(self, id):
getio = self.IPMCIPMIComObject.sendIPMICommand(46, 72, [96, 0, 0, id]) #Configure I/O in input
self.IPMCDevATCAObject.SETIO(id, self.IPMCDevATCAObject.VCC)
getio = self.IPMCIPMIComObject.sendIPMICommand(46, 72, [96, 0, 0, id]) #Configure I/O in input
return getio[4]
def testUSERIO(self, id):
def testUSERIO(self, id):
if self.activateIPMCUSERIOs(id) != 0:
return -1
if self.deactivateIPMCUSERIOs(id) != 1:
if self.deactivateIPMCUSERIOs(id) != 1:
return -2
if self.readActiveIPMCUSERIO(id) != 1:
return -3
if self.readInactiveIPMCUSERIO(id) != 0:
return -4
return 0
\ No newline at end of file
......@@ -5,60 +5,78 @@ import os
import subprocess
class IPMCIPMICom:
def __init__(self, ipaddr):
#Load DLL into memory.
filePath = os.path.dirname(os.path.abspath(__file__))
def __init__(self, ipaddr):
#Load DLL into memory.
filePath = os.path.dirname(os.path.abspath(__file__))
self.IPMIDll = ctypes.CDLL(filePath+"/libmtca.dll")
self.ipaddr = ipaddr
response = -1
timeout = 0
while response != 0 and timeout < 50:
TIMEOUT_CONST = 200
while response != 0 and timeout < TIMEOUT_CONST:
proc = subprocess.Popen(["ping","-n","1", "-w", "5", ipaddr], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
response = proc.returncode
timeout = timeout + 1
if timeout >= 50:
if timeout >= TIMEOUT_CONST:
raise ValueError('Connection error: '+ipaddr+' cannot be reached')
def sendIMPBLCommand(self, target, netFn, command):
reply = (ctypes.c_ubyte*128)()
data = (ctypes.c_byte*8)()
data[0] = 0x47
data[1] = ctypes.c_byte(target)
data[2] = ctypes.c_byte(netFn*4)
data[3] = ctypes.c_byte(0 - target + (netFn*4))
data[4] = 0x20
data[5] = 0
data[6] = ctypes.c_byte(command)
data[7] = ctypes.c_byte(0 - (0x20 + command))
ret = self.IPMIDll.send_ipmi_cmd(self.ipaddr, "", "", 0x06, 0x52, ctypes.byref(data), 8, ctypes.byref(reply))
for r in reply:
print('Rep: {:02X}'.format(r))
def sendIPMICommand(self, netFn, command, data):
reply = (ctypes.c_ubyte*128)()
cbytedata = (ctypes.c_byte*len(data))()
i = 0
for d in data:
cbytedata[i] = ctypes.c_byte(d)
i = i + 1
ret = self.IPMIDll.send_ipmi_cmd(self.ipaddr, "", "", netFn, command, ctypes.byref(cbytedata), len(data), ctypes.byref(reply))
arr = []
for r in reply:
arr.append(r)
return arr
\ No newline at end of file
def sendIMPBLCommand(self, target, netFn, command, retry=3):
for n in range(0, retry):
reply = (ctypes.c_ubyte*128)()
data = (ctypes.c_byte*8)()
data[0] = 0x47
data[1] = ctypes.c_byte(target)
data[2] = ctypes.c_byte(netFn*4)
data[3] = ctypes.c_byte(0 - target + (netFn*4))
data[4] = 0x20
data[5] = 0
data[6] = ctypes.c_byte(command)
data[7] = ctypes.c_byte(0 - (0x20 + command))
ret = self.IPMIDll.send_ipmi_cmd(self.ipaddr, "", "", 0x06, 0x52, ctypes.byref(data), 8, ctypes.byref(reply))
isNotZero = False
for r in reply:
if r != 0:
isNotZero = True
print('Rep: {:02X}'.format(r))
if isNotZero:
return
raise ValueError('IPMB-L Error: command was not sent')
def sendIPMICommand(self, netFn, command, data, retry=3):
for n in range(0, retry):
reply = (ctypes.c_ubyte*128)()
cbytedata = (ctypes.c_byte*len(data))()
i = 0
for d in data:
cbytedata[i] = ctypes.c_byte(d)
i = i + 1
ret = self.IPMIDll.send_ipmi_cmd(self.ipaddr, "", "", netFn, command, ctypes.byref(cbytedata), len(data), ctypes.byref(reply))
arr = []
isNotZero = False
for r in reply:
if r != 0:
isNotZero = True
arr.append(r)
if isNotZero:
return arr
raise ValueError('IPMI Error: command was not sent')
\ No newline at end of file
This diff is collapsed.
Subproject commit e607e6c14c533c8eae39c975e8828b2d338fd895
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment