Commit graph

1393 commits

Author SHA1 Message Date
Janne Grunau
dbafd058cf m1n1: Handle BootArgs revisions 1, 2 and 3
Handle revision 0 as revision 1.

Signed-off-by: Janne Grunau <j@jannau.net>
2024-11-25 07:03:59 +09:00
Daniel Berlin
750f3307f0 m1n1.hv: Add M3 and M3 Max chip IDs
Signed-off-by: Daniel Berlin <dberlin@dberlin.org>
Signed-off-by: Janne Grunau <j@jannau.net>
2024-11-03 19:16:43 +09:00
Janne Grunau
dd74f20bf5 proxy.hv: Determine boot CPU by cpu[N].state ADT property
Signed-off-by: Daniel Berlin <dberlin@dberlin.org>
Co-Developed-by: Daniel Berlin <dberlin@dberlin.org>
Signed-off-by: Janne Grunau <j@jannau.net>
2024-11-03 19:16:43 +09:00
Janne Grunau
eb8430ba7e tools/chainload: Determine boot CPU by cpu[N].state ADT property
Signed-off-by: Janne Grunau <j@jannau.net>
2024-11-03 19:16:43 +09:00
Nick Chan
9ca6d1c16f exceptions: add el3_call()
Signed-off-by: Nick Chan <towinchenmi@gmail.com>
2024-10-31 01:32:39 +09:00
Ayrton Munoz
e98f3a3525 proxyclient: Modify FreeBSD loader to use standard U-Boot bootefi cmd
The FreeBSD script added in #185 required patching u-boot since it specified the
loader base/size in a non-standard way. This changes the way arguments are
passed to the bootefi command so it works with the asahi u-boot fork which I've
been using. I also changed the case where the loader isn't specified to have
u-boot boot from the nvme since I have that driver functional enough to have it
mount the root fs now.

Signed-off-by: Ayrton Munoz <a.munoz3327@gmail.com>
2024-10-31 01:26:49 +09:00
Eileen Yoon
d649c8803f aop: Add lpai + voicetrigger test (doesn't work)
I'm getting garbage from the low-power audio input (lpai) mic which
exists solely for voicetrigger. The garbage specifically is `61 7b`
repeated. Obviously no voicetrigger report because there's nothing
useful in lpai output. I'm suspecting its an mca/clock issue (maybe even
SEP/permissions) because there's nothing suspicious from the aop RX/TX
IPC side.

```
[audio.audio] Report REPORT/0xee #0
[audio.audio] unknown report: 0xee
00000000  c5 96 20 01 00 00 00 00  9c f5 10 00 00 00 00 00  |.. .............|
00000010  b8 07 00 00 20 30 6e 69  01 00 00 00 43 02 00 00  |.... 0ni....C...|
00000020  00 00 00 00 c5 96 20 01  00 00 00 00 00 00 00 00  |...... .........|
00000030  a4 07 00 00 9a 07 00 00  61 7b 61 7b 61 7b 61 7b  |........a{a{a{a{|
00000040  61 7b 61 7b 61 7b 61 7b  61 7b 61 7b 61 7b 61 7b  |a{a{a{a{a{a{a{a{|
00000050  *
000007b0  61 7b 61 7b 61 7b 61 7b                           |a{a{a{a{        |
```

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
5c5d3966f3 afk.epic: Expose ep function to call send_cmd()
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
48a92026cd aop: Support Ambient Light Sensor (ALS) endpoint
```
[syslog] * [ALSCT720.cpp:967]updateDynamicIntegrationParameters allAbove=0, anyBelow=1, threshold hit=0, lev
> 02:0x50000000000005 (TYPE=0x5, INDEX=0x5)
< 24:0x85000000000000
[als.als] Report REPORT/0xc4 #0
[als.als] Container:
    unk0 = 0xEC
    sequence = 4
    timestamp = 0x0000000019352268
    red = 11
    green = 18
    blue = 11
    clear = 40
    lux = 7.277451038360596
    unk_zero = 0
    status = 3
    gain = 256
    unk3 = 68
    unk4 = 35
    unk5 = 17874
    integration_time = 378080
< 02:0x50000000000006
[syslog] * [ALSCT720.cpp:454]handleInterrupt: result: 0 (status=0x3)
> 02:0x50000000000006 (TYPE=0x5, INDEX=0x6)
```

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
2b62c08619 aop: Stream high-power mic samples to ADMAC
Output audio format still unknown, not sure if it's garbage (see lpai
commit) or some weird packed float encoding I'm not figuring out.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
0ebc339761 aop.ipc: Use print as default logger
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
33c4591ff3 aop.ipc: Rename & fill in more property keys
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
9202652908 aop.ipc: Fill in more known audio config fields
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
a4fb7af657 hv/trace_dcp: Fix afk/epic API breakage
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
7298f42ce7 hv/trace_aop: Handle afk/epic API breakage
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
eebff23b5a afk.rbep: s/BLOCK_SIZE/BLOCK_STEP/
Otherwise the previous commit is way too confusing.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
476c31e973 afk.rbep: Bootstrap ringbuf block size at runtime
Make the ringbuffer class robust to various block sizes to generalize to
both DCP and AOP.

