Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

Alphascale Clock Controller

The ACC (Alphascale Clock Controller) is responsible of choising proper
clock source, setting deviders and clock gates.

Required properties for the ACC node:
 - compatible: must be "alphascale,asm9260-clock-controller"
 - reg: must contain the ACC register base and size
 - #clock-cells : shall be set to 1.

Simple one-cell clock specifier format is used, where the only cell is used
as an index of the clock inside the provider.
It is encouraged to use dt-binding for clock index definitions. SoC specific
dt-binding should be included to the device tree descriptor. For example
Alphascale ASM9260:
#include <dt-bindings/clock/alphascale,asm9260.h>

This binding contains two types of clock providers:
 _AHB_ - AHB gate;
 _SYS_ - adjustable clock source. Not all peripheral have _SYS_ clock provider.
All clock specific details can be found in the SoC documentation.
CLKID_AHB_ROM		0
CLKID_AHB_RAM		1
CLKID_AHB_GPIO		2
CLKID_AHB_MAC		3
CLKID_AHB_EMI		4
CLKID_AHB_USB0		5
CLKID_AHB_USB1		6
CLKID_AHB_DMA0		7
CLKID_AHB_DMA1		8
CLKID_AHB_UART0		9
CLKID_AHB_UART1		10
CLKID_AHB_UART2		11
CLKID_AHB_UART3		12
CLKID_AHB_UART4		13
CLKID_AHB_UART5		14
CLKID_AHB_UART6		15
CLKID_AHB_UART7		16
CLKID_AHB_UART8		17
CLKID_AHB_UART9		18
CLKID_AHB_I2S0		19
CLKID_AHB_I2C0		20
CLKID_AHB_I2C1		21
CLKID_AHB_SSP0		22
CLKID_AHB_IOCONFIG	23
CLKID_AHB_WDT		24
CLKID_AHB_CAN0		25
CLKID_AHB_CAN1		26
CLKID_AHB_MPWM		27
CLKID_AHB_SPI0		28
CLKID_AHB_SPI1		29
CLKID_AHB_QEI		30
CLKID_AHB_QUADSPI0	31
CLKID_AHB_CAMIF		32
CLKID_AHB_LCDIF		33
CLKID_AHB_TIMER0	34
CLKID_AHB_TIMER1	35
CLKID_AHB_TIMER2	36
CLKID_AHB_TIMER3	37
CLKID_AHB_IRQ		38
CLKID_AHB_RTC		39
CLKID_AHB_NAND		40
CLKID_AHB_ADC0		41
CLKID_AHB_LED		42
CLKID_AHB_DAC0		43
CLKID_AHB_LCD		44
CLKID_AHB_I2S1		45
CLKID_AHB_MAC1		46

CLKID_SYS_CPU		47
CLKID_SYS_AHB		48
CLKID_SYS_I2S0M		49
CLKID_SYS_I2S0S		50
CLKID_SYS_I2S1M		51
CLKID_SYS_I2S1S		52
CLKID_SYS_UART0		53
CLKID_SYS_UART1		54
CLKID_SYS_UART2		55
CLKID_SYS_UART3		56
CLKID_SYS_UART4		56
CLKID_SYS_UART5		57
CLKID_SYS_UART6		58
CLKID_SYS_UART7		59
CLKID_SYS_UART8		60
CLKID_SYS_UART9		61
CLKID_SYS_SPI0		62
CLKID_SYS_SPI1		63
CLKID_SYS_QUADSPI	64
CLKID_SYS_SSP0		65
CLKID_SYS_NAND		66
CLKID_SYS_TRACE		67
CLKID_SYS_CAMM		68
CLKID_SYS_WDT		69
CLKID_SYS_CLKOUT	70
CLKID_SYS_MAC		71
CLKID_SYS_LCD		72
CLKID_SYS_ADCANA	73

Example of clock consumer with _SYS_ and _AHB_ sinks.
uart4: serial@80010000 {
	compatible = "alphascale,asm9260-uart";
	reg = <0x80010000 0x4000>;
	clocks = <&acc CLKID_SYS_UART4>, <&acc CLKID_AHB_UART4>;
	interrupts = <19>;
	status = "disabled";
};

Clock consumer with only one, _AHB_ sink.
timer0: timer@80088000 {
	compatible = "alphascale,asm9260-timer";
	reg = <0x80088000 0x4000>;
	clocks = <&acc CLKID_AHB_TIMER0>;
	interrupts = <29>;
};