upload_protocol is listed per board but is implemented per platform.
I was having an issue where “upload_protocol = esptool” regularly failed at the end of the upload when switching from framework “arduino” to “espidf, arduino”. But uploading during debugging worked so I wanted to try that. I eventually found out that “upload_protocol = esp-builtin” was a valid option by looking at the platform source code. I didn’t find it when looking at some boards using the framework, but I have later seen that it is listed for some.
Oh it looks all(?) the boards that have the S3 module does list all(?) protocols.
But would a different official board, in general, list all upload_protocol values that apply to the same type of ESP32 module. Ex a board without JTAG-pins (for whatever reason) probably wouldn’t list esp-prog, even though the module can be programmed using esp-prog.