lkml.org 
[lkml]   [2021]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 2/4] drivers: firmware: Add PDI load API support
    Date
    This patch adds load PDI API support to enable full/partial PDI loading
    from linux. Programmable Device Image (PDI) is combination of headers,
    images and bitstream files to be loaded.

    Signed-off-by: Nava kishore Manne <nava.manne@xilinx.com>
    ---
    Changes for v2:
    -Updated API Doc and commit msg.
    No functional changes.
    Changes for v3:
    -None.
    Changes for v4:
    -Rebased the changes on linux-next.
    No functional changes

    drivers/firmware/xilinx/zynqmp.c | 17 +++++++++++++++++
    include/linux/firmware/xlnx-zynqmp.h | 10 ++++++++++
    2 files changed, 27 insertions(+)

    diff --git a/drivers/firmware/xilinx/zynqmp.c b/drivers/firmware/xilinx/zynqmp.c
    index 15b138326ecc..2db571da9ad8 100644
    --- a/drivers/firmware/xilinx/zynqmp.c
    +++ b/drivers/firmware/xilinx/zynqmp.c
    @@ -1011,6 +1011,23 @@ int zynqmp_pm_set_requirement(const u32 node, const u32 capabilities,
    }
    EXPORT_SYMBOL_GPL(zynqmp_pm_set_requirement);

    +/**
    + * zynqmp_pm_load_pdi - Load and process PDI
    + * @src: Source device where PDI is located
    + * @address: PDI src address
    + *
    + * This function provides support to load PDI from linux
    + *
    + * Return: Returns status, either success or error+reason
    + */
    +int zynqmp_pm_load_pdi(const u32 src, const u64 address)
    +{
    + return zynqmp_pm_invoke_fn(PM_LOAD_PDI, src,
    + lower_32_bits(address),
    + upper_32_bits(address), 0, NULL);
    +}
    +EXPORT_SYMBOL_GPL(zynqmp_pm_load_pdi);
    +
    /**
    * zynqmp_pm_aes - Access AES hardware to encrypt/decrypt the data using
    * AES-GCM core.
    diff --git a/include/linux/firmware/xlnx-zynqmp.h b/include/linux/firmware/xlnx-zynqmp.h
    index 9d1a5c175065..56b426fe020c 100644
    --- a/include/linux/firmware/xlnx-zynqmp.h
    +++ b/include/linux/firmware/xlnx-zynqmp.h
    @@ -52,6 +52,10 @@
    #define ZYNQMP_PM_CAPABILITY_WAKEUP 0x4U
    #define ZYNQMP_PM_CAPABILITY_UNUSABLE 0x8U

    +/* Loader commands */
    +#define PM_LOAD_PDI 0x701
    +#define PDI_SRC_DDR 0xF
    +
    /*
    * Firmware FPGA Manager flags
    * XILINX_ZYNQMP_PM_FPGA_FULL: FPGA full reconfiguration
    @@ -411,6 +415,7 @@ int zynqmp_pm_pinctrl_get_config(const u32 pin, const u32 param,
    u32 *value);
    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);
    #else
    static inline int zynqmp_pm_get_api_version(u32 *version)
    {
    @@ -622,6 +627,11 @@ static inline int zynqmp_pm_pinctrl_set_config(const u32 pin, const u32 param,
    {
    return -ENODEV;
    }
    +
    +static inline int zynqmp_pm_load_pdi(const u32 src, const u64 address)
    +{
    + return -ENODEV;
    +}
    #endif

    #endif /* __FIRMWARE_ZYNQMP_H__ */
    --
    2.17.1
    \
     
     \ /
      Last update: 2021-04-29 16:08    [W:3.367 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site