The first three blocks of the ringbuffer is reserved for exchanging size,
rptr, wptr:

```
           bufsize      unk
00000000  00007e80 00070006 00000000 00000000 00000000 00000000 00000000 00000000
00000020  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000040  *   rptr
00000080  00000600 00000000 00000000 00000000 00000000 00000000 00000000 00000000
000000a0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
000000c0  *   wptr
00000100  00000680 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000120  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000140  *
```

Each block is spread out by some block_size multiple of 0x40 (step). The
0th block holds the size of the ringbuffer contents, the 1st block holds
the rptr, and the 2nd block holds the wptr. The actual contents of the
ringbuffer starts after the first three blocks, which will be
collectively called the "header".

However, this block_size isn't constant. DCP seems to consistently use
0x40, but AOP can use both 0x40/0x80. Since we're not given the block_size,
so wemust bootstrap it. Recall we are given the total size of the
rinbuffer in the mailbox message. Since we're always given the size of
the ringbuffer `bufsize` at offset +block_size * 0 (or simply 0), and we
can find the header size by subtracting `bufsize` from the total size.
Since we also know that the header is always 3 blocks wide, we can
divide the header size by 3 to obtain the block_size.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
e76fc526e9 afk.epic: Support sending v2 EPIC subheader
Default to version=4 as to not break DCP

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
71c59d9894 afk.epic: Create API to register report handlers
Because AOP gets a lot of reports ;)

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
e430874a2a afk.epic: Support sending direct notify messages
Much simpler than the command messages. We just write directly into the
TX ringbuffer.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
5f59c5460c afk.epic: Handle EPIC replies by subtype
DCP only gets two reply types: a u32 retcode or a command reply. It
previously checked for retcode by checking length(data) == 4 and
assuming command otherwise. AOP can get other reply types (e.g. STRING
after probing device). It actually sends us the reply subtype in the
EPICSubHeader, so use that information and handle replies accordingly.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
6426bdf6a5 afk.epic: Enum for EPICSubtype & service init v2
Consistently use an enum for EPICSubtype (used later) and support the v2
EPICService intializer protocol used by AOP.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
bf5a3a6e98 m1n1.fw.afk: Add more hello handlers used by aop
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
eb3710edb1 experiments/dcp: Make dcp*.py scripts run again
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
8fd1e4bef4 m1n1.adt: Parse aop audio pdm ratios
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
0ac31ec584 m1n1.utils: Strip before splitting on chexundump()
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
6e8d16aaa1 m1n1.fw.aop: Add aop client and ep boilerplate
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Eileen Yoon
65501cdd70 m1n1.fw.aop: Fix 13.5 bootargs ABI break + rename
Move from __init__.py to base.py so it can be imported.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-10-31 01:24:36 +09:00
Christian Gmeiner
9d445d8291 hw/aes.py: Fix python error after 183991ca19
Fixes: 183991ca19 ("m1n1.hw.dart: Hide all DART variants behind common interface")
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
2024-09-25 08:32:39 +09:00
Janne Grunau
5c8c3ccc7b m1n1: hv: Use Apple implementation specific ACTLR_EL12 on M1*
Fixes: 99571e5 ("hv: Use architectural ACTLR_EL12 on M2+")
Signed-off-by: Janne Grunau <j@jannau.net>
2024-09-25 08:22:45 +09:00
Asahi Lina
99571e5308 hv: Use architectural ACTLR_EL12 on M2+
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-09-22 01:09:43 +09:00
Hector Martin
94a6b50684 m1n1.find_regs: Fix register names
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-08-11 20:21:21 +09:00
Asahi Lina
e41d51d222 m1n1.trace.agx: Decode VDM on G14X
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-06-15 16:46:04 +09:00
Asahi Lina
9d9bcd564c m1n1.proxyutils: Add v13_5
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-06-15 16:46:04 +09:00
Asahi Lina
52e1855c2a m1n1.trace.agx: Perfctr stuff
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-06-15 16:46:04 +09:00
Asahi Lina
c602bfd72e m1n1.constructutils: Don't spam
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-06-15 16:46:04 +09:00
Asahi Lina
97e27d8a11 m1n1.agx.initdata: Updates
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-06-15 16:46:04 +09:00
Asahi Lina
4d9ae1a907 m1n1.trace.agx: Helper stuff & misc fixes
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-06-15 16:46:04 +09:00
Asahi Lina
b50e29bcf6 m1n1.fw.agx: Helper and sampler stuff
Signed-off-by: Asahi Lina <lina@asahilina.net>
2024-06-15 16:46:04 +09:00
Hector Martin
ebec2d362d experiments/dmp.py: DMP/GoFetch bug test experiment
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-04-09 11:06:46 +09:00
Hector Martin
af6ca83187 proxy: Add EL0 SMP ops
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-04-09 09:20:40 +09:00
Eileen Yoon
3b9a71422e avd: Make experiment display an option
Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-01-11 16:20:49 +09:00
Eileen Yoon
16a6b41c98 m1n1/avd: Add initial AVD driver prototype/tracer
Not much to see here, most of the juice is over at:

    https://github.com/eiln/avd.git

