1184c39d1SPriyanka Jain /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 2*2cb2abf3SHemant Agrawal * Copyright 2019-2021 NXP 3184c39d1SPriyanka Jain */ 4184c39d1SPriyanka Jain #ifndef __FSL_DPRTC_H 5184c39d1SPriyanka Jain #define __FSL_DPRTC_H 6184c39d1SPriyanka Jain 7184c39d1SPriyanka Jain /** @addtogroup dprtc Data Path Real Time Counter API 8184c39d1SPriyanka Jain * Contains initialization APIs and runtime control APIs for RTC 9184c39d1SPriyanka Jain * @{ 10184c39d1SPriyanka Jain */ 11184c39d1SPriyanka Jain 12184c39d1SPriyanka Jain struct fsl_mc_io; 13184c39d1SPriyanka Jain 14184c39d1SPriyanka Jain int dprtc_open(struct fsl_mc_io *mc_io, 15184c39d1SPriyanka Jain uint32_t cmd_flags, 16184c39d1SPriyanka Jain int dprtc_id, 17184c39d1SPriyanka Jain uint16_t *token); 18184c39d1SPriyanka Jain 19184c39d1SPriyanka Jain int dprtc_close(struct fsl_mc_io *mc_io, 20184c39d1SPriyanka Jain uint32_t cmd_flags, 21184c39d1SPriyanka Jain uint16_t token); 22184c39d1SPriyanka Jain 23184c39d1SPriyanka Jain /** 24184c39d1SPriyanka Jain * struct dprtc_cfg - Structure representing DPRTC configuration 25184c39d1SPriyanka Jain * @options: place holder 26184c39d1SPriyanka Jain */ 27184c39d1SPriyanka Jain struct dprtc_cfg { 28184c39d1SPriyanka Jain uint32_t options; 29184c39d1SPriyanka Jain }; 30184c39d1SPriyanka Jain 31184c39d1SPriyanka Jain int dprtc_create(struct fsl_mc_io *mc_io, 32184c39d1SPriyanka Jain uint16_t dprc_token, 33184c39d1SPriyanka Jain uint32_t cmd_flags, 34184c39d1SPriyanka Jain const struct dprtc_cfg *cfg, 35184c39d1SPriyanka Jain uint32_t *obj_id); 36184c39d1SPriyanka Jain 37184c39d1SPriyanka Jain int dprtc_destroy(struct fsl_mc_io *mc_io, 38184c39d1SPriyanka Jain uint16_t dprc_token, 39184c39d1SPriyanka Jain uint32_t cmd_flags, 40184c39d1SPriyanka Jain uint32_t object_id); 41184c39d1SPriyanka Jain 42184c39d1SPriyanka Jain int dprtc_enable(struct fsl_mc_io *mc_io, 43184c39d1SPriyanka Jain uint32_t cmd_flags, 44184c39d1SPriyanka Jain uint16_t token); 45184c39d1SPriyanka Jain 46184c39d1SPriyanka Jain int dprtc_disable(struct fsl_mc_io *mc_io, 47184c39d1SPriyanka Jain uint32_t cmd_flags, 48184c39d1SPriyanka Jain uint16_t token); 49184c39d1SPriyanka Jain 50184c39d1SPriyanka Jain int dprtc_is_enabled(struct fsl_mc_io *mc_io, 51184c39d1SPriyanka Jain uint32_t cmd_flags, 52184c39d1SPriyanka Jain uint16_t token, 53184c39d1SPriyanka Jain int *en); 54184c39d1SPriyanka Jain 55184c39d1SPriyanka Jain int dprtc_reset(struct fsl_mc_io *mc_io, 56184c39d1SPriyanka Jain uint32_t cmd_flags, 57184c39d1SPriyanka Jain uint16_t token); 58184c39d1SPriyanka Jain 59184c39d1SPriyanka Jain int dprtc_set_clock_offset(struct fsl_mc_io *mc_io, 60184c39d1SPriyanka Jain uint32_t cmd_flags, 61184c39d1SPriyanka Jain uint16_t token, 62184c39d1SPriyanka Jain int64_t offset); 63184c39d1SPriyanka Jain 64184c39d1SPriyanka Jain int dprtc_set_freq_compensation(struct fsl_mc_io *mc_io, 65184c39d1SPriyanka Jain uint32_t cmd_flags, 66184c39d1SPriyanka Jain uint16_t token, 67184c39d1SPriyanka Jain uint32_t freq_compensation); 68184c39d1SPriyanka Jain 69184c39d1SPriyanka Jain int dprtc_get_freq_compensation(struct fsl_mc_io *mc_io, 70184c39d1SPriyanka Jain uint32_t cmd_flags, 71184c39d1SPriyanka Jain uint16_t token, 72184c39d1SPriyanka Jain uint32_t *freq_compensation); 73184c39d1SPriyanka Jain 74184c39d1SPriyanka Jain int dprtc_get_time(struct fsl_mc_io *mc_io, 75184c39d1SPriyanka Jain uint32_t cmd_flags, 76184c39d1SPriyanka Jain uint16_t token, 77184c39d1SPriyanka Jain uint64_t *time); 78184c39d1SPriyanka Jain 79184c39d1SPriyanka Jain int dprtc_set_time(struct fsl_mc_io *mc_io, 80184c39d1SPriyanka Jain uint32_t cmd_flags, 81184c39d1SPriyanka Jain uint16_t token, 82184c39d1SPriyanka Jain uint64_t time); 83184c39d1SPriyanka Jain 84184c39d1SPriyanka Jain int dprtc_set_alarm(struct fsl_mc_io *mc_io, 85184c39d1SPriyanka Jain uint32_t cmd_flags, 86184c39d1SPriyanka Jain uint16_t token, 87184c39d1SPriyanka Jain uint64_t time); 88184c39d1SPriyanka Jain 89*2cb2abf3SHemant Agrawal struct dprtc_ext_trigger_status { 90*2cb2abf3SHemant Agrawal uint64_t timestamp; 91*2cb2abf3SHemant Agrawal uint8_t unread_valid_timestamp; 92*2cb2abf3SHemant Agrawal }; 93*2cb2abf3SHemant Agrawal 94*2cb2abf3SHemant Agrawal int dprtc_get_ext_trigger_timestamp(struct fsl_mc_io *mc_io, 95*2cb2abf3SHemant Agrawal uint32_t cmd_flags, 96*2cb2abf3SHemant Agrawal uint16_t token, 97*2cb2abf3SHemant Agrawal uint8_t id, 98*2cb2abf3SHemant Agrawal struct dprtc_ext_trigger_status *status); 99*2cb2abf3SHemant Agrawal 100*2cb2abf3SHemant Agrawal int dprtc_set_fiper_loopback(struct fsl_mc_io *mc_io, 101*2cb2abf3SHemant Agrawal uint32_t cmd_flags, 102*2cb2abf3SHemant Agrawal uint16_t token, 103*2cb2abf3SHemant Agrawal uint8_t id, 104*2cb2abf3SHemant Agrawal uint8_t fiper_as_input); 105*2cb2abf3SHemant Agrawal 106184c39d1SPriyanka Jain /** 107184c39d1SPriyanka Jain * struct dprtc_attr - Structure representing DPRTC attributes 108184c39d1SPriyanka Jain * @id: DPRTC object ID 109184c39d1SPriyanka Jain */ 110184c39d1SPriyanka Jain struct dprtc_attr { 111184c39d1SPriyanka Jain int id; 112184c39d1SPriyanka Jain int paddr; 113184c39d1SPriyanka Jain int little_endian; 114184c39d1SPriyanka Jain }; 115184c39d1SPriyanka Jain 116184c39d1SPriyanka Jain int dprtc_get_attributes(struct fsl_mc_io *mc_io, 117184c39d1SPriyanka Jain uint32_t cmd_flags, 118184c39d1SPriyanka Jain uint16_t token, 119184c39d1SPriyanka Jain struct dprtc_attr *attr); 120184c39d1SPriyanka Jain 121184c39d1SPriyanka Jain int dprtc_get_api_version(struct fsl_mc_io *mc_io, 122184c39d1SPriyanka Jain uint32_t cmd_flags, 123184c39d1SPriyanka Jain uint16_t *major_ver, 124184c39d1SPriyanka Jain uint16_t *minor_ver); 125184c39d1SPriyanka Jain 126184c39d1SPriyanka Jain #endif /* __FSL_DPRTC_H */ 127