tests/boards: Add intel_adsp board integration/smoke test
As Zephyr begins to absorb drivers for these platforms that had previously been managed by the SOF app, there's a need for a rapid board-specific smoke test to use during development. This starts with the smp_boot_delay test (itself a unit test for a SOF-derived feature) and adds a host IPC case (that needs to match code in cavstool.py on the other side of the PCI bus!). It will grow more features over time as needed. Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
This commit is contained in:
parent
bdce0a5742
commit
318aecb86f
8 changed files with 292 additions and 1 deletions
|
@ -82,7 +82,12 @@ def map_regs():
|
|||
(bar4_mem, bar4_mmap) = bar_map(pcidir, 4)
|
||||
dsp = Regs(bar4_mem)
|
||||
dsp.ADSPCS = 0x00004
|
||||
dsp.HIPCTDR = 0x00040 if cavs15 else 0x000c0
|
||||
dsp.HIPCTDA = 0x000c4 # 1.8+ only
|
||||
dsp.HIPCTDD = 0x00044 if cavs15 else 0x000c8
|
||||
dsp.HIPCIDR = 0x00048 if cavs15 else 0x000d0
|
||||
dsp.HIPCIDA = 0x000d4 # 1.8+ only
|
||||
dsp.HIPCIDD = 0x0004c if cavs15 else 0x000d8
|
||||
dsp.SRAM_FW_STATUS = 0x80000 # Start of first SRAM window
|
||||
dsp.freeze()
|
||||
|
||||
|
@ -246,7 +251,7 @@ def load_firmware(fw_file):
|
|||
| (0x01 << 24) # type = PURGE_FW
|
||||
| (1 << 14) # purge_fw = 1
|
||||
| (stream_idx << 9)) # dma_id
|
||||
log.info(f"Sending IPC command, HIPCR = 0x{ipcval:x}")
|
||||
log.info(f"Sending IPC command, HIPIDR = 0x{ipcval:x}")
|
||||
dsp.HIPCIDR = ipcval
|
||||
|
||||
log.info(f"Starting DMA, FW_STATUS = 0x{dsp.SRAM_FW_STATUS:x}")
|
||||
|
@ -315,6 +320,32 @@ def winstream_read(last_seq):
|
|||
if start1 == start and seq1 == seq:
|
||||
return (seq, result.decode("utf-8"))
|
||||
|
||||
async def ipc_delay_done():
|
||||
await asyncio.sleep(0.1)
|
||||
dsp.HIPCTDA = 1<<31
|
||||
|
||||
# Super-simple command language, driven by the test code on the DSP
|
||||
def ipc_command(data, ext_data):
|
||||
send_msg = False
|
||||
done = True
|
||||
if data == 0: # noop, with synchronous DONE
|
||||
pass
|
||||
elif data == 1: # async command: signal DONE after a delay (on 1.8+)
|
||||
if not cavs15:
|
||||
done = False
|
||||
asyncio.ensure_future(ipc_delay_done())
|
||||
elif data == 2: # echo back ext_data as a message command
|
||||
send_msg = True
|
||||
else:
|
||||
log.warning(f"cavstool: Unrecognized IPC command 0x{data:x} ext 0x{ext_data:x}")
|
||||
|
||||
dsp.HIPCTDR = 1<<31 # Ack local interrupt, also signals DONE on v1.5
|
||||
if done and not cavs15:
|
||||
dsp.HIPCTDA = 1<<31 # Signal done
|
||||
if send_msg:
|
||||
dsp.HIPCIDD = ext_data
|
||||
dsp.HIPCIDR = (1<<31) | ext_data
|
||||
|
||||
async def main():
|
||||
global hda, sd, dsp, hda_ostream_id
|
||||
try:
|
||||
|
@ -345,6 +376,11 @@ async def main():
|
|||
if output:
|
||||
sys.stdout.write(output)
|
||||
sys.stdout.flush()
|
||||
if dsp.HIPCTDR & 0x80000000:
|
||||
ipc_command(dsp.HIPCTDR & ~0x80000000, dsp.HIPCTDD)
|
||||
if dsp.HIPCIDA & 0x80000000:
|
||||
dsp.HIPCIDA = 1<<31 # must ACK any DONE interrupts that arrive!
|
||||
|
||||
|
||||
ap = argparse.ArgumentParser(description="DSP loader/logger tool")
|
||||
ap.add_argument("-q", "--quiet", action="store_true",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue