Commit b4e60b40 authored by Denia Bouhired-Ferrag's avatar Denia Bouhired-Ferrag

initial remote multiboot test. WARNING, contains binaries to be deleted

parent 9a4de25d
cfvm-774-elma3 admin ADMIN 3
\ No newline at end of file
#!/usr/bin/python
#===============================================================================
# CERN (BE-CO-HT)
# Pulse test script
#===============================================================================
# author: Denia Bouhired(t.stana@cern.ch)
#
# date of creation:
#
# version: 1.0
#
# description:
# This script is used during manual upgrade of conv-ttl boards.
# It is used to:
# - Scan barcode of board
# - Read hw version
# - Read gw version
# - Read unique temperature chip ID
# - Output information on log file
#
#===============================================================================
# GNU LESSER GENERAL PUBLIC LICENSE
#===============================================================================
# This source file is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by the
# Free Software Foundation; either version 2.1 of the License, or (at your
# option) any later version. This source is distributed in the hope that it
# will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details. You should have
# received a copy of the GNU Lesser General Public License along with this
# source; if not, download it from http://www.gnu.org/licenses/lgpl-2.1.html
#===============================================================================
#===============================================================================
# TODO:
#===============================================================================
import sys
sys.path.append("../ei2c")
sys.path.append("../multiboot/lib-multiboot")
import time
from ei2c import *
from ei2cexcept import *
import binascii
import re
import subprocess
import os
import traceback
from xil_multiboot import *
##-------------------------------------------------------------------------------------------------
## Method to turn on the VME crate.
##-------------------------------------------------------------------------------------------------
## It calls the men-on script which sends the necessary SMTP commands to the ELMA crate to turn on
## power to the VME backplane.
##-------------------------------------------------------------------------------------------------
def men_on():
print("Switching on the ELMA crate")
subprocess.call("./men-on", shell=True, stdout=None, stderr=None)
time.sleep(1)
##-------------------------------------------------------------------------------------------------
## Method to turn off the VME crate.
##-------------------------------------------------------------------------------------------------
## It calls the men-off script which sends the necessary SMTP commands to the ELMA crate to turn off
## power to the VME backplane.
##-------------------------------------------------------------------------------------------------
def men_off():
print("Switching off the ELMA crate")
subprocess.call("./men-off", shell=True, stdout=None, stderr=None)
time.sleep(1)
##-------------------------------------------------------------------------------------------------
# Define registers memory address
IDREG = 0x00 # Board ID register
SRREG = 0x04 # Status register
UIDREGLS = 0xac # 1-wire chip Unique ID - LSB
UIDREGMS = 0xb0 # 1-wire chip Unique ID - MSB
# Status register offsets
CSR_GWVERS_OFS = 0
CSR_HWVERS_OFS = 22
# Target version
gwvers_target = 4.1
gwvers_gold_target = 0.3
#gateware to write
gw_file="golden-v"+str(gwvers_gold_target)+"_release-v"+str(gwvers_target".bin"
##-------------------------------------------------------------------------------------------------
## Method to check hardware and gateware version
##-------------------------------------------------------------------------------------------------
def gw_hw_version():
hwvers = (elma.read(slot, SRREG) & 0x0fc00000) >> CSR_HWVERS_OFS
gwvers = (elma.read(slot, SRREG) & 0xFF) >> CSR_GWVERS_OFS
#print ("maj is %d, min is %d" % int(hwvers >> 2), int(hwvers & 0x03))
hwvers = int(hwvers >> 2)+float(hwvers & 0x03)/10
gwvers = int(gwvers >> 4)+float(gwvers & 0xF)/10
return hwvers, gwvers;
##-------------------------------------------------------------------------------------------------
## Main "method" of upgrade module
##-------------------------------------------------------------------------------------------------
if __name__ == "__main__":
crate_list = "crate_list.txt"
fin = open ('./crate_list.txt', 'r')
for crate_line in fin
#Split each line into list of strings
crate_info=crate_line.split()
# Get the IP, user and password for the ELMA crate from ei2cdefine.py
ip = crate_info[0]
user = crate_info[1]
pwd = crate_info[2]
slot = int(crate_info[3])
elma = EI2C(ip, user, pwd)
elma.open()
# Get board ID and gateware version, fail if incorrect
bid = elma.get_bid(slot)
(hwvers, gwvers) = gw_hw_version()
upgrade=True
#Check whether upgrade is required
if (gwvers == gwvers_target):
upgrade=False
break
baseaddr = 0x100
if (bid == "TBLO"):
gw_path="./gw-blo/"
elif (bid == "T485"):
gw_path="./gw-rs485/"
# if (gwvers == 0xff):
# baseaddr = 0x300
# elif ((gwvers >= 0x10) and (gwvers <= 0x22)) or \
# (((gwvers & 0xf0) == 0x00) and (gwvers < 0x02)):
# baseaddr = 0x040
if upgrade == True
mb = XilMultiboot(ELMA_I2C_MULTIBOOT, elma, slot, baseaddr, "")
mb.set_bitstream_file(gw_path+gw_file)
multiboot_addr = 0x170000
multiboot_addr = int(multiboot_addr, 16)
mb.write(multiboot_addr)
mb.iprog(multiboot_addr)
if (upgrade== True):
# Turn off the VME crate
ret = subprocess.call("snmpset -v2c -c "+ pwd +" "+ ip +" 1.3.6.1.4.1.37968.1.1.7.2.1.3.1 i 1", shell=True, stdout=None, stderr=None)
# Turn on the VME crate
ret = subprocess.call("snmpset -v2c -c "+ pwd +" "+ ip +" 1.3.6.1.4.1.37968.1.1.7.2.1.3.1 i 0", shell=True, stdout=None, stderr=None
time.sleep(10)
(hwvers_new, gwvers_new) = gw_hw_version()
if (hwvers_new == 0.0):
hwvers_new_str = "<4.0"
else:
hwvers_new_str = str(hwvers_new)
IDMS = elma.read(slot, UIDREGMS)
IDLS = elma.read(slot, UIDREGLS)
#Generate log file
#subprocess.call("cd./log; chmod 777 log", shell=True, stdout=None, stderr=None)
# Generate output file named according to current time
fname = time.strftime("gw-upgrade-%Y-%m-%d", time.localtime()) + ".txt"
ret = subprocess.call(["ls ./log | grep " + fname], shell=True, stdout=None, stderr=None)
#print ("%d" % ret)
if (ret != 0):
f = open("./log/" + fname, "w")
f.write("\n")
f.write("CONV-TTL-XXX Upgrade log created on %s \n" % time.strftime("%Y-%m-%d-%Hh%Mm%Ss", time.localtime()))
f.write("--------------------------------------------------------------------------------- \n")
f.write("* Target version is (v%2.1f)\n" % gwvers_target)
f.write("* Hardware (v0.0) means board is (v3.0) or earlier \n")
f.write("\n")
f.write("--------------------------------------------------------------------------------- \n")
f.write("Crate name| Slot |Barcode | PCB ID | HW version | Old gw version | New gw version\n")
f.write("--------------------------------------------------------------------------------- \n")
f.close()
print("Upgrade log can be found in ./log/%s \n" % fname)
f = open("./log/" + fname, "a")
f.write("%s \t %d \t %s \t %d%d \t (%2.1f) \t (%2.1f) \t (%2.1f) \n" % (ip, slot, sn1, IDMS, IDLS, hwvers, gwvers, gwvers_new) )
f.close()
men_off()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment