WARNING : This procedure is quite risky and you may end up bricking your mac. I am not responsible for what you do with these instructions. Be sure to know what you are doing before doing it.
While looking at the various updates available for my MacBook Air I also noticed one for the SMC (http://support.apple.com/kb/DL1560). So I downloaded it and uncompressed it using the same technique as used for the EFI firmware
Now the content is a bit different. In the payload directory we have the following files :
- SmcFlasher.efi
- MBA13.smc
- VerifyRequirements
In the scripts directory there is an interresting perl script in postinstall_actions called blessFirmware that executes the VerifyRequirements program (which, from the strings present in it, apparently checks if the power adapter is plugged and things like that). Then, if it is successful, blesses the root partition with the SmcFlasher as firmware and MBA13.smc as payload. From what I understand this means that on the next reboot the SmcFlasher.efi application will be run by the EFI BIOS using the MBA13.smc file as payload.
Installing an EFI shell
What I did is that I installed refind (after trying to install an efi shell directly and almost bricking my MacBook Air). You can find it here (I won't go into details on how to install it). Then you have to install the EFI shell itself so that refind can start it.
I used this page and downloaded the x86_64 uefi shell v1 (after trying the v2, which doesn't work on my MBA). Put the file on your efi partition in /boot/efi/EFI/tools under the name shell.efi so that refind finds it.
Now if you reboot refind should have a shell icon on the bottom and if you execute it it should give you a shell.
Executing the firmware update EFI application
Now if you reboot into an EFI shell and try running SmcFlasher.efi directly it won't work, I was wondering why and remembered reading on here :
thin—This program is a trivial utility that splits "fat" EFI binaries, which are sometimes used on Macs, into their component 32- and 64-bit versions. This is useful because ordinary UEFI-based PCs can't use Apple's proprietary "fat" binaries, but the single-architecture binaries that make up the "fat" binaries are often useful. So I wondered if it was the case of this EFI application. I ran the thin utility on it and it yielded x64 and ia32 binaries : good !
After that I tried several combinations of SmcFlasher.efi with the firmware file and it never worked, until I stumbled upon this webpage that uses it with the -LoadApp argument. I rebooted in my EFI shell and did :
SmcFlasher.efi -LoadApp MBA13.smc
and boom ! My SMC firmware is now up to date.
Other firmwares
From what I have seen the HardDrive firmware updates use the same mechanism : an EFI application that actually does the flashing using a firmware file. Unfortunately there are no updates for my particular SSD so I can't really test it but the process should be the same.