1 /* 2 * Copyright (c) 2026, Qualcomm Technologies, Inc. and/or its subsidiaries. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <arch_helpers.h> 8 #include <drivers/qti/qtimer/qtimer.h> 9 #include <lib/mmio.h> 10 11 #include <qtimer_defs.h> 12 13 #define QTIMER_FREQ_IN_100KHZ 192ULL 14 15 #define VOFF_FG0_LO_OFFSET(n) (0x80 + 0x8 * (n)) 16 #define VOFF_FG0_HI_OFFSET(n) (0x84 + 0x8 * (n)) 17 #define ACR_FG0_OFFSET(n) (0x40 + 0x4 * (n)) 18 #define SAR_FG0_OFFSET (0x4) 19 20 /* Security configuration */ qti_qtimer_init(void)21void qti_qtimer_init(void) 22 { 23 uint8_t i; 24 25 mmio_write_32(QTI_QTIMER_BASE + SAR_FG0_OFFSET, 0x7F); 26 27 for (i = 0; i < QTIMER_NBR_FRAMES; i++) { 28 mmio_write_32(QTI_QTIMER_BASE + ACR_FG0_OFFSET(i), 0x3F); 29 mmio_write_32(QTI_QTIMER_BASE + VOFF_FG0_LO_OFFSET(i), 0x0); 30 mmio_write_32(QTI_QTIMER_BASE + VOFF_FG0_HI_OFFSET(i), 0x0); 31 } 32 33 dsbsy(); 34 isb(); 35 } 36 qti_qtimer_get_raw(void)37uint64_t qti_qtimer_get_raw(void) 38 { 39 /* Assumes atomics reads */ 40 return mmio_read_64(QTIMER0_F2V1_BASE_ADDRESS); 41 } 42 qti_qtimer_get_usec(void)43uint64_t qti_qtimer_get_usec(void) 44 { 45 uint64_t ticks = qti_qtimer_get_raw(); 46 47 return ((ticks * 10ULL) / QTIMER_FREQ_IN_100KHZ); 48 } 49 50