Commit graph

1953 commits

Author SHA1 Message Date
Asahi Lina
f7639885ce fw.agx.channels: Don't crash if meta_fn is None
Signed-off-by: Asahi Lina <lina@asahilina.net>
2023-06-27 18:35:00 +09:00
Hector Martin
88df8a6335 cpufreq: Initialize a bunch more stuff
At least some of this fixes hangs when overheating on j413. We still
don't know exactly what most of this is, but let's try to get closet to
the init that macOS does.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-06-04 20:10:39 +09:00
Hector Martin
5cd985b4db cpufreq: Redefine the dvmr flag as pcluster
We're going to use this later.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-06-04 17:03:58 +09:00
Hector Martin
7ce414224c pmgr: Add a helper to test for pmgr features in the ADT
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-06-04 17:02:48 +09:00
Hector Martin
1f154402a4 cpufreq: Drop the DVMR stuff
This is enabled by iBoot in all versions we support.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-06-04 17:02:44 +09:00
Hector Martin
a0d2ed20be payload: Do cpufreq init before smp_start_secondaries()
This also requires exporting this to the proxy so linux.py can use it.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-06-04 15:56:42 +09:00
Hector Martin
4124485265 hv: Make breadcrumbs per-CPU and introduce panic handler
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-06-03 12:47:39 +09:00
Hector Martin
2c531aa7ae hv_exc: Remove PMC0 CNT enable shadowing from fast sysreg path
This is outside the hv_exc_entry/hv_exc_exit bracketing now, so modify
the register directly. We only stop the PMCs when we go into the
slowpath.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-22 00:27:08 +09:00
Hector Martin
db598aa4cf m1n1.hv: Fix register names
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-21 12:29:13 +09:00
Janne Grunau
076217a802 display: Skip init on j473/474s while it's not supported
Signed-off-by: Janne Grunau <j@jannau.net>
2023-05-16 18:23:44 +09:00
Hector Martin
ae1bcd6fe2 m1n1.hv: Update IMPDEF reg names
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-06 00:51:30 +09:00
Hector Martin
6c005ddd49 asm: Fix replacing reg names that are substrings (DAIF etc)
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-06 00:51:05 +09:00
Hector Martin
48db941199 cpu_regs.h: Typo fix
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-05 19:20:48 +09:00
Hector Martin
50c808df2c pmgr: Power up parents before children
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-05 12:39:26 +09:00
Hector Martin
59e0032ba4 cpu_regs,apple_regs.json: More registers
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-05 04:46:11 +09:00
Hector Martin
234b7064ef experiments/aic2_vms.py: New experiment
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-05 02:02:19 +09:00
Hector Martin
895488aebb chickens: Change IRQ mode from 0 to 2
0 seems to misbehave when IRQs fire in EL1. 2 works as intended.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-05 00:32:42 +09:00
Hector Martin
abe4bb04c5 exception: Improve IRQ/FIQ log messages
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-05 00:31:05 +09:00
Hector Martin
ebd4613f61 proxy: Add smp_call[_sync]_el1 variants
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-05-05 00:31:05 +09:00
Janne Grunau
254a2acf18 dcp_iboot: Support macOS 13.3 DCP firmware
The macOS 13.3 DCP firmware extended swap_set_layer_cmd in an
incompatible way. Let dcp_ib_swap_set_layer() send the matching struct
based on the firmware version.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-04-27 04:11:18 +09:00
Janne Grunau
01ea1ae8df afk: Accept message type TYPE_REPLY in start_interface
The macOS 13.3 DCP firmware uses TYPE_REPLY instead of TYPE_NOTIFY for
the disp0-service interface init message.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-04-27 04:11:18 +09:00
Janne Grunau
7a84b2bbf9 tools/run_guest_kernel.sh: Support concatenated initramfs images
This allows booting a kernel with the firmware cpio and a cpio
containing matching modules. The modules initramfs can be prepared from
the kernel source directory with:

`make dir-pkg && usr/gen_initramfs.sh -o initramfs_mod.cpio -u squash -g squash ./tar-install/lib/`

The modules are available in /modules/$(uname -r) and the initramfs can
handle modules in the same way as the vendor firmware to make them
available for itself and the main OS.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-04-27 04:09:49 +09:00
Janne Grunau
cd8e9d6676 payload: Add a custom header with a payload size field for initramfs'
This add supports for concatenated (compressed) cpio archives and relies
on the kernel to decompress the initramfs.

