lkml.org 
[lkml]   [2021]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 1/3] firmware: xilinx: Add support for runtime features
    Date
    Add support for runtime features by using an IOCTL call. The features
    can be enabled or disabled from the firmware as well as the features
    can be configured at runtime by querying IOCTL_SET_FEATURE_CONFIG id.
    Similarly, the user can get the configured values of features by
    querying IOCTL_GET_FEATURE_CONFIG id.

    Signed-off-by: Ronak Jain <ronak.jain@xilinx.com>
    ---
    Changes in v4:
    - Update commit message

    Changes in v3:
    - Resolved merged conflict

    Changes in v2:
    - Resolved merged conflict
    - Update commit message
    ---
    drivers/firmware/xilinx/zynqmp.c | 27 +++++++++++++++++++++++++++
    include/linux/firmware/xlnx-zynqmp.h | 25 +++++++++++++++++++++++++
    2 files changed, 52 insertions(+)

    diff --git a/drivers/firmware/xilinx/zynqmp.c b/drivers/firmware/xilinx/zynqmp.c
    index 3dd45a7420dc..6b05844e67d7 100644
    --- a/drivers/firmware/xilinx/zynqmp.c
    +++ b/drivers/firmware/xilinx/zynqmp.c
    @@ -1129,6 +1129,33 @@ int zynqmp_pm_system_shutdown(const u32 type, const u32 subtype)
    0, 0, NULL);
    }

    +/**
    + * zynqmp_pm_set_feature_config - PM call to request IOCTL for feature config
    + * @id: The config ID of the feature to be configured
    + * @value: The config value of the feature to be configured
    + *
    + * Return: Returns 0 on success or error value on failure.
    + */
    +int zynqmp_pm_set_feature_config(enum pm_feature_config_id id, u32 value)
    +{
    + return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_SET_FEATURE_CONFIG,
    + id, value, NULL);
    +}
    +
    +/**
    + * zynqmp_pm_get_feature_config - PM call to get value of configured feature
    + * @id: The config id of the feature to be queried
    + * @payload: Returned value array
    + *
    + * Return: Returns 0 on success or error value on failure.
    + */
    +int zynqmp_pm_get_feature_config(enum pm_feature_config_id id,
    + u32 *payload)
    +{
    + return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_GET_FEATURE_CONFIG,
    + id, 0, payload);
    +}
    +
    /**
    * struct zynqmp_pm_shutdown_scope - Struct for shutdown scope
    * @subtype: Shutdown subtype
    diff --git a/include/linux/firmware/xlnx-zynqmp.h b/include/linux/firmware/xlnx-zynqmp.h
    index 47fd4e52a423..772f7d6ba682 100644
    --- a/include/linux/firmware/xlnx-zynqmp.h
    +++ b/include/linux/firmware/xlnx-zynqmp.h
    @@ -126,6 +126,9 @@ enum pm_ioctl_id {
    /* Set healthy bit value */
    IOCTL_SET_BOOT_HEALTH_STATUS = 17,
    IOCTL_OSPI_MUX_SELECT = 21,
    + /* Runtime feature configuration */
    + IOCTL_SET_FEATURE_CONFIG = 26,
    + IOCTL_GET_FEATURE_CONFIG = 27,
    };

    enum pm_query_id {
    @@ -359,6 +362,14 @@ enum ospi_mux_select_type {
    PM_OSPI_MUX_SEL_LINEAR = 1,
    };

    +enum pm_feature_config_id {
    + PM_FEATURE_INVALID = 0,
    + PM_FEATURE_OVERTEMP_STATUS = 1,
    + PM_FEATURE_OVERTEMP_VALUE = 2,
    + PM_FEATURE_EXTWDT_STATUS = 3,
    + PM_FEATURE_EXTWDT_VALUE = 4,
    +};
    +
    /**
    * struct zynqmp_pm_query_data - PM query data
    * @qid: query ID
    @@ -427,6 +438,8 @@ int zynqmp_pm_pinctrl_get_config(const u32 pin, const u32 param,
    int zynqmp_pm_pinctrl_set_config(const u32 pin, const u32 param,
    u32 value);
    int zynqmp_pm_load_pdi(const u32 src, const u64 address);
    +int zynqmp_pm_set_feature_config(enum pm_feature_config_id id, u32 value);
    +int zynqmp_pm_get_feature_config(enum pm_feature_config_id id, u32 *payload);
    #else
    static inline int zynqmp_pm_get_api_version(u32 *version)
    {
    @@ -658,6 +671,18 @@ static inline int zynqmp_pm_load_pdi(const u32 src, const u64 address)
    {
    return -ENODEV;
    }
    +
    +static inline int zynqmp_pm_set_feature_config(enum pm_feature_config_id id,
    + u32 value)
    +{
    + return -ENODEV;
    +}
    +
    +static inline int zynqmp_pm_get_feature_config(enum pm_feature_config_id id,
    + u32 *payload)
    +{
    + return -ENODEV;
    +}
    #endif

    #endif /* __FIRMWARE_ZYNQMP_H__ */
    --
    2.32.0.93.g670b81a
    \
     
     \ /
      Last update: 2021-12-06 12:21    [W:2.332 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site