Hector Martin
8eeb7966aa
hv: Refactor CPU switch logic, make hv.cpu() not exit shell
...
Get rid of the hv_rearm() thing (which was always a bit dodgy) and
instead properly make sure that all CPUs rendezvous when needed and
switch the active proxy thread without ever exiting exception context.
The Python side can now switch proxy context (by waiting directly for
a proxy boot) without having to exit out of the hypervisor callback,
so cpu() now works as a normal Python method.
Add a cpus() iterator so you can do things like:
>>> for i in cpus(): bt()
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-05-30 22:33:44 +09:00
Hector Martin
01a1a0f597
hv: Make time stealing run-time configurable
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-05-30 19:37:23 +09:00
Hector Martin
908f263f22
proxy: Fix warning in P_MCC_GET_CARVEOUTS
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-05-30 19:29:51 +09:00
Hector Martin
9c795fbdbf
utils: Use WFE/SEV in spinlock
...
This should reduce memory traffic spam and power usage from lock
contention when threads are blocked on a spinlock.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-05-30 19:22:55 +09:00
Hector Martin
ad659daa6d
payload: Fix spurious variable detection on EOF
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-05-23 20:40:07 +09:00
Asahi Lina
25d33aa4c7
hv_vm: Implement more opcodes
...
Signed-off-by: Asahi Lina <lina@asahilina.net>
2022-05-21 03:54:12 +09:00
Asahi Lina
5b534cbf31
hv_vm: Add more SIMD ops to emulation
...
Signed-off-by: Asahi Lina <lina@asahilina.net>
2022-05-21 03:54:12 +09:00
Asahi Lina
c746549c2e
hv: Map RAM via tracer infra, handle carveouts in Python
...
Previously RAM was mapped ad-hoc, but this can end up interacting
poorly with the tracer infrastructure which we are now using for RAM
too. Move to mapping guest RAM via the tracer infra, and also unmap the
TZ carveouts in the Python side so it knows about them.
This is a HV ABI break.
Signed-off-by: Asahi Lina <lina@asahilina.net>
2022-05-21 03:54:12 +09:00
Asahi Lina
b88785fa58
hv_vm: Add 32-bit LDP emulation
...
Signed-off-by: Asahi Lina <lina@asahilina.net>
2022-05-21 03:54:12 +09:00
Hector Martin
52bb64b86c
hv_exc: Do not forget to arm tick in fast path
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-04-20 00:38:22 +09:00
Hector Martin
e750dfcca1
hv_exc: Improve multi-core scalability
...
The HV tick polling now only runs on CPU#0. All CPUs have the 1000Hz
HV tick, but secondaries only use it to poll the FIQ state and that path
does not take the BHL if no other FIQ was pending.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-04-20 00:20:58 +09:00
Hector Martin
3020e26e00
dart: Announce real-time DARTs
...
Mostly just for reference.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-04-19 23:42:22 +09:00
Hector Martin
fabe27e3f1
memory: Remap some carveouts as uncached
...
This fixes display DART real-time cache hits causing AMCC exceptions.
The relevant carve-outs have flags 0x60004016; 0x60004002 is used for
DCP which is non-realtime, so I'm guessing the '16' means we should map
it uncached.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-04-19 23:41:17 +09:00
Janne Grunau
6df73d80ee
cpufreq: Add support for t6002
...
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-19 21:39:52 +09:00
Janne Grunau
4aa4ff98b6
smp: Start CPU cores on the second t6002 die
...
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-19 21:39:52 +09:00
Hector Martin
8df40df17e
nvme: Support nvme on die 1 for t6002
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-04-19 21:39:52 +09:00
Janne Grunau
6256baca04
pmgr: Add multi-die support for t6002
...
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-19 21:39:52 +09:00
Janne Grunau
76fd226f7c
aic: Add support for multi-die AIC2 as seen on the M1 Ultra
...
Multi-die IRQs are coded as in the ADT: die * max_irq + num
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-19 21:29:30 +09:00
Janne Grunau
524cb4a34f
soc: Add target for t6002
...
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-19 21:29:30 +09:00
Janne Grunau
1b5dee2496
display: Map the framebuffer if it is not mapped
...
iboot on Mac Studio (M1 Ultra) does not map the framebuffer("/vram")
for dcp and disp0.
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-19 21:29:30 +09:00
Janne Grunau
0104abbea7
dart: Add dart_find_iova() to find unused IOVA space
...
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-19 21:29:30 +09:00
Sven Peter
e9f36ad8b2
kboot: disable phys nodes as well
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-04-16 19:22:28 +09:00
Sven Peter
28103d9003
kboot: propagate ATC tunables to the FDT
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-04-16 19:22:28 +09:00
Janne Grunau
d0ce92a284
pcie: Set correct link speed for 10gb ethernet
...
The PCIe 4 link speed is only described as "target-link-speed" in the
"lan-10gb". This changed in macos 12.3 or earlier. Verified on Mac
Studio and with the template Mac Mini ADT.
Reported-by: Jeff Geerling <geerlingguy@mac.com>
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-16 19:14:00 +09:00
Janne Grunau
d05f92b18a
hv: Hibernate DCP in hv_init
...
DCP will otherwise not be useable from the guest system.
Signed-off-by: Janne Grunau <j@jannau.net>
2022-04-16 19:12:23 +09:00
Asahi Lina
e2f63a07b2
hv: Improve VM emulation for tracer
...
Adds support for up to 64-byte ops and more SIMD/paired operations.
This is good enough to trace a lot of GPU VM address space.
Signed-off-by: Asahi Lina <lina@asahilina.net>
2022-04-16 19:06:22 +09:00
Hector Martin
1d19e74ca8
display: Implement mode selection
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-27 17:57:37 +09:00
Hector Martin
550e39913f
string: Add atol
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-27 17:23:50 +09:00
Hector Martin
ebf1cf3aa3
display: Reinit FB if resolution changed
2022-03-27 17:02:00 +09:00
Hector Martin
d937483067
fb: Add fb_reinit()
2022-03-27 17:01:42 +09:00
Hector Martin
3248c91aef
display: Allow forcing re-config via payload (WIP)
...
Doesn't actually let you specify a mode yet.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-27 16:46:53 +09:00
Hector Martin
780c0644d4
display: Fix HPD detection bug
...
Turns out it's just an 8-bit bool, not 32 bits, and when cast to int
the top bits can cause it to be interpreted as an error randomly...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-27 16:46:23 +09:00
Hector Martin
8af401ade1
display: Also prefer <4K modes in the vertical dimension
...
Apparently 2:1 scaled modes like 1920x2160 are a thing?
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-27 16:08:39 +09:00
Sven Peter
0a1a9348c3
kboot: try SEPROM for the random seeds first
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-03-19 02:33:54 +09:00
Sven Peter
4c62ef47ad
kboot: split off dt_set_rng_seed
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-03-19 02:33:54 +09:00
Sven Peter
4e5a949382
sep: add simple SEP TRNG API
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-03-19 02:33:54 +09:00
Hector Martin
bad5aebc7d
kboot: Forward kblang code to asahi,kblang-code
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-18 06:56:57 +09:00
Hector Martin
d4635f60e2
chainload: Properly reserve memory for everything up to bootargs
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-16 01:56:57 +09:00
Hector Martin
3331d9e1e1
kboot: Properly prune cpu-map and IRQ affinities for missing CPUs
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-14 21:09:20 +09:00
Hector Martin
d580963043
smp: Guard CPU indexes > MAX_CPUS
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-14 21:08:07 +09:00
Hector Martin
29adf670b5
payload: Fix /chosen arg setting
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-11 22:12:22 +09:00
Hector Martin
d161de0037
nvme: Stop CPU properly on shutdown
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-10 04:01:15 +09:00
Hector Martin
82ec1695ba
payload: Fix broken chosen var handling
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-10 00:30:31 +09:00
Hector Martin
4575b35479
rust: Initial Rust-based EFI FAT32 chainloader
...
This code is gated behind the CHAINLOADING define. To build a
release-style m1n1 with chainloading for use with the installer
or kmutil, use:
make CHAINLOADING=1 RELEASE=1
To tell m1n1 to chainload another binary, use this var payload:
chainload=<ESP partition UUID>;<file path>
e.g.
chainload=a17b7e46-e950-bb4f-bc82-8ab1047a058e;m1n1/m1n1.bin
Closes : #154
Co-authored-by: Finn Behrens <me@kloenk.dev>
Co-authored-by: Joey Gouly <joey.gouly@arm.com>
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-09 22:01:42 +09:00
Hector Martin
e386e17550
chainload: Add new m1n1-side chainloader (raw images only)
...
This basically duplicates the chainload.py logic, minus the mach-o
handling.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-09 20:55:34 +09:00
Hector Martin
0a8a593cdc
payload: Support passing arbitrary /chosen arguments
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-09 20:55:34 +09:00
Hector Martin
78c8c4d7d6
payload: Skip hypothetical m1n1 signatures
...
Tentative header format: 'm1n1_sig' followed by u32 total size (inclusive).
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-09 20:55:34 +09:00
Hector Martin
6a1a9bfc3c
utils: Expand vector_args from 4 to 5 arguments
...
This also expands the usual call/next stage functions to match.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-09 20:55:34 +09:00
Hector Martin
963b74765c
adt: Add adt_setprop()
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-09 20:55:34 +09:00
Hector Martin
123d1df1a7
kboot: Replace kboot_set_bootargs with kboot_set_chosen
...
This allows setting arbitrary /chosen string props
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-09 20:55:34 +09:00
Hector Martin
adb1cb943e
proxy: Export smp_set_wfe_mode
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-08 00:02:06 +09:00
Hector Martin
a2944fa123
clk: Initialize MCA clock muxes
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-08 00:02:06 +09:00
Hector Martin
616fedaf62
nvme: Shut down the controller cleanly
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-07 23:59:25 +09:00
Hector Martin
bb7c7dd0ce
proxy: Pass through nvme retvals properly
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-07 23:59:25 +09:00
Hector Martin
191cb157fb
rtkit: Better error handling
...
Now failures during init/shutdown won't cause a hang.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-03-07 23:59:25 +09:00
Hector Martin
287a963bcc
kboot: Hide the notch
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-22 01:04:55 +09:00
Hector Martin
5531b9ae32
display: statify local functions
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-22 00:54:17 +09:00
Hector Martin
5aaedef975
main: Add RELEASE mode features
...
- Hide console by default unless booting in verbose mode.
- In verbose mode, enable USB early and poll for connection before
launching payloads.
- Show console on fallback to proxy.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-22 00:30:54 +09:00
Hector Martin
a9088e2278
fb: Add the ability to defer FB console activation
...
This differs from removing the IODEV usage in that console contents
are still buffered.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-21 16:06:14 +09:00
Hector Martin
d1dcf16c66
display: Update boot args in place for HV guests
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-21 16:03:23 +09:00
Hector Martin
50a9593034
mcc: Add mcc_hv_unmap_carveouts() and proxy op
...
This is necessary to stop the guest from speculating into carveouts.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-21 15:30:21 +09:00
Martin Povišer
7bab3d0fc3
exception: Fix silent mode
...
Do not forget to clear the L2C_ERR flags in silent mode also. This is
necessary for proper recovery.
Signed-off-by: Martin Povišer <povik@protonmail.com>
2022-02-14 11:47:04 +09:00
Hector Martin
6f525fc0f1
smp: Skip missing CPUs and continue
...
This will probably fix missing CPUs on low-binned machines
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-08 13:35:49 +09:00
Janne Grunau
1903dbd17e
kboot: reload dt offset after dt_set_uboot_dm_preloc
...
Fixes adding "u-boot,dm-pre-reloc" to all required power-management
nodes on t600x.
Signed-off-by: Janne Grunau <j@jannau.net>
2022-02-07 01:02:21 +09:00
Hector Martin
7697e992b0
fb: Fix init message pointer
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-06 15:41:30 +09:00
Hector Martin
e1a7deb2d5
i2c: Increase low-level timeouts to 50ms.
...
Hopefully this will cover all corner cases of the Ace2s being slow.
Issue: #101
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-06 15:36:22 +09:00
Sven Peter
cad8df30ce
nvme: delete IO SQ/CQ when shutting down
...
This should not be required but it looks like the 12.1 ANS2 firmware
complains when NVME_CC.EN is cleared before the IO queues have been
deleted.
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-02-02 22:57:54 +09:00
Sven Peter
768be5bd58
sart: fix sart3_set_entry
...
writel_relaxed(val, addr) inside Linux but write32(addr, val) inside
m1n1 confused my muscle memory.
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-02-02 22:57:54 +09:00
Sven Peter
2ee920d229
sart: fix for 12.1
...
Looks like Apple decided to change the compatible to sart,coastguard and rely
on the sart-version ADT property to differentiate between M1 and M1 Pro/Max
instead. sart-version is already present in the 11.x ADT so let's just
always decide based on that.
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-02-02 22:57:54 +09:00
Hector Martin
fbc15bd77c
payload: Consider an IMG4 blob as the end of payloads
...
When loading m1n1.bin, SEPFW follows m1n1 and thus will show up at
the payload offset if there are no payloads.
Fixes : #158
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-02-01 15:52:08 +09:00
Sven Peter
ccf4b20a1d
proxy: add nvme_{read,flush}
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-26 15:38:40 +09:00
Sven Peter
5f17b4743e
nvme: bring up controller and implement nvme_read
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-26 15:38:40 +09:00
Sven Peter
54ff538df9
asc: use timeout_*
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-26 15:38:40 +09:00
Sven Peter
2bbf994089
utils: add timeout_{calculate,expired}
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-26 15:38:40 +09:00
Sven Peter
21fec139bf
utils: add write64_lo_hi
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-26 15:38:40 +09:00
Sven Peter
bbea5167d5
rtkit: fix RTKIT_SYSLOG
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-26 15:38:40 +09:00
Mark Kettenis
30d6c6374d
kboot: Add u-boot,dm-pre-reloc properties
...
These properties are needed such that U-Boot can enable the
serial port in its early pre-relocation phase.
Signed-off-by: Mark Kettenis <kettenis@openbsd.org>
2022-01-26 15:37:47 +09:00
Sven Peter
2bd7bf4020
afk: use version 3 for epic_sub_hdr
...
This drops the tx/rxcookie and accepts TYPE_NOTIFY in addition to
TYPE_REPLY for command replies to make the DCP code also work on 11.x.
It'll still complain about an unexpected message during init but work.
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-19 03:24:20 +09:00
Hector Martin
f20a0fbcd5
rtkit: Do not ack prealloc'd buffers
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-19 03:23:42 +09:00
Sven Peter
2c28e13d25
rtkit: add rtkit_{hibernate,sleep} and use them for DCP and ANS2
...
s/IDLE/HIBERNATE/ to keep in sync with the Linux driver and then
hibernate DCP but send ANS2 to sleep to allow reusing both.
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-18 11:35:45 +09:00
Sven Peter
00404e9bc3
afk: propagate failures in afk_epic_rx correctly
...
If the co-processor crashes afk_epic_poll will always fail which results
in afk_epic_rx getting stuck in an infinite loop calling afk_epic_poll
again and again.
This happens with e.g. old/incompatible DCP firmware.
Make sure the m1n1 proxy still works in those cases by propagating the
error correctly.
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-18 11:33:57 +09:00
Janne Grunau
b2cb605832
display: Retry dcp_ib_get_hpd() for up to 2 seconds
...
After boot DCP will need some time to detect connected displays.
Signed-off-by: Janne Grunau <j@jannau.net>
2022-01-17 23:12:49 +09:00
Vincent Duvert
6736368275
rtkit.c: Add config.h include
...
Needed for the RTKIT_SYSLOG optional define.
Signed-off-by: Vincent Duvert <vincent@duvert.net>
2022-01-17 23:11:27 +09:00
Hector Martin
b9a7827900
main: Drop copyright year from copyright statement
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 14:41:44 +09:00
Hector Martin
f1033a97b2
afk: Fix error return for bad queue entry
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 14:33:27 +09:00
Hector Martin
1c2a2db1dd
display: Add logic to initialize the Mac Mini HDMI display
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
eaadc43fbb
dcp: Add DCP and iBoot protocol support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
3f9bd38b6f
afk: Add AFK/EPIC subsystem
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
ae1d7c4348
rtkit: Fix bug with version selection
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
476710410c
rtkit: Change initial power state to 0x220
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
ca77566441
rtkit: Make rtkit_recv() return an int
...
This allows distinguishing between error and no message conditions.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
15bce29775
rtkit: Add basic crashlog support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
9b5cb569e4
rtkit: Buffer handling refactor
...
This adds support for using preallocated buffers & more
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
8f3118d99f
rtkit: Add syslog support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
94bc563433
rtkit: Add dummy OSLog support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
7fc207eb35
iova: Add range arguments to iovad_init()
...
This allows restricting the IOVA range so as to not overlap with
prealloc'd ranges.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
847036b2ce
iodev: Bump console buffer to 8K
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
18ceb3b3ff
asc: Use 0x8000 offset for mbox regs
...
Not sure where 0x4000 came from?
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
a4c5b64655
asc: Add asc_get_iop_node()
...
The IOP child node in the ADT contains properties that the RTKit driver
needs to handle it properly.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
42c4334675
dart: Add dart_translate() & dart_search()
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
18408d37b1
dart: Handle locked DARTs & preserving page tables
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:42:00 +09:00
Hector Martin
2127de59c1
utils: Add is_heap()
...
This lets us mix iBoot-allocated and heap-allocated pointers and
distinguish them at cleanup time.
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-01-17 04:10:24 +09:00
Sven Peter
0b9829e227
proxyclient: add nvme_{init,shutdown}
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Sven Peter
2307e756d3
nvme: Add stub ANS NVMe driver
...
Right now it only initializes the co-processor and makes sure
the firmware has booted successfully.
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Sven Peter
1521978a6c
pmgr: add pmgr_reset
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Sven Peter
1254b4bee6
pmgr: s/clock/power/
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Sven Peter
734f8cc1b4
rtkit: Add RTKit library
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Sven Peter
c0cc000ce3
iova: Add a simple IOVA allocator
...
Not well tested because I realized too late that NVMe doesn't
actually need any DART support...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Sven Peter
2b792ffc34
sart: Add SART support
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Sven Peter
65816f1bd8
asc: Add ASC mailbox driver
...
Signed-off-by: Sven Peter <sven@svenpeter.dev>
2022-01-16 18:53:29 +09:00
Zzzec
bad788e67e
hv_vm: fix an alignment problem in hv_map
...
Signed-off-by: Zzzec <1223544545@qq.com>
2022-01-03 18:23:39 +09:00
Hector Martin
3e4db747eb
kboot: Forward WiFi cal blob from ADT to DT
...
This calibration blob is stored in the WiFi chipset SROM on other
platforms, but Apple decided to move it to sysconfig instead...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-28 20:01:40 +09:00
Mark Kettenis
36954d51fd
kboot: Provide antenna SKU in device tree
...
Read the antenna SKU from the ADT and store it in a
"apple,antenna-sku" property on the relevant node in the FDT.
Signed-off-by: Mark Kettenis <kettenis@openbsd.org>
2021-12-25 19:40:10 +09:00
Hector Martin
1a77571557
chickens: Disable SMC traps from EL1 to EL2
...
This behavior isn't really compliant with the architecture, so turn it
off.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-21 19:45:04 +09:00
Hector Martin
92aca22119
heapblock: Remove payload_end logic for heap start
...
This no longer applies ever since we started doing in-place chainloads.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-17 22:26:54 +09:00
Hector Martin
688c6b1494
memory: Dynamically allocate top-level page tables
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-17 21:46:55 +09:00
Hector Martin
07c7cc09f3
hv_vm: Dynamically allocate top-level page tables
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-17 21:46:55 +09:00
Hector Martin
bedcc905a3
gxf, smp: Allocate stacks dynamically
...
This significantly shrinks our .bss section
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-17 21:46:55 +09:00
Hector Martin
486ff9ecee
aic: t6000: Initialize external IRQ routing
...
This is used for coprocessors. Do it here so Linux doesn't have to deal
with it.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-08 01:14:44 +09:00
Hector Martin
abee2ecebc
pcie: Set link speed capabilities from ADT
...
This sets both the target and the max link speed of the root ports
to the maximum specified in the ADT.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-07 14:03:26 +09:00
Hector Martin
c9dc4401c0
pcie: Enable port speed controls
...
This makes PCIe train at >Gen1 by default
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-02 13:55:25 +09:00
Hector Martin
26b55d4b26
pcie: Wait for port PHY to be idle after init before configuring
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-02 13:42:19 +09:00
Hector Martin
9949689a74
pcie: Document APCIE_PHYIF_CTRL
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-12-02 13:41:56 +09:00
Martin Povišer
a40840f13c
proxy: Expose usb_iodev_vuart_setup
...
Expose the usb_iodev_vuart_setup function in uartproxy. This opens
the secondary ACM pipe to new uses outside the hypervisor. E.g. it can
be set up as another stream for sending proxy requests.
Sample usage from proxyclient:
p.usb_iodev_vuart_setup(p.iodev_whoami())
p.iodev_set_usage(IODEV.USB_VUART, USAGE.UARTPROXY)
# the second virtual serial now also serves proxy
Signed-off-by: Martin Povišer <povik@protonmail.com>
2021-11-26 15:31:21 +09:00
Hector Martin
95ef45fd11
usb: Squelch DART error for missing USB devices
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-24 17:17:54 +09:00
Hector Martin
de6979fc7b
Revert "usb: Add usb_idx_from_address() to find a dev by its MMIO addr"
...
This is no longer needed, so put things back the way they were.
This reverts commit e689ceb263
.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-23 23:36:14 +09:00
Hector Martin
be7ff3a062
kboot: Generalize device disable logic, disable i2c & usb devs
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-23 23:36:14 +09:00
Hector Martin
01e84ecef6
pcie: Document reg ranges better
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-22 16:43:22 +09:00
Hector Martin
555965e98a
pcie: Calculate the number of reg entries per port
...
Turns out this isn't hardware-specific, but rather a change Apple made
retroactively in 12.0 RC. Doesn't look like there's a saner way than
this...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-22 16:24:37 +09:00
Hector Martin
4027c34c7a
proxy: Add proxy ops for pcie_init/shutdown
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-22 16:04:35 +09:00
Hector Martin
23c3617cf2
payload: Complain loudly about devicetree platform mismatches.
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-20 02:26:24 +09:00
Hector Martin
f4e11a78c6
i2c: Add explicit delay to the i2c_xfer_read timeout loop
...
We now set the timeout at 10ms without any bytes received.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-18 22:29:51 +09:00
Hector Martin
850a669436
tps6598x: Add a delay in the command poll loop
...
It seems that if we poll too fast, we DoS the poor thing...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-18 22:15:38 +09:00
Hector Martin
cc1fa67ff2
i2c: Use Repeat-Start condition for SMBus reads
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-18 22:15:13 +09:00
Hector Martin
26f636dbbb
fb: Use 128-bitwise copies to speed up FB updates
...
This makes it almost as fast as it was before the switch to an
uncached framebuffer, as far as I can tell.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-17 19:23:44 +09:00
Hector Martin
3b0d53d7b8
mcc: Guard against MCC count > max
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-17 10:14:15 +09:00
Hector Martin
0df392d0d3
mcc: Fix mcc_num_channels prop on t8103
...
Bad copy and paste...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-17 01:45:49 +09:00
Hector Martin
4b80041d6d
mcc: New module to initialize the MCC memory controller.
...
This turns on the system level cache. The carveout unmapping also moves
here, and now it handles T8103/T6000 properly.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-16 21:09:48 +09:00
Hector Martin
ecc80f4b32
kboot: Fix warning/bug introduced by ecb6c82e
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-16 21:09:12 +09:00
Hector Martin
b9ec73b019
smp: Leave the default boot stack for CPU#0 set in case it resets
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-16 17:26:52 +09:00
Hector Martin
33d09cc7c0
hv_exc: Filter out CYC_OVRD_DISABLE_WFI_RET
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-16 17:26:39 +09:00
Hector Martin
0f9c0f5dd3
startup: Add a UART print to the RVBAR entry path
...
This might make it easier to debug CPU sleep modes
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-16 17:18:52 +09:00
Hector Martin
ecb6c82e75
kboot: Delete CPU nodes instead of disabling them
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-15 22:48:28 +09:00
Hector Martin
7690fd730c
iodev: Bypass locks on all funcs if no MMU
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-15 22:47:45 +09:00
Hector Martin
257f6443a6
kboot: Fix potential bug handling missing/disabled CPUs
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-15 14:52:10 +09:00
Jean-Francois Bortolotti
0131d16c0a
Fix aic1 reg size
...
Signed-off-by: Jean-Francois Bortolotti <jeff@borto.fr>
2021-11-14 11:14:50 +09:00
Janne Grunau
46c945ac95
usb: use dynamic paths for usb related ADT nodes
...
Adds support for the 3rd USB-C port on 2021 Macbook Pros.
Currently up to 8 USB-C ports are supported which should be sufficient
for expected future devices.
Tested on Macbook Pro 14" and Mac Mini.
Signed-off-by: Janne Grunau <j@jannau.net>
2021-11-12 23:48:32 +09:00
Janne Grunau
b6ec7abc2b
utils: replace sprintf with snprintf
...
Converts all current users.
Signed-off-by: Janne Grunau <j@jannau.net>
2021-11-12 23:48:32 +09:00
Janne Grunau
5064b93b2f
usb: dynamically allocate and register usb iodevs
...
Preparation for devices with more than 2 USB-C ports.
Signed-off-by: Janne Grunau <j@jannau.net>
2021-11-12 23:48:32 +09:00
Janne Grunau
c40ef51084
usb_dwc3: robustness in usb_dwc3_write()
...
Signed-off-by: Janne Grunau <j@jannau.net>
2021-11-12 23:48:32 +09:00
Janne Grunau
91ff1ceb65
iodev: avoid direct access to iodev device array
...
Preparation for dynamically alloced iodevs.
Signed-off-by: Janne Grunau <j@jannau.net>
2021-11-12 23:48:32 +09:00
Janne Grunau
2724d69f4c
iodev: usb: replace secondary usb iodevs with single vuart iodev
...
Signed-off-by: Janne Grunau <j@jannau.net>
2021-11-12 23:48:32 +09:00
Hector Martin
b50a489f41
chickens: Update Firestorm chickens & complete t600x
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-11 01:20:03 +09:00
Hector Martin
efca793572
pcie: Only print the port init msg for existing ports
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-11 01:20:03 +09:00
Hector Martin
510dd53175
pcie: Add t6000 support
...
This one seems to need one extra magic poke
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-10 20:43:51 +09:00
Hector Martin
a83d0908e5
pcie: Add t6000 fuse bit map and fix fuse bit application
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-10 20:43:51 +09:00
Hector Martin
94a73a404c
kboot: Disable USB dwc3 devices that are missing in the ADT
...
This passes through the hypervisor USB device disable to Linux, so we no
longer need to hack device trees.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-10 20:43:51 +09:00
Hector Martin
e689ceb263
usb: Add usb_idx_from_address() to find a dev by its MMIO addr
...
This will be used to match up ADT and FDT USB devices, to pass through
enable status.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-10 20:43:51 +09:00
Hector Martin
7e01af5144
kboot: Use _inplace setprop for the CPU release addr
...
This needs to happen in-place for the iterator to not be invalidated.
Explicitly request that and fail if it does not work.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-10 20:43:51 +09:00
Hector Martin
e763ce3f56
hv: Set SMP mode to WFE
...
This fixes early IRQs getting stuck in idle secondaries and breaking the
guest.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-08 19:57:02 +09:00
Hector Martin
84acf60c24
Fix warnings when building/linking with clang/llvm
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-08 13:53:04 +09:00
Hector Martin
4e4335a6ea
chickens: Enable IRQs on t600x
...
This seems to be safe to do on M1 too.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 04:03:41 +09:00
Hector Martin
0c093521de
pcie: Basic t600x support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 03:55:48 +09:00
Hector Martin
f5af1caee5
hv_exc: Forward more sysregs
...
We don't normally trap these, but for experiments using TIDCP they are
useful to avoid.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 03:55:09 +09:00
Hector Martin
a383ef0b5a
iodev: Protect iodevs with spinlocks
...
This makes SMP IRQ reports less flaky
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 03:53:39 +09:00
Hector Martin
0005b6533b
hv_exc: Add more sysreg passthroughs for t600x spam
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 03:52:43 +09:00
Hector Martin
77074b9098
hv_aic: Support AICv2
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 03:52:42 +09:00
Hector Martin
8fa422c0d3
fb: Map the framebuffer uncached, and use a shadow FB for speed
...
Turns out AMCC on t600x throws errors when DISP0 real-time memory
requests hit the CPU cache, and then macOS panics.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 03:52:30 +09:00
Hector Martin
dc3806252b
aic: Basic AICv2 support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-04 03:52:30 +09:00
Hector Martin
f824f60f5c
utils: Unbork udelay()
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-02 12:36:07 +09:00
Hector Martin
6765bc3ff6
hv_vm: Support >36-bit PAs
...
This needs an extra L1 translation level, but only on SoCs with support
for >36-bit PAs. On M1, we bypass it and keep starting at L2.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-02 02:35:26 +09:00
Hector Martin
d7983c7173
arm_cpu_regs.h: Add SYS_ID_AA64MMFR0_EL1
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-02 02:23:07 +09:00
Hector Martin
e99138710a
smp: Handle IRQ enable reg properly (maybe)
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 21:00:56 +09:00
Hector Martin
87613dc208
smp: Support more clusters/CPUs properly
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 21:00:56 +09:00
Hector Martin
9b6e5fbc52
cpufreq: Add preliminary T6000 support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 21:00:56 +09:00
Hector Martin
d7bd21d51c
usb: Use new DART code to autoselect compatible mode
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 21:00:56 +09:00
Hector Martin
1edb18ac44
pmgr: Do not try to fix up virtual devs
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 21:00:56 +09:00
Hector Martin
84902062c9
dart: T6000 support
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 21:00:56 +09:00
Hector Martin
68aec75918
memory: Larger PA support & dynamically map MMIO
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 21:00:56 +09:00
Hector Martin
326ba6fb33
utils: Fix BIT() signedness
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 19:00:34 +09:00
Hector Martin
425daaedbd
utils: Use CPU timer instead of AIC timer
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 19:00:34 +09:00
Hector Martin
95dd7b90a4
chickens: Add preliminary T6000 support
...
P-core chickens need checking.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 19:00:34 +09:00
Hector Martin
ed21a80bc3
chickens: Refactor and update M1 bits
...
This adds some missing fixes for M1/T8103 and reworks the code to split
off common parts, and also handle per-revision bits.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 13:41:12 +09:00
Hector Martin
7ff48f6201
memory: Make the RAM base dynamic
...
For now we compute this as phys_base aligned down to a 4GiB boundary.
Hopefully that works for future SoCs too.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 13:39:40 +09:00
Hector Martin
38fc7a0780
Configure early debug features by SoC type
...
To build a version with early UART support, set it in config.h
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-11-01 13:36:42 +09:00
Vincent Duvert
b15be6bcd7
Remove hardcoded UART/WDT addresses
...
The M1 Pro/Max Macs use a different base address for the UART and the
WDT than earlier models.
Remove hardcoded base addresses constants and replace them with loads
from the ADT.
- The base address of the WDT is already retrieved in wdt_disable; also
use this address when triggering a reboot.
- Retrieve the base address of uart0 in uart_init. If the operation
fails, the error will be signaled on the early uart (if not disabled).
- The early debug UART can’t use the ADT (or shouldn’t) so it is now
disabled by default. To enable it, add
-DEARLY_UART -DEARLY_UART_BASE=0xuart_address
to the CFLAGS.
Signed-off-by: Vincent Duvert <vincent@duvert.net>
2021-11-01 11:27:29 +09:00
Hector Martin
39d1d9a904
payload: Only load DTs that are compatible with this device
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-18 18:26:27 +09:00
Hector Martin
120ac16493
payload: Support setting boot-args as a payload.
...
Just use "boot-args=foo bar baz\n" as a payload
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-18 18:18:01 +09:00
Hector Martin
097c2f752a
payload: Make vars static
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-18 18:17:42 +09:00
Hector Martin
ef83f62d0e
cpufreq: New module to initialize CPU p-states
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-18 17:34:40 +09:00
Hector Martin
4fa0200053
main: Export chip_id as a global
...
Some things need to be chip-specific, as the ADT isn't generic enough.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-18 17:33:49 +09:00
Hector Martin
6d9bc7fa8f
pmgr: Unify defs with Linux, clean up device relationships.
...
This enables parent devices that are required by active child devices,
because iBoot leaves behind some broken dependencies.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-18 16:52:59 +09:00
Hector Martin
5787eb2d64
hv_exc: Fix global IPIs
...
Reported-by: Joey Gouly <joey.gouly@arm.com>
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-18 13:26:28 +09:00
Hector Martin
72788291e6
memory: Map all RAM to the top, minus carveouts
...
This unbreaks dcp.py and other things that need to access reserved
regions. This way we don't have to start doing manual MMU maps, but
we're still safe from SErrors caused by hitting TZ carveouts.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-16 01:00:33 +09:00
Hector Martin
1444c93a24
proxy: Add P_MMU_INIT_SECONDARY
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-15 23:44:12 +09:00
Hector Martin
da024ffbd8
memory: Only map available RAM
...
We saw some crazy speculation running in the HV breaking things by
reading from invalid RAM, so let's actually map only what's available.
For now we do map all lowmem as we haven't seen SErrors there yet, but
we stop at the high boundary.
Fixes : #97
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-15 23:44:12 +09:00
Danny Lin
37e8f425bf
smp: Fix smp_call macros with fewer than 4 arguments
...
The full 4-argument version of smp_call is smp_call4; smp_call doesn't
exist.
Signed-off-by: Danny Lin <danny@kdrag0n.dev>
2021-10-11 12:42:31 +09:00
Hector Martin
e1515b4376
i2c: Make error paths wait for bus in i2c_smbus_read
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-10 23:49:51 +09:00
Hector Martin
64cb9892b1
tps6598x: Correctly clear all IRQ flags
...
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-10 23:18:04 +09:00
Hector Martin
675f11dc59
tps6598x: Get rid of TPS_WRITE_DELAY
...
This was a poor workaround for the broken i2c code.
Signed-off-by: Hector Martin <marcan@marcan.st>
2021-10-10 23:16:26 +09:00