5 ms·
Apple's MacBook Pro DFU port documentation is wrong
- executerh 9mo ago[dead]
- vlovich123 9mo agoI’m curious if anyone knows the reason it’s so strict about the port? It’s a weird thing. My best theory is maybe in DFU mode it skips HAL enumeration and just has a hardcoded link between that single port and the microcontroller that does DFU? It’s a stretch but that’s the main theory I have and would explain why they also sometimes had weird capability mismatches between ports on different sides. Edit: according to ChatGPT that is basically the reason. That one port is connected to the SoC’s building PHY that’s guaranteed to be on without needing any firmware. Other ports are routed through other controllers and whatnot and those may require firmware. Also the DFU port is guaranteed to not need PD negotiation to turn on. DFU could opportunistically try to load firmware and start those devices but it’s risky since the firmware may be what’s bricked and might itself break DFU so for simplicity it’s in an absolutely barebones mode that the CPU supports and is wired for directly.
- comex 9mo agoChatGPT is wrong. The DFU port does go through a USB controller with firmware. [1] [1] https://asahilinux.org/docs/hw/soc/usb-pd/ https://asahilinux.org/docs/hw/soc/usb-pd/
- youarentrightjr 9mo ago> ChatGPT is wrong. The DFU port does go through a USB controller with firmware. [1] > [1] https://asahilinux.org/docs/hw/soc/usb-pd/ https://asahilinux.org/docs/hw/soc/usb-pd/ What in your linked page made you conclude this? Your link references https://web.archive.org/web/20211023034503/https://blog.t8012.dev/ace-part-1/ https://web.archive.org/web/20211023034503/https://blog.t801..., which clearly states that ACE is a port controller - this is not the same as a "USB controller".
- tpmoney 9mo agoDoesn't that linked webarchive page say specifically that the ACE is a "Apple/TI co-designed USB Type-C Port Controller" If that isn't a "USB Controller" what do you mean when you say "USB Controller"?
- deleted 9mo ago[deleted]
- youarentrightjr 9mo ago> Doesn't that linked webarchive page say specifically that the ACE is a "Apple/TI co-designed USB Type-C Port Controller" If that isn't a "USB Controller" what do you mean when you say "USB Controller"? "USB controller" in common parlance means a USB host controller, the hardware that actually controls the USB signals and interfaces with the host CPU(s). They are required no matter if the physical port is type A, B, C, ... A "port controller" is something completely different, but still related to the "USB type C port" specification. It's a piece of logic (in this case in a separate IC) that handles things like negotiating PD, as well as which protocol(s) will be used over the high speed lanes etc. See the section about pin usage in different modes: https://en.wikipedia.org/wiki/USB-C https://en.wikipedia.org/wiki/USB-C comex's comment is inaccurate with respect to the commonly understood meaning of "USB controller" - while that port does have the CC lines going to ACE, the actual USB data lines go to the Apple SoC directly. This is contrasted with a different design where the USB data lines could go to a standalone IC, and that IC is connected to the Apple SoC via PCIe for example. DFU is significantly more complicated in this type of design because it requires bootstrapping and interaction with this external component.
- DannyBee 9mo agoI may be able to resolve this, having hacked a bunch on M1N1 and such - the DFU port is going through a microcontroller with firmware. That is why, for example, it can properly process USB-PD messages that contain vendor defined message codes, even prior to any form of boot, as long as it has any source of power. The firmware on the USB controller is processing that. This is how VDMTool works to be able to mux debug (and do other things) even with the machine otherwise off.
- AceJohnny2 9mo agoThe author did not test the DFU flow, so I'm not sure why they're blaming the DFU port documentation. Certainly there is a bug in the external disk upgrade sequence if switching the disk to a different (also non-DFU? They didn't specify) port solved their problem. But that's not necessarily related to which port is the DFU port. To be clear, DFU (Device Firmware Upgrade) is a standard USB protocol (from 2004!), for a device to receive upgrades from a host. It is a specific port on the mac because that's all the boot-rom can support. This system does not come into play when booting from or upgrading an external disk, as the author was struggling with, because the external disk cannot be a USB Host to drive the DFU. And I'm guessing that the reason macOS doesn't give more details is because macOS is likely not involved in the step that fails (maybe iBoot is?), and they didn't develop a way for the failing step to communicate failure data back to macOS. Yet another UX failure.
- numpad0 9mo agoSituation: - The author is running macOS ARM64 - off of a USB disk - plugged into DFU capable USB-C port - that shouldn't be the DFU one according to docs - attempting to run macOS updater - (supposedly)there's nothing else connected to it Outcomes: - updates were failing and rolling back with cryptic errors - errors persist despite all efforts - -> later magically solved after changing the port - -> the problematic port later revealed to be the DFU port - contradictory to Apple documentation Or at least that's how it reads to me. As for reasons, I don't know why anything that can boot from USB can't from DFU-enabled USB port, but maybe it's configured as a special non-USB debug connector while bootloader is executing.
- AceJohnny2 9mo ago- plugged into DFU capable USB-C port This is what I'm contending. No, I don't think this is true. All he found was the upgrading macOS on the external disk, which as documented must not be on a DFU capable USB-C port, did not work when plugged into a port that was documented to not be DFU. The source the author is referring to, Michael Tsai, indeed found that he had plugged his external disk into the DFU port. The author then (reasonably, but IMHO erroneously) deduced that his problem, also solved by changing ports, must thus have had the same cause. I say it may be confounding factors, and the only way to validate the wrong DFU port hypothesis is putting their mac in DFU mode and then running Recovery Assistant (from another machine) against it, on various ports. Tangentially, it is infuriating that Apple would swap what the DFU port is across generations, as if it wasn't confusing enough. Also... > As for reasons, I don't know why anything that can boot from USB can't from DFU-enabled USB port, but maybe it's configured as a special non-USB debug connector while bootloader is executing. My guess is it's because DFU requires the port to be in Device mode, whereas booting from a external disk requires the port to be in Host mode. Apple care about boot time, so perhaps they don't want to waste time in the boot process to check the port in Device mode for a few secs, then switch to Host mode to try external disk booting.
- deleted 9mo ago[deleted]
- tgma 9mo agoI have dealt with M1 Max and M4 Max MacBook Pros DFU mode many times[1], and the documentation is accurate. The primary DFU port is definitely what Apple says. I don't know, other ports may or may not exhibit DFU-like capabilities also; if so that would be unsupported and does not change correctness of Apple documentation. UPDATE: nevermind--removed a paragraph as it does not appear the root cause is which port is DFU, but a misunderstanding of the DFU process by the blogpost. [1]: at least once per every iOS/macOS device I have purchased to protect against software supply chain attacks when you receive a laptop in mail. DFU-restoring Apple software ensures that the OS you run is not tampered with as long as there is no bootrom exploit or hardware modification.
- Kwpolska 9mo agoThe author followed the "all other MacBooks" case, but it appears that their Mac (a 16-inch model) also has it on the other side than the instructions claim.
- tgma 9mo agoI am reading the post again. It does appear the author is not fully aware what DFU is supposed to do. They are talking about "storage devices" in that context, which is a total misread--their interpretation of DFU seems to be something close to "default boot device." The DFU port is definitely not the singular one on the right side of the device. The documentation debate is about which port on the left side of the device (closer or farther from MagSafe.)
- pvtmert 9mo agoI have been booting from external drives on different hardware since 2007. I was even able to trick Windows XP to boot off of a 12GB SanDisk thumb drive. (Although it was horribly slow!) Coming back to the author's story, as others have pointed out as well, I do not think it is related to the DFU port itself. I think it depends on the BIOS/UEFI firmware which is addressing those ports, and then the bootloader who is responsible for finding the system (root) volume. Nowadays these happen with Volume UUIDs hence it should not matter, at least in theory. But even GRUB adds a hint, as discovery just with UUID may fail. Since we cannot see what actually is happening or see the logs, I would simply say: "Always use the same port for booting and installation." Which usually simplifies the process. I am quite certain "the undocumented DFU port" was the port author initially used to install macOS to the external drive. Maybe on another Mac/machine. When they change the machine, addressing/enumeration of ports may be different, due to how boot process works. Therefore, let's say you used the port=0x3 in the first install, when you change the machine, you need to find the same port=0x3. Thus being the undocumented-DFU-port author mentions. > P.S: Also DFU port is for installing firmware (BIOS/UEFI) to the device even before boot occurs. For example, you should connect one end of a USB cable to a working computer (ie. "master"), another end to the DFU port of target (ie. "slave") while the machine that is off. Some specific sequence of power-key combination puts target machine into DFU-mode, where you can overwrite the firmware (UEFI/BIOS, etc) from the working machine... That is the purpose of DFU. -- Or at least access the internal hard-drive/SSD without actually booting the "slave" machine.
- lapcat 9mo ago> I would simply say: "Always use the same port for booting and installation." Which usually simplifies the process. That would be even worse than not being able to update macOS on the DFU port. I'm supposed to remember which of 3 ports I originally used, forever?? > Maybe on another Mac/machine. When they change the machine No, I did not use another machine. The entire purpose of this install on an external disk was to take screenshots from my MacBook Pro. My other machine, a Mac mini, has a non-retina display, which is not good for that purpose, not to mention that the Mac mini already has multiple boot volumes, so I wouldn't need an external disk with that machine.
- deleted 9mo ago[deleted]
- srinath693 9mo agoRegardless of whether the DFU port documentation is technically wrong or the author misdiagnosed the root cause, the real failure here is that macOS silently spent an hour "installing" an update, then rolled back without any actionable error message. No "hey, try a different port." No diagnostic log surfaced to the user. Just a vague "some updates could not be installed" notification with a "Details" button that shows no details. Apple knows which port each device is connected to. Apple knows which port is the DFU port. If there's a known incompatibility with external disk updates on that port, the OS should refuse to start the update with a clear message, not waste an hour of the user's time and silently fail. This is the kind of UX regression that erodes trust in the platform, especially for power users who are exactly the audience booting from external disks.
- sneak 9mo ago> By the way, Software Update in System Settings allowed my Mac to go to sleep during the “Preparing” phase, despite the fact that the battery was charged to 99%, so when I returned home from a workout I unhappily found 30 minutes remaining. Sigh. Whatever happened to “it just works”? All the people that were fanatically dedicated to the concept of not shipping user-hostile software retired or got laid off or quit. The state of care and level of user compassion in modern macOS is at the nadir.
- relaxing 9mo agoI’d like to know more about that! Why did they quit? Who replaced them?
- sneak 9mo agoThe corporate culture shifted steadily at Apple following Jobs’ death. It was obviously a turning point for the company and while the change wasn’t overnight, in the ten years that followed, a lot of people moved on, because (obviously) Apple will never be Apple under Jobs ever again. Because many of them had been with the company a long time (and were thus old), they were replaced by mostly younger people who had less experience with what makes Apple Apple. In my personal opinion, the soul went out of the company. It wasn’t immediately when Jobs died - to his credit it took more than a decade for the momentum of his vision to die. Today, Apple is just another multinational, nickel and diming their customer base for services revenue, cooperating with the totalitarian surveillance state (not that they have much choice in the police states of the PRC and USA in which they operate/can’t fight city hall), shipping incrementially improved products (and incrementally worse software), and misleading their customers with clever marketing. It’s just business. It used to be something else entirely.
- recursive 9mo agoApple's been shipping user-hostile software for decades. I quit after they closed the gap in the wall that allowed me to add a song to my ipod without going through the monstrosity called iTunes.
- traceroute66 9mo agoThe author complains "For some damn reason, it matters which port your external disk is plugged into when you install or update macOS". The reason is simple and perfectly understandable. DFU is very low level. It happens very early in during Boot ROM and before the Mac has even entered Low-Level Bootloader. Which is why its also USB-C with no Thunderbolt support. Boot ROM code is, by necessity and for robust security, kept to a bare minimum. Bus 0 Receptacle 1 is designated the DFU port in the Boot ROM. Hence the limitation to one port. Widening support to >1 port would mean you would have to introduce extra logic into the Boot ROM code (port iteration, conflict resolution etc.). Hence the K.I.S.S. principle wins. One port.
- astrange 9mo agoInstalling from an external disk has nothing to do with DFU. It's not involved.
- titzer 9mo agoIt's so frustrating when software knows that something is wrong and won't tell you what it is. "An error occurred". Oh, did it now? "There's nothing you can do about it except hit this X. We couldn't be bothered to think about this case or provide you with any information whatsoever that would be useful to either you or future us to diagnose it. Not even an internal code. Not a line number or even a file! But it did occur nonetheless, and we have interrupted your workflow to let you now that it did. And we're not even sorry."
- deleted 9mo ago[deleted]
- KurSix 9mo agoIt's wild that we live in an era where computers are doing real-time ML inference and firmware updates over USB-C, but basic error reporting has regressed to "something happened, good luck"
- KurSix 9mo agoThis feels like a perfect example of Apple's modern "it just works… until it very much doesn't"
- dangus 9mo ago[flagged]
- lapcat 9mo ago> To the article of this piece: are you enlightened yet? > Have you decided yet to stop buying Apple hardware? I'm a professional developer of Mac and iOS software, so I'm enlightened enough to just complain on my blog and then go about my business of making money, rather than throwing away my entire livelihood, especially in this economy.
- dangus 9mo agoThat’s totally fine, but most people are not professional Mac and iOS developers, and most people who are have a company issued laptop. My iOS apps are developed entirely on a Linux system leveraging cross platform frameworks, and App Store Connect is entirely web based. My build system is cloud based, I have never touched Xcode (one of the worst IDEs out there, with a rating below 4 stars on the App Store).
- thenthenthen 9mo agoAll documentation is wrong, well, nearly all!
- tdboorman 9mo agoI believe the docs are just a bit unclear. Your laptop does not have a standard M4 Chip it has an M4 Pro chip. The 14in MacBook Pro comes/came with 3 chips types M4, M4 Pro, M4 Max The model they are referencing is the base M4 and M5 chips - not the Pro or Max chips types which use the other port.
- jackinthehat 9mo agoFeels like a few things are getting conflated. DFU the protocol isn’t the issue — the ambiguity is around which physical port actually exposes DFU at boot, and that seems to vary by SoC variant (base vs Pro/Max), not just by chassis. The docs don’t make that distinction clear. The fact that switching ports fixes the issue strongly suggests boot-ROM-level port routing differences. macOS wouldn’t have visibility there anyway, which explains the lack of diagnostics — but it also means the docs/UX are doing too much hand-waving. This reads less like “DFU is broken” and more like a documentation gap that only shows up in recovery flows — exactly where precision matters most.
- lapcat 9mo ago> Feels like a few things are getting conflated. By whom? > DFU the protocol isn’t the issue I never said it was. > the ambiguity is around which physical port actually exposes DFU at boot Yes. > This reads less like “DFU is broken” I never said that. > and more like a documentation gap The title literally contains "documentation is wrong".