arch/arm/mach-tegra/sleep-tegra20.S

Source file repositories/reference/linux-study-clean/arch/arm/mach-tegra/sleep-tegra20.S

File Facts

System
Linux kernel
Corpus path
arch/arm/mach-tegra/sleep-tegra20.S
Extension
.S
Size
10283 bytes
Lines
438
Domain
Architecture Layer
Bucket
arch/arm
Inferred role
Architecture Layer: arch/arm
Status
atlas-only

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

#include <linux/linkage.h>

#include <soc/tegra/flowctrl.h>

#include <asm/assembler.h>
#include <asm/proc-fns.h>
#include <asm/cp15.h>
#include <asm/cache.h>

#include "irammap.h"
#include "reset.h"
#include "sleep.h"

#define EMC_CFG				0xc
#define EMC_ADR_CFG			0x10
#define EMC_NOP				0xdc
#define EMC_SELF_REF			0xe0
#define EMC_REQ_CTRL			0x2b0
#define EMC_EMC_STATUS			0x2b4

#define CLK_RESET_CCLK_BURST		0x20
#define CLK_RESET_CCLK_DIVIDER		0x24
#define CLK_RESET_SCLK_BURST		0x28
#define CLK_RESET_SCLK_DIVIDER		0x2c
#define CLK_RESET_PLLC_BASE		0x80
#define CLK_RESET_PLLM_BASE		0x90
#define CLK_RESET_PLLP_BASE		0xa0

#define APB_MISC_XM2CFGCPADCTRL		0x8c8
#define APB_MISC_XM2CFGDPADCTRL		0x8cc
#define APB_MISC_XM2CLKCFGPADCTRL	0x8d0
#define APB_MISC_XM2COMPPADCTRL		0x8d4
#define APB_MISC_XM2VTTGENPADCTRL	0x8d8
#define APB_MISC_XM2CFGCPADCTRL2	0x8e4
#define APB_MISC_XM2CFGDPADCTRL2	0x8e8

#define PLLC_STORE_MASK			(1 << 0)
#define PLLM_STORE_MASK			(1 << 1)
#define PLLP_STORE_MASK			(1 << 2)

.arch armv7-a

.macro test_pll_state, rd, test_mask
	ldr	\rd, tegra_pll_state
	tst	\rd, #\test_mask
.endm

.macro store_pll_state, rd, tmp, r_car_base, pll_base, pll_mask
	ldr	\rd, [\r_car_base, #\pll_base]
	tst	\rd, #(1 << 30)
	ldr	\rd, tegra_pll_state
	biceq	\rd, \rd, #\pll_mask
	orrne	\rd, \rd, #\pll_mask
	adr	\tmp, tegra_pll_state
	str	\rd, [\tmp]
.endm

.macro pll_enable, rd, r_car_base, pll_base, test_mask
	test_pll_state \rd, \test_mask
	beq	1f

	ldr	\rd, [\r_car_base, #\pll_base]
	tst	\rd, #(1 << 30)
	orreq	\rd, \rd, #(1 << 30)
	streq	\rd, [\r_car_base, #\pll_base]
1:
.endm

.macro emc_device_mask, rd, base
	ldr	\rd, [\base, #EMC_ADR_CFG]

Annotation

Implementation Notes