~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/include/asm/cti.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef __ASMARM_CTI_H
  3 #define __ASMARM_CTI_H
  4 
  5 #include        <asm/io.h>
  6 #include        <asm/hardware/coresight.h>
  7 
  8 /* The registers' definition is from section 3.2 of
  9  * Embedded Cross Trigger Revision: r0p0
 10  */
 11 #define         CTICONTROL              0x000
 12 #define         CTISTATUS               0x004
 13 #define         CTILOCK                 0x008
 14 #define         CTIPROTECTION           0x00C
 15 #define         CTIINTACK               0x010
 16 #define         CTIAPPSET               0x014
 17 #define         CTIAPPCLEAR             0x018
 18 #define         CTIAPPPULSE             0x01c
 19 #define         CTIINEN                 0x020
 20 #define         CTIOUTEN                0x0A0
 21 #define         CTITRIGINSTATUS         0x130
 22 #define         CTITRIGOUTSTATUS        0x134
 23 #define         CTICHINSTATUS           0x138
 24 #define         CTICHOUTSTATUS          0x13c
 25 #define         CTIPERIPHID0            0xFE0
 26 #define         CTIPERIPHID1            0xFE4
 27 #define         CTIPERIPHID2            0xFE8
 28 #define         CTIPERIPHID3            0xFEC
 29 #define         CTIPCELLID0             0xFF0
 30 #define         CTIPCELLID1             0xFF4
 31 #define         CTIPCELLID2             0xFF8
 32 #define         CTIPCELLID3             0xFFC
 33 
 34 /* The below are from section 3.6.4 of
 35  * CoreSight v1.0 Architecture Specification
 36  */
 37 #define         LOCKACCESS              0xFB0
 38 #define         LOCKSTATUS              0xFB4
 39 
 40 /**
 41  * struct cti - cross trigger interface struct
 42  * @base: mapped virtual address for the cti base
 43  * @irq: irq number for the cti
 44  * @trig_out_for_irq: triger out number which will cause
 45  *      the @irq happen
 46  *
 47  * cti struct used to operate cti registers.
 48  */
 49 struct cti {
 50         void __iomem *base;
 51         int irq;
 52         int trig_out_for_irq;
 53 };
 54 
 55 /**
 56  * cti_init - initialize the cti instance
 57  * @cti: cti instance
 58  * @base: mapped virtual address for the cti base
 59  * @irq: irq number for the cti
 60  * @trig_out: triger out number which will cause
 61  *      the @irq happen
 62  *
 63  * called by machine code to pass the board dependent
 64  * @base, @irq and @trig_out to cti.
 65  */
 66 static inline void cti_init(struct cti *cti,
 67         void __iomem *base, int irq, int trig_out)
 68 {
 69         cti->base = base;
 70         cti->irq  = irq;
 71         cti->trig_out_for_irq = trig_out;
 72 }
 73 
 74 /**
 75  * cti_map_trigger - use the @chan to map @trig_in to @trig_out
 76  * @cti: cti instance
 77  * @trig_in: trigger in number
 78  * @trig_out: trigger out number
 79  * @channel: channel number
 80  *
 81  * This function maps one trigger in of @trig_in to one trigger
 82  * out of @trig_out using the channel @chan.
 83  */
 84 static inline void cti_map_trigger(struct cti *cti,
 85         int trig_in, int trig_out, int chan)
 86 {
 87         void __iomem *base = cti->base;
 88         unsigned long val;
 89 
 90         val = __raw_readl(base + CTIINEN + trig_in * 4);
 91         val |= BIT(chan);
 92         __raw_writel(val, base + CTIINEN + trig_in * 4);
 93 
 94         val = __raw_readl(base + CTIOUTEN + trig_out * 4);
 95         val |= BIT(chan);
 96         __raw_writel(val, base + CTIOUTEN + trig_out * 4);
 97 }
 98 
 99 /**
100  * cti_enable - enable the cti module
101  * @cti: cti instance
102  *
103  * enable the cti module
104  */
105 static inline void cti_enable(struct cti *cti)
106 {
107         __raw_writel(0x1, cti->base + CTICONTROL);
108 }
109 
110 /**
111  * cti_disable - disable the cti module
112  * @cti: cti instance
113  *
114  * enable the cti module
115  */
116 static inline void cti_disable(struct cti *cti)
117 {
118         __raw_writel(0, cti->base + CTICONTROL);
119 }
120 
121 /**
122  * cti_irq_ack - clear the cti irq
123  * @cti: cti instance
124  *
125  * clear the cti irq
126  */
127 static inline void cti_irq_ack(struct cti *cti)
128 {
129         void __iomem *base = cti->base;
130         unsigned long val;
131 
132         val = __raw_readl(base + CTIINTACK);
133         val |= BIT(cti->trig_out_for_irq);
134         __raw_writel(val, base + CTIINTACK);
135 }
136 
137 /**
138  * cti_unlock - unlock cti module
139  * @cti: cti instance
140  *
141  * unlock the cti module, or else any writes to the cti
142  * module is not allowed.
143  */
144 static inline void cti_unlock(struct cti *cti)
145 {
146         __raw_writel(CS_LAR_KEY, cti->base + LOCKACCESS);
147 }
148 
149 /**
150  * cti_lock - lock cti module
151  * @cti: cti instance
152  *
153  * lock the cti module, so any writes to the cti
154  * module will be not allowed.
155  */
156 static inline void cti_lock(struct cti *cti)
157 {
158         __raw_writel(~CS_LAR_KEY, cti->base + LOCKACCESS);
159 }
160 #endif
161 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php