Skip to content

Commit

Permalink
Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/gi…
Browse files Browse the repository at this point in the history
…t/tnguy/next-queue

Tony Nguyen says:

====================
ice: add PTP auxiliary bus support

Michal Michalik says:

Auxiliary bus allows exchanging information between PFs, which allows
both fixing problems and simplifying new features implementation.
The auxiliary bus is enabled for all devices supported by ice driver.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Sep 30, 2023
2 parents 7c7dd1d + 170911b commit 236f387
Show file tree
Hide file tree
Showing 9 changed files with 483 additions and 251 deletions.
12 changes: 12 additions & 0 deletions drivers/net/ethernet/intel/ice/ice.h
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,18 @@ static inline bool ice_vector_ch_enabled(struct ice_q_vector *qv)
return !!qv->ch; /* Enable it to run with TC */
}

/**
* ice_ptp_pf_handles_tx_interrupt - Check if PF handles Tx interrupt
* @pf: Board private structure
*
* Return true if this PF should respond to the Tx timestamp interrupt
* indication in the miscellaneous OICR interrupt handler.
*/
static inline bool ice_ptp_pf_handles_tx_interrupt(struct ice_pf *pf)
{
return pf->ptp.tx_interrupt_mode != ICE_PTP_TX_INTERRUPT_NONE;
}

/**
* ice_irq_dynamic_ena - Enable default interrupt generation settings
* @hw: pointer to HW struct
Expand Down
10 changes: 0 additions & 10 deletions drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -2358,16 +2358,6 @@ struct ice_aqc_driver_shared_params {
__le32 addr_low;
};

enum ice_aqc_driver_params {
/* OS clock index for PTP timer Domain 0 */
ICE_AQC_DRIVER_PARAM_CLK_IDX_TMR0 = 0,
/* OS clock index for PTP timer Domain 1 */
ICE_AQC_DRIVER_PARAM_CLK_IDX_TMR1,

/* Add new parameters above */
ICE_AQC_DRIVER_PARAM_MAX = 16,
};

/* Lan Queue Overflow Event (direct, 0x1001) */
struct ice_aqc_event_lan_overflow {
__le32 prtdcb_ruptq;
Expand Down
75 changes: 0 additions & 75 deletions drivers/net/ethernet/intel/ice/ice_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -5720,81 +5720,6 @@ ice_aq_write_i2c(struct ice_hw *hw, struct ice_aqc_link_topo_addr topo_addr,
return ice_aq_send_cmd(hw, &desc, NULL, 0, cd);
}

/**
* ice_aq_set_driver_param - Set driver parameter to share via firmware
* @hw: pointer to the HW struct
* @idx: parameter index to set
* @value: the value to set the parameter to
* @cd: pointer to command details structure or NULL
*
* Set the value of one of the software defined parameters. All PFs connected
* to this device can read the value using ice_aq_get_driver_param.
*
* Note that firmware provides no synchronization or locking, and will not
* save the parameter value during a device reset. It is expected that
* a single PF will write the parameter value, while all other PFs will only
* read it.
*/
int
ice_aq_set_driver_param(struct ice_hw *hw, enum ice_aqc_driver_params idx,
u32 value, struct ice_sq_cd *cd)
{
struct ice_aqc_driver_shared_params *cmd;
struct ice_aq_desc desc;

if (idx >= ICE_AQC_DRIVER_PARAM_MAX)
return -EIO;

cmd = &desc.params.drv_shared_params;

ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_driver_shared_params);

cmd->set_or_get_op = ICE_AQC_DRIVER_PARAM_SET;
cmd->param_indx = idx;
cmd->param_val = cpu_to_le32(value);

return ice_aq_send_cmd(hw, &desc, NULL, 0, cd);
}

