Apple's MacBook Pro DFU port documentation is wrong - Comments

Apple's MacBook Pro DFU port documentation is wrong

executerh

[dead]

vlovich123

I’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

ChatGPT is wrong. The DFU port does go through a USB controller with firmware. [1]

[1] https://asahilinux.org/docs/hw/soc/usb-pd/

AceJohnny2

The 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

  Situation:
- 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.

j16sdiz

The author was not saying the document labeled wrong port as DFU port.

He is saying the documented _behaviour_ of DFU port is wrong (or, at least, in complete.)

watt

The author just wants to apply system update, and it should "just work". The DFU part is just a distraction, what happened to "just works", as they point out in the article. We should not even _know_ anything about DFU unless we actually _are_ updating firmware.

lapcat

> The author did not test the DFU flow

I'd rather not. I'm not even sure that I have all the prerequisites on hand.

> I'm not sure why they're blaming the DFU port documentation.

1) The documentation says that macOS cannot be updated on the DFU port.

2) Switching ports allowed my macOS update to succeed after repeated failures on one port.

3) The 14-inch MacBook Pro with M4 chip is documented as different from all other models, but strangely, not the 16-inch MacBook Pro with M4 chip.

You don't present any alternative theory for the behavior, just assert that I'm wrong.

tgma

I 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

The 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.

altairprime

Isn't the OS untampered so long as booting into rescue mode > startup security shows it to be in sealed/verified mode?

lapcat

> it does not appear the root cause is which port is DFU, but a misunderstanding of the DFU process by the blogpost.

The blog post does not even discuss the DFU process.

pvtmert

I 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

> 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.

srinath693

Regardless 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

> 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

I’d like to know more about that! Why did they quit? Who replaced them?

executerh

[dead]

vlovich123

I’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

ChatGPT is wrong. The DFU port does go through a USB controller with firmware. [1]

[1] https://asahilinux.org/docs/hw/soc/usb-pd/

AceJohnny2

The 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

  Situation:
- 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.

j16sdiz

The author was not saying the document labeled wrong port as DFU port.

He is saying the documented _behaviour_ of DFU port is wrong (or, at least, in complete.)

watt

The author just wants to apply system update, and it should "just work". The DFU part is just a distraction, what happened to "just works", as they point out in the article. We should not even _know_ anything about DFU unless we actually _are_ updating firmware.

lapcat

> The author did not test the DFU flow

I'd rather not. I'm not even sure that I have all the prerequisites on hand.

> I'm not sure why they're blaming the DFU port documentation.

1) The documentation says that macOS cannot be updated on the DFU port.

2) Switching ports allowed my macOS update to succeed after repeated failures on one port.

3) The 14-inch MacBook Pro with M4 chip is documented as different from all other models, but strangely, not the 16-inch MacBook Pro with M4 chip.

You don't present any alternative theory for the behavior, just assert that I'm wrong.

tgma

I 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

The 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.

altairprime

Isn't the OS untampered so long as booting into rescue mode > startup security shows it to be in sealed/verified mode?

lapcat

> it does not appear the root cause is which port is DFU, but a misunderstanding of the DFU process by the blogpost.

The blog post does not even discuss the DFU process.

pvtmert

I 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

> 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.

srinath693

Regardless 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

> 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

I’d like to know more about that! Why did they quit? Who replaced them?