Message ID | 20191021053811.19818-1-o.rempel@pengutronix.de |
---|---|
Headers | show |
Series | add dsa switch support for ar9331 | expand |
> +static struct sk_buff *ar9331_tag_rcv(struct sk_buff *skb, > + struct net_device *ndev, > + struct packet_type *pt) > +{ > + u8 ver, port; > + u16 hdr; > + > + if (unlikely(!pskb_may_pull(skb, AR9331_HDR_LEN))) > + return NULL; > + > + hdr = le16_to_cpu(*(__le16 *)skb_mac_header(skb)); > + > + ver = FIELD_GET(AR9331_HDR_VERSION_MASK, hdr); > + if (unlikely(ver != AR9331_HDR_VERSION)) { > + netdev_warn_once(ndev, "%s:%i wrong header version 0x%2x\n", > + __func__, __LINE__, hdr); > + return NULL; > + } > + > + if (unlikely(hdr & AR9331_HDR_FROM_CPU)) { > + netdev_warn_once(ndev, "%s:%i packet should not be from cpu 0x%2x\n", > + __func__, __LINE__, hdr); > + return NULL; > + } > + > + skb_pull(skb, AR9331_HDR_LEN); > + skb_set_mac_header(skb, -ETH_HLEN); No other tag driver calls skb_set_mac_header(). Also, the -ETH_HLEN looks odd, give you have just pulled off AR9331_HDR_LEN? What other tag drivers use is skb_pull_rcsum(). Andrew
On Mon, Oct 21, 2019 at 05:49:00PM +0200, Andrew Lunn wrote: > > +static struct sk_buff *ar9331_tag_rcv(struct sk_buff *skb, > > + struct net_device *ndev, > > + struct packet_type *pt) > > +{ > > + u8 ver, port; > > + u16 hdr; > > + > > + if (unlikely(!pskb_may_pull(skb, AR9331_HDR_LEN))) > > + return NULL; > > + > > + hdr = le16_to_cpu(*(__le16 *)skb_mac_header(skb)); > > + > > + ver = FIELD_GET(AR9331_HDR_VERSION_MASK, hdr); > > + if (unlikely(ver != AR9331_HDR_VERSION)) { > > + netdev_warn_once(ndev, "%s:%i wrong header version 0x%2x\n", > > + __func__, __LINE__, hdr); > > + return NULL; > > + } > > + > > + if (unlikely(hdr & AR9331_HDR_FROM_CPU)) { > > + netdev_warn_once(ndev, "%s:%i packet should not be from cpu 0x%2x\n", > > + __func__, __LINE__, hdr); > > + return NULL; > > + } > > + > > + skb_pull(skb, AR9331_HDR_LEN); > > + skb_set_mac_header(skb, -ETH_HLEN); > > No other tag driver calls skb_set_mac_header(). Also, the -ETH_HLEN > looks odd, give you have just pulled off AR9331_HDR_LEN? Hm.. is it corrected somewhere else? Any way, B.T.M.A.N need a proper value ant it seems to work correctly. So I remove it. > What other tag drivers use is skb_pull_rcsum(). It is build in switch and internal Ethernet controller do not set csum. There is nothing to recalculate... on other hand, it adds no overhead. So, I have nothing against it. Are there other arguments? Regards, Oleksij
On Mon, Oct 21, 2019 at 07:38:07AM +0200, Oleksij Rempel wrote: > +static void ag71xx_mac_validate(struct phylink_config *config, > + unsigned long *supported, > + struct phylink_link_state *state) > { > - struct ag71xx *ag = netdev_priv(ndev); > + __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; > + > + if (state->interface != PHY_INTERFACE_MODE_NA && > + state->interface != PHY_INTERFACE_MODE_GMII && > + state->interface != PHY_INTERFACE_MODE_MII) { > + bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); > + return; > + } > + > + phylink_set(mask, MII); > + > + /* flow control is not supported */ > + > + phylink_set(mask, 10baseT_Half); > + phylink_set(mask, 10baseT_Full); > + phylink_set(mask, 100baseT_Half); > + phylink_set(mask, 100baseT_Full); > > - ag71xx_link_adjust(ag, true); > + if (state->interface == PHY_INTERFACE_MODE_NA && > + state->interface == PHY_INTERFACE_MODE_GMII) { This is always false. Apart from that, from just reading the patch I have no further concerns. Thanks.
On 22.10.19 00:21, Russell King - ARM Linux admin wrote: > On Mon, Oct 21, 2019 at 07:38:07AM +0200, Oleksij Rempel wrote: >> +static void ag71xx_mac_validate(struct phylink_config *config, >> + unsigned long *supported, >> + struct phylink_link_state *state) >> { >> - struct ag71xx *ag = netdev_priv(ndev); >> + __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; >> + >> + if (state->interface != PHY_INTERFACE_MODE_NA && >> + state->interface != PHY_INTERFACE_MODE_GMII && >> + state->interface != PHY_INTERFACE_MODE_MII) { >> + bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); >> + return; >> + } >> + >> + phylink_set(mask, MII); >> + >> + /* flow control is not supported */ >> + >> + phylink_set(mask, 10baseT_Half); >> + phylink_set(mask, 10baseT_Full); >> + phylink_set(mask, 100baseT_Half); >> + phylink_set(mask, 100baseT_Full); >> >> - ag71xx_link_adjust(ag, true); >> + if (state->interface == PHY_INTERFACE_MODE_NA && >> + state->interface == PHY_INTERFACE_MODE_GMII) { > > This is always false. ... I shame to myself :( > Apart from that, from just reading the patch I have no further concerns. ok. thx! Kind regards, Oleksij Rempel