From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E3CE628C5B1 for ; Thu, 29 Jan 2026 04:29:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769660969; cv=none; b=KsbJIdoNyHFL3NaOTzD6uo+26ZEiz3S5bvgoKW8H69dXk2wP46o2qPNKfblaPBvHQwr3TVw8vjr0+tPbCp6CDr/xKEXQ1eWK1HDwalgCtofTy7RNAAJ49O+FOQFZZDucei0rGkACN3B89uJeF8VjfYufUxegzutbvAR4V+Yayys= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769660969; c=relaxed/simple; bh=umLeoIezuuzWDN9KcyKP6hmewbYcA3GAdo8L2bv2ZrA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=m7EL5h7qLIrkTuqo/wNMAhv1LxgpakjyTx3toMxlvhVa/Q5w6tHUEDRJPo0HOGPuSHXLjhG3CbY0HytGzWIcS7pwCau5+H8Yep+dvUhQvmp+7iRMTC9pF6m8YbHdKpoO48Z3/oRleTbkahQzL7c0nVKvsmgbUl5rbHBXs2+mw7c= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZOaZA8C0; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZOaZA8C0" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4806f3fc50bso4846095e9.0 for ; Wed, 28 Jan 2026 20:29:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769660966; x=1770265766; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=nLsfEdXp1ghYI/zV3x1liW6kVNIuPDvLp5lPLO4doYE=; b=ZOaZA8C0o/Tf235t+A/S/cl8EPfsJONJNNwqLA6ghOTu7fV3xPyaKkswSE4Xw+MNM5 JHr3vVww1hJarqL0vlDXiueQMD/mFjsixebWvucthWz2Nf2rMvKHHx16eAHT9rxlyMIi peEem6q1ak6NYI3j9lwsuilF3U7tfjTJ7z0oK5fE1PLa2kNTyF9IQ+JzLZjnD25QbxBO cuN+mPYKDhn5LhPtvvgzKd/YXXcvlItawxarTJxpX+HD4Q2YVuhW7PvYiP3tlbwxhVEg /U7AzjrOxlwHsKZNXI0yQFWvmJlWJNR6ZLyYAOiHD2ZuTb7FurD8PE6nhmgCkzLSiidD YK6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769660966; x=1770265766; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=nLsfEdXp1ghYI/zV3x1liW6kVNIuPDvLp5lPLO4doYE=; b=jLiWPD7IDOZWMe7xZvTl7Dgh2MGbI475xAlONMGoUFpH8c+f0dX66D2zn6MGMlFau8 rgoulIc5UrSm2A7/ZFvG4cvBzimF4mLeiri7wbxNkedsUwRXpYF8y5RH9BfVhY81fN90 qb6ZwGfldeLWDk5ig5Y9J7J01udRLCJ5R4aIRr3lVmMWcPA3r6y8Q08A6wSW9ApqK35r NiItYMv9KuZ/YDadn+KVtb0mUmc0u9vyB6BNwh2Ik4VPPSwIyw1BN7CnPyUUvODpqcnZ 8CEynpUVPfWcC4HCbz//mb5yWzQ3oGVd7+J0TBSpx8rPLu8jeIWqotTk4pusbMOR7m68 daJQ== X-Gm-Message-State: AOJu0YzmCjNfQM43GUowBqcpyJg2fJdjO6hdL8dU13uHwxSI4DVFSUAh gW2sd4dAzbli5eigGUDqGMvA1iJijRaFlFLf2/31yteAUsQZRbEctCqSanHVIuFfeA== X-Gm-Gg: AZuq6aJvX6n4BalmDOmzEfjhGAxVui8PAVpHllydtxpaHeqEyUvBRThEIUKXMspxwmm XlBGg4wB5GUrf4t0sKUu5pHT8yUPbnIyKcja8SAB/JGklE/Sc8wTxXMxoE1nlYvwMLUHCmIkQUz BNEE+GgF+nXmpjot0RxVLKcJgm/KqfZgKpXZqFFJselze2DNyu68IMtJzXQorjOGbMDgbGAfETY t1niVHkRHJVjKNbCVX16IbLiesuODlkQDPCFtAgygejo++Jxmp8HpBKbLlZqmGNRL/5BATfY931 fuKqrmfpC+eUZ3jr/qJM++kWC/ftLQLgXKcCMlGm5U5OJ5e0NZpTgzdby9+k2xgZ/m17NiKTec9 /izJF5dR117WdNiaI5Wj3amOYMEsDmfTXJ8Jait6P4X1afkZXcZHtFBDxr7uVD26ZkBaO+r9PM/ KJgSO6 X-Received: by 2002:a05:600c:468c:b0:46e:59bd:f7d3 with SMTP id 5b1f17b1804b1-48069c54167mr87577045e9.20.1769660965693; Wed, 28 Jan 2026 20:29:25 -0800 (PST) Received: from localhost ([2a02:169:c218:1:5130:f7b6:9c17:fb83]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-435e10e474csm11650096f8f.2.2026.01.28.20.29.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jan 2026 20:29:23 -0800 (PST) From: Tomas Hlavacek To: netdev@vger.kernel.org Cc: linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dlan@kernel.org, wangruikang@iscas.ac.cn, Tomas Hlavacek , stable@vger.kernel.org Subject: [PATCH v3] net: spacemit: k1-emac: fix jumbo frame support Date: Thu, 29 Jan 2026 05:29:08 +0100 Message-ID: <20260129042908.410326-1-tmshlvck@gmail.com> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The driver never programs the MAC frame size and jabber registers, causing the hardware to reject frames larger than the default 1518 bytes even when larger DMA buffers are allocated. Program MAC_MAXIMUM_FRAME_SIZE, MAC_TRANSMIT_JABBER_SIZE, and MAC_RECEIVE_JABBER_SIZE based on the configured MTU. Also fix the maximum buffer size from 4096 to 4095, since the descriptor buffer size field is only 12 bits. Account for double VLAN tags in frame size calculations. Fixes: bfec6d7f2001 ("net: spacemit: Add K1 Ethernet MAC") Cc: stable@vger.kernel.org Signed-off-by: Tomas Hlavacek --- v3: - Set all three frame/jabber registers, fix 12-bit buffer size field overflow, use actual frame size with VLAN headroom consistently. v2: https://lore.kernel.org/netdev/20260126171449.83288-1-tmshlvck@gmail.com/ - Added Fixes tag and Cc stable. v1: https://lore.kernel.org/netdev/20260126135919.77168-1-tmshlvck@gmail.com/ --- drivers/net/ethernet/spacemit/k1_emac.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/spacemit/k1_emac.c b/drivers/net/ethernet/spacemit/k1_emac.c index 220eb5ce7583..cd6879d7434c 100644 --- a/drivers/net/ethernet/spacemit/k1_emac.c +++ b/drivers/net/ethernet/spacemit/k1_emac.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -38,7 +39,7 @@ #define EMAC_DEFAULT_BUFSIZE 1536 #define EMAC_RX_BUF_2K 2048 -#define EMAC_RX_BUF_4K 4096 +#define EMAC_RX_BUF_MAX FIELD_MAX(RX_DESC_1_BUFFER_SIZE_1_MASK) /* Tuning parameters from SpacemiT */ #define EMAC_TX_FRAMES 64 @@ -202,8 +203,7 @@ static void emac_init_hw(struct emac_priv *priv) { /* Destination address for 802.3x Ethernet flow control */ u8 fc_dest_addr[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 }; - - u32 rxirq = 0, dma = 0; + u32 rxirq = 0, dma = 0, frame_sz; regmap_set_bits(priv->regmap_apmu, priv->regmap_apmu_offset + APMU_EMAC_CTRL_REG, @@ -228,6 +228,15 @@ static void emac_init_hw(struct emac_priv *priv) DEFAULT_TX_THRESHOLD); emac_wr(priv, MAC_RECEIVE_PACKET_START_THRESHOLD, DEFAULT_RX_THRESHOLD); + /* Set maximum frame size and jabber size based on configured MTU, + * accounting for Ethernet header, double VLAN tags, and FCS. + */ + frame_sz = priv->ndev->mtu + ETH_HLEN + 2 * VLAN_HLEN + ETH_FCS_LEN; + + emac_wr(priv, MAC_MAXIMUM_FRAME_SIZE, frame_sz); + emac_wr(priv, MAC_TRANSMIT_JABBER_SIZE, frame_sz); + emac_wr(priv, MAC_RECEIVE_JABBER_SIZE, frame_sz); + /* Configure flow control (enabled in emac_adjust_link() later) */ emac_set_mac_addr_reg(priv, fc_dest_addr, MAC_FC_SOURCE_ADDRESS_HIGH); emac_wr(priv, MAC_FC_PAUSE_HIGH_THRESHOLD, DEFAULT_FC_FIFO_HIGH); @@ -924,14 +933,14 @@ static int emac_change_mtu(struct net_device *ndev, int mtu) return -EBUSY; } - frame_len = mtu + ETH_HLEN + ETH_FCS_LEN; + frame_len = mtu + ETH_HLEN + 2 * VLAN_HLEN + ETH_FCS_LEN; if (frame_len <= EMAC_DEFAULT_BUFSIZE) priv->dma_buf_sz = EMAC_DEFAULT_BUFSIZE; else if (frame_len <= EMAC_RX_BUF_2K) priv->dma_buf_sz = EMAC_RX_BUF_2K; else - priv->dma_buf_sz = EMAC_RX_BUF_4K; + priv->dma_buf_sz = EMAC_RX_BUF_MAX; ndev->mtu = mtu; @@ -2005,7 +2014,7 @@ static int emac_probe(struct platform_device *pdev) ndev->hw_features = NETIF_F_SG; ndev->features |= ndev->hw_features; - ndev->max_mtu = EMAC_RX_BUF_4K - (ETH_HLEN + ETH_FCS_LEN); + ndev->max_mtu = EMAC_RX_BUF_MAX - (ETH_HLEN + 2 * VLAN_HLEN + ETH_FCS_LEN); ndev->pcpu_stat_type = NETDEV_PCPU_STAT_DSTATS; priv = netdev_priv(ndev); -- 2.52.0