| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (c) 2023,2025 Qualcomm Innovation Center, Inc. All rights reserved. |
| */ |
| |
| #ifndef _CORESIGHT_CORESIGHT_TPDA_H |
| #define _CORESIGHT_CORESIGHT_TPDA_H |
| |
| #define TPDA_CR (0x000) |
| #define TPDA_Pn_CR(n) (0x004 + (n * 4)) |
| #define TPDA_FPID_CR (0x084) |
| #define TPDA_SYNCR (0x08C) |
| #define TPDA_FLUSH_CR (0x090) |
| |
| /* Cross trigger global (all ports) flush request bit */ |
| #define TPDA_CR_FLREQ BIT(0) |
| /* Cross trigger FREQ packets timestamp bit */ |
| #define TPDA_CR_FREQTS BIT(2) |
| /* Cross trigger FREQ packet request bit */ |
| #define TPDA_CR_FRIE BIT(3) |
| /* Cross trigger FLAG packet request interface bit */ |
| #define TPDA_CR_FLRIE BIT(4) |
| /* Cross trigger synchronization bit */ |
| #define TPDA_CR_SRIE BIT(5) |
| /* Bits 6 ~ 12 is for atid value */ |
| #define TPDA_CR_ATID GENMASK(12, 6) |
| /* |
| * Channel mode bit of the packetization of CMB/MCB traffic |
| * 0 - raw channel mapping mode |
| * 1 - channel pair marking mode |
| */ |
| #define TPDA_CR_CMBCHANMODE BIT(20) |
| |
| /* Aggregator port enable bit */ |
| #define TPDA_Pn_CR_ENA BIT(0) |
| /* Aggregator port CMB data set element size bit */ |
| #define TPDA_Pn_CR_CMBSIZE GENMASK(7, 6) |
| /* Aggregator port DSB data set element size bit */ |
| #define TPDA_Pn_CR_DSBSIZE BIT(8) |
| |
| /* TPDA_SYNCR count mask */ |
| #define TPDA_SYNCR_COUNT_MASK GENMASK(11, 0) |
| /* TPDA_SYNCR mode control bit */ |
| #define TPDA_SYNCR_MODE_CTRL_MASK GENMASK(12, 12) |
| |
| #define TPDA_MAX_INPORTS 32 |
| |
| /** |
| * struct tpda_drvdata - specifics associated to an TPDA component |
| * @base: memory mapped base address for this component. |
| * @dev: The device entity associated to this component. |
| * @csdev: component vitals needed by the framework. |
| * @spinlock: lock for the drvdata value. |
| * @enable: enable status of the component. |
| * @dsb_esize Record the DSB element size. |
| * @cmb_esize Record the CMB element size. |
| * @trig_async: Enable/disable cross trigger synchronization sequence interface. |
| * @trig_flag_ts: Enable/disable cross trigger FLAG packet request interface. |
| * @trig_freq: Enable/disable cross trigger FREQ packet request interface. |
| * @freq_ts: Enable/disable the timestamp for all FREQ packets. |
| * @cmbchan_mode: Configure the CMB/MCMB channel mode. |
| * @syncr_mode: Setting the mode for counting packets. |
| * @syncr_count: Setting the value of the count. |
| */ |
| struct tpda_drvdata { |
| void __iomem *base; |
| struct device *dev; |
| struct coresight_device *csdev; |
| spinlock_t spinlock; |
| u8 atid; |
| u32 dsb_esize; |
| u32 cmb_esize; |
| bool trig_async; |
| bool trig_flag_ts; |
| bool trig_freq; |
| bool freq_ts; |
| bool cmbchan_mode; |
| bool syncr_mode; |
| u32 syncr_count; |
| }; |
| |
| /* Enumerate members of global control register(cr) */ |
| enum tpda_cr_mem { |
| FREQTS, |
| FRIE, |
| FLRIE, |
| SRIE, |
| CMBCHANMODE |
| }; |
| |
| /** |
| * struct tpda_trig_sysfs_attribute - Record the member variables of cross |
| * trigger register that need to be operated by sysfs file |
| * @attr: The device attribute |
| * @mem: The member in the control register data structure |
| */ |
| struct tpda_trig_sysfs_attribute { |
| struct device_attribute attr; |
| enum tpda_cr_mem mem; |
| }; |
| |
| #define tpda_trig_sysfs_rw(name, mem) \ |
| (&((struct tpda_trig_sysfs_attribute[]) { \ |
| { \ |
| __ATTR(name, 0644, tpda_trig_sysfs_show, \ |
| tpda_trig_sysfs_store), \ |
| mem, \ |
| } \ |
| })[0].attr.attr) |
| |
| #endif /* _CORESIGHT_CORESIGHT_TPDA_H */ |