Commit 0a15e1e3 authored by Andrey Filippov's avatar Andrey Filippov

Updated scripts to work with current yocto/python

parent 7194dbb0
...@@ -43,6 +43,8 @@ class X393Mem(object): ...@@ -43,6 +43,8 @@ class X393Mem(object):
MAXI0_BASE=0x40000000 MAXI0_BASE=0x40000000
MAXI1_BASE=0x80000000 MAXI1_BASE=0x80000000
MAXI_BASE = MAXI0_BASE MAXI_BASE = MAXI0_BASE
USE_NEGATIVE = True # Old versions of Python (2.7.3) required mmap offset to fit into 32 bits, so upper half had to be negative
# 2.7.11 does not need subtraction(and reports error if negative)
def __init__(self, debug_mode=1,dry_mode=False, maxi_port=0): def __init__(self, debug_mode=1,dry_mode=False, maxi_port=0):
if maxi_port: if maxi_port:
...@@ -64,7 +66,27 @@ class X393Mem(object): ...@@ -64,7 +66,27 @@ class X393Mem(object):
else: else:
maxi_port = (0,1)[self.MAXI_BASE == self.MAXI1_BASE] maxi_port = (0,1)[self.MAXI_BASE == self.MAXI1_BASE]
print ("MAXI port = %d (0x%08x)"%(maxi_port, self.MAXI_BASE)) print ("MAXI port = %d (0x%08x)"%(maxi_port, self.MAXI_BASE))
def wrap_mm (self, f, page_addr):
if page_addr>=0x80000000:
if (self.USE_NEGATIVE):
try:
return mmap.mmap(f.fileno(), self.PAGE_SIZE, offset = page_addr - (1<<32))
except:
self.USE_NEGATIVE = False
print ("Turning OFF use of negative offsets in mmap")
return mmap.mmap(f.fileno(), self.PAGE_SIZE, offset = page_addr)
else:
try:
return mmap.mmap(f.fileno(), self.PAGE_SIZE, offset = page_addr)
except:
print ("Turning ON use of negative offsets in mmap")
self.USE_NEGATIVE = True
return mmap.mmap(f.fileno(), self.PAGE_SIZE, offset = page_addr - (1<<32))
else:
return mmap.mmap(f.fileno(), self.PAGE_SIZE, offset = page_addr)
def write_mem (self,addr, data,quiet=1): def write_mem (self,addr, data,quiet=1):
""" """
Write 32-bit word to physical memory Write 32-bit word to physical memory
...@@ -78,9 +100,10 @@ class X393Mem(object): ...@@ -78,9 +100,10 @@ class X393Mem(object):
with open("/dev/mem", "r+b") as f: with open("/dev/mem", "r+b") as f:
page_addr=addr & (~(self.PAGE_SIZE-1)) page_addr=addr & (~(self.PAGE_SIZE-1))
page_offs=addr-page_addr page_offs=addr-page_addr
if (page_addr>=0x80000000): mm = self.wrap_mm(f, page_addr)
page_addr-= (1<<32) # if (page_addr>=0x80000000):
mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr) # page_addr-= (1<<32)
# mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr)
packedData=struct.pack(self.ENDIAN+"L",data) packedData=struct.pack(self.ENDIAN+"L",data)
d=struct.unpack(self.ENDIAN+"L",packedData)[0] d=struct.unpack(self.ENDIAN+"L",packedData)[0]
mm[page_offs:page_offs+4]=packedData mm[page_offs:page_offs+4]=packedData
...@@ -108,9 +131,10 @@ class X393Mem(object): ...@@ -108,9 +131,10 @@ class X393Mem(object):
with open("/dev/mem", "r+b") as f: with open("/dev/mem", "r+b") as f:
page_addr=addr & (~(self.PAGE_SIZE-1)) page_addr=addr & (~(self.PAGE_SIZE-1))
page_offs=addr-page_addr page_offs=addr-page_addr
if (page_addr>=0x80000000): mm = self.wrap_mm(f, page_addr)
page_addr-= (1<<32) # if (page_addr>=0x80000000):
mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr) # page_addr-= (1<<32)
# mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr)
data=struct.unpack(self.ENDIAN+"L",mm[page_offs:page_offs+4]) data=struct.unpack(self.ENDIAN+"L",mm[page_offs:page_offs+4])
d=data[0] d=data[0]
if quiet < 1: if quiet < 1:
...@@ -149,9 +173,10 @@ class X393Mem(object): ...@@ -149,9 +173,10 @@ class X393Mem(object):
for addr in range (start_addr,end_addr+byte_mode,byte_mode): for addr in range (start_addr,end_addr+byte_mode,byte_mode):
page_addr=addr & (~(self.PAGE_SIZE-1)) page_addr=addr & (~(self.PAGE_SIZE-1))
page_offs=addr-page_addr page_offs=addr-page_addr
if (page_addr>=0x80000000): mm = self.wrap_mm(f, page_addr)
page_addr-= (1<<32) # if (page_addr>=0x80000000):
mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr) # page_addr-= (1<<32)
# mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr)
data=struct.unpack_from(self.ENDIAN+frmt_bytes[byte_mode],mm, page_offs) data=struct.unpack_from(self.ENDIAN+frmt_bytes[byte_mode],mm, page_offs)
rslt.append(data[0]) rslt.append(data[0])
...@@ -202,9 +227,10 @@ class X393Mem(object): ...@@ -202,9 +227,10 @@ class X393Mem(object):
if page_num == last_page: if page_num == last_page:
end_offset = start_addr + length - self.PAGE_SIZE * page_num end_offset = start_addr + length - self.PAGE_SIZE * page_num
page_addr = page_num * self.PAGE_SIZE page_addr = page_num * self.PAGE_SIZE
if (page_addr>=0x80000000): mm = self.wrap_mm(f, page_addr)
page_addr-= (1<<32) # if (page_addr>=0x80000000):
mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr) # page_addr-= (1<<32)
# mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr)
bf.write(mm[start_offset:end_offset]) bf.write(mm[start_offset:end_offset])
def mem_clear (self, start_addr, length, word32): def mem_clear (self, start_addr, length, word32):
...@@ -229,9 +255,10 @@ class X393Mem(object): ...@@ -229,9 +255,10 @@ class X393Mem(object):
if page_num == last_page: if page_num == last_page:
end_offset = start_addr + length - self.PAGE_SIZE * page_num end_offset = start_addr + length - self.PAGE_SIZE * page_num
page_addr = page_num * self.PAGE_SIZE page_addr = page_num * self.PAGE_SIZE
if (page_addr>=0x80000000): mm = self.wrap_mm(f, page_addr)
page_addr-= (1<<32) # if (page_addr>=0x80000000):
mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr) # page_addr-= (1<<32)
# mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr)
mm[start_offset:end_offset] = patt[start_offset:end_offset] mm[start_offset:end_offset] = patt[start_offset:end_offset]
...@@ -273,9 +300,10 @@ class X393Mem(object): ...@@ -273,9 +300,10 @@ class X393Mem(object):
data = (start_data + ((addr-start_addr) // byte_mode)*inc_data) & data_mask data = (start_data + ((addr-start_addr) // byte_mode)*inc_data) & data_mask
page_addr=addr & (~(self.PAGE_SIZE-1)) page_addr=addr & (~(self.PAGE_SIZE-1))
page_offs=addr-page_addr page_offs=addr-page_addr
if (page_addr>=0x80000000): mm = self.wrap_mm(f, page_addr)
page_addr-= (1<<32) # if (page_addr>=0x80000000):
mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr) # page_addr-= (1<<32)
# mm = mmap.mmap(f.fileno(), self.PAGE_SIZE, offset=page_addr)
struct.pack_into(self.ENDIAN+frmt_bytes[byte_mode],mm, page_offs, data) struct.pack_into(self.ENDIAN+frmt_bytes[byte_mode],mm, page_offs, data)
''' '''
......
...@@ -32,9 +32,10 @@ import os ...@@ -32,9 +32,10 @@ import os
from x393_mem import X393Mem from x393_mem import X393Mem
#from time import sleep #from time import sleep
#import shutil #import shutil
VSC_DIR="/sys/devices/amba.0/e0004000.ps7-i2c/i2c-0/0-0001" VSC_DIR_OLD="/sys/devices/amba.0/e0004000.ps7-i2c/i2c-0/0-0001"
VSC_DIR_NEW="/sys/devices/soc0/amba@0/e0004000.ps7-i2c/i2c-0/0-0001"
# 10389 rev "0" # 10389 rev "0"
VSC_DIR = None
class x393_vsc3304(object): class x393_vsc3304(object):
DRY_MODE= True # True DRY_MODE= True # True
DEBUG_MODE=1 DEBUG_MODE=1
...@@ -88,17 +89,31 @@ class x393_vsc3304(object): ...@@ -88,17 +89,31 @@ class x393_vsc3304(object):
PCB_REV = "10389" PCB_REV = "10389"
current_mode = "ESATA<->SSD" current_mode = "ESATA<->SSD"
def __init__(self, debug_mode=1,dry_mode=False, pcb_rev = "10389"): def __init__(self, debug_mode=1,dry_mode=False, pcb_rev = "10389"):
global VSC_DIR
self.DEBUG_MODE=debug_mode self.DEBUG_MODE=debug_mode
if not dry_mode: if not dry_mode:
if not os.path.exists("/dev/xdevcfg"): if not os.path.exists("/dev/xdevcfg"):
dry_mode=True dry_mode=True
print("Program is forced to run in SIMULATED mode as '/dev/xdevcfg' does not exist (not a camera)") print("Program is forced to run in SIMULATED mode as '/dev/xdevcfg' does not exist (not a camera)")
else:
if os.path.exists(VSC_DIR_OLD):
print ('x393_vsc3304: Running on OLD system')
VSC_DIR = VSC_DIR_OLD
elif os.path.exists(VSC_DIR_NEW):
print ('x393_vsc3304: Running on NEW system')
VSC_DIR = VSC_DIR_NEW
else:
print ("Does not seem to be a known system - both %s (old) and %s (new) are not found"%(VSC_DIR_OLD, VSC_DIR_NEW))
return
self.DRY_MODE=dry_mode self.DRY_MODE=dry_mode
self.x393_mem=X393Mem(debug_mode,dry_mode, 1) self.x393_mem=X393Mem(debug_mode,dry_mode, 1)
if not pcb_rev in self.PCB_CONNECTIONS: if not pcb_rev in self.PCB_CONNECTIONS:
print ("Unknown PCB/rev: %s (defined: %s), using %s"%(pcb_rev, str(self.PCB_CONNECTIONS.keys()),self.PCB_REV)) print ("Unknown PCB/rev: %s (defined: %s), using %s"%(pcb_rev, str(self.PCB_CONNECTIONS.keys()),self.PCB_REV))
else: else:
self.PCB_REV = pcb_rev self.PCB_REV = pcb_rev
def echo(self, what, where): def echo(self, what, where):
if self.DRY_MODE: if self.DRY_MODE:
print ("'%s' -> '%s'"%(str(what), VSC_DIR+"/"+where)) print ("'%s' -> '%s'"%(str(what), VSC_DIR+"/"+where))
......
This diff is collapsed.
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