Commit 4f680b72 authored by Rajan Vaja's avatar Rajan Vaja Committed by Greg Kroah-Hartman
Browse files

firmware: xilinx: Add APIs to read/write GGS/PGGS registers

parent 4db8180f
Loading
Loading
Loading
Loading
+66 −0
Original line number Original line Diff line number Diff line
@@ -617,6 +617,72 @@ int zynqmp_pm_sd_dll_reset(u32 node_id, u32 type)
}
}
EXPORT_SYMBOL_GPL(zynqmp_pm_sd_dll_reset);
EXPORT_SYMBOL_GPL(zynqmp_pm_sd_dll_reset);


/**
 * zynqmp_pm_write_ggs() - PM API for writing global general storage (ggs)
 * @index	GGS register index
 * @value	Register value to be written
 *
 * This function writes value to GGS register.
 *
 * @return      Returns status, either success or error+reason
 */
int zynqmp_pm_write_ggs(u32 index, u32 value)
{
	return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_WRITE_GGS,
				   index, value, NULL);
}
EXPORT_SYMBOL_GPL(zynqmp_pm_write_ggs);

/**
 * zynqmp_pm_write_ggs() - PM API for reading global general storage (ggs)
 * @index	GGS register index
 * @value	Register value to be written
 *
 * This function returns GGS register value.
 *
 * @return      Returns status, either success or error+reason
 */
int zynqmp_pm_read_ggs(u32 index, u32 *value)
{
	return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_READ_GGS,
				   index, 0, value);
}
EXPORT_SYMBOL_GPL(zynqmp_pm_read_ggs);

/**
 * zynqmp_pm_write_pggs() - PM API for writing persistent global general
 *			     storage (pggs)
 * @index	PGGS register index
 * @value	Register value to be written
 *
 * This function writes value to PGGS register.
 *
 * @return      Returns status, either success or error+reason
 */
int zynqmp_pm_write_pggs(u32 index, u32 value)
{
	return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_WRITE_PGGS, index, value,
				   NULL);
}
EXPORT_SYMBOL_GPL(zynqmp_pm_write_pggs);

/**
 * zynqmp_pm_write_pggs() - PM API for reading persistent global general
 *			     storage (pggs)
 * @index	PGGS register index
 * @value	Register value to be written
 *
 * This function returns PGGS register value.
 *
 * @return      Returns status, either success or error+reason
 */
int zynqmp_pm_read_pggs(u32 index, u32 *value)
{
	return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_READ_PGGS, index, 0,
				   value);
}
EXPORT_SYMBOL_GPL(zynqmp_pm_read_pggs);

/**
/**
 * zynqmp_pm_reset_assert - Request setting of reset (1 - assert, 0 - release)
 * zynqmp_pm_reset_assert - Request setting of reset (1 - assert, 0 - release)
 * @reset:		Reset to be configured
 * @reset:		Reset to be configured
+24 −0
Original line number Original line Diff line number Diff line
@@ -107,6 +107,10 @@ enum pm_ioctl_id {
	IOCTL_GET_PLL_FRAC_MODE,
	IOCTL_GET_PLL_FRAC_MODE,
	IOCTL_SET_PLL_FRAC_DATA,
	IOCTL_SET_PLL_FRAC_DATA,
	IOCTL_GET_PLL_FRAC_DATA,
	IOCTL_GET_PLL_FRAC_DATA,
	IOCTL_WRITE_GGS = 12,
	IOCTL_READ_GGS = 13,
	IOCTL_WRITE_PGGS = 14,
	IOCTL_READ_PGGS = 15,
};
};


enum pm_query_id {
enum pm_query_id {
@@ -330,6 +334,10 @@ int zynqmp_pm_set_requirement(const u32 node, const u32 capabilities,
int zynqmp_pm_aes_engine(const u64 address, u32 *out);
int zynqmp_pm_aes_engine(const u64 address, u32 *out);
int zynqmp_pm_fpga_load(const u64 address, const u32 size, const u32 flags);
int zynqmp_pm_fpga_load(const u64 address, const u32 size, const u32 flags);
int zynqmp_pm_fpga_get_status(u32 *value);
int zynqmp_pm_fpga_get_status(u32 *value);
int zynqmp_pm_write_ggs(u32 index, u32 value);
int zynqmp_pm_read_ggs(u32 index, u32 *value);
int zynqmp_pm_write_pggs(u32 index, u32 value);
int zynqmp_pm_read_pggs(u32 index, u32 *value);
#else
#else
static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
{
{
@@ -456,6 +464,22 @@ static inline int zynqmp_pm_fpga_get_status(u32 *value)
{
{
	return -ENODEV;
	return -ENODEV;
}
}
static inline int zynqmp_pm_write_ggs(u32 index, u32 value)
{
	return -ENODEV;
}
static inline int zynqmp_pm_read_ggs(u32 index, u32 *value)
{
	return -ENODEV;
}
static inline int zynqmp_pm_write_pggs(u32 index, u32 value)
{
	return -ENODEV;
}
static inline int zynqmp_pm_read_pggs(u32 index, u32 *value)
{
	return -ENODEV;
}
#endif
#endif


#endif /* __FIRMWARE_ZYNQMP_H__ */
#endif /* __FIRMWARE_ZYNQMP_H__ */