cregit-Linux how code gets into the kernel

Release 4.11 arch/arm/include/asm/cti.h

#ifndef __ASMARM_CTI_H

#define __ASMARM_CTI_H

#include	<asm/io.h>
#include	<asm/hardware/coresight.h>

/* The registers' definition is from section 3.2 of
 * Embedded Cross Trigger Revision: r0p0
 */

#define		CTICONTROL		0x000

#define		CTISTATUS		0x004

#define		CTILOCK			0x008

#define		CTIPROTECTION		0x00C

#define		CTIINTACK		0x010

#define		CTIAPPSET		0x014

#define		CTIAPPCLEAR		0x018

#define		CTIAPPPULSE		0x01c

#define		CTIINEN			0x020

#define		CTIOUTEN		0x0A0

#define		CTITRIGINSTATUS		0x130

#define		CTITRIGOUTSTATUS	0x134

#define		CTICHINSTATUS		0x138

#define		CTICHOUTSTATUS		0x13c

#define		CTIPERIPHID0		0xFE0

#define		CTIPERIPHID1		0xFE4

#define		CTIPERIPHID2		0xFE8

#define		CTIPERIPHID3		0xFEC

#define		CTIPCELLID0		0xFF0

#define		CTIPCELLID1		0xFF4

#define		CTIPCELLID2		0xFF8

#define		CTIPCELLID3		0xFFC

/* The below are from section 3.6.4 of
 * CoreSight v1.0 Architecture Specification
 */

#define		LOCKACCESS		0xFB0

#define		LOCKSTATUS		0xFB4

/**
 * struct cti - cross trigger interface struct
 * @base: mapped virtual address for the cti base
 * @irq: irq number for the cti
 * @trig_out_for_irq: triger out number which will cause
 *      the @irq happen
 *
 * cti struct used to operate cti registers.
 */

struct cti {
	
void __iomem *base;
	
int irq;
	
int trig_out_for_irq;
};

/**
 * cti_init - initialize the cti instance
 * @cti: cti instance
 * @base: mapped virtual address for the cti base
 * @irq: irq number for the cti
 * @trig_out: triger out number which will cause
 *      the @irq happen
 *
 * called by machine code to pass the board dependent
 * @base, @irq and @trig_out to cti.
 */

static inline void cti_init(struct cti *cti, void __iomem *base, int irq, int trig_out) { cti->base = base; cti->irq = irq; cti->trig_out_for_irq = trig_out; }

Contributors

PersonTokensPropCommitsCommitProp
Ming Lei41100.00%1100.00%
Total41100.00%1100.00%

/** * cti_map_trigger - use the @chan to map @trig_in to @trig_out * @cti: cti instance * @trig_in: trigger in number * @trig_out: trigger out number * @channel: channel number * * This function maps one trigger in of @trig_in to one trigger * out of @trig_out using the channel @chan. */
static inline void cti_map_trigger(struct cti *cti, int trig_in, int trig_out, int chan) { void __iomem *base = cti->base; unsigned long val; val = __raw_readl(base + CTIINEN + trig_in * 4); val |= BIT(chan); __raw_writel(val, base + CTIINEN + trig_in * 4); val = __raw_readl(base + CTIOUTEN + trig_out * 4); val |= BIT(chan); __raw_writel(val, base + CTIOUTEN + trig_out * 4); }

Contributors

PersonTokensPropCommitsCommitProp
Ming Lei100100.00%1100.00%
Total100100.00%1100.00%

/** * cti_enable - enable the cti module * @cti: cti instance * * enable the cti module */
static inline void cti_enable(struct cti *cti) { __raw_writel(0x1, cti->base + CTICONTROL); }

Contributors

PersonTokensPropCommitsCommitProp
Ming Lei23100.00%1100.00%
Total23100.00%1100.00%

/** * cti_disable - disable the cti module * @cti: cti instance * * enable the cti module */
static inline void cti_disable(struct cti *cti) { __raw_writel(0, cti->base + CTICONTROL); }

Contributors

PersonTokensPropCommitsCommitProp
Ming Lei23100.00%1100.00%
Total23100.00%1100.00%

/** * cti_irq_ack - clear the cti irq * @cti: cti instance * * clear the cti irq */
static inline void cti_irq_ack(struct cti *cti) { void __iomem *base = cti->base; unsigned long val; val = __raw_readl(base + CTIINTACK); val |= BIT(cti->trig_out_for_irq); __raw_writel(val, base + CTIINTACK); }

Contributors

PersonTokensPropCommitsCommitProp
Ming Lei52100.00%1100.00%
Total52100.00%1100.00%

/** * cti_unlock - unlock cti module * @cti: cti instance * * unlock the cti module, or else any writes to the cti * module is not allowed. */
static inline void cti_unlock(struct cti *cti) { __raw_writel(CS_LAR_KEY, cti->base + LOCKACCESS); }

Contributors

PersonTokensPropCommitsCommitProp
Ming Lei2086.96%133.33%
Will Deacon28.70%133.33%
Dietmar Eggemann14.35%133.33%
Total23100.00%3100.00%

/** * cti_lock - lock cti module * @cti: cti instance * * lock the cti module, so any writes to the cti * module will be not allowed. */
static inline void cti_lock(struct cti *cti) { __raw_writel(~CS_LAR_KEY, cti->base + LOCKACCESS); }

Contributors

PersonTokensPropCommitsCommitProp
Ming Lei2083.33%133.33%
Will Deacon312.50%133.33%
Dietmar Eggemann14.17%133.33%
Total24100.00%3100.00%

#endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Ming Lei41297.63%133.33%
Dietmar Eggemann51.18%133.33%
Will Deacon51.18%133.33%
Total422100.00%3100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.