mirror of https://gitee.com/openkylin/linux.git
ravb: Factorise ravb_dmac_init function
The DMAC IP on the R-Car AVB module has different initialization parameters for RCR, TGC, TCCR, RIC0, RIC2, and TIC compared to DMAC IP on the RZ/G2L Gigabit Ethernet module. Factorise the ravb_dmac_init function to support the later SoC. Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
80f35a0df0
commit
eb4fd12744
|
@ -986,6 +986,7 @@ struct ravb_hw_info {
|
|||
bool (*receive)(struct net_device *ndev, int *quota, int q);
|
||||
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);
|
||||
const char (*gstrings_stats)[ETH_GSTRING_LEN];
|
||||
size_t gstrings_size;
|
||||
netdev_features_t net_hw_features;
|
||||
|
|
|
@ -452,30 +452,10 @@ static void ravb_emac_init(struct net_device *ndev)
|
|||
ravb_write(ndev, ECSIPR_ICDIP | ECSIPR_MPDIP | ECSIPR_LCHNGIP, ECSIPR);
|
||||
}
|
||||
|
||||
/* Device init function for Ethernet AVB */
|
||||
static int ravb_dmac_init(struct net_device *ndev)
|
||||
static void ravb_rcar_dmac_init(struct net_device *ndev)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
const struct ravb_hw_info *info = priv->info;
|
||||
int error;
|
||||
|
||||
/* Set CONFIG mode */
|
||||
error = ravb_config(ndev);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
error = ravb_ring_init(ndev, RAVB_BE);
|
||||
if (error)
|
||||
return error;
|
||||
error = ravb_ring_init(ndev, RAVB_NC);
|
||||
if (error) {
|
||||
ravb_ring_free(ndev, RAVB_BE);
|
||||
return error;
|
||||
}
|
||||
|
||||
/* Descriptor format */
|
||||
ravb_ring_format(ndev, RAVB_BE);
|
||||
ravb_ring_format(ndev, RAVB_NC);
|
||||
|
||||
/* Set AVB RX */
|
||||
ravb_write(ndev,
|
||||
|
@ -502,6 +482,34 @@ static int ravb_dmac_init(struct net_device *ndev)
|
|||
ravb_write(ndev, RIC2_QFE0 | RIC2_QFE1 | RIC2_RFFE, RIC2);
|
||||
/* Frame transmitted, timestamp FIFO updated */
|
||||
ravb_write(ndev, TIC_FTE0 | TIC_FTE1 | TIC_TFUE, TIC);
|
||||
}
|
||||
|
||||
/* Device init function for Ethernet AVB */
|
||||
static int ravb_dmac_init(struct net_device *ndev)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
const struct ravb_hw_info *info = priv->info;
|
||||
int error;
|
||||
|
||||
/* Set CONFIG mode */
|
||||
error = ravb_config(ndev);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
error = ravb_ring_init(ndev, RAVB_BE);
|
||||
if (error)
|
||||
return error;
|
||||
error = ravb_ring_init(ndev, RAVB_NC);
|
||||
if (error) {
|
||||
ravb_ring_free(ndev, RAVB_BE);
|
||||
return error;
|
||||
}
|
||||
|
||||
/* Descriptor format */
|
||||
ravb_ring_format(ndev, RAVB_BE);
|
||||
ravb_ring_format(ndev, RAVB_NC);
|
||||
|
||||
info->dmac_init(ndev);
|
||||
|
||||
/* Setting the control will start the AVB-DMAC process. */
|
||||
ravb_modify(ndev, CCC, CCC_OPC, CCC_OPC_OPERATION);
|
||||
|
@ -1990,6 +1998,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
|
|||
.receive = ravb_rcar_rx,
|
||||
.set_rate = ravb_set_rate,
|
||||
.set_rx_csum_feature = ravb_set_features_rx_csum,
|
||||
.dmac_init = ravb_rcar_dmac_init,
|
||||
.gstrings_stats = ravb_gstrings_stats,
|
||||
.gstrings_size = sizeof(ravb_gstrings_stats),
|
||||
.net_hw_features = NETIF_F_RXCSUM,
|
||||
|
@ -2009,6 +2018,7 @@ static const struct ravb_hw_info ravb_gen2_hw_info = {
|
|||
.receive = ravb_rcar_rx,
|
||||
.set_rate = ravb_set_rate,
|
||||
.set_rx_csum_feature = ravb_set_features_rx_csum,
|
||||
.dmac_init = ravb_rcar_dmac_init,
|
||||
.gstrings_stats = ravb_gstrings_stats,
|
||||
.gstrings_size = sizeof(ravb_gstrings_stats),
|
||||
.net_hw_features = NETIF_F_RXCSUM,
|
||||
|
|
Loading…
Reference in New Issue