diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igc/igc_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_main.c | 41 | 
1 files changed, 23 insertions, 18 deletions
| diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index cb5c7b09e8a0..dfd6c00b4205 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -6306,21 +6306,6 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,  	size_t n;  	int i; -	switch (qopt->cmd) { -	case TAPRIO_CMD_REPLACE: -		break; -	case TAPRIO_CMD_DESTROY: -		return igc_tsn_clear_schedule(adapter); -	case TAPRIO_CMD_STATS: -		igc_taprio_stats(adapter->netdev, &qopt->stats); -		return 0; -	case TAPRIO_CMD_QUEUE_STATS: -		igc_taprio_queue_stats(adapter->netdev, &qopt->queue_stats); -		return 0; -	default: -		return -EOPNOTSUPP; -	} -  	if (qopt->base_time < 0)  		return -ERANGE; @@ -6330,12 +6315,16 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,  	if (!validate_schedule(adapter, qopt))  		return -EINVAL; +	igc_ptp_read(adapter, &now); + +	if (igc_tsn_is_taprio_activated_by_user(adapter) && +	    is_base_time_past(qopt->base_time, &now)) +		adapter->qbv_config_change_errors++; +  	adapter->cycle_time = qopt->cycle_time;  	adapter->base_time = qopt->base_time;  	adapter->taprio_offload_enable = true; -	igc_ptp_read(adapter, &now); -  	for (n = 0; n < qopt->num_entries; n++) {  		struct tc_taprio_sched_entry *e = &qopt->entries[n]; @@ -6429,7 +6418,23 @@ static int igc_tsn_enable_qbv_scheduling(struct igc_adapter *adapter,  	if (hw->mac.type != igc_i225)  		return -EOPNOTSUPP; -	err = igc_save_qbv_schedule(adapter, qopt); +	switch (qopt->cmd) { +	case TAPRIO_CMD_REPLACE: +		err = igc_save_qbv_schedule(adapter, qopt); +		break; +	case TAPRIO_CMD_DESTROY: +		err = igc_tsn_clear_schedule(adapter); +		break; +	case TAPRIO_CMD_STATS: +		igc_taprio_stats(adapter->netdev, &qopt->stats); +		return 0; +	case TAPRIO_CMD_QUEUE_STATS: +		igc_taprio_queue_stats(adapter->netdev, &qopt->queue_stats); +		return 0; +	default: +		return -EOPNOTSUPP; +	} +  	if (err)  		return err; |