mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-03 10:17:21 +00:00
test/py: mmc: Add support for different mmc modes
Currently, MMC test runs on default mmc modes, adding a provision to support multiple mmc modes through user defined parameters. Signed-off-by: Love Kumar <love.kumar@amd.com>
This commit is contained in:
parent
a730947974
commit
b9e0048b6d
1 changed files with 324 additions and 262 deletions
|
@ -18,16 +18,55 @@ For example:
|
|||
# Setup env__mmc_device_test_skip to not skipping the test. By default, its
|
||||
# value is set to True. Set it to False to run all tests for MMC device.
|
||||
env__mmc_device_test_skip = False
|
||||
|
||||
# Setup env__mmc_device to set the supported mmc modes to be tested
|
||||
env__mmc_device {
|
||||
'mmc_modes': ['MMC_LEGACY', 'SD_HS'],
|
||||
}
|
||||
|
||||
"""
|
||||
|
||||
mmc_set_up = False
|
||||
controllers = 0
|
||||
devices = {}
|
||||
mmc_modes_name = []
|
||||
mmc_modes = []
|
||||
|
||||
def setup_mmc_modes(cons):
|
||||
global mmc_modes, mmc_modes_name
|
||||
f = cons.config.env.get('env__mmc_device', None)
|
||||
if f:
|
||||
mmc_modes_name = f.get('mmc_modes', None)
|
||||
|
||||
# Set mmc mode to default mode (legacy), if speed mode config isn't enabled
|
||||
if cons.config.buildconfig.get('config_mmc_speed_mode_set', 'n') != 'y':
|
||||
mmc_modes = [0]
|
||||
return
|
||||
|
||||
if mmc_modes_name:
|
||||
mmc_help = cons.run_command('mmc -help')
|
||||
m = re.search(r"\[MMC_LEGACY(.*\n.+])", mmc_help)
|
||||
modes = [
|
||||
x.strip()
|
||||
for x in m.group()
|
||||
.replace('\n', '')
|
||||
.replace('[', '')
|
||||
.replace(']', '')
|
||||
.split(',')
|
||||
]
|
||||
|
||||
for mode in mmc_modes_name:
|
||||
mmc_modes += [modes.index(mode)]
|
||||
else:
|
||||
# Set mmc mode to default mode (legacy), if it is not defined in env
|
||||
mmc_modes = [0]
|
||||
|
||||
def setup_mmc(u_boot_console):
|
||||
if u_boot_console.config.env.get('env__mmc_device_test_skip', True):
|
||||
pytest.skip('MMC device test is not enabled')
|
||||
|
||||
setup_mmc_modes(u_boot_console)
|
||||
|
||||
@pytest.mark.buildconfigspec('cmd_mmc')
|
||||
def test_mmc_list(u_boot_console):
|
||||
setup_mmc(u_boot_console)
|
||||
|
@ -58,21 +97,22 @@ def test_mmc_dev(u_boot_console):
|
|||
fail = 0
|
||||
for x in range(0, controllers):
|
||||
devices[x]['detected'] = 'yes'
|
||||
output = u_boot_console.run_command('mmc dev %d' % x)
|
||||
|
||||
# Some sort of switch here
|
||||
if 'Card did not respond to voltage select' in output:
|
||||
fail = 1
|
||||
devices[x]['detected'] = 'no'
|
||||
for y in mmc_modes:
|
||||
output = u_boot_console.run_command('mmc dev %d 0 %d' % x, y)
|
||||
|
||||
if 'no mmc device at slot' in output:
|
||||
devices[x]['detected'] = 'no'
|
||||
if 'Card did not respond to voltage select' in output:
|
||||
fail = 1
|
||||
devices[x]['detected'] = 'no'
|
||||
|
||||
if 'MMC: no card present' in output:
|
||||
devices[x]['detected'] = 'no'
|
||||
if 'no mmc device at slot' in output:
|
||||
devices[x]['detected'] = 'no'
|
||||
|
||||
if fail:
|
||||
pytest.fail('Card not present')
|
||||
if 'MMC: no card present' in output:
|
||||
devices[x]['detected'] = 'no'
|
||||
|
||||
if fail:
|
||||
pytest.fail('Card not present')
|
||||
|
||||
@pytest.mark.buildconfigspec('cmd_mmc')
|
||||
def test_mmcinfo(u_boot_console):
|
||||
|
@ -81,19 +121,22 @@ def test_mmcinfo(u_boot_console):
|
|||
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
output = u_boot_console.run_command('mmcinfo')
|
||||
if 'busy timeout' in output:
|
||||
pytest.skip('No SD/MMC/eMMC device present')
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d 0 %d' % x, y)
|
||||
output = u_boot_console.run_command('mmcinfo')
|
||||
if 'busy timeout' in output:
|
||||
pytest.skip('No SD/MMC/eMMC device present')
|
||||
|
||||
obj = re.search(r'Capacity: (\d+|\d+[\.]?\d)', output)
|
||||
try:
|
||||
capacity = float(obj.groups()[0])
|
||||
print(capacity)
|
||||
devices[x]['capacity'] = capacity
|
||||
print('Capacity of dev %d is: %g GiB' % (x, capacity))
|
||||
except ValueError:
|
||||
pytest.fail('MMC capacity not recognized')
|
||||
assert mmc_modes_name[mmc_modes.index(y)] in output
|
||||
|
||||
obj = re.search(r'Capacity: (\d+|\d+[\.]?\d)', output)
|
||||
try:
|
||||
capacity = float(obj.groups()[0])
|
||||
print(capacity)
|
||||
devices[x]['capacity'] = capacity
|
||||
print('Capacity of dev %d is: %g GiB' % (x, capacity))
|
||||
except ValueError:
|
||||
pytest.fail('MMC capacity not recognized')
|
||||
|
||||
@pytest.mark.buildconfigspec('cmd_mmc')
|
||||
def test_mmc_info(u_boot_console):
|
||||
|
@ -102,19 +145,21 @@ def test_mmc_info(u_boot_console):
|
|||
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d 0 %d' % x, y)
|
||||
|
||||
output = u_boot_console.run_command('mmc info')
|
||||
output = u_boot_console.run_command('mmc info')
|
||||
assert mmc_modes_name[mmc_modes.index(y)] in output
|
||||
|
||||
obj = re.search(r'Capacity: (\d+|\d+[\.]?\d)', output)
|
||||
try:
|
||||
capacity = float(obj.groups()[0])
|
||||
print(capacity)
|
||||
if devices[x]['capacity'] != capacity:
|
||||
pytest.fail("MMC capacity doesn't match mmcinfo")
|
||||
obj = re.search(r'Capacity: (\d+|\d+[\.]?\d)', output)
|
||||
try:
|
||||
capacity = float(obj.groups()[0])
|
||||
print(capacity)
|
||||
if devices[x]['capacity'] != capacity:
|
||||
pytest.fail("MMC capacity doesn't match mmcinfo")
|
||||
|
||||
except ValueError:
|
||||
pytest.fail('MMC capacity not recognized')
|
||||
except ValueError:
|
||||
pytest.fail('MMC capacity not recognized')
|
||||
|
||||
@pytest.mark.buildconfigspec('cmd_mmc')
|
||||
def test_mmc_rescan(u_boot_console):
|
||||
|
@ -126,12 +171,13 @@ def test_mmc_rescan(u_boot_console):
|
|||
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
output = u_boot_console.run_command('mmc rescan')
|
||||
if output:
|
||||
pytest.fail('mmc rescan has something to check')
|
||||
output = u_boot_console.run_command('echo $?')
|
||||
assert output.endswith('0')
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d 0 %d' % x, y)
|
||||
output = u_boot_console.run_command('mmc rescan')
|
||||
if output:
|
||||
pytest.fail('mmc rescan has something to check')
|
||||
output = u_boot_console.run_command('echo $?')
|
||||
assert output.endswith('0')
|
||||
|
||||
@pytest.mark.buildconfigspec('cmd_mmc')
|
||||
def test_mmc_part(u_boot_console):
|
||||
|
@ -192,7 +238,6 @@ def test_mmc_fatls_fatinfo(u_boot_console):
|
|||
fs = 'fat'
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
except:
|
||||
|
@ -200,20 +245,22 @@ def test_mmc_fatls_fatinfo(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
output = u_boot_console.run_command(
|
||||
'fatls mmc %d:%s' % (x, part))
|
||||
if 'Unrecognized filesystem type' in output:
|
||||
partitions.remove(part)
|
||||
pytest.fail('Unrecognized filesystem')
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
output = u_boot_console.run_command(
|
||||
'fatls mmc %d:%s' % (x, part))
|
||||
if 'Unrecognized filesystem type' in output:
|
||||
partitions.remove(part)
|
||||
pytest.fail('Unrecognized filesystem')
|
||||
|
||||
if not re.search(r'\d file\(s\), \d dir\(s\)', output):
|
||||
pytest.fail('%s read failed on device %d' % (fs.upper, x))
|
||||
output = u_boot_console.run_command(
|
||||
'fatinfo mmc %d:%s' % (x, part))
|
||||
string = 'Filesystem: %s' % fs.upper
|
||||
if re.search(string, output):
|
||||
pytest.fail('%s FS failed on device %d' % (fs.upper(), x))
|
||||
part_detect = 1
|
||||
if not re.search(r'\d file\(s\), \d dir\(s\)', output):
|
||||
pytest.fail('%s read failed on device %d' % (fs.upper, x))
|
||||
output = u_boot_console.run_command(
|
||||
'fatinfo mmc %d:%s' % (x, part))
|
||||
string = 'Filesystem: %s' % fs.upper
|
||||
if re.search(string, output):
|
||||
pytest.fail('%s FS failed on device %d' % (fs.upper(), x))
|
||||
part_detect = 1
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No %s partition detected' % fs.upper())
|
||||
|
@ -233,7 +280,6 @@ def test_mmc_fatload_fatwrite(u_boot_console):
|
|||
fs = 'fat'
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
except:
|
||||
|
@ -241,49 +287,51 @@ def test_mmc_fatload_fatwrite(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
addr = u_boot_utils.find_ram_base(u_boot_console)
|
||||
devices[x]['addr_%d' % part] = addr
|
||||
size = random.randint(4, 1 * 1024 * 1024)
|
||||
devices[x]['size_%d' % part] = size
|
||||
# count CRC32
|
||||
output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
|
||||
m = re.search('==> (.+?)', output)
|
||||
if not m:
|
||||
pytest.fail('CRC32 failed')
|
||||
expected_crc32 = m.group(1)
|
||||
devices[x]['expected_crc32_%d' % part] = expected_crc32
|
||||
# do write
|
||||
file = '%s_%d' % ('uboot_test', size)
|
||||
devices[x]['file_%d' % part] = file
|
||||
output = u_boot_console.run_command(
|
||||
'%swrite mmc %d:%s %x %s %x' % (fs, x, part, addr, file, size)
|
||||
)
|
||||
assert 'Unable to write' not in output
|
||||
assert 'Error' not in output
|
||||
assert 'overflow' not in output
|
||||
expected_text = '%d bytes written' % size
|
||||
assert expected_text in output
|
||||
|
||||
alignment = int(
|
||||
u_boot_console.config.buildconfig.get(
|
||||
'config_sys_cacheline_size', 128
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
addr = u_boot_utils.find_ram_base(u_boot_console)
|
||||
devices[x]['addr_%d' % part] = addr
|
||||
size = random.randint(4, 1 * 1024 * 1024)
|
||||
devices[x]['size_%d' % part] = size
|
||||
# count CRC32
|
||||
output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
|
||||
m = re.search('==> (.+?)', output)
|
||||
if not m:
|
||||
pytest.fail('CRC32 failed')
|
||||
expected_crc32 = m.group(1)
|
||||
devices[x]['expected_crc32_%d' % part] = expected_crc32
|
||||
# do write
|
||||
file = '%s_%d' % ('uboot_test', size)
|
||||
devices[x]['file_%d' % part] = file
|
||||
output = u_boot_console.run_command(
|
||||
'%swrite mmc %d:%s %x %s %x' % (fs, x, part, addr, file, size)
|
||||
)
|
||||
)
|
||||
offset = random.randrange(alignment, 1024, alignment)
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x %s' % (fs, x, part, addr + offset, file)
|
||||
)
|
||||
assert 'Invalid FAT entry' not in output
|
||||
assert 'Unable to read file' not in output
|
||||
assert 'Misaligned buffer address' not in output
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
assert 'Unable to write' not in output
|
||||
assert 'Error' not in output
|
||||
assert 'overflow' not in output
|
||||
expected_text = '%d bytes written' % size
|
||||
assert expected_text in output
|
||||
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
alignment = int(
|
||||
u_boot_console.config.buildconfig.get(
|
||||
'config_sys_cacheline_size', 128
|
||||
)
|
||||
)
|
||||
offset = random.randrange(alignment, 1024, alignment)
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x %s' % (fs, x, part, addr + offset, file)
|
||||
)
|
||||
assert 'Invalid FAT entry' not in output
|
||||
assert 'Unable to read file' not in output
|
||||
assert 'Misaligned buffer address' not in output
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No %s partition detected' % fs.upper())
|
||||
|
@ -307,13 +355,16 @@ def test_mmc_ext4ls(u_boot_console):
|
|||
print('No %s table on this device' % fs.upper())
|
||||
continue
|
||||
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
for part in partitions:
|
||||
output = u_boot_console.run_command('%sls mmc %d:%s' % (fs, x, part))
|
||||
if 'Unrecognized filesystem type' in output:
|
||||
partitions.remove(part)
|
||||
pytest.fail('Unrecognized filesystem')
|
||||
part_detect = 1
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
output = u_boot_console.run_command(
|
||||
'%sls mmc %d:%s' % (fs, x, part)
|
||||
)
|
||||
if 'Unrecognized filesystem type' in output:
|
||||
partitions.remove(part)
|
||||
pytest.fail('Unrecognized filesystem')
|
||||
part_detect = 1
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No %s partition detected' % fs.upper())
|
||||
|
@ -333,7 +384,6 @@ def test_mmc_ext4load_ext4write(u_boot_console):
|
|||
fs = 'ext4'
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
except:
|
||||
|
@ -341,42 +391,44 @@ def test_mmc_ext4load_ext4write(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
addr = u_boot_utils.find_ram_base(u_boot_console)
|
||||
devices[x]['addr_%d' % part] = addr
|
||||
size = random.randint(4, 1 * 1024 * 1024)
|
||||
devices[x]['size_%d' % part] = size
|
||||
# count CRC32
|
||||
output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
|
||||
m = re.search('==> (.+?)', output)
|
||||
if not m:
|
||||
pytest.fail('CRC32 failed')
|
||||
expected_crc32 = m.group(1)
|
||||
devices[x]['expected_crc32_%d' % part] = expected_crc32
|
||||
# do write
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
addr = u_boot_utils.find_ram_base(u_boot_console)
|
||||
devices[x]['addr_%d' % part] = addr
|
||||
size = random.randint(4, 1 * 1024 * 1024)
|
||||
devices[x]['size_%d' % part] = size
|
||||
# count CRC32
|
||||
output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
|
||||
m = re.search('==> (.+?)', output)
|
||||
if not m:
|
||||
pytest.fail('CRC32 failed')
|
||||
expected_crc32 = m.group(1)
|
||||
devices[x]['expected_crc32_%d' % part] = expected_crc32
|
||||
|
||||
file = '%s_%d' % ('uboot_test', size)
|
||||
devices[x]['file_%d' % part] = file
|
||||
output = u_boot_console.run_command(
|
||||
'%swrite mmc %d:%s %x /%s %x' % (fs, x, part, addr, file, size)
|
||||
)
|
||||
assert 'Unable to write' not in output
|
||||
assert 'Error' not in output
|
||||
assert 'overflow' not in output
|
||||
expected_text = '%d bytes written' % size
|
||||
assert expected_text in output
|
||||
# do write
|
||||
file = '%s_%d' % ('uboot_test', size)
|
||||
devices[x]['file_%d' % part] = file
|
||||
output = u_boot_console.run_command(
|
||||
'%swrite mmc %d:%s %x /%s %x' % (fs, x, part, addr, file, size)
|
||||
)
|
||||
assert 'Unable to write' not in output
|
||||
assert 'Error' not in output
|
||||
assert 'overflow' not in output
|
||||
expected_text = '%d bytes written' % size
|
||||
assert expected_text in output
|
||||
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x /%s' % (fs, x, part, addr + offset, file)
|
||||
)
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x /%s' % (fs, x, part, addr + offset, file)
|
||||
)
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No %s partition detected' % fs.upper())
|
||||
|
@ -394,7 +446,6 @@ def test_mmc_ext2ls(u_boot_console):
|
|||
fs = 'ext2'
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
except:
|
||||
|
@ -402,12 +453,16 @@ def test_mmc_ext2ls(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
output = u_boot_console.run_command('%sls mmc %d:%s' % (fs, x, part))
|
||||
if 'Unrecognized filesystem type' in output:
|
||||
partitions.remove(part)
|
||||
pytest.fail('Unrecognized filesystem')
|
||||
part_detect = 1
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
output = u_boot_console.run_command(
|
||||
'%sls mmc %d:%s' % (fs, x, part)
|
||||
)
|
||||
if 'Unrecognized filesystem type' in output:
|
||||
partitions.remove(part)
|
||||
pytest.fail('Unrecognized filesystem')
|
||||
part_detect = 1
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No %s partition detected' % fs.upper())
|
||||
|
@ -428,7 +483,6 @@ def test_mmc_ext2load(u_boot_console):
|
|||
fs = 'ext2'
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
except:
|
||||
|
@ -436,23 +490,25 @@ def test_mmc_ext2load(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
addr = devices[x]['addr_%d' % part]
|
||||
size = devices[x]['size_%d' % part]
|
||||
expected_crc32 = devices[x]['expected_crc32_%d' % part]
|
||||
file = devices[x]['file_%d' % part]
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
addr = devices[x]['addr_%d' % part]
|
||||
size = devices[x]['size_%d' % part]
|
||||
expected_crc32 = devices[x]['expected_crc32_%d' % part]
|
||||
file = devices[x]['file_%d' % part]
|
||||
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x /%s' % (fs, x, part, addr + offset, file)
|
||||
)
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x /%s' % (fs, x, part, addr + offset, file)
|
||||
)
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No %s partition detected' % fs.upper())
|
||||
|
@ -469,7 +525,6 @@ def test_mmc_ls(u_boot_console):
|
|||
part_detect = 0
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
for fs in ['fat', 'ext4', 'ext2']:
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
|
@ -478,12 +533,14 @@ def test_mmc_ls(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
output = u_boot_console.run_command('ls mmc %d:%s' % (x, part))
|
||||
if re.search(r'No \w+ table on this device', output):
|
||||
pytest.fail(
|
||||
'%s: Partition table not found %d' % (fs.upper(), x)
|
||||
)
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
output = u_boot_console.run_command('ls mmc %d:%s' % (x, part))
|
||||
if re.search(r'No \w+ table on this device', output):
|
||||
pytest.fail(
|
||||
'%s: Partition table not found %d' % (fs.upper(), x)
|
||||
)
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No partition detected')
|
||||
|
@ -500,7 +557,6 @@ def test_mmc_load(u_boot_console):
|
|||
part_detect = 0
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
for fs in ['fat', 'ext4', 'ext2']:
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
|
@ -509,23 +565,25 @@ def test_mmc_load(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
addr = devices[x]['addr_%d' % part]
|
||||
size = devices[x]['size_%d' % part]
|
||||
expected_crc32 = devices[x]['expected_crc32_%d' % part]
|
||||
file = devices[x]['file_%d' % part]
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
addr = devices[x]['addr_%d' % part]
|
||||
size = devices[x]['size_%d' % part]
|
||||
expected_crc32 = devices[x]['expected_crc32_%d' % part]
|
||||
file = devices[x]['file_%d' % part]
|
||||
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'load mmc %d:%s %x /%s' % (x, part, addr + offset, file)
|
||||
)
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'load mmc %d:%s %x /%s' % (x, part, addr + offset, file)
|
||||
)
|
||||
expected_text = '%d bytes read' % size
|
||||
assert expected_text in output
|
||||
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr + offset)
|
||||
)
|
||||
assert expected_crc32 in output
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No partition detected')
|
||||
|
@ -542,7 +600,6 @@ def test_mmc_save(u_boot_console):
|
|||
part_detect = 0
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
for fs in ['fat', 'ext4', 'ext2']:
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
|
@ -551,18 +608,20 @@ def test_mmc_save(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
addr = devices[x]['addr_%d' % part]
|
||||
size = 0
|
||||
file = devices[x]['file_%d' % part]
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
addr = devices[x]['addr_%d' % part]
|
||||
size = 0
|
||||
file = devices[x]['file_%d' % part]
|
||||
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'save mmc %d:%s %x /%s %d'
|
||||
% (x, part, addr + offset, file, size)
|
||||
)
|
||||
expected_text = '%d bytes written' % size
|
||||
assert expected_text in output
|
||||
offset = random.randrange(128, 1024, 128)
|
||||
output = u_boot_console.run_command(
|
||||
'save mmc %d:%s %x /%s %d'
|
||||
% (x, part, addr + offset, file, size)
|
||||
)
|
||||
expected_text = '%d bytes written' % size
|
||||
assert expected_text in output
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No partition detected')
|
||||
|
@ -589,7 +648,6 @@ def test_mmc_fat_read_write_files(u_boot_console):
|
|||
|
||||
for x in range(0, controllers):
|
||||
if devices[x]['detected'] == 'yes':
|
||||
u_boot_console.run_command('mmc dev %d' % x)
|
||||
try:
|
||||
partitions = devices[x][fs]
|
||||
except:
|
||||
|
@ -597,82 +655,86 @@ def test_mmc_fat_read_write_files(u_boot_console):
|
|||
continue
|
||||
|
||||
for part in partitions:
|
||||
part_detect = 1
|
||||
addr = u_boot_utils.find_ram_base(u_boot_console)
|
||||
count_f = 0
|
||||
addr_l = []
|
||||
size_l = []
|
||||
file_l = []
|
||||
crc32_l = []
|
||||
offset_l = []
|
||||
addr_l.append(addr)
|
||||
for y in mmc_modes:
|
||||
u_boot_console.run_command('mmc dev %d %d %d' % x, part, y)
|
||||
part_detect = 1
|
||||
addr = u_boot_utils.find_ram_base(u_boot_console)
|
||||
count_f = 0
|
||||
addr_l = []
|
||||
size_l = []
|
||||
file_l = []
|
||||
crc32_l = []
|
||||
offset_l = []
|
||||
addr_l.append(addr)
|
||||
|
||||
while count_f < num_files:
|
||||
size_l.append(random.randint(4, 1 * 1024 * 1024))
|
||||
while count_f < num_files:
|
||||
size_l.append(random.randint(4, 1 * 1024 * 1024))
|
||||
|
||||
# CRC32 count
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x %x' % (addr_l[count_f], size_l[count_f])
|
||||
)
|
||||
m = re.search('==> (.+?)', output)
|
||||
if not m:
|
||||
pytest.fail('CRC32 failed')
|
||||
crc32_l.append(m.group(1))
|
||||
|
||||
# Write operation
|
||||
file_l.append('%s_%d_%d' % ('uboot_test', count_f, size_l[count_f]))
|
||||
output = u_boot_console.run_command(
|
||||
'%swrite mmc %d:%s %x %s %x'
|
||||
% (
|
||||
fs,
|
||||
x,
|
||||
part,
|
||||
addr_l[count_f],
|
||||
file_l[count_f],
|
||||
size_l[count_f],
|
||||
# CRC32 count
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x %x' % (addr_l[count_f], size_l[count_f])
|
||||
)
|
||||
)
|
||||
assert 'Unable to write' not in output
|
||||
assert 'Error' not in output
|
||||
assert 'overflow' not in output
|
||||
expected_text = '%d bytes written' % size_l[count_f]
|
||||
assert expected_text in output
|
||||
m = re.search('==> (.+?)', output)
|
||||
if not m:
|
||||
pytest.fail('CRC32 failed')
|
||||
crc32_l.append(m.group(1))
|
||||
|
||||
addr_l.append(addr_l[count_f] + size_l[count_f] + 1048576)
|
||||
count_f += 1
|
||||
|
||||
count_f = 0
|
||||
while count_f < num_files:
|
||||
alignment = int(
|
||||
u_boot_console.config.buildconfig.get(
|
||||
'config_sys_cacheline_size', 128
|
||||
# Write operation
|
||||
file_l.append(
|
||||
'%s_%d_%d' % ('uboot_test', count_f, size_l[count_f])
|
||||
)
|
||||
)
|
||||
offset_l.append(random.randrange(alignment, 1024, alignment))
|
||||
|
||||
# Read operation
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x %s'
|
||||
% (
|
||||
fs,
|
||||
x,
|
||||
part,
|
||||
addr_l[count_f] + offset_l[count_f],
|
||||
file_l[count_f],
|
||||
output = u_boot_console.run_command(
|
||||
'%swrite mmc %d:%s %x %s %x'
|
||||
% (
|
||||
fs,
|
||||
x,
|
||||
part,
|
||||
addr_l[count_f],
|
||||
file_l[count_f],
|
||||
size_l[count_f],
|
||||
)
|
||||
)
|
||||
)
|
||||
assert 'Invalid FAT entry' not in output
|
||||
assert 'Unable to read file' not in output
|
||||
assert 'Misaligned buffer address' not in output
|
||||
expected_text = '%d bytes read' % size_l[count_f]
|
||||
assert expected_text in output
|
||||
assert 'Unable to write' not in output
|
||||
assert 'Error' not in output
|
||||
assert 'overflow' not in output
|
||||
expected_text = '%d bytes written' % size_l[count_f]
|
||||
assert expected_text in output
|
||||
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr_l[count_f] + offset_l[count_f])
|
||||
)
|
||||
assert crc32_l[count_f] in output
|
||||
addr_l.append(addr_l[count_f] + size_l[count_f] + 1048576)
|
||||
count_f += 1
|
||||
|
||||
count_f += 1
|
||||
count_f = 0
|
||||
while count_f < num_files:
|
||||
alignment = int(
|
||||
u_boot_console.config.buildconfig.get(
|
||||
'config_sys_cacheline_size', 128
|
||||
)
|
||||
)
|
||||
offset_l.append(random.randrange(alignment, 1024, alignment))
|
||||
|
||||
# Read operation
|
||||
output = u_boot_console.run_command(
|
||||
'%sload mmc %d:%s %x %s'
|
||||
% (
|
||||
fs,
|
||||
x,
|
||||
part,
|
||||
addr_l[count_f] + offset_l[count_f],
|
||||
file_l[count_f],
|
||||
)
|
||||
)
|
||||
assert 'Invalid FAT entry' not in output
|
||||
assert 'Unable to read file' not in output
|
||||
assert 'Misaligned buffer address' not in output
|
||||
expected_text = '%d bytes read' % size_l[count_f]
|
||||
assert expected_text in output
|
||||
|
||||
output = u_boot_console.run_command(
|
||||
'crc32 %x $filesize' % (addr_l[count_f] + offset_l[count_f])
|
||||
)
|
||||
assert crc32_l[count_f] in output
|
||||
|
||||
count_f += 1
|
||||
|
||||
if not part_detect:
|
||||
pytest.skip('No %s partition detected' % fs.upper())
|
||||
|
|
Loading…
Add table
Reference in a new issue