Signed-off-by: Janne Grunau <j@jannau.net>
2023-04-27 04:09:49 +09:00
Hector Martin
54f44be7d6 hv_exc: Add hv_add_time() function & proxy thunk
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-26 00:51:51 +09:00
Hector Martin
9e9693eb6c rust: Switch to RUSTC_BOOTSTRAP=1 backdoor instead of nightly
Nightly is messing around with alloc_error_handler and they can't seem
to make up their mind about it, breaking our CI. Just switch to stable
rust with the usual backdoor to enable unstable features (same as the
kernel does).

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-25 23:58:05 +09:00
Hector Martin
1933e59af6 rust: Drop mixed_integer_ops feature
This is now stable.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-25 23:56:17 +09:00
Hector Martin
7cbd3e7612 rust: Upgrade log to 0.4.17
Fixes a compile warning.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-25 23:50:01 +09:00
Hector Martin
9602fb1859 hv_exc: Add a fast path for sysregs that can be handled without locking
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-25 20:08:59 +09:00
Hector Martin
a0f01809ce experiments/touchbar_rainbow.py: Better rainbow
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-23 18:12:09 +09:00
Hector Martin
b8b76f34f4 cpufreq: Correct fixup for M2 devices
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 04:44:58 +09:00
Hector Martin
a81314fe77 run_guest: Implement going to sleep
Getting back from sleep is left as an exercise to the reverse
engineer...

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 03:21:58 +09:00
Hector Martin
bd63b119ec startup: Direct primary CPU RVBAR entry to m1n1 main
This definitely isn't going to work yet, but it's better than ending up
in the secondary loop if it ever works.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 03:21:58 +09:00
Hector Martin
06b732e788 smp: Add smp_stop_secondaries()
Doesn't work properly yet since we can't restart them...

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 03:21:58 +09:00
Hector Martin
3288548faa utils: Add cpu_sleep() function
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 03:21:58 +09:00
Hector Martin
121d20cddf cpu_regs: Make fields usable from assembler
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 02:37:02 +09:00
Hector Martin
4638632657 hv: Implement emulated guest CPU shutdown
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 01:21:33 +09:00
Hector Martin
4d7b18d382 m1n1.proxy: Support negative arguments
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-19 01:02:03 +09:00
Hector Martin
cae2059c06 hv: Add a rendezvous timeout and panic on failure
Prints the CPUs that failed rendezvous, which should help debug what
caused them to go away.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 23:50:11 +09:00
Hector Martin
587da648a3 hv_exc: Be a bit more paranoid handling IPIs
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 23:38:40 +09:00
Hector Martin
b0c3f6d7ae hv: Implement ECV on M2 and later chips
This lets us eliminate HV timer ticks on secondary CPUs, which should
significantly improve the scalability of this whole thing.

(We leave them at 1Hz just in case, since that much won't hurt)

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 23:37:18 +09:00
Hector Martin
a75afff83b hv_exc: Pass through dangerous CYC_OVRD writes to Python
This makes it easier to experiment with the sleep/WFI stuff.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 23:36:55 +09:00
Hector Martin
40ae642d7b tools/apple_regs.json: Update some regs with stuff from XNU dumps
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 23:06:53 +09:00
Hector Martin
a1be8f233c m1n1.fw.smc: Add read32f()
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 22:09:07 +09:00
Hector Martin
7f9eaecbad m1n1.asm: Textually replace sysregs with their identifier
Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 22:08:41 +09:00
Hector Martin
bdf54ba7e1 usb_dwc3: Populate serial number with the actual serial number
This will be useful for CI and similar use cases, to distinguish
different machines. Also fix spurious NUL-termination of the descriptor
strings while I'm here.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 22:07:21 +09:00
Hector Martin
b57a91726d experiments/cpu_pstate_latencies.py: Fix stuff
Extra pstates only for J416c, drop the second pstate field sets (still
no idea what that does), fix a mask.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 21:55:12 +09:00
Hector Martin
cf7da86eba cpufreq: Fix m1n1 stage 1 bugs
Old stage1 did cpufreq init and didn't do it right. Undo the damage in
stage2.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 21:55:12 +09:00
Hector Martin
9b944c5f56 payload: Pass m1n1 stage 1 version when chainloading
This might come in handy in the future.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 21:55:12 +09:00
Hector Martin
5a4e30a98d hv: Restore CYC_OVRD WFI mode and handle FIQ disable
Put the WFI mode back how macOS expects it on boot, since it won't set
it itself. Then, also trap attempts by macOS to disable FIQs. This
happens in the sleep/core off path. It is not sufficient to make all
that work properly, but it's a start.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 21:55:12 +09:00
Hector Martin
8cf0df0553 utils_asm: Save/restore CYC_OVRD register
This keeps the previous WFI setting instead of unconditionally flipping
to 3 then back to 2.

Signed-off-by: Hector Martin <marcan@marcan.st>
2023-04-18 21:55:12 +09:00