History

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

Add APIs to read/write PGGS and GGS registers.

Rajan Vaja committed 6 years ago

Commit 4f680b71 parent 4db81802 files · +90 −0Browse files

Unified · Split

2 files
  1. drivers/firmware/xilinx/zynqmp.c +66 −0
  2. include/linux/firmware/xlnx-zynqmp.h +24 −0
drivers/firmware/xilinx/zynqmp.c+66−0
@@ -617,6 +617,72 @@ int zynqmp_pm_sd_dll_reset(u32 node_id, u32 type) · 616 unmodified lines
617}617}
618EXPORT_SYMBOL_GPL(zynqmp_pm_sd_dll_reset);618EXPORT_SYMBOL_GPL(zynqmp_pm_sd_dll_reset);
619 619
620/**
621 * zynqmp_pm_write_ggs() - PM API for writing global general storage (ggs)
622 * @index GGS register index
623 * @value Register value to be written
624 *
625 * This function writes value to GGS register.
626 *
627 * @return Returns status, either success or error+reason
628 */
629int zynqmp_pm_write_ggs(u32 index, u32 value)
630{
631 return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_WRITE_GGS,
632 index, value, NULL);
633}
634EXPORT_SYMBOL_GPL(zynqmp_pm_write_ggs);
635
636/**
637 * zynqmp_pm_write_ggs() - PM API for reading global general storage (ggs)
638 * @index GGS register index
639 * @value Register value to be written
640 *
641 * This function returns GGS register value.
642 *
643 * @return Returns status, either success or error+reason
644 */
645int zynqmp_pm_read_ggs(u32 index, u32 *value)
646{
647 return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_READ_GGS,
648 index, 0, value);
649}
650EXPORT_SYMBOL_GPL(zynqmp_pm_read_ggs);
651
652/**
653 * zynqmp_pm_write_pggs() - PM API for writing persistent global general
654 * storage (pggs)
655 * @index PGGS register index
656 * @value Register value to be written
657 *
658 * This function writes value to PGGS register.
659 *
660 * @return Returns status, either success or error+reason
661 */
662int zynqmp_pm_write_pggs(u32 index, u32 value)
663{
664 return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_WRITE_PGGS, index, value,
665 NULL);
666}
667EXPORT_SYMBOL_GPL(zynqmp_pm_write_pggs);
668
669/**
670 * zynqmp_pm_write_pggs() - PM API for reading persistent global general
671 * storage (pggs)
672 * @index PGGS register index
673 * @value Register value to be written
674 *
675 * This function returns PGGS register value.
676 *
677 * @return Returns status, either success or error+reason
678 */
679int zynqmp_pm_read_pggs(u32 index, u32 *value)
680{
681 return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_READ_PGGS, index, 0,
682 value);
683}
684EXPORT_SYMBOL_GPL(zynqmp_pm_read_pggs);
685
620/**686/**
621 * zynqmp_pm_reset_assert - Request setting of reset (1 - assert, 0 - release)687 * zynqmp_pm_reset_assert - Request setting of reset (1 - assert, 0 - release)
622 * @reset: Reset to be configured688 * @reset: Reset to be configured
include/linux/firmware/xlnx-zynqmp.h+24−0
@@ -107,6 +107,10 @@ enum pm_ioctl_id { · 106 unmodified lines
107 IOCTL_GET_PLL_FRAC_MODE,107 IOCTL_GET_PLL_FRAC_MODE,
108 IOCTL_SET_PLL_FRAC_DATA,108 IOCTL_SET_PLL_FRAC_DATA,
109 IOCTL_GET_PLL_FRAC_DATA,109 IOCTL_GET_PLL_FRAC_DATA,
110 IOCTL_WRITE_GGS = 12,
111 IOCTL_READ_GGS = 13,
112 IOCTL_WRITE_PGGS = 14,
113 IOCTL_READ_PGGS = 15,
110};114};
111 115
112enum pm_query_id {116enum pm_query_id {
@@ -330,6 +334,10 @@ int zynqmp_pm_set_requirement(const u32 node, const u32 capabilities, · 217 unmodified lines
330int zynqmp_pm_aes_engine(const u64 address, u32 *out);334int zynqmp_pm_aes_engine(const u64 address, u32 *out);
331int zynqmp_pm_fpga_load(const u64 address, const u32 size, const u32 flags);335int zynqmp_pm_fpga_load(const u64 address, const u32 size, const u32 flags);
332int zynqmp_pm_fpga_get_status(u32 *value);336int zynqmp_pm_fpga_get_status(u32 *value);
337int zynqmp_pm_write_ggs(u32 index, u32 value);
338int zynqmp_pm_read_ggs(u32 index, u32 *value);
339int zynqmp_pm_write_pggs(u32 index, u32 value);
340int zynqmp_pm_read_pggs(u32 index, u32 *value);
333#else341#else
334static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)342static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
335{343{
@@ -456,6 +464,22 @@ static inline int zynqmp_pm_fpga_get_status(u32 *value) · 120 unmodified lines
456{464{
457 return -ENODEV;465 return -ENODEV;
458}466}
467static inline int zynqmp_pm_write_ggs(u32 index, u32 value)
468{
469 return -ENODEV;
470}
471static inline int zynqmp_pm_read_ggs(u32 index, u32 *value)
472{
473 return -ENODEV;
474}
475static inline int zynqmp_pm_write_pggs(u32 index, u32 value)
476{
477 return -ENODEV;
478}
479static inline int zynqmp_pm_read_pggs(u32 index, u32 *value)
480{
481 return -ENODEV;
482}
459#endif483#endif
460 484
461#endif /* __FIRMWARE_ZYNQMP_H__ */485#endif /* __FIRMWARE_ZYNQMP_H__ */