On 27.10.2026 18:45, Aleksandr Loktionov wrote:
> Reserve the external PQC Root of Trust capability ID in the shared libie
> capability list and parse its value into the device capabilities.
> 
> Firmware reports 1 when an external Root of Trust (eRoT) controller is
> present and 0 when it is not. Keep a separate bit for an explicit value
> other than 0 or 1, so the flash path can reject an unknown answer
> instead of reading it as absence: an image the eRoT turns down leaves an
> erased flash bank behind, so guessing is worse than not flashing. Set
> both bits with |=, so a duplicated capability entry cannot undo a verdict
> already taken from an earlier one: an invalid value always rejects the
> update, and a mix of 0 and 1 keeps the eRoT checks enabled.
> 
> Signed-off-by: Aleksandr Loktionov <[email protected]>
> ---
>  drivers/net/ethernet/intel/ice/ice_common.c | 7 +++++++
>  drivers/net/ethernet/intel/ice/ice_type.h   | 3 +++
>  include/linux/net/intel/libie/adminq.h      | 1 +
>  3 files changed, 11 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c 
> b/drivers/net/ethernet/intel/ice/ice_common.c
> index 81187214..cc387c6 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -2482,6 +2482,13 @@ ice_parse_common_caps(struct ice_hw *hw, struct 
> ice_hw_common_caps *caps,
>       case LIBIE_AQC_CAPS_TX_SCHED_TOPO_COMP_MODE:
>               caps->tx_sched_topo_comp_mode_en = (number == 1);
>               break;
> +     case LIBIE_AQC_CAPS_EXTERNAL_PQC_ROT_PRESENT:
> +             /* sticky, so a duplicated entry cannot clear an earlier 
> verdict */
> +             caps->external_pqc_rot_present |= (number == 1);
> +             caps->external_pqc_rot_invalid |= (number != 0 && number != 1);
> +             ice_debug(hw, ICE_DBG_INIT, "%s: external_pqc_rot = %u\n",
> +                       prefix, number);
> +             break;
>       default:
>               /* Not one of the recognized common capabilities */
>               found = false;
> diff --git a/drivers/net/ethernet/intel/ice/ice_type.h 
> b/drivers/net/ethernet/intel/ice/ice_type.h
> index 4b6ed42..1ff69f7 100644
> --- a/drivers/net/ethernet/intel/ice/ice_type.h
> +++ b/drivers/net/ethernet/intel/ice/ice_type.h
> @@ -311,6 +311,9 @@ struct ice_hw_common_caps {
>       /* Post update reset restriction */
>       bool reset_restrict_support;
>       bool tx_sched_topo_comp_mode_en;
> +     /* External Root of Trust (eRoT) controller present */
> +     bool external_pqc_rot_present;
> +     bool external_pqc_rot_invalid;
>  };
>  
>  /* IEEE 1588 TIME_SYNC specific info */
> diff --git a/include/linux/net/intel/libie/adminq.h 
> b/include/linux/net/intel/libie/adminq.h
> index 839114d..df42f5b 100644
> --- a/include/linux/net/intel/libie/adminq.h
> +++ b/include/linux/net/intel/libie/adminq.h
> @@ -175,6 +175,7 @@ LIBIE_CHECK_STRUCT_LEN(16, libie_aqc_list_caps);
>  #define LIBIE_AQC_CAPS_PENDING_OROM_VER                      0x004B
>  #define LIBIE_AQC_CAPS_NET_VER                               0x004C
>  #define LIBIE_AQC_CAPS_PENDING_NET_VER                       0x004D
> +#define LIBIE_AQC_CAPS_EXTERNAL_PQC_ROT_PRESENT              0x004E
>  #define LIBIE_AQC_CAPS_RDMA                          0x0051
>  #define LIBIE_AQC_CAPS_LED                           0x0061
>  #define LIBIE_AQC_CAPS_SDP                           0x0062


Reviewed-by: Tomasz Lichwala <[email protected]>

Reply via email to