On Wed, Oct 04, 2023 at 04:28:31PM -0700, Jakub Kicinski wrote: > On Sat, 30 Sep 2023 12:39:44 +0200 Robert Marko wrote: > > + ret = of_property_read_string(dev->of_node, "firmware-name", > > + &fw_name); > > Perhaps a well established weirdness of the embedded world but why read > the fw name from OF?! You can identify what PHY it is and decide the > file name based on that. And also put that fw name in MODULE_FIRMWARE() > so that initramfs can be built with appropriate file in place :S The Aquantia PHY and its `firmware` is just weird. It is more than just firmware, it also contains what i think they call provisioning. That is basically the reset defaults for registers. And not everything is documented, and i think parts of that provision contains SERDES eye configuration. So i think you end up with a custom firmware per board? And you can never trust the firmware in one device will do the same thing as a different firmware in another device, because the reset defaults are a bit fuzzy. The PHY driver is somewhat built on sand, since you cannot really trust any register to have any specific reset value. So i can understand putting the board specific firmware name in DT, and that the firmware will never be in linux-firmware because it would not scale, and there never being one firmware usable for all boards. And this odd way of doing things means the usual mechanisms for getting the firmware in initramfs does not work. I suppose the question is, do we want to say this is all too ugly for Linux, solve it in the bootloader, or spend the extra $0.50 for a flash chip and put the firmware in at the factory. As a kernel developer i would want the boot loader to solve this, so i can TFTP boot the kernel. I would also like having a rescue mechanism for when i brick Linux on the box and need to boot a Debian install image to recover it. Andrew