The kernel driver (m1n1.fw.avd) only really pipes the instruction stream
into the respective hardware FIFOs and then hushes the interrupt lines.
Most of the work (bitstream syntax parsing and instruction generation)
is done in the avid repo above.

I'm hoping to keep this userland-kernel separation in the very imminent
actual driver.

experiments/avd.py: Decode on the command line. Read file for usage.
experiments/avd_e.py: Decode via emulated instruction stream.
experiments/avd_f.py: Decode via Cortex-M3 firmware (for debugging).
hv/trace_avd.py: Tracer. Read file for usage.
m1n1/fw/avd/__init__.py: Driver base class (power, tunables, etc).
m1n1/fw/avd/decoder.py: Codec-specific decode logic + mini media player.

Signed-off-by: Eileen Yoon <eyn@gmx.com>
2024-01-11 16:20:49 +09:00
Josh Soref
e52eaf4f43 Spelling fixes
Correct misspellings identified by the check-spelling action.

Signed-off-by: Josh Soref <jsoref@gmail.com>
2023-12-13 16:50:42 +09:00
Hector Martin
71125063e4 hv/trace_mtp.py: New experiment
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-12-03 19:36:22 +09:00
Daniel Berlin
b50b17ceb5 Support non-constant unknown values in adt.py
On m3, these previouly expected-to-be-constant fields have exciting
non-constant values.  This updates adt.py to allow them to be
non-constant.  The second field is also really a flags field,
though i could not tell you all the flags involved.

Signed-off-by: Daniel Berlin <dberlin@dberlin.org>
2023-12-03 17:43:04 +09:00
Janne Grunau
736acde3e1 m1n1.fw.dcp.ipc: Add D592 - abort_swap_ap_gated
Also fixes a type for set_idle_caching_state_ap.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-11-27 13:33:08 +09:00
Janne Grunau
2b92f4b1c3 hv/dcp: Add OOB ASYNC call context
Only observed with dcp/dptx in linux after initialisation and reset in
m1n1. On the initial startup dcp sends two D576 (hotPlug_notify_gated)
presumendly due to state confusion due to  the multiple dptx
connections.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-11-27 13:33:08 +09:00
Daniel Berlin
b48c6d2ea4 Add ipython shell to proxyclient
Same functionality as the readline shell, but based on
ipython so that it has nicer help/autocomplete/etc

Signed-off-by: Daniel Berlin <dberlin@dberlin.org>
2023-11-27 13:30:27 +09:00
Alyssa Ross
93cce40476 m1n1.adt: introduce yet another DAPFT8110 variant
When I tried to use the proxyclient shell, I got:
"Exception parsing /device-tree/arm-io/dart-dcp.dapf-instance-0 value […]"

I laid out the hex dump in a text editor, and added line breaks every
56 bytes (the former size of DAPFT8110B):

0000703b020000000080713b0200000020000000000000000000000000000000000000000000000000000000000000000003010000000000
40723b020000000080723b020000002000000000000000000000000000000000000000000000000000000000000000000301000000000000
003b020000007f73073b02000000200000000000000000000000000000000000000000000000000000000000000000030100000000000028
3d020000000040283d020000002000000000000000000000000000000000000000000000000000000000000000000301000000000080003d
020000000380003d020000002000000000000000000000000000000000000000000000000000000000000000000301000000000000e03f02
000000ffffef3f0200000020000000000000000000000000000000000000000000000000000000000000000003010000000000c0403e0200
0000ffff403e020000002000000000000000000000000000000000000000000000000000000000000000000301000000000000433e020000
00ff3f433e020000002000000000000000000000000000000000000000000000000000000000000000000301000000000000783d02000000
03417a3d0200000020000000000000000000000000000000000000000000000000000000000000000003010000000000003c3b0200000000
003e3b020000002000000000000000000000000000000000000000000000000000000000000000000301000000000000403c02000000ffff
473c020000002000000000000000000000000000000000000000000000000000000000000000000301000000000000103c020000004f0c10
3c020000002000000000000000000000000000000000000000000000000000000000000000000301000000000000703d020000000341723d
02000000200000000000000000000000000000000000000000000000000000000000000000030100000000

Looking at the patterns shared by all struct instances
(r0h = 3, r0l = 1, for example), each row appeared to be shifted one
byte to the left compared to its predecessor.  This suggests that
DAPFT8110B has only three extra bytes of padding compared to
DAPFT8110.

So, here I introduce DAPFT8110C, a new variant, one byte shorter than
DAPFT8110B.  Unlike DAPFT8110, there's no flag to differentiate
between these two variants, so we just have to guess based on what
divisor makes whole structs.

Signed-off-by: Alyssa Ross <hi@alyssa.is>
2023-11-14 18:59:27 +09:00