@@ -782,7 +782,7 @@ static int gem_rx(struct macb *bp, int budget)
782
782
}
783
783
/* now everything is ready for receiving packet */
784
784
bp -> rx_skbuff [entry ] = NULL ;
785
- len = MACB_BFEXT ( RX_FRMLEN , ctrl ) ;
785
+ len = ctrl & bp -> rx_frm_len_mask ;
786
786
787
787
netdev_vdbg (bp -> dev , "gem_rx %u (len %u)\n" , entry , len );
788
788
@@ -828,7 +828,7 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
828
828
struct macb_dma_desc * desc ;
829
829
830
830
desc = macb_rx_desc (bp , last_frag );
831
- len = MACB_BFEXT ( RX_FRMLEN , desc -> ctrl ) ;
831
+ len = desc -> ctrl & bp -> rx_frm_len_mask ;
832
832
833
833
netdev_vdbg (bp -> dev , "macb_rx_frame frags %u - %u (len %u)\n" ,
834
834
macb_rx_ring_wrap (first_frag ),
@@ -1633,7 +1633,10 @@ static void macb_init_hw(struct macb *bp)
1633
1633
config |= MACB_BF (RBOF , NET_IP_ALIGN ); /* Make eth data aligned */
1634
1634
config |= MACB_BIT (PAE ); /* PAuse Enable */
1635
1635
config |= MACB_BIT (DRFCS ); /* Discard Rx FCS */
1636
- config |= MACB_BIT (BIG ); /* Receive oversized frames */
1636
+ if (bp -> caps | MACB_CAPS_JUMBO )
1637
+ config |= MACB_BIT (JFRAME ); /* Enable jumbo frames */
1638
+ else
1639
+ config |= MACB_BIT (BIG ); /* Receive oversized frames */
1637
1640
if (bp -> dev -> flags & IFF_PROMISC )
1638
1641
config |= MACB_BIT (CAF ); /* Copy All Frames */
1639
1642
else if (macb_is_gem (bp ) && bp -> dev -> features & NETIF_F_RXCSUM )
@@ -1642,8 +1645,13 @@ static void macb_init_hw(struct macb *bp)
1642
1645
config |= MACB_BIT (NBC ); /* No BroadCast */
1643
1646
config |= macb_dbw (bp );
1644
1647
macb_writel (bp , NCFGR , config );
1648
+ if ((bp -> caps | MACB_CAPS_JUMBO ) && bp -> jumbo_max_len )
1649
+ gem_writel (bp , JML , bp -> jumbo_max_len );
1645
1650
bp -> speed = SPEED_10 ;
1646
1651
bp -> duplex = DUPLEX_HALF ;
1652
+ bp -> rx_frm_len_mask = MACB_RX_FRMLEN_MASK ;
1653
+ if (bp -> caps | MACB_CAPS_JUMBO )
1654
+ bp -> rx_frm_len_mask = MACB_RX_JFRMLEN_MASK ;
1647
1655
1648
1656
macb_configure_dma (bp );
1649
1657
@@ -2685,10 +2693,12 @@ static const struct macb_config emac_config = {
2685
2693
};
2686
2694
2687
2695
static const struct macb_config zynqmp_config = {
2688
- .caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE ,
2696
+ .caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE |
2697
+ MACB_CAPS_JUMBO ,
2689
2698
.dma_burst_length = 16 ,
2690
2699
.clk_init = macb_clk_init ,
2691
2700
.init = macb_init ,
2701
+ .jumbo_max_len = 10240 ,
2692
2702
};
2693
2703
2694
2704
static const struct of_device_id macb_dt_ids [] = {
@@ -2770,6 +2780,10 @@ static int macb_probe(struct platform_device *pdev)
2770
2780
bp -> pclk = pclk ;
2771
2781
bp -> hclk = hclk ;
2772
2782
bp -> tx_clk = tx_clk ;
2783
+ if (macb_config -> jumbo_max_len ) {
2784
+ bp -> jumbo_max_len = macb_config -> jumbo_max_len ;
2785
+ }
2786
+
2773
2787
spin_lock_init (& bp -> lock );
2774
2788
2775
2789
/* setup capabilities */
0 commit comments