zynqmp: pm: Implemented pm API functions to load the bitstream into PL
This patch adds pm_fpga_load() and pm_fpga_get_status() API's to provide the Access to the xilfpga library to load the bitstream into zynqmp PL region. Signed-off-by: Nava kishore Manne <navam@xilinx.com>
This commit is contained in:
parent
f7d4bfc2bf
commit
2ddc31dece
|
@ -497,3 +497,47 @@ enum pm_ret_status pm_mmio_read(uintptr_t address, unsigned int *value)
|
||||||
PM_PACK_PAYLOAD2(payload, PM_MMIO_READ, address);
|
PM_PACK_PAYLOAD2(payload, PM_MMIO_READ, address);
|
||||||
return pm_ipi_send_sync(primary_proc, payload, value);
|
return pm_ipi_send_sync(primary_proc, payload, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pm_fpga_load() - Load the bitstream into the PL.
|
||||||
|
*
|
||||||
|
* This function provides access to the xilfpga library to load
|
||||||
|
* the Bit-stream into PL.
|
||||||
|
*
|
||||||
|
* address_low: lower 32-bit Linear memory space address
|
||||||
|
*
|
||||||
|
* address_high: higher 32-bit Linear memory space address
|
||||||
|
*
|
||||||
|
* size: Number of 32bit words
|
||||||
|
*
|
||||||
|
* @return Returns status, either success or error+reason
|
||||||
|
*/
|
||||||
|
enum pm_ret_status pm_fpga_load(uint32_t address_low,
|
||||||
|
uint32_t address_high,
|
||||||
|
uint32_t size,
|
||||||
|
uint32_t flags)
|
||||||
|
{
|
||||||
|
uint32_t payload[PAYLOAD_ARG_CNT];
|
||||||
|
|
||||||
|
/* Send request to the PMU */
|
||||||
|
PM_PACK_PAYLOAD5(payload, PM_FPGA_LOAD, address_high, address_low,
|
||||||
|
size, flags);
|
||||||
|
return pm_ipi_send(primary_proc, payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pm_fpga_get_status() - Read value from fpga status register
|
||||||
|
* @value Value to read
|
||||||
|
*
|
||||||
|
* This function provides access to the xilfpga library to get
|
||||||
|
* the fpga status
|
||||||
|
* @return Returns status, either success or error+reason
|
||||||
|
*/
|
||||||
|
enum pm_ret_status pm_fpga_get_status(unsigned int *value)
|
||||||
|
{
|
||||||
|
uint32_t payload[PAYLOAD_ARG_CNT];
|
||||||
|
|
||||||
|
/* Send request to the PMU */
|
||||||
|
PM_PACK_PAYLOAD1(payload, PM_FPGA_GET_STATUS);
|
||||||
|
return pm_ipi_send_sync(primary_proc, payload, value);
|
||||||
|
}
|
||||||
|
|
|
@ -109,4 +109,10 @@ enum pm_ret_status pm_mmio_write(uintptr_t address,
|
||||||
unsigned int mask,
|
unsigned int mask,
|
||||||
unsigned int value);
|
unsigned int value);
|
||||||
enum pm_ret_status pm_mmio_read(uintptr_t address, unsigned int *value);
|
enum pm_ret_status pm_mmio_read(uintptr_t address, unsigned int *value);
|
||||||
|
enum pm_ret_status pm_fpga_load(uint32_t address_high,
|
||||||
|
uint32_t address_low,
|
||||||
|
uint32_t size,
|
||||||
|
uint32_t flags);
|
||||||
|
enum pm_ret_status pm_fpga_get_status(unsigned int *value);
|
||||||
|
|
||||||
#endif /* _PM_API_SYS_H_ */
|
#endif /* _PM_API_SYS_H_ */
|
||||||
|
|
|
@ -87,6 +87,8 @@ enum pm_api_id {
|
||||||
PM_MMIO_WRITE,
|
PM_MMIO_WRITE,
|
||||||
PM_MMIO_READ,
|
PM_MMIO_READ,
|
||||||
PM_INIT,
|
PM_INIT,
|
||||||
|
PM_FPGA_LOAD,
|
||||||
|
PM_FPGA_GET_STATUS,
|
||||||
PM_API_MAX
|
PM_API_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -228,6 +228,19 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
|
||||||
ret = pm_mmio_read(pm_arg[0], &value);
|
ret = pm_mmio_read(pm_arg[0], &value);
|
||||||
SMC_RET1(handle, (uint64_t)ret | ((uint64_t)value) << 32);
|
SMC_RET1(handle, (uint64_t)ret | ((uint64_t)value) << 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case PM_FPGA_LOAD:
|
||||||
|
ret = pm_fpga_load(pm_arg[0], pm_arg[1], pm_arg[2], pm_arg[3]);
|
||||||
|
SMC_RET1(handle, (uint64_t)ret);
|
||||||
|
|
||||||
|
case PM_FPGA_GET_STATUS:
|
||||||
|
{
|
||||||
|
uint32_t value;
|
||||||
|
|
||||||
|
ret = pm_fpga_get_status(&value);
|
||||||
|
SMC_RET1(handle, (uint64_t)ret | ((uint64_t)value) << 32);
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
WARN("Unimplemented PM Service Call: 0x%x\n", smc_fid);
|
WARN("Unimplemented PM Service Call: 0x%x\n", smc_fid);
|
||||||
SMC_RET1(handle, SMC_UNK);
|
SMC_RET1(handle, SMC_UNK);
|
||||||
|
|
Loading…
Reference in New Issue