Message ID | 20210825070154.14336-13-biju.das.jz@bp.renesas.com |
---|---|
State | New |
Headers | show |
Series | Add Factorisation code to support Gigabit Ethernet driver | expand |
On 8/25/21 10:01 AM, Biju Das wrote: > The E-MAC IP on the R-Car AVB module has different initialization > parameters for RX frame size, duplex settings, different offset > for transfer speed setting and has magic packet detection support > compared to E-MAC on RZ/G2L Gigabit Ethernet module. Factorise > the ravb_emac_init function to support the later SoC. Again, couldn't we resolve these differencies like the sh_eth driver does, by adding the register values into the *struct* ravb_hw_info? > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> [...] MBR, Sergey
Hi Sergei, Thanks for the feedback. > Subject: Re: [PATCH net-next 12/13] ravb: Factorise ravb_emac_init > function > > On 8/25/21 10:01 AM, Biju Das wrote: > > > The E-MAC IP on the R-Car AVB module has different initialization > > parameters for RX frame size, duplex settings, different offset for > > transfer speed setting and has magic packet detection support compared > > to E-MAC on RZ/G2L Gigabit Ethernet module. Factorise the > > ravb_emac_init function to support the later SoC. > > Again, couldn't we resolve these differencies like the sh_eth driver > does, by adding the register values into the *struct* ravb_hw_info? I will evaluate your proposal in terms of code size and data size And with the current code and share the details in next RFC patchset for supporting RZ/G2L with emac_init function. Based on the RFC discussion, we can conclude it. Currently by looking at your proposal, I am seeing duplication of Data in R-Car Gen3 and R-Car Gen2. Multiple if statement for handling duplex, initialising CSR0(Checksum operating mode register), CXR31(In-band status register) Regards, Biju > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> > > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > [...] > > MBR, Sergey
diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h index 24a3abd00053..117eb22349c5 100644 --- a/drivers/net/ethernet/renesas/ravb.h +++ b/drivers/net/ethernet/renesas/ravb.h @@ -987,6 +987,7 @@ struct ravb_hw_info { void (*set_rate)(struct net_device *ndev); int (*set_rx_csum_feature)(struct net_device *ndev, netdev_features_t features); void (*dmac_init)(struct net_device *ndev); + void (*emac_init)(struct net_device *ndev); const char (*gstrings_stats)[ETH_GSTRING_LEN]; size_t gstrings_size; netdev_features_t net_hw_features; diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index 391e7927ea08..7a144b45e41d 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -425,8 +425,7 @@ static int ravb_ring_init(struct net_device *ndev, int q) return -ENOMEM; } -/* E-MAC init function */ -static void ravb_emac_init(struct net_device *ndev) +static void ravb_rcar_emac_init(struct net_device *ndev) { /* Receive frame limit set register */ ravb_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, RFLR); @@ -452,6 +451,15 @@ static void ravb_emac_init(struct net_device *ndev) ravb_write(ndev, ECSIPR_ICDIP | ECSIPR_MPDIP | ECSIPR_LCHNGIP, ECSIPR); } +/* E-MAC init function */ +static void ravb_emac_init(struct net_device *ndev) +{ + struct ravb_private *priv = netdev_priv(ndev); + const struct ravb_hw_info *info = priv->info; + + info->emac_init(ndev); +} + static void ravb_rcar_dmac_init(struct net_device *ndev) { struct ravb_private *priv = netdev_priv(ndev); @@ -1999,6 +2007,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = { .set_rate = ravb_set_rate, .set_rx_csum_feature = ravb_set_features_rx_csum, .dmac_init = ravb_rcar_dmac_init, + .emac_init = ravb_rcar_emac_init, .gstrings_stats = ravb_gstrings_stats, .gstrings_size = sizeof(ravb_gstrings_stats), .net_hw_features = NETIF_F_RXCSUM, @@ -2019,6 +2028,7 @@ static const struct ravb_hw_info ravb_gen2_hw_info = { .set_rate = ravb_set_rate, .set_rx_csum_feature = ravb_set_features_rx_csum, .dmac_init = ravb_rcar_dmac_init, + .emac_init = ravb_rcar_emac_init, .gstrings_stats = ravb_gstrings_stats, .gstrings_size = sizeof(ravb_gstrings_stats), .net_hw_features = NETIF_F_RXCSUM,