All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] hw/misc/applesmc: Implement writes, the shutdown watchdog and get-key-type
@ 2026-08-19  6:41 Daniel Golle
  2026-08-19  6:41 ` [PATCH 1/4] hw/misc/applesmc: Add trace events Daniel Golle
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Daniel Golle @ 2026-08-19  6:41 UTC (permalink / raw)
  To: Daniel Golle, Paolo Bonzini, Alexander Graf, Pierrick Bouvier,
	Philippe Mathieu-Daudé, Cédric Le Goater, Peter Maydell,
	Kane-Chen-AS, jack wang, qemu-devel

QEMU's AppleSMC device only implements the SMC read command, so every
other command a guest issues fails with kSMCBadCommand. Tracing a macOS
guest shows it relies on two more: the write command (0x11) and
get-key-type (0x13). The missing write command delays boot (macOS retries
failed boot-time key writes) and produces a stream of
SMCWDT::setWatchdogTimer errors at shutdown; the missing get-key-type is
rejected dozens of times during boot.

This series implements what the guest actually uses, one command per
patch for reviewability:

  1/4  add trace events, so the SMC conversation can be observed with
       -trace 'applesmc*' (used to find exactly which commands and keys
       macOS issues).
  2/4  implement the write command (0x11): accept writes and return
       success, removing the boot delay and the shutdown errors.
  3/4  model the "NATi"/"NATJ"/"OSWD" keys as the SMC shutdown watchdog
       they represent, rather than silently accepting the writes: a write
       arms, refreshes or disarms a QEMUTimer whose expiry forces the
       machine down.
  4/4  implement get-key-type (0x13): give each key an SMC type and answer
       the type queries instead of rejecting them.

Traced against a macOS guest before and after: the boot-time key writes
(NTOK, MSDW, QENA, HE0N) now succeed, the shutdown "OSWD" write (a
watchdog disarm) is handled, and the get-key-type rejections become
correct replies (for example REV is reported as {rev, six bytes). The
traced guest only disarms the watchdog; the arm-and-fire path in patch 3
is the documented behaviour for a guest that arms it and was not observed
being triggered. get-key-by-index (0x12) is deliberately not implemented,
as macOS never issues it.

Daniel Golle (4):
  hw/misc/applesmc: Add trace events
  hw/misc/applesmc: Implement the write command
  hw/misc/applesmc: Emulate the SMC shutdown watchdog
  hw/misc/applesmc: Implement the get-key-type command

 hw/misc/applesmc.c   | 174 +++++++++++++++++++++++++++++++++++++++++--
 hw/misc/trace-events |  16 ++++
 2 files changed, 183 insertions(+), 7 deletions(-)


-- 
2.55.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-08-19 17:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-19  6:41 [PATCH 0/4] hw/misc/applesmc: Implement writes, the shutdown watchdog and get-key-type Daniel Golle
2026-08-19  6:41 ` [PATCH 1/4] hw/misc/applesmc: Add trace events Daniel Golle
2026-08-19  6:41 ` [PATCH 2/4] hw/misc/applesmc: Implement the write command Daniel Golle
2026-08-19  6:41 ` [PATCH 3/4] hw/misc/applesmc: Emulate the SMC shutdown watchdog Daniel Golle
2026-08-19  6:41 ` [PATCH 4/4] hw/misc/applesmc: Implement the get-key-type command Daniel Golle
2026-08-19 13:29 ` [PATCH 0/4] hw/misc/applesmc: Implement writes, the shutdown watchdog and get-key-type Peter Maydell
2026-08-19 17:34   ` Daniel Golle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.