xref: /rk3399_rockchip-uboot/arch/arm/mach-omap2/omap3/lowlevel_init.S (revision 2d221489df021393654805536be7effcb9d39702)
1*983e3700STom Rini/*
2*983e3700STom Rini * Board specific setup info
3*983e3700STom Rini *
4*983e3700STom Rini * (C) Copyright 2008
5*983e3700STom Rini * Texas Instruments, <www.ti.com>
6*983e3700STom Rini *
7*983e3700STom Rini * Initial Code by:
8*983e3700STom Rini * Richard Woodruff <r-woodruff2@ti.com>
9*983e3700STom Rini * Syed Mohammed Khasim <khasim@ti.com>
10*983e3700STom Rini *
11*983e3700STom Rini * SPDX-License-Identifier:	GPL-2.0+
12*983e3700STom Rini */
13*983e3700STom Rini
14*983e3700STom Rini#include <config.h>
15*983e3700STom Rini#include <asm/arch/mem.h>
16*983e3700STom Rini#include <asm/arch/clocks_omap3.h>
17*983e3700STom Rini#include <linux/linkage.h>
18*983e3700STom Rini
19*983e3700STom Rini/*
20*983e3700STom Rini * Funtion for making PPA HAL API calls in secure devices
21*983e3700STom Rini * Input:
22*983e3700STom Rini *	R0 - Service ID
23*983e3700STom Rini *	R1 - paramer list
24*983e3700STom Rini */
25*983e3700STom RiniENTRY(do_omap3_emu_romcode_call)
26*983e3700STom Rini	PUSH {r4-r12, lr} @ Save all registers from ROM code!
27*983e3700STom Rini	MOV r12, r0	@ Copy the Secure Service ID in R12
28*983e3700STom Rini	MOV r3, r1	@ Copy the pointer to va_list in R3
29*983e3700STom Rini	MOV r1, #0	@ Process ID - 0
30*983e3700STom Rini	MOV r2, #OMAP3_EMU_HAL_START_HAL_CRITICAL	@ Copy the pointer
31*983e3700STom Rini							@ to va_list in R3
32*983e3700STom Rini	MOV r6, #0xFF	@ Indicate new Task call
33*983e3700STom Rini	mcr     p15, 0, r0, c7, c10, 4	@ DSB
34*983e3700STom Rini	mcr     p15, 0, r0, c7, c10, 5	@ DMB
35*983e3700STom Rini	.word	0xe1600071	@ SMC #1 to call PPA service - hand assembled
36*983e3700STom Rini				@ because we use -march=armv5
37*983e3700STom Rini	POP {r4-r12, pc}
38*983e3700STom RiniENDPROC(do_omap3_emu_romcode_call)
39*983e3700STom Rini
40*983e3700STom Rini#if !defined(CONFIG_SYS_NAND_BOOT) && !defined(CONFIG_SYS_NAND_BOOT)
41*983e3700STom Rini/**************************************************************************
42*983e3700STom Rini * cpy_clk_code: relocates clock code into SRAM where its safer to execute
43*983e3700STom Rini * R1 = SRAM destination address.
44*983e3700STom Rini *************************************************************************/
45*983e3700STom RiniENTRY(cpy_clk_code)
46*983e3700STom Rini	/* Copy DPLL code into SRAM */
47*983e3700STom Rini	adr	r0, go_to_speed		/* copy from start of go_to_speed... */
48*983e3700STom Rini	adr	r2, lowlevel_init	/* ... up to start of low_level_init */
49*983e3700STom Rininext2:
50*983e3700STom Rini	ldmia	r0!, {r3 - r10}		/* copy from source address [r0] */
51*983e3700STom Rini	stmia	r1!, {r3 - r10}		/* copy to   target address [r1] */
52*983e3700STom Rini	cmp	r0, r2			/* until source end address [r2] */
53*983e3700STom Rini	blo	next2
54*983e3700STom Rini	mov	pc, lr			/* back to caller */
55*983e3700STom RiniENDPROC(cpy_clk_code)
56*983e3700STom Rini
57*983e3700STom Rini/* ***************************************************************************
58*983e3700STom Rini *  go_to_speed: -Moves to bypass, -Commits clock dividers, -puts dpll at speed
59*983e3700STom Rini *               -executed from SRAM.
60*983e3700STom Rini *  R0 = CM_CLKEN_PLL-bypass value
61*983e3700STom Rini *  R1 = CM_CLKSEL1_PLL-m, n, and divider values
62*983e3700STom Rini *  R2 = CM_CLKSEL_CORE-divider values
63*983e3700STom Rini *  R3 = CM_IDLEST_CKGEN - addr dpll lock wait
64*983e3700STom Rini *
65*983e3700STom Rini *  Note: If core unlocks/relocks and SDRAM is running fast already it gets
66*983e3700STom Rini *        confused.  A reset of the controller gets it back.  Taking away its
67*983e3700STom Rini *        L3 when its not in self refresh seems bad for it.  Normally, this
68*983e3700STom Rini *	  code runs from flash before SDR is init so that should be ok.
69*983e3700STom Rini ****************************************************************************/
70*983e3700STom RiniENTRY(go_to_speed)
71*983e3700STom Rini	stmfd sp!, {r4 - r6}
72*983e3700STom Rini
73*983e3700STom Rini	/* move into fast relock bypass */
74*983e3700STom Rini	ldr	r4, pll_ctl_add
75*983e3700STom Rini	str	r0, [r4]
76*983e3700STom Riniwait1:
77*983e3700STom Rini	ldr	r5, [r3]		/* get status */
78*983e3700STom Rini	and	r5, r5, #0x1		/* isolate core status */
79*983e3700STom Rini	cmp	r5, #0x1		/* still locked? */
80*983e3700STom Rini	beq	wait1			/* if lock, loop */
81*983e3700STom Rini
82*983e3700STom Rini	/* set new dpll dividers _after_ in bypass */
83*983e3700STom Rini	ldr	r5, pll_div_add1
84*983e3700STom Rini	str	r1, [r5]		/* set m, n, m2 */
85*983e3700STom Rini	ldr	r5, pll_div_add2
86*983e3700STom Rini	str	r2, [r5]		/* set l3/l4/.. dividers*/
87*983e3700STom Rini	ldr	r5, pll_div_add3	/* wkup */
88*983e3700STom Rini	ldr	r2, pll_div_val3	/* rsm val */
89*983e3700STom Rini	str	r2, [r5]
90*983e3700STom Rini	ldr	r5, pll_div_add4	/* gfx */
91*983e3700STom Rini	ldr	r2, pll_div_val4
92*983e3700STom Rini	str	r2, [r5]
93*983e3700STom Rini	ldr	r5, pll_div_add5	/* emu */
94*983e3700STom Rini	ldr	r2, pll_div_val5
95*983e3700STom Rini	str	r2, [r5]
96*983e3700STom Rini
97*983e3700STom Rini	/* now prepare GPMC (flash) for new dpll speed */
98*983e3700STom Rini	/* flash needs to be stable when we jump back to it */
99*983e3700STom Rini	ldr	r5, flash_cfg3_addr
100*983e3700STom Rini	ldr	r2, flash_cfg3_val
101*983e3700STom Rini	str	r2, [r5]
102*983e3700STom Rini	ldr	r5, flash_cfg4_addr
103*983e3700STom Rini	ldr	r2, flash_cfg4_val
104*983e3700STom Rini	str	r2, [r5]
105*983e3700STom Rini	ldr	r5, flash_cfg5_addr
106*983e3700STom Rini	ldr	r2, flash_cfg5_val
107*983e3700STom Rini	str	r2, [r5]
108*983e3700STom Rini	ldr	r5, flash_cfg1_addr
109*983e3700STom Rini	ldr	r2, [r5]
110*983e3700STom Rini	orr	r2, r2, #0x3		/* up gpmc divider */
111*983e3700STom Rini	str	r2, [r5]
112*983e3700STom Rini
113*983e3700STom Rini	/* lock DPLL3 and wait a bit */
114*983e3700STom Rini	orr	r0, r0, #0x7	/* set up for lock mode */
115*983e3700STom Rini	str	r0, [r4]	/* lock */
116*983e3700STom Rini	nop			/* ARM slow at this point working at sys_clk */
117*983e3700STom Rini	nop
118*983e3700STom Rini	nop
119*983e3700STom Rini	nop
120*983e3700STom Riniwait2:
121*983e3700STom Rini	ldr	r5, [r3]	/* get status */
122*983e3700STom Rini	and	r5, r5, #0x1	/* isolate core status */
123*983e3700STom Rini	cmp	r5, #0x1	/* still locked? */
124*983e3700STom Rini	bne	wait2		/* if lock, loop */
125*983e3700STom Rini	nop
126*983e3700STom Rini	nop
127*983e3700STom Rini	nop
128*983e3700STom Rini	nop
129*983e3700STom Rini	ldmfd	sp!, {r4 - r6}
130*983e3700STom Rini	mov	pc, lr		/* back to caller, locked */
131*983e3700STom RiniENDPROC(go_to_speed)
132*983e3700STom Rini
133*983e3700STom Rini_go_to_speed: .word go_to_speed
134*983e3700STom Rini
135*983e3700STom Rini/* these constants need to be close for PIC code */
136*983e3700STom Rini/* The Nor has to be in the Flash Base CS0 for this condition to happen */
137*983e3700STom Riniflash_cfg1_addr:
138*983e3700STom Rini	.word (GPMC_CONFIG_CS0_BASE + GPMC_CONFIG1)
139*983e3700STom Riniflash_cfg3_addr:
140*983e3700STom Rini	.word (GPMC_CONFIG_CS0_BASE + GPMC_CONFIG3)
141*983e3700STom Riniflash_cfg3_val:
142*983e3700STom Rini	.word STNOR_GPMC_CONFIG3
143*983e3700STom Riniflash_cfg4_addr:
144*983e3700STom Rini	.word (GPMC_CONFIG_CS0_BASE + GPMC_CONFIG4)
145*983e3700STom Riniflash_cfg4_val:
146*983e3700STom Rini	.word STNOR_GPMC_CONFIG4
147*983e3700STom Riniflash_cfg5_val:
148*983e3700STom Rini	.word STNOR_GPMC_CONFIG5
149*983e3700STom Riniflash_cfg5_addr:
150*983e3700STom Rini	.word (GPMC_CONFIG_CS0_BASE + GPMC_CONFIG5)
151*983e3700STom Rinipll_ctl_add:
152*983e3700STom Rini	.word CM_CLKEN_PLL
153*983e3700STom Rinipll_div_add1:
154*983e3700STom Rini	.word CM_CLKSEL1_PLL
155*983e3700STom Rinipll_div_add2:
156*983e3700STom Rini	.word CM_CLKSEL_CORE
157*983e3700STom Rinipll_div_add3:
158*983e3700STom Rini	.word CM_CLKSEL_WKUP
159*983e3700STom Rinipll_div_val3:
160*983e3700STom Rini	.word (WKUP_RSM << 1)
161*983e3700STom Rinipll_div_add4:
162*983e3700STom Rini	.word CM_CLKSEL_GFX
163*983e3700STom Rinipll_div_val4:
164*983e3700STom Rini	.word (GFX_DIV << 0)
165*983e3700STom Rinipll_div_add5:
166*983e3700STom Rini	.word CM_CLKSEL1_EMU
167*983e3700STom Rinipll_div_val5:
168*983e3700STom Rini	.word CLSEL1_EMU_VAL
169*983e3700STom Rini
170*983e3700STom Rini#endif
171*983e3700STom Rini
172*983e3700STom RiniENTRY(lowlevel_init)
173*983e3700STom Rini	ldr	sp, SRAM_STACK
174*983e3700STom Rini	str	ip, [sp]	/* stash ip register */
175*983e3700STom Rini	mov	ip, lr		/* save link reg across call */
176*983e3700STom Rini#if !defined(CONFIG_SYS_NAND_BOOT) && !defined(CONFIG_SYS_ONENAND_BOOT)
177*983e3700STom Rini/*
178*983e3700STom Rini * No need to copy/exec the clock code - DPLL adjust already done
179*983e3700STom Rini * in NAND/oneNAND Boot.
180*983e3700STom Rini */
181*983e3700STom Rini	ldr	r1, =SRAM_CLK_CODE
182*983e3700STom Rini	bl	cpy_clk_code
183*983e3700STom Rini#endif /* NAND Boot */
184*983e3700STom Rini	mov	lr, ip		/* restore link reg */
185*983e3700STom Rini	ldr	ip, [sp]	/* restore save ip */
186*983e3700STom Rini	/* tail-call s_init to setup pll, mux, memory */
187*983e3700STom Rini	b	s_init
188*983e3700STom Rini
189*983e3700STom RiniENDPROC(lowlevel_init)
190*983e3700STom Rini
191*983e3700STom Rini	/* the literal pools origin */
192*983e3700STom Rini	.ltorg
193*983e3700STom Rini
194*983e3700STom RiniREG_CONTROL_STATUS:
195*983e3700STom Rini	.word CONTROL_STATUS
196*983e3700STom RiniSRAM_STACK:
197*983e3700STom Rini	.word LOW_LEVEL_SRAM_STACK
198*983e3700STom Rini
199*983e3700STom Rini/* DPLL(1-4) PARAM TABLES */
200*983e3700STom Rini
201*983e3700STom Rini/*
202*983e3700STom Rini * Each of the tables has M, N, FREQSEL, M2 values defined for nominal
203*983e3700STom Rini * OPP (1.2V). The fields are defined according to dpll_param struct (clock.c).
204*983e3700STom Rini * The values are defined for all possible sysclk and for ES1 and ES2.
205*983e3700STom Rini */
206*983e3700STom Rini
207*983e3700STom Rinimpu_dpll_param:
208*983e3700STom Rini/* 12MHz */
209*983e3700STom Rini/* ES1 */
210*983e3700STom Rini.word MPU_M_12_ES1, MPU_N_12_ES1, MPU_FSEL_12_ES1, MPU_M2_12_ES1
211*983e3700STom Rini/* ES2 */
212*983e3700STom Rini.word MPU_M_12_ES2, MPU_N_12_ES2, MPU_FSEL_12_ES2, MPU_M2_ES2
213*983e3700STom Rini/* 3410 */
214*983e3700STom Rini.word MPU_M_12, MPU_N_12, MPU_FSEL_12, MPU_M2_12
215*983e3700STom Rini
216*983e3700STom Rini/* 13MHz */
217*983e3700STom Rini/* ES1 */
218*983e3700STom Rini.word MPU_M_13_ES1, MPU_N_13_ES1, MPU_FSEL_13_ES1, MPU_M2_13_ES1
219*983e3700STom Rini/* ES2 */
220*983e3700STom Rini.word MPU_M_13_ES2, MPU_N_13_ES2, MPU_FSEL_13_ES2, MPU_M2_13_ES2
221*983e3700STom Rini/* 3410 */
222*983e3700STom Rini.word MPU_M_13, MPU_N_13, MPU_FSEL_13, MPU_M2_13
223*983e3700STom Rini
224*983e3700STom Rini/* 19.2MHz */
225*983e3700STom Rini/* ES1 */
226*983e3700STom Rini.word MPU_M_19P2_ES1, MPU_N_19P2_ES1, MPU_FSEL_19P2_ES1, MPU_M2_19P2_ES1
227*983e3700STom Rini/* ES2 */
228*983e3700STom Rini.word MPU_M_19P2_ES2, MPU_N_19P2_ES2, MPU_FSEL_19P2_ES2, MPU_M2_19P2_ES2
229*983e3700STom Rini/* 3410 */
230*983e3700STom Rini.word MPU_M_19P2, MPU_N_19P2, MPU_FSEL_19P2, MPU_M2_19P2
231*983e3700STom Rini
232*983e3700STom Rini/* 26MHz */
233*983e3700STom Rini/* ES1 */
234*983e3700STom Rini.word MPU_M_26_ES1, MPU_N_26_ES1, MPU_FSEL_26_ES1, MPU_M2_26_ES1
235*983e3700STom Rini/* ES2 */
236*983e3700STom Rini.word MPU_M_26_ES2, MPU_N_26_ES2, MPU_FSEL_26_ES2, MPU_M2_26_ES2
237*983e3700STom Rini/* 3410 */
238*983e3700STom Rini.word MPU_M_26, MPU_N_26, MPU_FSEL_26, MPU_M2_26
239*983e3700STom Rini
240*983e3700STom Rini/* 38.4MHz */
241*983e3700STom Rini/* ES1 */
242*983e3700STom Rini.word MPU_M_38P4_ES1, MPU_N_38P4_ES1, MPU_FSEL_38P4_ES1, MPU_M2_38P4_ES1
243*983e3700STom Rini/* ES2 */
244*983e3700STom Rini.word MPU_M_38P4_ES2, MPU_N_38P4_ES2, MPU_FSEL_38P4_ES2, MPU_M2_38P4_ES2
245*983e3700STom Rini/* 3410 */
246*983e3700STom Rini.word MPU_M_38P4, MPU_N_38P4, MPU_FSEL_38P4, MPU_M2_38P4
247*983e3700STom Rini
248*983e3700STom Rini
249*983e3700STom Rini.globl get_mpu_dpll_param
250*983e3700STom Riniget_mpu_dpll_param:
251*983e3700STom Rini	adr	r0, mpu_dpll_param
252*983e3700STom Rini	mov	pc, lr
253*983e3700STom Rini
254*983e3700STom Riniiva_dpll_param:
255*983e3700STom Rini/* 12MHz */
256*983e3700STom Rini/* ES1 */
257*983e3700STom Rini.word IVA_M_12_ES1, IVA_N_12_ES1, IVA_FSEL_12_ES1, IVA_M2_12_ES1
258*983e3700STom Rini/* ES2 */
259*983e3700STom Rini.word IVA_M_12_ES2, IVA_N_12_ES2, IVA_FSEL_12_ES2, IVA_M2_12_ES2
260*983e3700STom Rini/* 3410 */
261*983e3700STom Rini.word IVA_M_12, IVA_N_12, IVA_FSEL_12, IVA_M2_12
262*983e3700STom Rini
263*983e3700STom Rini/* 13MHz */
264*983e3700STom Rini/* ES1 */
265*983e3700STom Rini.word IVA_M_13_ES1, IVA_N_13_ES1, IVA_FSEL_13_ES1, IVA_M2_13_ES1
266*983e3700STom Rini/* ES2 */
267*983e3700STom Rini.word IVA_M_13_ES2, IVA_N_13_ES2,  IVA_FSEL_13_ES2, IVA_M2_13_ES2
268*983e3700STom Rini/* 3410 */
269*983e3700STom Rini.word IVA_M_13, IVA_N_13, IVA_FSEL_13, IVA_M2_13
270*983e3700STom Rini
271*983e3700STom Rini/* 19.2MHz */
272*983e3700STom Rini/* ES1 */
273*983e3700STom Rini.word IVA_M_19P2_ES1, IVA_N_19P2_ES1, IVA_FSEL_19P2_ES1, IVA_M2_19P2_ES1
274*983e3700STom Rini/* ES2 */
275*983e3700STom Rini.word IVA_M_19P2_ES2, IVA_N_19P2_ES2, IVA_FSEL_19P2_ES2, IVA_M2_19P2_ES2
276*983e3700STom Rini/* 3410 */
277*983e3700STom Rini.word IVA_M_19P2, IVA_N_19P2, IVA_FSEL_19P2, IVA_M2_19P2
278*983e3700STom Rini
279*983e3700STom Rini/* 26MHz */
280*983e3700STom Rini/* ES1 */
281*983e3700STom Rini.word IVA_M_26_ES1, IVA_N_26_ES1, IVA_FSEL_26_ES1, IVA_M2_26_ES1
282*983e3700STom Rini/* ES2 */
283*983e3700STom Rini.word IVA_M_26_ES2, IVA_N_26_ES2, IVA_FSEL_26_ES2, IVA_M2_26_ES2
284*983e3700STom Rini/* 3410 */
285*983e3700STom Rini.word IVA_M_26, IVA_N_26, IVA_FSEL_26, IVA_M2_26
286*983e3700STom Rini
287*983e3700STom Rini/* 38.4MHz */
288*983e3700STom Rini/* ES1 */
289*983e3700STom Rini.word IVA_M_38P4_ES1, IVA_N_38P4_ES1, IVA_FSEL_38P4_ES1, IVA_M2_38P4_ES1
290*983e3700STom Rini/* ES2 */
291*983e3700STom Rini.word IVA_M_38P4_ES2, IVA_N_38P4_ES2, IVA_FSEL_38P4_ES2, IVA_M2_38P4_ES2
292*983e3700STom Rini/* 3410 */
293*983e3700STom Rini.word IVA_M_38P4, IVA_N_38P4, IVA_FSEL_38P4, IVA_M2_38P4
294*983e3700STom Rini
295*983e3700STom Rini
296*983e3700STom Rini.globl get_iva_dpll_param
297*983e3700STom Riniget_iva_dpll_param:
298*983e3700STom Rini	adr	r0, iva_dpll_param
299*983e3700STom Rini	mov	pc, lr
300*983e3700STom Rini
301*983e3700STom Rini/* Core DPLL targets for L3 at 166 & L133 */
302*983e3700STom Rinicore_dpll_param:
303*983e3700STom Rini/* 12MHz */
304*983e3700STom Rini/* ES1 */
305*983e3700STom Rini.word CORE_M_12_ES1, CORE_N_12_ES1, CORE_FSL_12_ES1, CORE_M2_12_ES1
306*983e3700STom Rini/* ES2 */
307*983e3700STom Rini.word CORE_M_12, CORE_N_12, CORE_FSEL_12, CORE_M2_12
308*983e3700STom Rini/* 3410 */
309*983e3700STom Rini.word CORE_M_12, CORE_N_12, CORE_FSEL_12, CORE_M2_12
310*983e3700STom Rini
311*983e3700STom Rini/* 13MHz */
312*983e3700STom Rini/* ES1 */
313*983e3700STom Rini.word CORE_M_13_ES1, CORE_N_13_ES1, CORE_FSL_13_ES1, CORE_M2_13_ES1
314*983e3700STom Rini/* ES2 */
315*983e3700STom Rini.word CORE_M_13, CORE_N_13, CORE_FSEL_13, CORE_M2_13
316*983e3700STom Rini/* 3410 */
317*983e3700STom Rini.word CORE_M_13, CORE_N_13, CORE_FSEL_13, CORE_M2_13
318*983e3700STom Rini
319*983e3700STom Rini/* 19.2MHz */
320*983e3700STom Rini/* ES1 */
321*983e3700STom Rini.word CORE_M_19P2_ES1, CORE_N_19P2_ES1, CORE_FSL_19P2_ES1, CORE_M2_19P2_ES1
322*983e3700STom Rini/* ES2 */
323*983e3700STom Rini.word CORE_M_19P2, CORE_N_19P2, CORE_FSEL_19P2, CORE_M2_19P2
324*983e3700STom Rini/* 3410 */
325*983e3700STom Rini.word CORE_M_19P2, CORE_N_19P2, CORE_FSEL_19P2, CORE_M2_19P2
326*983e3700STom Rini
327*983e3700STom Rini/* 26MHz */
328*983e3700STom Rini/* ES1 */
329*983e3700STom Rini.word CORE_M_26_ES1, CORE_N_26_ES1, CORE_FSL_26_ES1, CORE_M2_26_ES1
330*983e3700STom Rini/* ES2 */
331*983e3700STom Rini.word CORE_M_26, CORE_N_26, CORE_FSEL_26, CORE_M2_26
332*983e3700STom Rini/* 3410 */
333*983e3700STom Rini.word CORE_M_26, CORE_N_26, CORE_FSEL_26, CORE_M2_26
334*983e3700STom Rini
335*983e3700STom Rini/* 38.4MHz */
336*983e3700STom Rini/* ES1 */
337*983e3700STom Rini.word CORE_M_38P4_ES1, CORE_N_38P4_ES1, CORE_FSL_38P4_ES1, CORE_M2_38P4_ES1
338*983e3700STom Rini/* ES2 */
339*983e3700STom Rini.word CORE_M_38P4, CORE_N_38P4, CORE_FSEL_38P4, CORE_M2_38P4
340*983e3700STom Rini/* 3410 */
341*983e3700STom Rini.word CORE_M_38P4, CORE_N_38P4, CORE_FSEL_38P4, CORE_M2_38P4
342*983e3700STom Rini
343*983e3700STom Rini.globl get_core_dpll_param
344*983e3700STom Riniget_core_dpll_param:
345*983e3700STom Rini	adr	r0, core_dpll_param
346*983e3700STom Rini	mov	pc, lr
347*983e3700STom Rini
348*983e3700STom Rini/* PER DPLL values are same for both ES1 and ES2 */
349*983e3700STom Riniper_dpll_param:
350*983e3700STom Rini/* 12MHz */
351*983e3700STom Rini.word PER_M_12, PER_N_12, PER_FSEL_12, PER_M2_12
352*983e3700STom Rini
353*983e3700STom Rini/* 13MHz */
354*983e3700STom Rini.word PER_M_13, PER_N_13, PER_FSEL_13, PER_M2_13
355*983e3700STom Rini
356*983e3700STom Rini/* 19.2MHz */
357*983e3700STom Rini.word PER_M_19P2, PER_N_19P2, PER_FSEL_19P2, PER_M2_19P2
358*983e3700STom Rini
359*983e3700STom Rini/* 26MHz */
360*983e3700STom Rini.word PER_M_26, PER_N_26, PER_FSEL_26, PER_M2_26
361*983e3700STom Rini
362*983e3700STom Rini/* 38.4MHz */
363*983e3700STom Rini.word PER_M_38P4, PER_N_38P4, PER_FSEL_38P4, PER_M2_38P4
364*983e3700STom Rini
365*983e3700STom Rini.globl get_per_dpll_param
366*983e3700STom Riniget_per_dpll_param:
367*983e3700STom Rini	adr	r0, per_dpll_param
368*983e3700STom Rini	mov	pc, lr
369*983e3700STom Rini
370*983e3700STom Rini/* PER2 DPLL values */
371*983e3700STom Riniper2_dpll_param:
372*983e3700STom Rini/* 12MHz */
373*983e3700STom Rini.word PER2_M_12, PER2_N_12, PER2_FSEL_12, PER2_M2_12
374*983e3700STom Rini
375*983e3700STom Rini/* 13MHz */
376*983e3700STom Rini.word PER2_M_13, PER2_N_13, PER2_FSEL_13, PER2_M2_13
377*983e3700STom Rini
378*983e3700STom Rini/* 19.2MHz */
379*983e3700STom Rini.word PER2_M_19P2, PER2_N_19P2, PER2_FSEL_19P2, PER2_M2_19P2
380*983e3700STom Rini
381*983e3700STom Rini/* 26MHz */
382*983e3700STom Rini.word PER2_M_26, PER2_N_26, PER2_FSEL_26, PER2_M2_26
383*983e3700STom Rini
384*983e3700STom Rini/* 38.4MHz */
385*983e3700STom Rini.word PER2_M_38P4, PER2_N_38P4, PER2_FSEL_38P4, PER2_M2_38P4
386*983e3700STom Rini
387*983e3700STom Rini.globl get_per2_dpll_param
388*983e3700STom Riniget_per2_dpll_param:
389*983e3700STom Rini	adr	r0, per2_dpll_param
390*983e3700STom Rini	mov	pc, lr
391*983e3700STom Rini
392*983e3700STom Rini/*
393*983e3700STom Rini * Tables for 36XX/37XX devices
394*983e3700STom Rini *
395*983e3700STom Rini */
396*983e3700STom Rinimpu_36x_dpll_param:
397*983e3700STom Rini/* 12MHz */
398*983e3700STom Rini.word 50, 0, 0, 1
399*983e3700STom Rini/* 13MHz */
400*983e3700STom Rini.word 600, 12, 0, 1
401*983e3700STom Rini/* 19.2MHz */
402*983e3700STom Rini.word 125, 3, 0, 1
403*983e3700STom Rini/* 26MHz */
404*983e3700STom Rini.word 300, 12, 0, 1
405*983e3700STom Rini/* 38.4MHz */
406*983e3700STom Rini.word 125, 7, 0, 1
407*983e3700STom Rini
408*983e3700STom Riniiva_36x_dpll_param:
409*983e3700STom Rini/* 12MHz */
410*983e3700STom Rini.word 130, 2, 0, 1
411*983e3700STom Rini/* 13MHz */
412*983e3700STom Rini.word 20, 0, 0, 1
413*983e3700STom Rini/* 19.2MHz */
414*983e3700STom Rini.word 325, 11, 0, 1
415*983e3700STom Rini/* 26MHz */
416*983e3700STom Rini.word 10, 0, 0, 1
417*983e3700STom Rini/* 38.4MHz */
418*983e3700STom Rini.word 325, 23, 0, 1
419*983e3700STom Rini
420*983e3700STom Rinicore_36x_dpll_param:
421*983e3700STom Rini/* 12MHz */
422*983e3700STom Rini.word 100, 2, 0, 1
423*983e3700STom Rini/* 13MHz */
424*983e3700STom Rini.word 400, 12, 0, 1
425*983e3700STom Rini/* 19.2MHz */
426*983e3700STom Rini.word 375, 17, 0, 1
427*983e3700STom Rini/* 26MHz */
428*983e3700STom Rini.word 200, 12, 0, 1
429*983e3700STom Rini/* 38.4MHz */
430*983e3700STom Rini.word 375, 35, 0, 1
431*983e3700STom Rini
432*983e3700STom Riniper_36x_dpll_param:
433*983e3700STom Rini/*    SYSCLK    M       N      M2      M3      M4     M5      M6      m2DIV */
434*983e3700STom Rini.word 12000,    360,    4,     9,      16,     5,     4,      3,      1
435*983e3700STom Rini.word 13000,    864,   12,     9,      16,     9,     4,      3,      1
436*983e3700STom Rini.word 19200,    360,    7,     9,      16,     5,     4,      3,      1
437*983e3700STom Rini.word 26000,    432,   12,     9,      16,     9,     4,      3,      1
438*983e3700STom Rini.word 38400,    360,   15,     9,      16,     5,     4,      3,      1
439*983e3700STom Rini
440*983e3700STom Riniper2_36x_dpll_param:
441*983e3700STom Rini/* 12MHz */
442*983e3700STom Rini.word PER2_36XX_M_12, PER2_36XX_N_12, 0, PER2_36XX_M2_12
443*983e3700STom Rini/* 13MHz */
444*983e3700STom Rini.word PER2_36XX_M_13, PER2_36XX_N_13, 0, PER2_36XX_M2_13
445*983e3700STom Rini/* 19.2MHz */
446*983e3700STom Rini.word PER2_36XX_M_19P2, PER2_36XX_N_19P2, 0, PER2_36XX_M2_19P2
447*983e3700STom Rini/* 26MHz */
448*983e3700STom Rini.word PER2_36XX_M_26, PER2_36XX_N_26, 0, PER2_36XX_M2_26
449*983e3700STom Rini/* 38.4MHz */
450*983e3700STom Rini.word PER2_36XX_M_38P4, PER2_36XX_N_38P4, 0, PER2_36XX_M2_38P4
451*983e3700STom Rini
452*983e3700STom Rini
453*983e3700STom RiniENTRY(get_36x_mpu_dpll_param)
454*983e3700STom Rini	adr	r0, mpu_36x_dpll_param
455*983e3700STom Rini	mov	pc, lr
456*983e3700STom RiniENDPROC(get_36x_mpu_dpll_param)
457*983e3700STom Rini
458*983e3700STom RiniENTRY(get_36x_iva_dpll_param)
459*983e3700STom Rini	adr	r0, iva_36x_dpll_param
460*983e3700STom Rini	mov	pc, lr
461*983e3700STom RiniENDPROC(get_36x_iva_dpll_param)
462*983e3700STom Rini
463*983e3700STom RiniENTRY(get_36x_core_dpll_param)
464*983e3700STom Rini	adr	r0, core_36x_dpll_param
465*983e3700STom Rini	mov	pc, lr
466*983e3700STom RiniENDPROC(get_36x_core_dpll_param)
467*983e3700STom Rini
468*983e3700STom RiniENTRY(get_36x_per_dpll_param)
469*983e3700STom Rini	adr	r0, per_36x_dpll_param
470*983e3700STom Rini	mov	pc, lr
471*983e3700STom RiniENDPROC(get_36x_per_dpll_param)
472*983e3700STom Rini
473*983e3700STom RiniENTRY(get_36x_per2_dpll_param)
474*983e3700STom Rini	adr	r0, per2_36x_dpll_param
475*983e3700STom Rini	mov	pc, lr
476*983e3700STom RiniENDPROC(get_36x_per2_dpll_param)
477