bnxt_en: Move bnxt_ptp_init() to bnxt_open()
The device needs to be in ifup state for PTP to function, so move
bnxt_ptp_init() to bnxt_open(). This means that the PHC will be
registered during bnxt_open().
This also makes firmware reset work correctly. PTP configurations
may change after firmware upgrade or downgrade. bnxt_open() will
be called after firmware reset, so it will work properly.
bnxt_ptp_start() is now incorporated into bnxt_ptp_init(). We now
also need to call bnxt_ptp_clear() in bnxt_close().
Fixes: 93cb62d98e
("bnxt_en: Enable hardware PTP support")
Cc: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
11a39259ff
commit
d7859afb68
|
@ -10134,7 +10134,6 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
|
|||
}
|
||||
}
|
||||
|
||||
bnxt_ptp_start(bp);
|
||||
rc = bnxt_init_nic(bp, irq_re_init);
|
||||
if (rc) {
|
||||
netdev_err(bp->dev, "bnxt_init_nic err: %x\n", rc);
|
||||
|
@ -10273,9 +10272,16 @@ static int bnxt_open(struct net_device *dev)
|
|||
rc = bnxt_hwrm_if_change(bp, true);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (bnxt_ptp_init(bp)) {
|
||||
netdev_warn(dev, "PTP initialization failed.\n");
|
||||
kfree(bp->ptp_cfg);
|
||||
bp->ptp_cfg = NULL;
|
||||
}
|
||||
rc = __bnxt_open_nic(bp, true, true);
|
||||
if (rc) {
|
||||
bnxt_hwrm_if_change(bp, false);
|
||||
bnxt_ptp_clear(bp);
|
||||
} else {
|
||||
if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state)) {
|
||||
if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
|
@ -10366,6 +10372,7 @@ static int bnxt_close(struct net_device *dev)
|
|||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
|
||||
bnxt_ptp_clear(bp);
|
||||
bnxt_hwmon_close(bp);
|
||||
bnxt_close_nic(bp, true, true);
|
||||
bnxt_hwrm_shutdown_link(bp);
|
||||
|
@ -11352,6 +11359,7 @@ static void bnxt_fw_reset_close(struct bnxt *bp)
|
|||
bnxt_clear_int_mode(bp);
|
||||
pci_disable_device(bp->pdev);
|
||||
}
|
||||
bnxt_ptp_clear(bp);
|
||||
__bnxt_close_nic(bp, true, false);
|
||||
bnxt_vf_reps_free(bp);
|
||||
bnxt_clear_int_mode(bp);
|
||||
|
@ -12694,7 +12702,6 @@ static void bnxt_remove_one(struct pci_dev *pdev)
|
|||
if (BNXT_PF(bp))
|
||||
devlink_port_type_clear(&bp->dl_port);
|
||||
|
||||
bnxt_ptp_clear(bp);
|
||||
pci_disable_pcie_error_reporting(pdev);
|
||||
unregister_netdev(dev);
|
||||
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
|
@ -13278,11 +13285,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
rc);
|
||||
}
|
||||
|
||||
if (bnxt_ptp_init(bp)) {
|
||||
netdev_warn(dev, "PTP initialization failed.\n");
|
||||
kfree(bp->ptp_cfg);
|
||||
bp->ptp_cfg = NULL;
|
||||
}
|
||||
bnxt_inv_fw_health_reg(bp);
|
||||
bnxt_dl_register(bp);
|
||||
|
||||
|
|
|
@ -385,22 +385,6 @@ int bnxt_get_rx_ts_p5(struct bnxt *bp, u64 *ts, u32 pkt_ts)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void bnxt_ptp_start(struct bnxt *bp)
|
||||
{
|
||||
struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
|
||||
|
||||
if (!ptp)
|
||||
return;
|
||||
|
||||
if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
spin_lock_bh(&ptp->ptp_lock);
|
||||
ptp->current_time = bnxt_refclk_read(bp, NULL);
|
||||
WRITE_ONCE(ptp->old_time, ptp->current_time);
|
||||
spin_unlock_bh(&ptp->ptp_lock);
|
||||
ptp_schedule_worker(ptp->ptp_clock, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct ptp_clock_info bnxt_ptp_caps = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "bnxt clock",
|
||||
|
@ -450,7 +434,13 @@ int bnxt_ptp_init(struct bnxt *bp)
|
|||
bnxt_unmap_ptp_regs(bp);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
spin_lock_bh(&ptp->ptp_lock);
|
||||
ptp->current_time = bnxt_refclk_read(bp, NULL);
|
||||
WRITE_ONCE(ptp->old_time, ptp->current_time);
|
||||
spin_unlock_bh(&ptp->ptp_lock);
|
||||
ptp_schedule_worker(ptp->ptp_clock, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -75,7 +75,6 @@ int bnxt_hwtstamp_set(struct net_device *dev, struct ifreq *ifr);
|
|||
int bnxt_hwtstamp_get(struct net_device *dev, struct ifreq *ifr);
|
||||
int bnxt_get_tx_ts_p5(struct bnxt *bp, struct sk_buff *skb);
|
||||
int bnxt_get_rx_ts_p5(struct bnxt *bp, u64 *ts, u32 pkt_ts);
|
||||
void bnxt_ptp_start(struct bnxt *bp);
|
||||
int bnxt_ptp_init(struct bnxt *bp);
|
||||
void bnxt_ptp_clear(struct bnxt *bp);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue