Message ID | 20240130120831.261085-2-jiri@resnulli.us (mailing list archive) |
---|---|
State | Accepted |
Commit | cf4f0f1e1c465da7c1f6bc89c3ff50bf42f0ab02 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | dpll: expose lock status error value to user | expand |
On Tue, Jan 30, 2024 at 01:08:29PM +0100, Jiri Pirko wrote: > From: Jiri Pirko <jiri@nvidia.com> > > If the dpll devices goes to state "unlocked" or "holdover", it may be > caused by an error. In that case, allow user to see what the error was. > Introduce a new attribute and values it can carry. > > Signed-off-by: Jiri Pirko <jiri@nvidia.com> > Acked-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> The nit below notwithstanding, this looks good to me. Reviewed-by: Simon Horman <horms@kernel.org> ... > diff --git a/include/uapi/linux/dpll.h b/include/uapi/linux/dpll.h > index b4e947f9bfbc..0c13d7f1a1bc 100644 > --- a/include/uapi/linux/dpll.h > +++ b/include/uapi/linux/dpll.h > @@ -50,6 +50,35 @@ enum dpll_lock_status { > DPLL_LOCK_STATUS_MAX = (__DPLL_LOCK_STATUS_MAX - 1) > }; > > +/** > + * enum dpll_lock_status_error - if previous status change was done due to a > + * failure, this provides information of dpll device lock status error. Valid > + * values for DPLL_A_LOCK_STATUS_ERROR attribute > + * @DPLL_LOCK_STATUS_ERROR_NONE: dpll device lock status was changed without > + * any error > + * @DPLL_LOCK_STATUS_ERROR_UNDEFINED: dpll device lock status was changed due > + * to undefined error. Driver fills this value up in case it is not able to > + * obtain suitable exact error type. > + * @DPLL_LOCK_STATUS_ERROR_MEDIA_DOWN: dpll device lock status was changed > + * because of associated media got down. This may happen for example if dpll > + * device was previously locked on an input pin of type > + * PIN_TYPE_SYNCE_ETH_PORT. > + * @DPLL_LOCK_STATUS_ERROR_FRACTIONAL_FREQUENCY_OFFSET_TOO_HIGH: the FFO > + * (Fractional Frequency Offset) between the RX and TX symbol rate on the > + * media got too high. This may happen for example if dpll device was > + * previously locked on an input pin of type PIN_TYPE_SYNCE_ETH_PORT. > + */ > +enum dpll_lock_status_error { > + DPLL_LOCK_STATUS_ERROR_NONE = 1, > + DPLL_LOCK_STATUS_ERROR_UNDEFINED, > + DPLL_LOCK_STATUS_ERROR_MEDIA_DOWN, > + DPLL_LOCK_STATUS_ERROR_FRACTIONAL_FREQUENCY_OFFSET_TOO_HIGH, nit: I'm all for descriptive names, but this one is rather long to say the least. > + > + /* private: */ > + __DPLL_LOCK_STATUS_ERROR_MAX, > + DPLL_LOCK_STATUS_ERROR_MAX = (__DPLL_LOCK_STATUS_ERROR_MAX - 1) > +}; > + > #define DPLL_TEMP_DIVIDER 1000 > > /** > @@ -150,6 +179,7 @@ enum dpll_a { > DPLL_A_LOCK_STATUS, > DPLL_A_TEMP, > DPLL_A_TYPE, > + DPLL_A_LOCK_STATUS_ERROR, > > __DPLL_A_MAX, > DPLL_A_MAX = (__DPLL_A_MAX - 1) > -- > 2.43.0 > >
On Thu, 1 Feb 2024 14:53:11 +0100 Simon Horman wrote: > > + DPLL_LOCK_STATUS_ERROR_FRACTIONAL_FREQUENCY_OFFSET_TOO_HIGH, > > nit: I'm all for descriptive names, > but this one is rather long to say the least. OMG :(
diff --git a/Documentation/netlink/specs/dpll.yaml b/Documentation/netlink/specs/dpll.yaml index b14aed18065f..1755066d8308 100644 --- a/Documentation/netlink/specs/dpll.yaml +++ b/Documentation/netlink/specs/dpll.yaml @@ -51,6 +51,40 @@ definitions: if dpll lock-state was not DPLL_LOCK_STATUS_LOCKED_HO_ACQ, the dpll's lock-state shall remain DPLL_LOCK_STATUS_UNLOCKED) render-max: true + - + type: enum + name: lock-status-error + doc: | + if previous status change was done due to a failure, this provides + information of dpll device lock status error. + Valid values for DPLL_A_LOCK_STATUS_ERROR attribute + entries: + - + name: none + doc: | + dpll device lock status was changed without any error + value: 1 + - + name: undefined + doc: | + dpll device lock status was changed due to undefined error. + Driver fills this value up in case it is not able + to obtain suitable exact error type. + - + name: media-down + doc: | + dpll device lock status was changed because of associated + media got down. + This may happen for example if dpll device was previously + locked on an input pin of type PIN_TYPE_SYNCE_ETH_PORT. + - + name: fractional-frequency-offset-too-high + doc: | + the FFO (Fractional Frequency Offset) between the RX and TX + symbol rate on the media got too high. + This may happen for example if dpll device was previously + locked on an input pin of type PIN_TYPE_SYNCE_ETH_PORT. + render-max: true - type: const name: temp-divider @@ -214,6 +248,10 @@ attribute-sets: name: type type: u32 enum: type + - + name: lock-status-error + type: u32 + enum: lock-status-error - name: pin enum-name: dpll_a_pin @@ -379,6 +417,7 @@ operations: - mode - mode-supported - lock-status + - lock-status-error - temp - clock-id - type diff --git a/include/uapi/linux/dpll.h b/include/uapi/linux/dpll.h index b4e947f9bfbc..0c13d7f1a1bc 100644 --- a/include/uapi/linux/dpll.h +++ b/include/uapi/linux/dpll.h @@ -50,6 +50,35 @@ enum dpll_lock_status { DPLL_LOCK_STATUS_MAX = (__DPLL_LOCK_STATUS_MAX - 1) }; +/** + * enum dpll_lock_status_error - if previous status change was done due to a + * failure, this provides information of dpll device lock status error. Valid + * values for DPLL_A_LOCK_STATUS_ERROR attribute + * @DPLL_LOCK_STATUS_ERROR_NONE: dpll device lock status was changed without + * any error + * @DPLL_LOCK_STATUS_ERROR_UNDEFINED: dpll device lock status was changed due + * to undefined error. Driver fills this value up in case it is not able to + * obtain suitable exact error type. + * @DPLL_LOCK_STATUS_ERROR_MEDIA_DOWN: dpll device lock status was changed + * because of associated media got down. This may happen for example if dpll + * device was previously locked on an input pin of type + * PIN_TYPE_SYNCE_ETH_PORT. + * @DPLL_LOCK_STATUS_ERROR_FRACTIONAL_FREQUENCY_OFFSET_TOO_HIGH: the FFO + * (Fractional Frequency Offset) between the RX and TX symbol rate on the + * media got too high. This may happen for example if dpll device was + * previously locked on an input pin of type PIN_TYPE_SYNCE_ETH_PORT. + */ +enum dpll_lock_status_error { + DPLL_LOCK_STATUS_ERROR_NONE = 1, + DPLL_LOCK_STATUS_ERROR_UNDEFINED, + DPLL_LOCK_STATUS_ERROR_MEDIA_DOWN, + DPLL_LOCK_STATUS_ERROR_FRACTIONAL_FREQUENCY_OFFSET_TOO_HIGH, + + /* private: */ + __DPLL_LOCK_STATUS_ERROR_MAX, + DPLL_LOCK_STATUS_ERROR_MAX = (__DPLL_LOCK_STATUS_ERROR_MAX - 1) +}; + #define DPLL_TEMP_DIVIDER 1000 /** @@ -150,6 +179,7 @@ enum dpll_a { DPLL_A_LOCK_STATUS, DPLL_A_TEMP, DPLL_A_TYPE, + DPLL_A_LOCK_STATUS_ERROR, __DPLL_A_MAX, DPLL_A_MAX = (__DPLL_A_MAX - 1)