Linux Audio

Check our new training course

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