* @store: If set to true, the values will be stored
  *
  * Configure an external timestamp event on the requested channel.
+ *
+ * Return: 0 on success, -EOPNOTUSPP on unsupported flags
  */
-static void ice_ptp_cfg_extts(struct ice_pf *pf, unsigned int chan,
-                             struct ice_extts_channel *config, bool store)
+static int ice_ptp_cfg_extts(struct ice_pf *pf, unsigned int chan,
+                            struct ice_extts_channel *config, bool store)
 {
        u32 func, aux_reg, gpio_reg, irq_reg;
        struct ice_hw *hw = &pf->hw;
        u8 tmr_idx;
 
+       /* Reject requests with unsupported flags */
+       if (config->flags & ~(PTP_ENABLE_FEATURE |
+                             PTP_RISING_EDGE |
+                             PTP_FALLING_EDGE |
+                             PTP_STRICT_FLAGS))
+               return -EOPNOTSUPP;
+
        tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
 
        irq_reg = rd32(hw, PFINT_OICR_ENA);
 
        if (store)
                memcpy(&pf->ptp.extts_channels[chan], config, sizeof(*config));
+
+       return 0;
 }
 
 /**
        u32 func, val, gpio_pin;
        u8 tmr_idx;
 
+       if (config && config->flags & ~PTP_PEROUT_PHASE)
+               return -EOPNOTSUPP;
+
        tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
 
        /* 0. Reset mode & out_en in AUX_OUT */
        bool sma_pres = false;
        unsigned int chan;
        u32 gpio_pin;
-       int err;
 
        if (ice_is_feature_supported(pf, ICE_F_SMA_CTRL))
                sma_pres = true;
                        clk_cfg.gpio_pin = chan;
                }
 
+               clk_cfg.flags = rq->perout.flags;
                clk_cfg.period = ((rq->perout.period.sec * NSEC_PER_SEC) +
                                   rq->perout.period.nsec);
                clk_cfg.start_time = ((rq->perout.start.sec * NSEC_PER_SEC) +
                                       rq->perout.start.nsec);
                clk_cfg.ena = !!on;
 
-               err = ice_ptp_cfg_clkout(pf, chan, &clk_cfg, true);
-               break;
+               return ice_ptp_cfg_clkout(pf, chan, &clk_cfg, true);
        }
        case PTP_CLK_REQ_EXTTS:
        {
                extts_cfg.gpio_pin = gpio_pin;
                extts_cfg.ena = !!on;
 
-               ice_ptp_cfg_extts(pf, chan, &extts_cfg, true);
-               return 0;
+               return ice_ptp_cfg_extts(pf, chan, &extts_cfg, true);
        }
        default:
                return -EOPNOTSUPP;
        }
-
-       return err;
 }
 
 /**
                                    struct ptp_clock_request *rq, int on)
 {
        struct ice_pf *pf = ptp_info_to_pf(info);
-       int err;
 
        switch (rq->type) {
        case PTP_CLK_REQ_PPS:
        {
                struct ice_perout_channel clk_cfg = {};
 
+               clk_cfg.flags = rq->perout.flags;
                clk_cfg.gpio_pin = PPS_PIN_INDEX;
                clk_cfg.period = NSEC_PER_SEC;
                clk_cfg.ena = !!on;
 
-               err = ice_ptp_cfg_clkout(pf, PPS_CLK_GEN_CHAN, &clk_cfg, true);
-               break;
+               return ice_ptp_cfg_clkout(pf, PPS_CLK_GEN_CHAN, &clk_cfg, true);
        }
        case PTP_CLK_REQ_EXTTS:
        {
                extts_cfg.gpio_pin = TIME_SYNC_PIN_INDEX;
                extts_cfg.ena = !!on;
 
-               ice_ptp_cfg_extts(pf, rq->extts.index, &extts_cfg, true);
-               return 0;
+               return ice_ptp_cfg_extts(pf, rq->extts.index, &extts_cfg, true);
        }
        default:
                return -EOPNOTSUPP;
        }
-
-       return err;
 }
 
 /**