From 0fb560ca34d963f7ca69d5afd4f1d470cf922b81 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sun, 23 Dec 2012 23:06:58 +0000 Subject: [PATCH] ptp: Enable clock drivers along with associated net/PHY drivers svn path=/dists/trunk/linux/; revision=19641 --- debian/changelog | 1 + ...Fix-the-dependency-direction-between.patch | 48 ++ ...-Remove-dependencies-on-EXPERIMENTAL.patch | 77 ++ ...-drivers-along-with-associated-net-P.patch | 784 ++++++++++++++++++ ...8_CLOCK-select-rather-than-depend-on.patch | 69 ++ .../all/sfc-Select-PTP_1588_CLOCK.patch | 29 + debian/patches/series | 5 + 7 files changed, 1013 insertions(+) create mode 100644 debian/patches/bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch create mode 100644 debian/patches/bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch create mode 100644 debian/patches/bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch create mode 100644 debian/patches/bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch create mode 100644 debian/patches/bugfix/all/sfc-Select-PTP_1588_CLOCK.patch diff --git a/debian/changelog b/debian/changelog index 88ced3612..29eb56812 100644 --- a/debian/changelog +++ b/debian/changelog @@ -43,6 +43,7 @@ linux (3.7.1-1~experimental.1) UNRELEASED; urgency=low * phy: Enable AT803X_PHY as module * rt2800pci: Enable RT2800PCI_RT3290 * wireless/ti: Enable WL18XX as module + * ptp: Enable clock drivers along with associated net/PHY drivers -- maximilian attems Thu, 06 Dec 2012 18:14:33 +0100 diff --git a/debian/patches/bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch b/debian/patches/bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch new file mode 100644 index 000000000..e18a9ca6a --- /dev/null +++ b/debian/patches/bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch @@ -0,0 +1,48 @@ +From: Ben Hutchings +Date: Fri, 16 Nov 2012 15:43:59 +0000 +Subject: [5/5] pch_gbe, ptp_pch: Fix the dependency direction between these + drivers + +commit 18d359ceb04485df0e387e04b0e52a761c4c58a0 upstream. + +In commit a24006ed12616bde1bbdb26868495906a212d8dc ('ptp: Enable clock +drivers along with associated net/PHY drivers') I wrongly made +PTP_1588_CLOCK_PCH depend on PCH_GBE. The dependency is really the +other way around. Therefore make PCH_GBE select PTP_1588_CLOCK_PCH +and remove the 'default y' from the latter. + +Reported-by: Randy Dunlap +Signed-off-by: Ben Hutchings +Acked-by: Randy Dunlap +Signed-off-by: David S. Miller +--- + drivers/net/ethernet/oki-semi/pch_gbe/Kconfig | 1 + + drivers/ptp/Kconfig | 2 -- + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +index 00bc4fc..34d05bf 100644 +--- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig ++++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +@@ -7,6 +7,7 @@ config PCH_GBE + depends on PCI + select NET_CORE + select MII ++ select PTP_1588_CLOCK_PCH + ---help--- + This is a gigabit ethernet driver for EG20T PCH. + EG20T PCH is the platform controller hub that is used in Intel's +diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig +index 70c5836..1ea6f1d 100644 +--- a/drivers/ptp/Kconfig ++++ b/drivers/ptp/Kconfig +@@ -72,9 +72,7 @@ config DP83640_PHY + + config PTP_1588_CLOCK_PCH + tristate "Intel PCH EG20T as PTP clock" +- depends on PCH_GBE + select PTP_1588_CLOCK +- default y + help + This driver adds support for using the PCH EG20T as a PTP + clock. The hardware supports time stamping of PTP packets diff --git a/debian/patches/bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch b/debian/patches/bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch new file mode 100644 index 000000000..73ab4b9b9 --- /dev/null +++ b/debian/patches/bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch @@ -0,0 +1,77 @@ +From: Ben Hutchings +Date: Wed, 31 Oct 2012 15:31:29 +0000 +Subject: [1/5] pps, ptp: Remove dependencies on EXPERIMENTAL + +commit c56283034ce28f99de494b69896528ae90cd9730 upstream. + +These are now established subsystems, and we want drivers to be able +to select PPS and PTP_1588_CLOCK without depending on EXPERIMENTAL. +Further, the use of EXPERIMENTAL is now deprecated in general. + +Signed-off-by: Ben Hutchings +Signed-off-by: David S. Miller +--- + drivers/net/ethernet/intel/Kconfig | 4 ++-- + drivers/net/ethernet/oki-semi/pch_gbe/Kconfig | 1 - + drivers/pps/Kconfig | 1 - + drivers/ptp/Kconfig | 1 - + 4 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig +index 0cafe4f..9e49217 100644 +--- a/drivers/net/ethernet/intel/Kconfig ++++ b/drivers/net/ethernet/intel/Kconfig +@@ -123,7 +123,7 @@ config IGB_DCA + config IGB_PTP + bool "PTP Hardware Clock (PHC)" + default n +- depends on IGB && EXPERIMENTAL ++ depends on IGB + select PPS + select PTP_1588_CLOCK + ---help--- +@@ -225,7 +225,7 @@ config IXGBE_DCB + config IXGBE_PTP + bool "PTP Clock Support" + default n +- depends on IXGBE && EXPERIMENTAL ++ depends on IXGBE + select PPS + select PTP_1588_CLOCK + ---help--- +diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +index 5296cc8..9867bc6 100644 +--- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig ++++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +@@ -26,7 +26,6 @@ if PCH_GBE + config PCH_PTP + bool "PCH PTP clock support" + default n +- depends on EXPERIMENTAL + select PPS + select PTP_1588_CLOCK + select PTP_1588_CLOCK_PCH +diff --git a/drivers/pps/Kconfig b/drivers/pps/Kconfig +index 258ca59..982d16b 100644 +--- a/drivers/pps/Kconfig ++++ b/drivers/pps/Kconfig +@@ -6,7 +6,6 @@ menu "PPS support" + + config PPS + tristate "PPS support" +- depends on EXPERIMENTAL + ---help--- + PPS (Pulse Per Second) is a special pulse provided by some GPS + antennae. Userland can use it to get a high-precision time +diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig +index ffdf712..a6e4b7c 100644 +--- a/drivers/ptp/Kconfig ++++ b/drivers/ptp/Kconfig +@@ -9,7 +9,6 @@ comment "Enable Device Drivers -> PPS to see the PTP clock options." + + config PTP_1588_CLOCK + tristate "PTP clock support" +- depends on EXPERIMENTAL + depends on PPS + help + The IEEE 1588 standard defines a method to precisely diff --git a/debian/patches/bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch b/debian/patches/bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch new file mode 100644 index 000000000..ff5834972 --- /dev/null +++ b/debian/patches/bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch @@ -0,0 +1,784 @@ +From: Ben Hutchings +Date: Wed, 31 Oct 2012 15:33:52 +0000 +Subject: [3/5] ptp: Enable clock drivers along with associated net/PHY + drivers + +commit a24006ed12616bde1bbdb26868495906a212d8dc upstream. + +Where a PTP clock driver is associated with a net or PHY driver, it +should be enabled automatically whenever that driver is enabled. +Therefore: + +- Make PTP clock drivers select rather than depending on PTP_1588_CLOCK +- Remove separate boolean options for PTP clock drivers that are built + as part of net driver modules. (This also fixes cases where the PTP + subsystem is wrongly forced to be built-in.) +- Set 'default y' for PTP clock drivers that depend on specific net + drivers but are built separately + +Signed-off-by: Ben Hutchings +Signed-off-by: David S. Miller +[bwh: Backported to 3.7: adjust context; drop removal of #ifdefs that + aren't present] +--- +--- a/drivers/net/ethernet/intel/Kconfig ++++ b/drivers/net/ethernet/intel/Kconfig +@@ -93,6 +93,7 @@ config E1000E + config IGB + tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support" + depends on PCI ++ select PTP_1588_CLOCK + ---help--- + This driver supports Intel(R) 82575/82576 gigabit ethernet family of + adapters. For more information on how to identify your adapter, go +@@ -120,18 +121,6 @@ config IGB_DCA + driver. DCA is a method for warming the CPU cache before data + is used, with the intent of lessening the impact of cache misses. + +-config IGB_PTP +- bool "PTP Hardware Clock (PHC)" +- default n +- depends on IGB +- select PTP_1588_CLOCK +- ---help--- +- Say Y here if you want to use PTP Hardware Clock (PHC) in the +- driver. Only the basic clock operations have been implemented. +- +- Every timestamp and clock read operations must consult the +- overflow counter to form a correct time value. +- + config IGBVF + tristate "Intel(R) 82576 Virtual Function Ethernet support" + depends on PCI +@@ -179,6 +168,7 @@ config IXGBE + tristate "Intel(R) 10GbE PCI Express adapters support" + depends on PCI && INET + select MDIO ++ select PTP_1588_CLOCK + ---help--- + This driver supports Intel(R) 10GbE PCI Express family of + adapters. For more information on how to identify your adapter, go +@@ -221,18 +211,6 @@ config IXGBE_DCB + + If unsure, say N. + +-config IXGBE_PTP +- bool "PTP Clock Support" +- default n +- depends on IXGBE +- select PTP_1588_CLOCK +- ---help--- +- Say Y here if you want support for 1588 Timestamping with a +- PHC device, using the PTP 1588 Clock support. This is +- required to enable timestamping support for the device. +- +- If unsure, say N. +- + config IXGBEVF + tristate "Intel(R) 82599 Virtual Function Ethernet support" + depends on PCI_MSI +--- a/drivers/net/ethernet/intel/igb/Makefile ++++ b/drivers/net/ethernet/intel/igb/Makefile +@@ -34,6 +34,4 @@ obj-$(CONFIG_IGB) += igb.o + + igb-objs := igb_main.o igb_ethtool.o e1000_82575.o \ + e1000_mac.o e1000_nvm.o e1000_phy.o e1000_mbx.o \ +- e1000_i210.o +- +-igb-$(CONFIG_IGB_PTP) += igb_ptp.o ++ e1000_i210.o igb_ptp.o +--- a/drivers/net/ethernet/intel/igb/igb.h ++++ b/drivers/net/ethernet/intel/igb/igb.h +@@ -34,11 +34,9 @@ + #include "e1000_mac.h" + #include "e1000_82575.h" + +-#ifdef CONFIG_IGB_PTP + #include + #include + #include +-#endif /* CONFIG_IGB_PTP */ + #include + #include + +@@ -373,7 +371,6 @@ struct igb_adapter { + u32 wvbr; + u32 *shadow_vfta; + +-#ifdef CONFIG_IGB_PTP + struct ptp_clock *ptp_clock; + struct ptp_clock_info ptp_caps; + struct delayed_work ptp_overflow_work; +@@ -382,7 +379,6 @@ struct igb_adapter { + spinlock_t tmreg_lock; + struct cyclecounter cc; + struct timecounter tc; +-#endif /* CONFIG_IGB_PTP */ + + char fw_version[32]; + }; +@@ -436,7 +432,6 @@ extern bool igb_has_link(struct igb_adap + extern void igb_set_ethtool_ops(struct net_device *); + extern void igb_power_up_link(struct igb_adapter *); + extern void igb_set_fw_version(struct igb_adapter *); +-#ifdef CONFIG_IGB_PTP + extern void igb_ptp_init(struct igb_adapter *adapter); + extern void igb_ptp_stop(struct igb_adapter *adapter); + extern void igb_ptp_reset(struct igb_adapter *adapter); +@@ -447,7 +442,6 @@ extern void igb_ptp_rx_hwtstamp(struct i + struct sk_buff *skb); + extern int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, + struct ifreq *ifr, int cmd); +-#endif /* CONFIG_IGB_PTP */ + + static inline s32 igb_reset_phy(struct e1000_hw *hw) + { +--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c ++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c +@@ -2301,7 +2301,6 @@ static int igb_get_ts_info(struct net_de + struct igb_adapter *adapter = netdev_priv(dev); + + switch (adapter->hw.mac.type) { +-#ifdef CONFIG_IGB_PTP + case e1000_82576: + case e1000_82580: + case e1000_i350: +@@ -2337,7 +2336,6 @@ static int igb_get_ts_info(struct net_de + (1 << HWTSTAMP_FILTER_PTP_V2_EVENT); + + return 0; +-#endif /* CONFIG_IGB_PTP */ + default: + return -EOPNOTSUPP; + } +--- a/drivers/net/ethernet/intel/igb/igb_main.c ++++ b/drivers/net/ethernet/intel/igb/igb_main.c +@@ -1706,10 +1706,8 @@ void igb_reset(struct igb_adapter *adapt + /* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */ + wr32(E1000_VET, ETHERNET_IEEE_VLAN_TYPE); + +-#ifdef CONFIG_IGB_PTP + /* Re-enable PTP, where applicable. */ + igb_ptp_reset(adapter); +-#endif /* CONFIG_IGB_PTP */ + + igb_get_phy_info(hw); + } +@@ -2141,10 +2139,8 @@ static int __devinit igb_probe(struct pc + + #endif + +-#ifdef CONFIG_IGB_PTP + /* do hw tstamp init after resetting */ + igb_ptp_init(adapter); +-#endif /* CONFIG_IGB_PTP */ + + dev_info(&pdev->dev, "Intel(R) Gigabit Ethernet Network Connection\n"); + /* print bus type/speed/width info */ +@@ -2219,9 +2215,7 @@ static void __devexit igb_remove(struct + struct e1000_hw *hw = &adapter->hw; + + pm_runtime_get_noresume(&pdev->dev); +-#ifdef CONFIG_IGB_PTP + igb_ptp_stop(adapter); +-#endif /* CONFIG_IGB_PTP */ + + /* + * The watchdog timer may be rescheduled, so explicitly +@@ -3112,10 +3106,8 @@ void igb_configure_rx_ring(struct igb_ad + srrctl |= (PAGE_SIZE / 2) >> E1000_SRRCTL_BSIZEPKT_SHIFT; + #endif + srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS; +-#ifdef CONFIG_IGB_PTP + if (hw->mac.type >= e1000_82580) + srrctl |= E1000_SRRCTL_TIMESTAMP; +-#endif /* CONFIG_IGB_PTP */ + /* Only set Drop Enable if we are supporting multiple queues */ + if (adapter->vfs_allocated_count || adapter->num_rx_queues > 1) + srrctl |= E1000_SRRCTL_DROP_EN; +@@ -4159,11 +4151,9 @@ static __le32 igb_tx_cmd_type(u32 tx_fla + if (tx_flags & IGB_TX_FLAGS_VLAN) + cmd_type |= cpu_to_le32(E1000_ADVTXD_DCMD_VLE); + +-#ifdef CONFIG_IGB_PTP + /* set timestamp bit if present */ + if (unlikely(tx_flags & IGB_TX_FLAGS_TSTAMP)) + cmd_type |= cpu_to_le32(E1000_ADVTXD_MAC_TSTAMP); +-#endif /* CONFIG_IGB_PTP */ + + /* set segmentation bits for TSO */ + if (tx_flags & IGB_TX_FLAGS_TSO) +@@ -4372,9 +4362,7 @@ static inline int igb_maybe_stop_tx(stru + netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb, + struct igb_ring *tx_ring) + { +-#ifdef CONFIG_IGB_PTP + struct igb_adapter *adapter = netdev_priv(tx_ring->netdev); +-#endif /* CONFIG_IGB_PTP */ + struct igb_tx_buffer *first; + int tso; + u32 tx_flags = 0; +@@ -4397,7 +4385,6 @@ netdev_tx_t igb_xmit_frame_ring(struct s + first->bytecount = skb->len; + first->gso_segs = 1; + +-#ifdef CONFIG_IGB_PTP + if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && + !(adapter->ptp_tx_skb))) { + skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; +@@ -4407,7 +4394,6 @@ netdev_tx_t igb_xmit_frame_ring(struct s + if (adapter->hw.mac.type == e1000_82576) + schedule_work(&adapter->ptp_tx_work); + } +-#endif /* CONFIG_IGB_PTP */ + + if (vlan_tx_tag_present(skb)) { + tx_flags |= IGB_TX_FLAGS_VLAN; +@@ -4800,7 +4786,6 @@ static irqreturn_t igb_msix_other(int ir + mod_timer(&adapter->watchdog_timer, jiffies + 1); + } + +-#ifdef CONFIG_IGB_PTP + if (icr & E1000_ICR_TS) { + u32 tsicr = rd32(E1000_TSICR); + +@@ -4811,7 +4796,6 @@ static irqreturn_t igb_msix_other(int ir + schedule_work(&adapter->ptp_tx_work); + } + } +-#endif /* CONFIG_IGB_PTP */ + + wr32(E1000_EIMS, adapter->eims_other); + +@@ -5545,7 +5529,6 @@ static irqreturn_t igb_intr_msi(int irq, + mod_timer(&adapter->watchdog_timer, jiffies + 1); + } + +-#ifdef CONFIG_IGB_PTP + if (icr & E1000_ICR_TS) { + u32 tsicr = rd32(E1000_TSICR); + +@@ -5556,7 +5539,6 @@ static irqreturn_t igb_intr_msi(int irq, + schedule_work(&adapter->ptp_tx_work); + } + } +-#endif /* CONFIG_IGB_PTP */ + + napi_schedule(&q_vector->napi); + +@@ -5599,7 +5581,6 @@ static irqreturn_t igb_intr(int irq, voi + mod_timer(&adapter->watchdog_timer, jiffies + 1); + } + +-#ifdef CONFIG_IGB_PTP + if (icr & E1000_ICR_TS) { + u32 tsicr = rd32(E1000_TSICR); + +@@ -5610,7 +5591,6 @@ static irqreturn_t igb_intr(int irq, voi + schedule_work(&adapter->ptp_tx_work); + } + } +-#endif /* CONFIG_IGB_PTP */ + + napi_schedule(&q_vector->napi); + +@@ -5999,9 +5979,7 @@ static bool igb_clean_rx_irq(struct igb_ + goto next_desc; + } + +-#ifdef CONFIG_IGB_PTP + igb_ptp_rx_hwtstamp(q_vector, rx_desc, skb); +-#endif /* CONFIG_IGB_PTP */ + igb_rx_hash(rx_ring, rx_desc, skb); + igb_rx_checksum(rx_ring, rx_desc, skb); + igb_rx_vlan(rx_ring, rx_desc, skb); +@@ -6207,10 +6185,8 @@ static int igb_ioctl(struct net_device * + case SIOCGMIIREG: + case SIOCSMIIREG: + return igb_mii_ioctl(netdev, ifr, cmd); +-#ifdef CONFIG_IGB_PTP + case SIOCSHWTSTAMP: + return igb_ptp_hwtstamp_ioctl(netdev, ifr, cmd); +-#endif /* CONFIG_IGB_PTP */ + default: + return -EOPNOTSUPP; + } +--- a/drivers/net/ethernet/intel/ixgbe/Makefile ++++ b/drivers/net/ethernet/intel/ixgbe/Makefile +@@ -34,11 +34,10 @@ obj-$(CONFIG_IXGBE) += ixgbe.o + + ixgbe-objs := ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o ixgbe_debugfs.o\ + ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o ixgbe_sriov.o \ +- ixgbe_mbx.o ixgbe_x540.o ixgbe_lib.o ++ ixgbe_mbx.o ixgbe_x540.o ixgbe_lib.o ixgbe_ptp.o + + ixgbe-$(CONFIG_IXGBE_DCB) += ixgbe_dcb.o ixgbe_dcb_82598.o \ + ixgbe_dcb_82599.o ixgbe_dcb_nl.o + +-ixgbe-$(CONFIG_IXGBE_PTP) += ixgbe_ptp.o + ixgbe-$(CONFIG_IXGBE_HWMON) += ixgbe_sysfs.o + ixgbe-$(CONFIG_FCOE:m=y) += ixgbe_fcoe.o +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h +@@ -36,11 +36,9 @@ + #include + #include + +-#ifdef CONFIG_IXGBE_PTP + #include + #include + #include +-#endif /* CONFIG_IXGBE_PTP */ + + #include "ixgbe_type.h" + #include "ixgbe_common.h" +@@ -571,7 +569,6 @@ struct ixgbe_adapter { + u32 interrupt_event; + u32 led_reg; + +-#ifdef CONFIG_IXGBE_PTP + struct ptp_clock *ptp_clock; + struct ptp_clock_info ptp_caps; + unsigned long last_overflow_check; +@@ -581,7 +578,6 @@ struct ixgbe_adapter { + int rx_hwtstamp_filter; + u32 base_incval; + u32 cycle_speed; +-#endif /* CONFIG_IXGBE_PTP */ + + /* SR-IOV */ + DECLARE_BITMAP(active_vfs, IXGBE_MAX_VF_FUNCTIONS); +@@ -739,7 +735,6 @@ static inline struct netdev_queue *txrin + return netdev_get_tx_queue(ring->netdev, ring->queue_index); + } + +-#ifdef CONFIG_IXGBE_PTP + extern void ixgbe_ptp_init(struct ixgbe_adapter *adapter); + extern void ixgbe_ptp_stop(struct ixgbe_adapter *adapter); + extern void ixgbe_ptp_overflow_check(struct ixgbe_adapter *adapter); +@@ -752,6 +747,5 @@ extern int ixgbe_ptp_hwtstamp_ioctl(stru + struct ifreq *ifr, int cmd); + extern void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter); + extern void ixgbe_ptp_check_pps_event(struct ixgbe_adapter *adapter, u32 eicr); +-#endif /* CONFIG_IXGBE_PTP */ + + #endif /* _IXGBE_H_ */ +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +@@ -2669,7 +2669,6 @@ static int ixgbe_get_ts_info(struct net_ + struct ixgbe_adapter *adapter = netdev_priv(dev); + + switch (adapter->hw.mac.type) { +-#ifdef CONFIG_IXGBE_PTP + case ixgbe_mac_X540: + case ixgbe_mac_82599EB: + info->so_timestamping = +@@ -2695,7 +2694,6 @@ static int ixgbe_get_ts_info(struct net_ + (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) | + (1 << HWTSTAMP_FILTER_PTP_V2_EVENT); + break; +-#endif /* CONFIG_IXGBE_PTP */ + default: + return ethtool_op_get_ts_info(dev, info); + break; +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +@@ -791,10 +791,8 @@ static bool ixgbe_clean_tx_irq(struct ix + total_bytes += tx_buffer->bytecount; + total_packets += tx_buffer->gso_segs; + +-#ifdef CONFIG_IXGBE_PTP + if (unlikely(tx_buffer->tx_flags & IXGBE_TX_FLAGS_TSTAMP)) + ixgbe_ptp_tx_hwtstamp(q_vector, tx_buffer->skb); +-#endif + + /* free the skb */ + dev_kfree_skb_any(tx_buffer->skb); +@@ -1369,9 +1367,7 @@ static void ixgbe_process_skb_fields(str + + ixgbe_rx_checksum(rx_ring, rx_desc, skb); + +-#ifdef CONFIG_IXGBE_PTP + ixgbe_ptp_rx_hwtstamp(rx_ring->q_vector, rx_desc, skb); +-#endif + + if ((dev->features & NETIF_F_HW_VLAN_RX) && + ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_VP)) { +@@ -2324,10 +2320,8 @@ static inline void ixgbe_irq_enable(stru + break; + } + +-#ifdef CONFIG_IXGBE_PTP + if (adapter->hw.mac.type == ixgbe_mac_X540) + mask |= IXGBE_EIMS_TIMESYNC; +-#endif + + if ((adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) && + !(adapter->flags2 & IXGBE_FLAG2_FDIR_REQUIRES_REINIT)) +@@ -2393,10 +2387,8 @@ static irqreturn_t ixgbe_msix_other(int + + ixgbe_check_fan_failure(adapter, eicr); + +-#ifdef CONFIG_IXGBE_PTP + if (unlikely(eicr & IXGBE_EICR_TIMESYNC)) + ixgbe_ptp_check_pps_event(adapter, eicr); +-#endif + + /* re-enable the original interrupt state, no lsc, no queues */ + if (!test_bit(__IXGBE_DOWN, &adapter->state)) +@@ -2588,10 +2580,8 @@ static irqreturn_t ixgbe_intr(int irq, v + } + + ixgbe_check_fan_failure(adapter, eicr); +-#ifdef CONFIG_IXGBE_PTP + if (unlikely(eicr & IXGBE_EICR_TIMESYNC)) + ixgbe_ptp_check_pps_event(adapter, eicr); +-#endif + + /* would disable interrupts here but EIAM disabled it */ + napi_schedule(&q_vector->napi); +@@ -5482,9 +5472,7 @@ static void ixgbe_watchdog_link_is_up(st + break; + } + +-#ifdef CONFIG_IXGBE_PTP + ixgbe_ptp_start_cyclecounter(adapter); +-#endif + + e_info(drv, "NIC Link is Up %s, Flow Control: %s\n", + (link_speed == IXGBE_LINK_SPEED_10GB_FULL ? +@@ -5526,9 +5514,7 @@ static void ixgbe_watchdog_link_is_down( + if (ixgbe_is_sfp(hw) && hw->mac.type == ixgbe_mac_82598EB) + adapter->flags2 |= IXGBE_FLAG2_SEARCH_FOR_SFP; + +-#ifdef CONFIG_IXGBE_PTP + ixgbe_ptp_start_cyclecounter(adapter); +-#endif + + e_info(drv, "NIC Link is Down\n"); + netif_carrier_off(netdev); +@@ -5833,9 +5819,7 @@ static void ixgbe_service_task(struct wo + ixgbe_watchdog_subtask(adapter); + ixgbe_fdir_reinit_subtask(adapter); + ixgbe_check_hang_subtask(adapter); +-#ifdef CONFIG_IXGBE_PTP + ixgbe_ptp_overflow_check(adapter); +-#endif + + ixgbe_service_event_complete(adapter); + } +@@ -5988,10 +5972,8 @@ static __le32 ixgbe_tx_cmd_type(u32 tx_f + if (tx_flags & IXGBE_TX_FLAGS_HW_VLAN) + cmd_type |= cpu_to_le32(IXGBE_ADVTXD_DCMD_VLE); + +-#ifdef CONFIG_IXGBE_PTP + if (tx_flags & IXGBE_TX_FLAGS_TSTAMP) + cmd_type |= cpu_to_le32(IXGBE_ADVTXD_MAC_TSTAMP); +-#endif + + /* set segmentation enable bits for TSO/FSO */ + #ifdef IXGBE_FCOE +@@ -6393,12 +6375,10 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct + + skb_tx_timestamp(skb); + +-#ifdef CONFIG_IXGBE_PTP + if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { + skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; + tx_flags |= IXGBE_TX_FLAGS_TSTAMP; + } +-#endif + + #ifdef CONFIG_PCI_IOV + /* +@@ -6547,10 +6527,8 @@ static int ixgbe_ioctl(struct net_device + struct ixgbe_adapter *adapter = netdev_priv(netdev); + + switch (cmd) { +-#ifdef CONFIG_IXGBE_PTP + case SIOCSHWTSTAMP: + return ixgbe_ptp_hwtstamp_ioctl(adapter, req, cmd); +-#endif + default: + return mdio_mii_ioctl(&adapter->hw.phy.mdio, if_mii(req), cmd); + } +@@ -7364,9 +7342,7 @@ static int __devinit ixgbe_probe(struct + + device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); + +-#ifdef CONFIG_IXGBE_PTP + ixgbe_ptp_init(adapter); +-#endif /* CONFIG_IXGBE_PTP*/ + + /* save off EEPROM version number */ + hw->eeprom.ops.read(hw, 0x2e, &adapter->eeprom_verh); +@@ -7505,9 +7481,7 @@ static void __devexit ixgbe_remove(struc + set_bit(__IXGBE_DOWN, &adapter->state); + cancel_work_sync(&adapter->service_task); + +-#ifdef CONFIG_IXGBE_PTP + ixgbe_ptp_stop(adapter); +-#endif + + #ifdef CONFIG_IXGBE_DCA + if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) { +--- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig ++++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +@@ -20,17 +20,3 @@ config PCH_GBE + purpose use. + ML7223/ML7831 is companion chip for Intel Atom E6xx series. + ML7223/ML7831 is completely compatible for Intel EG20T PCH. +- +-if PCH_GBE +- +-config PCH_PTP +- bool "PCH PTP clock support" +- default n +- select PTP_1588_CLOCK +- select PTP_1588_CLOCK_PCH +- ---help--- +- Say Y here if you want to use Precision Time Protocol (PTP) in the +- driver. PTP is a method to precisely synchronize distributed clocks +- over Ethernet networks. +- +-endif # PCH_GBE +--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h ++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h +@@ -649,7 +649,6 @@ extern void pch_gbe_free_tx_resources(st + extern void pch_gbe_free_rx_resources(struct pch_gbe_adapter *adapter, + struct pch_gbe_rx_ring *rx_ring); + extern void pch_gbe_update_stats(struct pch_gbe_adapter *adapter); +-#ifdef CONFIG_PCH_PTP + extern u32 pch_ch_control_read(struct pci_dev *pdev); + extern void pch_ch_control_write(struct pci_dev *pdev, u32 val); + extern u32 pch_ch_event_read(struct pci_dev *pdev); +@@ -659,7 +658,6 @@ extern u32 pch_src_uuid_hi_read(struct p + extern u64 pch_rx_snap_read(struct pci_dev *pdev); + extern u64 pch_tx_snap_read(struct pci_dev *pdev); + extern int pch_set_station_address(u8 *addr, struct pci_dev *pdev); +-#endif + + /* pch_gbe_param.c */ + extern void pch_gbe_check_options(struct pch_gbe_adapter *adapter); +--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c ++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +@@ -21,10 +21,8 @@ + #include "pch_gbe.h" + #include "pch_gbe_api.h" + #include +-#ifdef CONFIG_PCH_PTP + #include + #include +-#endif + + #define DRV_VERSION "1.01" + const char pch_driver_version[] = DRV_VERSION; +@@ -98,7 +96,6 @@ const char pch_driver_version[] = DRV_VE + + #define PCH_GBE_INT_DISABLE_ALL 0 + +-#ifdef CONFIG_PCH_PTP + /* Macros for ieee1588 */ + /* 0x40 Time Synchronization Channel Control Register Bits */ + #define MASTER_MODE (1<<0) +@@ -113,7 +110,6 @@ const char pch_driver_version[] = DRV_VE + + #define PTP_L4_MULTICAST_SA "01:00:5e:00:01:81" + #define PTP_L2_MULTICAST_SA "01:1b:19:00:00:00" +-#endif + + static unsigned int copybreak __read_mostly = PCH_GBE_COPYBREAK_DEFAULT; + +@@ -122,7 +118,6 @@ static void pch_gbe_mdio_write(struct ne + int data); + static void pch_gbe_set_multi(struct net_device *netdev); + +-#ifdef CONFIG_PCH_PTP + static struct sock_filter ptp_filter[] = { + PTP_FILTER + }; +@@ -291,7 +286,6 @@ static int hwtstamp_ioctl(struct net_dev + + return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0; + } +-#endif + + inline void pch_gbe_mac_load_mac_addr(struct pch_gbe_hw *hw) + { +@@ -1244,9 +1238,7 @@ static void pch_gbe_tx_queue(struct pch_ + (int)sizeof(struct pch_gbe_tx_desc) * ring_num, + &hw->reg->TX_DSC_SW_P); + +-#ifdef CONFIG_PCH_PTP + pch_tx_timestamp(adapter, skb); +-#endif + + dev_kfree_skb_any(skb); + } +@@ -1730,9 +1722,7 @@ pch_gbe_clean_rx(struct pch_gbe_adapter + /* Write meta date of skb */ + skb_put(skb, length); + +-#ifdef CONFIG_PCH_PTP + pch_rx_timestamp(adapter, skb); +-#endif + + skb->protocol = eth_type_trans(skb, netdev); + if (tcp_ip_status & PCH_GBE_RXD_ACC_STAT_TCPIPOK) +@@ -2334,10 +2324,8 @@ static int pch_gbe_ioctl(struct net_devi + + pr_debug("cmd : 0x%04x\n", cmd); + +-#ifdef CONFIG_PCH_PTP + if (cmd == SIOCSHWTSTAMP) + return hwtstamp_ioctl(netdev, ifr, cmd); +-#endif + + return generic_mii_ioctl(&adapter->mii, if_mii(ifr), cmd, NULL); + } +@@ -2623,14 +2611,12 @@ static int pch_gbe_probe(struct pci_dev + goto err_free_netdev; + } + +-#ifdef CONFIG_PCH_PTP + adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number, + PCI_DEVFN(12, 4)); + if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) { + pr_err("Bad ptp filter\n"); + return -EINVAL; + } +-#endif + + netdev->netdev_ops = &pch_gbe_netdev_ops; + netdev->watchdog_timeo = PCH_GBE_WATCHDOG_PERIOD; +--- a/drivers/net/ethernet/sfc/Kconfig ++++ b/drivers/net/ethernet/sfc/Kconfig +@@ -34,10 +34,3 @@ config SFC_SRIOV + This enables support for the SFC9000 I/O Virtualization + features, allowing accelerated network performance in + virtualized environments. +-config SFC_PTP +- bool "Solarflare SFC9000-family PTP support" +- depends on SFC && PTP_1588_CLOCK && !(SFC=y && PTP_1588_CLOCK=m) +- default y +- ---help--- +- This enables support for the Precision Time Protocol (PTP) +- on SFC9000-family NICs +--- a/drivers/net/ethernet/sfc/Makefile ++++ b/drivers/net/ethernet/sfc/Makefile +@@ -2,9 +2,8 @@ sfc-y += efx.o nic.o falcon.o siena.o + falcon_xmac.o mcdi_mac.o \ + selftest.o ethtool.o qt202x_phy.o mdio_10g.o \ + tenxpress.o txc43128_phy.o falcon_boards.o \ +- mcdi.o mcdi_phy.o mcdi_mon.o ++ mcdi.o mcdi_phy.o mcdi_mon.o ptp.o + sfc-$(CONFIG_SFC_MTD) += mtd.o + sfc-$(CONFIG_SFC_SRIOV) += siena_sriov.o +-sfc-$(CONFIG_SFC_PTP) += ptp.o + + obj-$(CONFIG_SFC) += sfc.o +--- a/drivers/net/ethernet/sfc/net_driver.h ++++ b/drivers/net/ethernet/sfc/net_driver.h +@@ -868,9 +868,7 @@ struct efx_nic { + struct work_struct peer_work; + #endif + +-#ifdef CONFIG_SFC_PTP + struct efx_ptp_data *ptp_data; +-#endif + + /* The following fields may be written more often */ + +--- a/drivers/net/ethernet/sfc/nic.h ++++ b/drivers/net/ethernet/sfc/nic.h +@@ -252,7 +252,6 @@ extern int efx_sriov_set_vf_spoofchk(str + bool spoofchk); + + struct ethtool_ts_info; +-#ifdef CONFIG_SFC_PTP + extern void efx_ptp_probe(struct efx_nic *efx); + extern int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd); + extern int efx_ptp_get_ts_info(struct net_device *net_dev, +@@ -260,31 +259,6 @@ extern int efx_ptp_get_ts_info(struct ne + extern bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb); + extern int efx_ptp_tx(struct efx_nic *efx, struct sk_buff *skb); + extern void efx_ptp_event(struct efx_nic *efx, efx_qword_t *ev); +-#else +-static inline void efx_ptp_probe(struct efx_nic *efx) {} +-static inline int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd) +-{ +- return -EOPNOTSUPP; +-} +-static inline int efx_ptp_get_ts_info(struct net_device *net_dev, +- struct ethtool_ts_info *ts_info) +-{ +- ts_info->so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | +- SOF_TIMESTAMPING_RX_SOFTWARE); +- ts_info->phc_index = -1; +- +- return 0; +-} +-static inline bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb) +-{ +- return false; +-} +-static inline int efx_ptp_tx(struct efx_nic *efx, struct sk_buff *skb) +-{ +- return NETDEV_TX_OK; +-} +-static inline void efx_ptp_event(struct efx_nic *efx, efx_qword_t *ev) {} +-#endif + + extern const struct efx_nic_type falcon_a1_nic_type; + extern const struct efx_nic_type falcon_b0_nic_type; +--- a/drivers/ptp/Kconfig ++++ b/drivers/ptp/Kconfig +@@ -25,8 +25,9 @@ config PTP_1588_CLOCK + + config PTP_1588_CLOCK_GIANFAR + tristate "Freescale eTSEC as PTP clock" +- depends on PTP_1588_CLOCK + depends on GIANFAR ++ select PTP_1588_CLOCK ++ default y + help + This driver adds support for using the eTSEC as a PTP + clock. This clock is only useful if your PTP programs are +@@ -38,8 +39,9 @@ config PTP_1588_CLOCK_GIANFAR + + config PTP_1588_CLOCK_IXP46X + tristate "Intel IXP46x as PTP clock" +- depends on PTP_1588_CLOCK + depends on IXP4XX_ETH ++ select PTP_1588_CLOCK ++ default y + help + This driver adds support for using the IXP46X as a PTP + clock. This clock is only useful if your PTP programs are +@@ -50,13 +52,13 @@ config PTP_1588_CLOCK_IXP46X + will be called ptp_ixp46x. + + comment "Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks." +- depends on PTP_1588_CLOCK && (PHYLIB=n || NETWORK_PHY_TIMESTAMPING=n) ++ depends on PHYLIB=n || NETWORK_PHY_TIMESTAMPING=n + + config DP83640_PHY + tristate "Driver for the National Semiconductor DP83640 PHYTER" +- depends on PTP_1588_CLOCK + depends on NETWORK_PHY_TIMESTAMPING + depends on PHYLIB ++ select PTP_1588_CLOCK + ---help--- + Supports the DP83640 PHYTER with IEEE 1588 features. + +@@ -70,8 +72,9 @@ config DP83640_PHY + + config PTP_1588_CLOCK_PCH + tristate "Intel PCH EG20T as PTP clock" +- depends on PTP_1588_CLOCK + depends on PCH_GBE ++ select PTP_1588_CLOCK ++ default y + help + This driver adds support for using the PCH EG20T as a PTP + clock. The hardware supports time stamping of PTP packets diff --git a/debian/patches/bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch b/debian/patches/bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch new file mode 100644 index 000000000..ef6d817cd --- /dev/null +++ b/debian/patches/bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch @@ -0,0 +1,69 @@ +From: Ben Hutchings +Date: Wed, 31 Oct 2012 15:32:44 +0000 +Subject: [2/5] ptp: Make PTP_1588_CLOCK select rather than depend on PPS + +commit 42a7ccef0a06519e2ea0be71d7c0f4ed9198509f upstream. + +PTP hardware clock drivers that select PTP_1588_CLOCK must currently +also select PPS. For those drivers that don't, the user must enable +PPS, then enable PTP_1588_CLOCK, then the driver. Simplify things for +developers and users by putting this selection in one place. + +Signed-off-by: Ben Hutchings +Signed-off-by: David S. Miller +--- + drivers/net/ethernet/intel/Kconfig | 2 -- + drivers/net/ethernet/oki-semi/pch_gbe/Kconfig | 1 - + drivers/ptp/Kconfig | 5 +---- + 3 files changed, 1 insertion(+), 7 deletions(-) + +diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig +index 9e49217..d5b359d 100644 +--- a/drivers/net/ethernet/intel/Kconfig ++++ b/drivers/net/ethernet/intel/Kconfig +@@ -124,7 +124,6 @@ config IGB_PTP + bool "PTP Hardware Clock (PHC)" + default n + depends on IGB +- select PPS + select PTP_1588_CLOCK + ---help--- + Say Y here if you want to use PTP Hardware Clock (PHC) in the +@@ -226,7 +225,6 @@ config IXGBE_PTP + bool "PTP Clock Support" + default n + depends on IXGBE +- select PPS + select PTP_1588_CLOCK + ---help--- + Say Y here if you want support for 1588 Timestamping with a +diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +index 9867bc6..d0e36f2 100644 +--- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig ++++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig +@@ -26,7 +26,6 @@ if PCH_GBE + config PCH_PTP + bool "PCH PTP clock support" + default n +- select PPS + select PTP_1588_CLOCK + select PTP_1588_CLOCK_PCH + ---help--- +diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig +index a6e4b7c..131ef03 100644 +--- a/drivers/ptp/Kconfig ++++ b/drivers/ptp/Kconfig +@@ -4,12 +4,9 @@ + + menu "PTP clock support" + +-comment "Enable Device Drivers -> PPS to see the PTP clock options." +- depends on PPS=n +- + config PTP_1588_CLOCK + tristate "PTP clock support" +- depends on PPS ++ select PPS + help + The IEEE 1588 standard defines a method to precisely + synchronize distributed clocks over Ethernet networks. The diff --git a/debian/patches/bugfix/all/sfc-Select-PTP_1588_CLOCK.patch b/debian/patches/bugfix/all/sfc-Select-PTP_1588_CLOCK.patch new file mode 100644 index 000000000..f9e8aa7e4 --- /dev/null +++ b/debian/patches/bugfix/all/sfc-Select-PTP_1588_CLOCK.patch @@ -0,0 +1,29 @@ +From: Ben Hutchings +Date: Thu, 1 Nov 2012 11:22:22 +0000 +Subject: [4/5] sfc: Select PTP_1588_CLOCK + +commit 3ba368c43565f31528b3aea585bb4119fded4eb1 upstream. + +This was missed in commit a24006ed12616bde1bbdb26868495906a212d8dc +('ptp: Enable clock drivers along with associated net/PHY drivers') +which enabled sfc's clock driver unconditionally. + +Reported-by: kbuild test robot +Signed-off-by: Ben Hutchings +Signed-off-by: David S. Miller +--- + drivers/net/ethernet/sfc/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/ethernet/sfc/Kconfig b/drivers/net/ethernet/sfc/Kconfig +index fb3cbc2..3ab2c428 100644 +--- a/drivers/net/ethernet/sfc/Kconfig ++++ b/drivers/net/ethernet/sfc/Kconfig +@@ -5,6 +5,7 @@ config SFC + select CRC32 + select I2C + select I2C_ALGOBIT ++ select PTP_1588_CLOCK + ---help--- + This driver supports 10-gigabit Ethernet cards based on + the Solarflare SFC4000 and SFC9000-family controllers. diff --git a/debian/patches/series b/debian/patches/series index a6f2fb8b3..ede9a3a49 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -60,3 +60,8 @@ bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch +bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch +bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch +bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch +bugfix/all/sfc-Select-PTP_1588_CLOCK.patch +bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch