bnx2x: Add timestamping and PTP hardware clock support
This adds a PHC to the bnx2x driver. Driver supports timestamping send/receive PTP packets, as well as adjusting the on-chip clock. The driver has been tested with linuxptp project. Signed-off-by: Michal Kalderon <Michal.Kalderon@qlogic.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com> Signed-off-by: Ariel Elior <Ariel.Elior@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e42780b66a
commit
eeed018cbf
8 changed files with 984 additions and 13 deletions
|
|
@ -20,6 +20,10 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/pci_regs.h>
|
||||
|
||||
#include <linux/ptp_clock_kernel.h>
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/clocksource.h>
|
||||
|
||||
/* compilation time flags */
|
||||
|
||||
/* define this to make the driver freeze on error to allow getting debug info
|
||||
|
|
@ -70,6 +74,7 @@ enum bnx2x_int_mode {
|
|||
#define BNX2X_MSG_SP 0x0100000 /* was: NETIF_MSG_INTR */
|
||||
#define BNX2X_MSG_FP 0x0200000 /* was: NETIF_MSG_INTR */
|
||||
#define BNX2X_MSG_IOV 0x0800000
|
||||
#define BNX2X_MSG_PTP 0x1000000
|
||||
#define BNX2X_MSG_IDLE 0x2000000 /* used for idle check*/
|
||||
#define BNX2X_MSG_ETHTOOL 0x4000000
|
||||
#define BNX2X_MSG_DCB 0x8000000
|
||||
|
|
@ -1591,6 +1596,8 @@ struct bnx2x {
|
|||
#define BC_SUPPORTS_RMMOD_CMD (1 << 24)
|
||||
#define HAS_PHYS_PORT_ID (1 << 25)
|
||||
#define AER_ENABLED (1 << 26)
|
||||
#define PTP_SUPPORTED (1 << 27)
|
||||
#define TX_TIMESTAMPING_EN (1 << 28)
|
||||
|
||||
#define BP_NOMCP(bp) ((bp)->flags & NO_MCP_FLAG)
|
||||
|
||||
|
|
@ -1933,6 +1940,19 @@ struct bnx2x {
|
|||
|
||||
u8 phys_port_id[ETH_ALEN];
|
||||
|
||||
/* PTP related context */
|
||||
struct ptp_clock *ptp_clock;
|
||||
struct ptp_clock_info ptp_clock_info;
|
||||
struct work_struct ptp_task;
|
||||
struct cyclecounter cyclecounter;
|
||||
struct timecounter timecounter;
|
||||
bool timecounter_init_done;
|
||||
struct sk_buff *ptp_tx_skb;
|
||||
unsigned long ptp_tx_start;
|
||||
bool hwtstamp_ioctl_called;
|
||||
u16 tx_type;
|
||||
u16 rx_filter;
|
||||
|
||||
struct bnx2x_link_report_data vf_link_vars;
|
||||
};
|
||||
|
||||
|
|
@ -2559,4 +2579,11 @@ void bnx2x_update_mng_version(struct bnx2x *bp);
|
|||
|
||||
#define E1H_MAX_MF_SB_COUNT (HC_SB_MAX_SB_E1X/(E1HVN_MAX * PORT_MAX))
|
||||
|
||||
void bnx2x_init_ptp(struct bnx2x *bp);
|
||||
int bnx2x_configure_ptp_filters(struct bnx2x *bp);
|
||||
void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb);
|
||||
|
||||
#define BNX2X_MAX_PHC_DRIFT 31000000
|
||||
#define BNX2X_PTP_TX_TIMEOUT
|
||||
|
||||
#endif /* bnx2x.h */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue