Commit graph

2237 commits

Author SHA1 Message Date
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
83ac04c1a9 fb: Fix FB junk leftover from stage1 in stage2
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-09-18 00:00:22 +09:00
Hector Martin
9741ff9b97 fb: Fix UAF after fb shutdown
fb_console_reserve_lines() in mmu_shutdown() was causing a blit from the
freed framebuffer, putting heap metadata junk at the top left corner.

Signed-off-by: Hector Martin <marcan@marcan.st>
2024-09-17 23:59:29 +09:00
Hector Martin
cdb6d41aa2 display: Add workaround for Sequoia DCP handoff bug
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-09-17 23:42:42 +09:00
Hector Martin
793ca17209 firmware: Add 15.0 and function to check SFW against a range
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-09-17 23:42:05 +09:00
Hector Martin
8a122f86c4 exception: Fix EL1 exception return path
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-08-11 20:21:21 +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
Janne Grunau
421dfa4252 dcp: Fix firmware mapping check on t8103/t600x
t8103 and t600x use "asc-dram-mask" in iop-dcp-nub to mask bits out of
DMA addresses. This needs to be used in the firmware mappings
check/remap since the segments have maskable bits sets.

Fixes: 8332e24 ("dcp: Undo carnage from bad stage1 DART code")
Signed-off-by: Janne Grunau <j@jannau.net>
2024-05-18 14:51:24 +09:00
Janne Grunau
56feda2b5e dart: Fix parsing of variable lenght "vm-base" property
Signed-off-by: Janne Grunau <j@jannau.net>
2024-05-18 14:51:24 +09:00
Hector Martin
dfffdf6609 display: Avoid placing FBs at IOVA 0
Also search harder for a matching dcp/disp iova, in case it matters.

Fixes: #391
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 10:22:55 +09:00
Hector Martin
1841d88dcd clang-format: Gate out 18.1.6 changes
So `make format` in Fedora doesn't disagree with CI...

Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 02:18:29 +09:00
Hector Martin
4f8ddca920 clang-format 18.1.6 changes
This isn't in Fedora yet...

Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 02:16:14 +09:00
Hector Martin
c8afe3412e clang-format: Show changes as diff in workflow
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 02:12:39 +09:00
Hector Martin
387cc2ecec kboot_gpu: Fix warnings
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 02:05:12 +09:00
Hector Martin
657654ac09 clang-format 18
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 02:05:12 +09:00
Hector Martin
8332e2454c dcp: Undo carnage from bad stage1 DART code
A bug in our DART code was wiping and aliasing page tables. Go through
the segment ranges for DCP and redo any missing mappings. If we redid
any mappings, then PMGR reset DCP so it can recover from having faulted
on the previous boot.

Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 01:57:34 +09:00
Hector Martin
c83ad3fc4d dart: Fix silent logic for dart_translate()
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 01:56:57 +09:00
Hector Martin
8c107bf80a dart: Introduce dart_map_flags() and dart_translate_silent()
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 01:56:32 +09:00
Hector Martin
58090bb58c dart: Fix L2 table allocation & half-fix carnage from stage1
We were assuming L2 tables were always allocated consecutively at low
IOVAs. 14.5 broke this, causing all kinds of explosions.

The new code looks for the first unused L2 PT, and also checks whether
the first 2 entries are aliased to latter entries (which is what the old
code caused). If so, it clears them and reallocates them. This doesn't
undo the PT wipe from stage1 though, so downstream code has to redo any
missing mappings...

Signed-off-by: Hector Martin <marcan@marcan.st>
2024-05-17 01:54:30 +09:00
Janne Grunau
0c64b6b4c1 sio: Rework sio init for dual die SoCs
Use a struct instead of global variable to hold the necessary setup
information. This allows executing the setup for both sio instances.
In addition change the status to "okay" so that sio can remain disabled
if the setup fails.

Signed-off-by: Janne Grunau <j@jannau.net>
2024-04-29 16:46:20 +09:00
Hector Martin
396d1d7207 rust: Switch to new core::ffi types
CStr is now here. This gets rid of three vendored deps, whee.

Signed-off-by: Hector Martin <marcan@marcan.st>
2024-04-09 13:20:00 +09:00
Hector Martin
313547db0f rust: Update uuid to 1.7.0
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-04-09 13:04:02 +09:00
Hector Martin
95d67cf9d2 Update to clang-format 17
Signed-off-by: Hector Martin <marcan@marcan.st>
2024-04-09 12:57:55 +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
Hector Martin
90eef7223e Fix condition for SPMI HPM
Fixes: 9065c700df ("Workaround lack of SPMI support in usb.c")
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-12-17 19:09:06 +09:00
Janne Grunau
11b9d4475b display: Fix pmgr device id for t6022 dcpext4
Signed-off-by: Janne Grunau <j@jannau.net>
2023-12-16 17:17:37 +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
Janne Grunau
c11a012697 nvme: t6022: Derive die from nvme_base address
For some reason the ans node for t602x devices has an empty
"clock-gates" property. Use the MMIO address instead to determine on
which die the device is.

Fixes: 34f49a5 ("nvme: assume die 0 if clock-gates not set")
Signed-off-by: Janne Grunau <j@jannau.net>
2023-12-12 10:42:26 +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
Gregor Haas
a26e439489 Add option for building verbosely
Signed-off-by: Gregor Haas <gregorhaas1997@gmail.com>
2023-12-03 17:45:52 +09:00
Daniel Berlin
9065c700df Workaround lack of SPMI support in usb.c
M3+ have a new USB power controller and it works over SPMI.
However, the USB ports work (at least within m1n1) if we ignore
this and just init the phys directly.

This detects the case where we are not on an I2C based USB machine,
and initializes the phys directly.

Eventually we should support SPMI properly.

Signed-off-By: Daniel Berlin <dberlin@dberlin.org>
2023-12-03 17:44:50 +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
Daniel Berlin
c45da55256 More support for M3 chips
The UART base has moved from the M2 chips.
Everest settings introduce some changes to unknown registers
The MCC data has changed as well.

There is a drive-by change where I discovered what some of the unknown
HID18 bits are and documented them.

Signed-off-by: Daniel Berlin <dberlin@dberlin.org>
2023-12-03 17:37:20 +09:00
Daniel Berlin
9f846b1e41 Support boot CPU not being 0.
Right now, we assume the boot cpu is cpu0.  That is not true on m3 max,
where it is CPU 4.

To figure out which CPU is the boot CPU, we check to see which CPU
is running before we start any other CPUs, and record the MPIDR/idx.

Without this patch, four issues happen on m3 max:

1. We try to start the boot CPU again, crashing it
2. We skip the real CPU 0
3. We start m1n1 again on CPU0 when we boot it
4. We enable interrupts on CPU0 because we think it's the primary CPU.

Signed-off-by: Daniel Berlin <dberlin@dberlin.org>
2023-12-03 17:23:13 +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
Janne Grunau
5006e083c7 display: Use dcpext0 for HDMI out on t8112/t6020/t6021
dcpext0 behaves like dcp on M1* devices and can sleep after display
init. This has the advantage of not breaking macOS when starting with an
initialized display.
dcpext* are according to Apple's tech specs slightly more powerful than
dcp. They are advertised as 6K at 60Hz while dcp seems to be limited to
5K at 60Hz.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-11-27 13:33:08 +09:00
Janne Grunau
5245fc6a58 dcp: Pass the die number for dptx' connectTo method
Apperently just informative as display init on M2 Ultra in m1n1 worked
as expected despite passing '0' as die number.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-11-27 13:33:08 +09:00
Janne Grunau
ba69847862 display: Add NO_DISPLAY build config to skip display init
Required for stage 1 loader to allow chainloaded display/dcp experiments
to start with the state left by iboot.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-11-27 13:33:08 +09:00
Janne Grunau
30485ead25 build: Increase stack usage warning to 2048
Same value as the arm64 kernel build uses.
Avoids following warning:

 | src/tinf/tinflate.c: In function ‘tinf_uncompress’:
 | src/tinf/tinflate.c:559:5: warning: stack usage is 1712 bytes [-Wstack-usage=]
 |   559 | int tinf_uncompress(void *dest, unsigned int *destLen,

Signed-off-by: Janne Grunau <j@jannau.net>
2023-11-27 13:33:08 +09:00