Hi Daniel, I have started to review this patchset. I expect the process to take several days and will clearly let you know when I am done. Thanks, Mathieu On Thu, Aug 04, 2022 at 11:08:03PM +0200, Daniel Kestrel wrote: > There is a popular set of Lantiq xrx200 router boards by AVM in > Germany (AVM Fritzbox 3390, 3490, 5490, 5491 and 7490) which > have the strange implementation of having the wifi cards > connected to a separate memory only ATH79 based SoC. It has no > persistent storage and no access to any resource on the Lantiq > host, but is connect to the Lantiq GSWIP switch on an additional > fixed internal network port. > This kernel module is to support booting the secondary SoC called > Wireless Assistant Support Processor (WASP). > After turning it on, a small network boot firmware is sent to > the SoC by using mdio and when it is started, an initramfs > linux image is sent to the SoC using raw ethernet frames. > > The whole procedure takes about 6 seconds, if there is no error. > So far tested on 3490, 5490 and 7490 devices based on OpenWrt, 3390 > takes about 20 seconds. > > Patch 1/3 adds the vendor name > Patch 2/3 adds the dt-bindings > Patch 3/3 adds the remoteproc driver > > To build and run, there is OpenWrt PR 5075. > > Please review. > > Changes in v5: > - Replace names for properties and descriptions as requested in the > device tree documentation and change the driver to accept them > - Change example in the device tree documentation > - Restructure constants and defines in the beginning of the driver > source for better readability > - Combine m_start_addr and m_exec_addr into a single constant and > change avm_wasp_netboot_write_header to use only this one constant > - Change variable startup_gpio to power_gpio in driver > > Changes in v4: > - Fix compiler warnings with W=2 option > > Changes in v3: > - Replace generic avm,fritzboxx490-wasp with actual device names for > device tree documentation and change the driver to accept them > - Add maxItems to device tree documentation > - Change example in the device tree documentation > - Fix wait time to make the Wasp upload work for 3390 more reliable > - Enable the SOC on driver load, use reset instead of disable/enable > while driver is loaded and disable on unloading the driver > - Change some messages printed to adhere to standards (e.g. remove !) > > Changes in v2: > - Remove firmware names from dt-binding and add as kmod parameters > - Rename other bindings with vender prefix and fix gpios suffix > - Change descriptions in dt-binding > - Replace/Remove asynch load of firmware with request_firmware_direct > - Fix comments to use the errno define instead of the number > - Implement wait loops with read_poll_timeout() macro > - Wrap read_poll_timeout() macro in function saving 6k module size > - Return -ETIMEDOUT for all errors returned by read_poll_timeout > - Replace mdio writes/reads with mdiobus_write and mdiobus_read and add > return codes and their handling > - Remove mutex for mdiobus_lock and add return code checking for mdio ops > - Replaced the mdio register array with directly specifying registers > - As a result of the previous 3 changes remove the functions for mdio > - Consolidate error messages for mdio writes into a single one saved 1k > for module size > - Replaced mdelay with usleep_range saved 0,7k module size > - Remove unneeded include <linux/interrupt.h> and <linux/error.h> > - Wrap all blocks with {} and fix some indentation errors > - Change const len in to size_t in avm_wasp_netboot_write_chunk > - Make all methods static to fix kernel bot warning > - Change read variable name in avm_wasp_load_initramfs_image > - Change ssize_t variables to size_t in avm_wasp_load_initramfs_image > - avm_wasp_netboot_write_chunk change for loop for 2 byte divisibility > - Change uint32_t to u32 > - Change int count = -1 to u32 with U32_MAX initialisation > - Add check for firmware len divisable by 4 > - Replace big endian bit shift operations with be32_to_cpu > - Change loop to write 14 byte firmware chuncks like suggested > - Change WASP_CHUNK_SIZE to ARRAY_SIZE(mac_data) for readability > - Change int done to boolean > - Change unsigned ints to u32 > - Change int to size_t for send_len > - Use int for numbytes because kernel_recvmsg returns error or number > - Two sockets are not needed, so reduce to one socket usage > - Remove struct timeval definition, replace with __kernel_old_timeval > - __kernel_old_timeval is depracated, but arch mips is 32bit platform > - Replace &avmwasp->pdev->dev with local dev > - Check if wasp network interface is up and fail if not in start method > - Remove setsockopt for SO_REUSEADDR and SO_BINDTODEVICE > - Remove packet_counter > - Move firmware and firmware_end out of RESP_DISCOVER to make sure that > they are initialized if RESP_DISCOVER is not happening first > - indend break; > - Move second half of the send/receive paket while loop to RESP_OK and > let RESP_DISCOVER fall through > - Remove bringing up the wasp network interface > - Check if wasp network interface is up in probe and defer if not > - Remove the check for the root device and replace it with match data > for WASP device identification > - Move of_read and find of mdio bus to rproc_start but delete reference > after using it in the rproc_start method > - Replace dev_set_drvdata with platform_set_drvdata > - Remove avm_wasp_rproc_boot_addr because its not needed and move > setting the fw struct pointer to avm_wasp_rproc_load > - Move avm_wasp.h definitions to kernel module > > Reported-by: kernel test robot <lkp@xxxxxxxxx> > > Daniel Kestrel (3): > dt-bindings: vendor-prefixes: Add AVM > dt-bindings: remoteproc: Add AVM WASP > remoteproc: Add AVM WASP driver > > .../bindings/remoteproc/avm,wasp-rproc.yaml | 61 + > .../devicetree/bindings/vendor-prefixes.yaml | 2 + > drivers/remoteproc/Kconfig | 10 + > drivers/remoteproc/Makefile | 1 + > drivers/remoteproc/avm_wasp.c | 1051 +++++++++++++++++ > 5 files changed, 1125 insertions(+) > create mode 100644 Documentation/devicetree/bindings/remoteproc/avm,wasp-rproc.yaml > create mode 100644 drivers/remoteproc/avm_wasp.c > > -- > 2.17.1 >