mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
amd-xgbe: add support for giant packet size
AMD XGBE hardware supports giant Ethernet frames up to 16K bytes. Add support for configuring and enabling giant packet handling in the driver. - Define new register fields and macros for giant packet support. - Update the jumbo frame configuration logic to enable giant packet mode when MTU exceeds the jumbo threshold. Acked-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com> Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20250701121929.319690-1-Raju.Rangoju@amd.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
7d2dabaa17
commit
9e2a7ad4ae
|
|
@ -364,6 +364,10 @@
|
|||
#define MAC_RCR_CST_WIDTH 1
|
||||
#define MAC_RCR_DCRCC_INDEX 3
|
||||
#define MAC_RCR_DCRCC_WIDTH 1
|
||||
#define MAC_RCR_GPSLCE_INDEX 6
|
||||
#define MAC_RCR_GPSLCE_WIDTH 1
|
||||
#define MAC_RCR_WD_INDEX 7
|
||||
#define MAC_RCR_WD_WIDTH 1
|
||||
#define MAC_RCR_HDSMS_INDEX 12
|
||||
#define MAC_RCR_HDSMS_WIDTH 3
|
||||
#define MAC_RCR_IPC_INDEX 9
|
||||
|
|
@ -374,6 +378,8 @@
|
|||
#define MAC_RCR_LM_WIDTH 1
|
||||
#define MAC_RCR_RE_INDEX 0
|
||||
#define MAC_RCR_RE_WIDTH 1
|
||||
#define MAC_RCR_GPSL_INDEX 16
|
||||
#define MAC_RCR_GPSL_WIDTH 14
|
||||
#define MAC_RFCR_PFCE_INDEX 8
|
||||
#define MAC_RFCR_PFCE_WIDTH 1
|
||||
#define MAC_RFCR_RFE_INDEX 0
|
||||
|
|
@ -412,6 +418,8 @@
|
|||
#define MAC_TCR_VNE_WIDTH 1
|
||||
#define MAC_TCR_VNM_INDEX 25
|
||||
#define MAC_TCR_VNM_WIDTH 1
|
||||
#define MAC_TCR_JD_INDEX 16
|
||||
#define MAC_TCR_JD_WIDTH 1
|
||||
#define MAC_TIR_TNID_INDEX 0
|
||||
#define MAC_TIR_TNID_WIDTH 16
|
||||
#define MAC_TSCR_AV8021ASMEN_INDEX 28
|
||||
|
|
|
|||
|
|
@ -2850,9 +2850,19 @@ static void xgbe_config_jumbo_enable(struct xgbe_prv_data *pdata)
|
|||
{
|
||||
unsigned int val;
|
||||
|
||||
val = (pdata->netdev->mtu > XGMAC_STD_PACKET_MTU) ? 1 : 0;
|
||||
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
|
||||
if (pdata->netdev->mtu > XGMAC_JUMBO_PACKET_MTU) {
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, GPSL,
|
||||
XGMAC_GIANT_PACKET_MTU);
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, WD, 1);
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_TCR, JD, 1);
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, GPSLCE, 1);
|
||||
} else {
|
||||
val = pdata->netdev->mtu > XGMAC_STD_PACKET_MTU ? 1 : 0;
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, GPSLCE, 0);
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, WD, 0);
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_TCR, JD, 0);
|
||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
|
||||
}
|
||||
}
|
||||
|
||||
static void xgbe_config_mac_speed(struct xgbe_prv_data *pdata)
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ int xgbe_config_netdev(struct xgbe_prv_data *pdata)
|
|||
|
||||
netdev->priv_flags |= IFF_UNICAST_FLT;
|
||||
netdev->min_mtu = 0;
|
||||
netdev->max_mtu = XGMAC_JUMBO_PACKET_MTU;
|
||||
netdev->max_mtu = XGMAC_GIANT_PACKET_MTU - XGBE_ETH_FRAME_HDR;
|
||||
|
||||
/* Use default watchdog timeout */
|
||||
netdev->watchdog_timeo = 0;
|
||||
|
|
|
|||
|
|
@ -80,11 +80,13 @@
|
|||
#define XGBE_IRQ_MODE_EDGE 0
|
||||
#define XGBE_IRQ_MODE_LEVEL 1
|
||||
|
||||
#define XGBE_ETH_FRAME_HDR (ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN)
|
||||
#define XGMAC_MIN_PACKET 60
|
||||
#define XGMAC_STD_PACKET_MTU 1500
|
||||
#define XGMAC_MAX_STD_PACKET 1518
|
||||
#define XGMAC_JUMBO_PACKET_MTU 9000
|
||||
#define XGMAC_MAX_JUMBO_PACKET 9018
|
||||
#define XGMAC_GIANT_PACKET_MTU 16368
|
||||
#define XGMAC_ETH_PREAMBLE (12 + 8) /* Inter-frame gap + preamble */
|
||||
|
||||
#define XGMAC_PFC_DATA_LEN 46
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user