| .. | .. |
|---|
| 884 | 884 | } |
|---|
| 885 | 885 | #endif |
|---|
| 886 | 886 | addr |= MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, desc->addr)); |
|---|
| 887 | +#ifdef CONFIG_MACB_USE_HWSTAMP |
|---|
| 888 | + if (bp->hw_dma_cap & HW_DMA_CAP_PTP) |
|---|
| 889 | + addr &= ~GEM_BIT(DMA_RXVALID); |
|---|
| 890 | +#endif |
|---|
| 887 | 891 | return addr; |
|---|
| 888 | 892 | } |
|---|
| 889 | 893 | |
|---|
| .. | .. |
|---|
| 1963 | 1967 | bool cloned = skb_cloned(*skb) || skb_header_cloned(*skb) || |
|---|
| 1964 | 1968 | skb_is_nonlinear(*skb); |
|---|
| 1965 | 1969 | int padlen = ETH_ZLEN - (*skb)->len; |
|---|
| 1966 | | - int headroom = skb_headroom(*skb); |
|---|
| 1967 | 1970 | int tailroom = skb_tailroom(*skb); |
|---|
| 1968 | 1971 | struct sk_buff *nskb; |
|---|
| 1969 | 1972 | u32 fcs; |
|---|
| .. | .. |
|---|
| 1977 | 1980 | /* FCS could be appeded to tailroom. */ |
|---|
| 1978 | 1981 | if (tailroom >= ETH_FCS_LEN) |
|---|
| 1979 | 1982 | goto add_fcs; |
|---|
| 1980 | | - /* FCS could be appeded by moving data to headroom. */ |
|---|
| 1981 | | - else if (!cloned && headroom + tailroom >= ETH_FCS_LEN) |
|---|
| 1982 | | - padlen = 0; |
|---|
| 1983 | 1983 | /* No room for FCS, need to reallocate skb. */ |
|---|
| 1984 | 1984 | else |
|---|
| 1985 | 1985 | padlen = ETH_FCS_LEN; |
|---|
| .. | .. |
|---|
| 1988 | 1988 | padlen += ETH_FCS_LEN; |
|---|
| 1989 | 1989 | } |
|---|
| 1990 | 1990 | |
|---|
| 1991 | | - if (!cloned && headroom + tailroom >= padlen) { |
|---|
| 1992 | | - (*skb)->data = memmove((*skb)->head, (*skb)->data, (*skb)->len); |
|---|
| 1993 | | - skb_set_tail_pointer(*skb, (*skb)->len); |
|---|
| 1994 | | - } else { |
|---|
| 1991 | + if (cloned || tailroom < padlen) { |
|---|
| 1995 | 1992 | nskb = skb_copy_expand(*skb, 0, padlen, GFP_ATOMIC); |
|---|
| 1996 | 1993 | if (!nskb) |
|---|
| 1997 | 1994 | return -ENOMEM; |
|---|