So, mainline boots! However, with only access to a console over UART, copying files to/from the S3 involves rebooting
to recovery mode, plugging into USB, and pushing the file using Android's debug bridge,
adb. This is... painful.
Fortunately, the S3 and Note 2 include a BCM4334 for WiFi + Bluetooth
functionality. For now, I'm going to focus on WiFi - although Bluetooth shouldn't be too tricky in the future.
My first approach was to port the code from Tizen to mainline - unsurprisingly, things changed quite a bit between 4.13 and 3.10. After much hacking, I came up with this not awful looking patch to enable the external 32khz clock, and this ugly hack to enable the WL_REG pin.
So, I sent the clock patch to several mailing lists (a daunting task first time around, for sure). Fortunately, I did nothing terribly wrong (yay!) After some review, the existence of mmc-pwrseq-simple was pointed out to me, which does exactly what is needed - d'oh. One simple patch later and we're in business - almost.
The final step is to ensure that the correct firmware (from linux-firmware) and that the correct "nvram calibration" file is in /lib/firmware/brcm/brcmfmac4334-sdio.txt. I have no idea what this file does, exactly (calibrates something, i guess?), but it's important. It can also be found in any Android ROM for the device, "nvram_net.txt" somewhere in /system. With that, the wifi interface can be brought up successfully and used.