mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-17 18:34:42 +00:00
test/py: zynqmp_rpu: Fix tcminit mode value
Update the tcminit value to string and number both as per commit
342ccba558
("arm64: zynqmp: Fix tcminit mode value based on argv") and
also adds negative cases based on invalid command sequences.
Signed-off-by: Love Kumar <love.kumar@amd.com>
Link: https://lore.kernel.org/r/48f75577f6735a0d14105658e89b625d45537bb1.1731672024.git.love.kumar@amd.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
This commit is contained in:
parent
6d234a79e9
commit
e013f0c592
1 changed files with 49 additions and 35 deletions
|
@ -70,7 +70,7 @@ def ret_code(u_boot_console):
|
|||
|
||||
# Initialize tcm
|
||||
def tcminit(u_boot_console, rpu_mode):
|
||||
output = u_boot_console.run_command('zynqmp tcminit %s' % rpu_mode)
|
||||
output = u_boot_console.run_command(f'zynqmp tcminit {rpu_mode}')
|
||||
assert 'Initializing TCM overwrites TCM content' in output
|
||||
return ret_code(u_boot_console)
|
||||
|
||||
|
@ -89,6 +89,13 @@ def disable_cpus(u_boot_console, cpu_nums):
|
|||
for num in cpu_nums:
|
||||
u_boot_console.run_command(f'cpu {num} disable')
|
||||
|
||||
# Get random RPU mode between string and integer
|
||||
def get_rpu_mode(rpu_mode):
|
||||
if rpu_mode == 0 or rpu_mode == 'lockstep':
|
||||
return random.choice(['lockstep', 0])
|
||||
elif rpu_mode == 1 or rpu_mode == 'split':
|
||||
return random.choice(['split', 1])
|
||||
|
||||
# Load apps on RPU cores
|
||||
def rpu_apps_load(u_boot_console, rpu_mode):
|
||||
apps, procs, cpu_nums, addrs, outputs, tftp_addrs = get_rpu_apps_env(
|
||||
|
@ -98,20 +105,20 @@ def rpu_apps_load(u_boot_console, rpu_mode):
|
|||
test_net.test_net_setup_static(u_boot_console)
|
||||
|
||||
try:
|
||||
assert tcminit(u_boot_console, rpu_mode).endswith('0')
|
||||
assert tcminit(u_boot_console, get_rpu_mode(rpu_mode)).endswith('0')
|
||||
|
||||
for i in range(len(apps)):
|
||||
if rpu_mode == 'lockstep' and procs[i] != 'rpu0':
|
||||
continue
|
||||
|
||||
load_app_ddr(u_boot_console, tftp_addrs[i], apps[i])
|
||||
rel_addr = int(addrs[i] + 0x3C)
|
||||
rel_addr = hex(int(addrs[i] + 0x3C))
|
||||
|
||||
# Release cpu at app load address
|
||||
cpu_num = cpu_nums[i]
|
||||
cmd = 'cpu %d release %x %s' % (cpu_num, rel_addr, rpu_mode)
|
||||
cmd = f'cpu {cpu_num} release {rel_addr} {rpu_mode}'
|
||||
output = u_boot_console.run_command(cmd)
|
||||
exp_op = f'Using TCM jump trampoline for address {hex(rel_addr)}'
|
||||
exp_op = f'Using TCM jump trampoline for address {rel_addr}'
|
||||
assert exp_op in output
|
||||
assert f'R5 {rpu_mode} mode' in output
|
||||
u_boot_console.wait_for(outputs[i])
|
||||
|
@ -133,16 +140,13 @@ def test_zynqmp_rpu_app_load_negative(u_boot_console):
|
|||
u_boot_console)
|
||||
|
||||
# Invalid commands
|
||||
u_boot_console.run_command('zynqmp tcminit mode')
|
||||
assert ret_code(u_boot_console).endswith('1')
|
||||
|
||||
rand_str = ''.join(random.choices(string.ascii_lowercase, k=4))
|
||||
u_boot_console.run_command('zynqmp tcminit %s' % rand_str)
|
||||
assert ret_code(u_boot_console).endswith('1')
|
||||
|
||||
rand_num = random.randint(2, 100)
|
||||
u_boot_console.run_command('zynqmp tcminit %d' % rand_num)
|
||||
assert ret_code(u_boot_console).endswith('1')
|
||||
inv_modes = ['mode', rand_str, rand_num, 'splittt', 'locksteppp', '00', 11]
|
||||
|
||||
for mode in inv_modes:
|
||||
u_boot_console.run_command(f'zynqmp tcminit {mode}')
|
||||
assert ret_code(u_boot_console).endswith('1')
|
||||
|
||||
test_net.test_net_dhcp(u_boot_console)
|
||||
if not test_net.net_set_up:
|
||||
|
@ -150,56 +154,66 @@ def test_zynqmp_rpu_app_load_negative(u_boot_console):
|
|||
|
||||
try:
|
||||
rpu_mode = 'split'
|
||||
assert tcminit(u_boot_console, rpu_mode).endswith('0')
|
||||
assert tcminit(u_boot_console, get_rpu_mode(rpu_mode)).endswith('0')
|
||||
|
||||
inv_modes += [0, 1]
|
||||
for i in range(len(apps)):
|
||||
load_app_ddr(u_boot_console, tftp_addrs[i], apps[i])
|
||||
|
||||
# Run in split mode at different load address
|
||||
rel_addr = int(addrs[i]) + random.randint(200, 1000)
|
||||
rel_addr = hex(int(addrs[i]) + random.randint(200, 1000))
|
||||
cpu_num = cpu_nums[i]
|
||||
cmd = 'cpu %d release %x %s' % (cpu_num, rel_addr, rpu_mode)
|
||||
cmd = f'cpu {cpu_num} release {rel_addr} {rpu_mode}'
|
||||
output = u_boot_console.run_command(cmd)
|
||||
exp_op = f'Using TCM jump trampoline for address {hex(rel_addr)}'
|
||||
exp_op = f'Using TCM jump trampoline for address {rel_addr}'
|
||||
assert exp_op in output
|
||||
assert f'R5 {rpu_mode} mode' in output
|
||||
assert not outputs[i] in output
|
||||
|
||||
# Invalid rpu mode
|
||||
rand_str = ''.join(random.choices(string.ascii_lowercase, k=4))
|
||||
cmd = 'cpu %d release %x %s' % (cpu_num, rel_addr, rand_str)
|
||||
output = u_boot_console.run_command(cmd)
|
||||
assert exp_op in output
|
||||
assert f'Unsupported mode' in output
|
||||
assert not ret_code(u_boot_console).endswith('0')
|
||||
for mode in inv_modes:
|
||||
cmd = f'cpu {cpu_num} release {rel_addr} {mode}'
|
||||
output = u_boot_console.run_command(cmd)
|
||||
assert exp_op in output
|
||||
assert f'Unsupported mode' in output
|
||||
assert not ret_code(u_boot_console).endswith('0')
|
||||
|
||||
# Switch to lockstep mode, without disabling CPUs
|
||||
rpu_mode = 'lockstep'
|
||||
u_boot_console.run_command('zynqmp tcminit %s' % rpu_mode)
|
||||
assert not ret_code(u_boot_console).endswith('0')
|
||||
output = u_boot_console.run_command(
|
||||
f'zynqmp tcminit {get_rpu_mode(rpu_mode)}'
|
||||
)
|
||||
assert 'ERROR: ' in output
|
||||
|
||||
# Disable cpus
|
||||
disable_cpus(u_boot_console, cpu_nums)
|
||||
|
||||
# Switch to lockstep mode, after disabling CPUs
|
||||
output = u_boot_console.run_command('zynqmp tcminit %s' % rpu_mode)
|
||||
output = u_boot_console.run_command(
|
||||
f'zynqmp tcminit {get_rpu_mode(rpu_mode)}'
|
||||
)
|
||||
assert 'Initializing TCM overwrites TCM content' in output
|
||||
assert ret_code(u_boot_console).endswith('0')
|
||||
|
||||
# Run lockstep mode for RPU1
|
||||
# Run lockstep mode for RPU1/RPU0
|
||||
for i in range(len(apps)):
|
||||
if procs[i] == 'rpu0':
|
||||
continue
|
||||
|
||||
load_app_ddr(u_boot_console, tftp_addrs[i], apps[i])
|
||||
rel_addr = int(addrs[i] + 0x3C)
|
||||
rel_addr = hex(int(addrs[i] + 0x3C))
|
||||
cpu_num = cpu_nums[i]
|
||||
cmd = 'cpu %d release %x %s' % (cpu_num, rel_addr, rpu_mode)
|
||||
cmd = f'cpu {cpu_num} release {rel_addr} {rpu_mode}'
|
||||
output = u_boot_console.run_command(cmd)
|
||||
exp_op = f'Using TCM jump trampoline for address {hex(rel_addr)}'
|
||||
exp_op = f'Using TCM jump trampoline for address {rel_addr}'
|
||||
assert exp_op in output
|
||||
assert f'R5 {rpu_mode} mode' in output
|
||||
assert u_boot_console.p.expect([outputs[i]])
|
||||
|
||||
if procs[i] == 'rpu1':
|
||||
assert 'Lockstep mode should run on ZYNQMP_CORE_RPU0' in output
|
||||
assert not ret_code(u_boot_console).endswith('0')
|
||||
elif procs[i] == 'rpu0':
|
||||
assert f'R5 {rpu_mode} mode' in output
|
||||
u_boot_console.wait_for(outputs[i])
|
||||
assert ret_code(u_boot_console).endswith('0')
|
||||
else:
|
||||
assert False, 'ERROR: Invalid processor!'
|
||||
finally:
|
||||
disable_cpus(u_boot_console, cpu_nums)
|
||||
# This forces the console object to be shutdown, so any subsequent test
|
||||
|
|
Loading…
Add table
Reference in a new issue