/**
* ice_aq_get_driver_param - Get driver parameter shared via firmware
* @hw: pointer to the HW struct
* @idx: parameter index to set
* @value: storage to return the shared parameter
* @cd: pointer to command details structure or NULL
*
* Get the value of one of the software defined parameters.
*
* Note that firmware provides no synchronization or locking. It is expected
* that only a single PF will write a given parameter.
*/
int
ice_aq_get_driver_param(struct ice_hw *hw, enum ice_aqc_driver_params idx,
u32 *value, struct ice_sq_cd *cd)
{
struct ice_aqc_driver_shared_params *cmd;
struct ice_aq_desc desc;
int status;

if (idx >= ICE_AQC_DRIVER_PARAM_MAX)
return -EIO;

cmd = &desc.params.drv_shared_params;

ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_driver_shared_params);

cmd->set_or_get_op = ICE_AQC_DRIVER_PARAM_GET;
cmd->param_indx = idx;

status = ice_aq_send_cmd(hw, &desc, NULL, 0, cd);
if (status)
return status;

*value = le32_to_cpu(cmd->param_val);

return 0;
}

/**
* ice_aq_set_gpio
* @hw: pointer to the hw struct
Expand Down
6 changes: 0 additions & 6 deletions drivers/net/ethernet/intel/ice/ice_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -253,12 +253,6 @@ int
ice_sched_query_elem(struct ice_hw *hw, u32 node_teid,
struct ice_aqc_txsched_elem_data *buf);
int
ice_aq_set_driver_param(struct ice_hw *hw, enum ice_aqc_driver_params idx,
u32 value, struct ice_sq_cd *cd);
int
ice_aq_get_driver_param(struct ice_hw *hw, enum ice_aqc_driver_params idx,
u32 *value, struct ice_sq_cd *cd);
int
ice_aq_set_gpio(struct ice_hw *hw, u16 gpio_ctrl_handle, u8 pin_idx, bool value,
struct ice_sq_cd *cd);
int
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ethernet/intel/ice/ice_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -3285,7 +3285,7 @@ ice_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
SOF_TIMESTAMPING_RX_HARDWARE |
SOF_TIMESTAMPING_RAW_HARDWARE;

info->phc_index = ice_get_ptp_clock_index(pf);
info->phc_index = ice_ptp_clock_index(pf);

info->tx_types = BIT(HWTSTAMP_TX_OFF) | BIT(HWTSTAMP_TX_ON);

Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/intel/ice/ice_hw_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@
#define PFINT_SB_CTL 0x0016B600
#define PFINT_SB_CTL_MSIX_INDX_M ICE_M(0x7FF, 0)
#define PFINT_SB_CTL_CAUSE_ENA_M BIT(30)
#define PFINT_TSYN_MSK 0x0016C980
#define QINT_RQCTL(_QRX) (0x00150000 + ((_QRX) * 4))
#define QINT_RQCTL_MSIX_INDX_S 0
#define QINT_RQCTL_MSIX_INDX_M ICE_M(0x7FF, 0)
Expand Down
11 changes: 8 additions & 3 deletions drivers/net/ethernet/intel/ice/ice_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3149,7 +3149,7 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)

if (oicr & PFINT_OICR_TSYN_TX_M) {
ena_mask &= ~PFINT_OICR_TSYN_TX_M;
if (!hw->reset_ongoing)
if (!hw->reset_ongoing && ice_ptp_pf_handles_tx_interrupt(pf))
set_bit(ICE_MISC_THREAD_TX_TSTAMP, pf->misc_thread);
}

Expand Down Expand Up @@ -7375,8 +7375,13 @@ static void ice_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
}

/* configure PTP timestamping after VSI rebuild */
if (test_bit(ICE_FLAG_PTP_SUPPORTED, pf->flags))
ice_ptp_cfg_timestamp(pf, false);
if (test_bit(ICE_FLAG_PTP_SUPPORTED, pf->flags)) {
if (pf->ptp.tx_interrupt_mode == ICE_PTP_TX_INTERRUPT_SELF)
ice_ptp_cfg_timestamp(pf, false);
else if (pf->ptp.tx_interrupt_mode == ICE_PTP_TX_INTERRUPT_ALL)
/* for E82x PHC owner always need to have interrupts */
ice_ptp_cfg_timestamp(pf, true);
}

err = ice_vsi_rebuild_by_type(pf, ICE_VSI_SWITCHDEV_CTRL);
if (err) {
Expand Down
Loading

0 comments on commit 236f387

Please sign in to comment.