[PATCH net-next v9 0/5] Add Ethernet MAC support for SpacemiT K1
From: Vivian Wang <hidden>
Date: 2025-09-05 11:10:48
Also in:
linux-riscv, lkml, netdev, spacemit
SpacemiT K1 has two gigabit Ethernet MACs with RGMII and RMII support. Add devicetree bindings, driver, and DTS for it. Tested primarily on BananaPi BPI-F3. Basic TX/RX functionality also tested on Milk-V Jupiter. I would like to note that even though some bit field names superficially resemble that of DesignWare MAC, all other differences point to it in fact being a custom design. Based on SpacemiT drivers [1]. These patches are also available at: https://github.com/dramforever/linux/tree/k1/ethernet/v9 [1]: https://github.com/spacemit-com/linux-k1x --- Changes in v9: - Refactor to use phy_interface_mode_is_rgmii - Minor changes - Use netdev_err in more places - Print phy-mode by name on unsupported phy-mode - Link to v8: https://lore.kernel.org/r/20250828-net-k1-emac-v8-0-e9075dd2ca90@iscas.ac.cn (local) Changes in v8: - Use devres to do of_phy_deregister_fixed_link on probe failure or remove - Simplified control flow in a few places with early return or continue - Minor changes - Removed some unneeded parens in emac_configure_{tx,rx} - Link to v7: https://lore.kernel.org/r/20250826-net-k1-emac-v7-0-5bc158d086ae@iscas.ac.cn (local) Changes in v7: - Removed scoped_guard usage - Renamed error handling path labels after destinations - Fix skb free error handling path in emac_start_xmit and emac_tx_mem_map - Cancel tx_timeout_task to prevent schedule_work lifetime problems - Minor changes: - Remove unnecessary timer_delete_sync in emac_down - Use dev_err_ratelimited in a few more places - Cosmetic fixes in error messages - Link to v6: https://lore.kernel.org/r/20250820-net-k1-emac-v6-0-c1e28f2b8be5@iscas.ac.cn (local) Changes in v6: - Implement pause frame support - Minor changes: - Convert comment for emac_stats_update() into assert_spin_locked() - Cosmetic fixes for some comments and whitespace - emac_set_mac_addr() is now refactored - Link to v5: https://lore.kernel.org/r/20250812-net-k1-emac-v5-0-dd17c4905f49@iscas.ac.cn (local) Changes in v5: - Rebased on v6.17-rc1, add back DTS now that they apply cleanly - Use standard statistics interface, handle 32-bit statistics overflow - Minor changes: - Fix clock resource handling in emac_resume - Ratelimit the message in emac_rx_frame_status - Add ndo_validate_addr = eth_validate_addr - Remove unnecessary parens in emac_set_mac_addr - Change some functions that never fail to return void instead of int - Minor rewording - Link to v4: https://lore.kernel.org/r/20250703-net-k1-emac-v4-0-686d09c4cfa8@iscas.ac.cn (local) Changes in v4: - Resource handling on probe and remove: timer_delete_sync and of_phy_deregister_fixed_link - Drop DTS changes and dependencies (will send through SpacemiT tree) - Minor changes: - Remove redundant phy_stop() and setting of ndev->phydev - Fix error checking for emac_open in emac_resume - Fix one missed dev_err -> dev_err_probe - Fix type of emac_start_xmit - Fix one missed reverse xmas tree formatting - Rename some functions for consistency between emac_* and ndo_* - Link to v3: https://lore.kernel.org/r/20250702-net-k1-emac-v3-0-882dc55404f3@iscas.ac.cn (local) Changes in v3: - Refactored and simplified emac_tx_mem_map - Addressed other minor v2 review comments - Removed what was patch 3 in v2, depend on DMA buses instead - DT nodes in alphabetical order where appropriate - Link to v2: https://lore.kernel.org/r/20250618-net-k1-emac-v2-0-94f5f07227a8@iscas.ac.cn (local) Changes in v2: - dts: Put eth0 and eth1 nodes under a bus with dma-ranges - dts: Added Milk-V Jupiter - Fix typo in emac_init_hw() that broke the driver (Oops!) - Reformatted line lengths to under 80 - Addressed other v1 review comments - Link to v1: https://lore.kernel.org/r/20250613-net-k1-emac-v1-0-cc6f9e510667@iscas.ac.cn (local) --- Vivian Wang (5): dt-bindings: net: Add support for SpacemiT K1 net: spacemit: Add K1 Ethernet MAC riscv: dts: spacemit: Add Ethernet support for K1 riscv: dts: spacemit: Add Ethernet support for BPI-F3 riscv: dts: spacemit: Add Ethernet support for Jupiter .../devicetree/bindings/net/spacemit,k1-emac.yaml | 81 + arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts | 46 + arch/riscv/boot/dts/spacemit/k1-milkv-jupiter.dts | 46 + arch/riscv/boot/dts/spacemit/k1-pinctrl.dtsi | 48 + arch/riscv/boot/dts/spacemit/k1.dtsi | 22 + drivers/net/ethernet/Kconfig | 1 + drivers/net/ethernet/Makefile | 1 + drivers/net/ethernet/spacemit/Kconfig | 29 + drivers/net/ethernet/spacemit/Makefile | 6 + drivers/net/ethernet/spacemit/k1_emac.c | 2183 ++++++++++++++++++++ drivers/net/ethernet/spacemit/k1_emac.h | 426 ++++ 11 files changed, 2889 insertions(+) --- base-commit: 062b3e4a1f880f104a8d4b90b767788786aa7b78 change-id: 20250606-net-k1-emac-3e181508ea64 Best regards, -- Vivian "dramforever" Wang