1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
239f0023eSMatthias Weisser /*
339f0023eSMatthias Weisser  * (C) Copyright 2011
439f0023eSMatthias Weisser  * Matthias Weisser <weisserm@arcor.de>
539f0023eSMatthias Weisser  *
639f0023eSMatthias Weisser  * (C) Copyright 2009 DENX Software Engineering
739f0023eSMatthias Weisser  * Author: John Rigby <jrigby@gmail.com>
839f0023eSMatthias Weisser  *
939f0023eSMatthias Weisser  * Common asm macros for imx25
1039f0023eSMatthias Weisser  */
1139f0023eSMatthias Weisser 
1239f0023eSMatthias Weisser #ifndef __ASM_ARM_ARCH_MACRO_H__
1339f0023eSMatthias Weisser #define __ASM_ARM_ARCH_MACRO_H__
1439f0023eSMatthias Weisser #ifdef __ASSEMBLY__
1539f0023eSMatthias Weisser 
1639f0023eSMatthias Weisser #include <asm/arch/imx-regs.h>
17a4814a69SStefano Babic #include <generated/asm-offsets.h>
1885d993ceSBenoît Thébaudeau #include <asm/macro.h>
1939f0023eSMatthias Weisser 
2085d993ceSBenoît Thébaudeau /*
2185d993ceSBenoît Thébaudeau  * AIPS setup - Only setup MPROTx registers.
2285d993ceSBenoît Thébaudeau  * The PACR default values are good.
2385d993ceSBenoît Thébaudeau  *
2485d993ceSBenoît Thébaudeau  * Default argument values:
2585d993ceSBenoît Thébaudeau  *  - MPR: Set all MPROTx to be non-bufferable, trusted for R/W, not forced to
2685d993ceSBenoît Thébaudeau  *    user-mode.
2785d993ceSBenoît Thébaudeau  */
2885d993ceSBenoît Thébaudeau .macro init_aips mpr=0x77777777
2985d993ceSBenoît Thébaudeau 	ldr	r0, =IMX_AIPS1_BASE
3085d993ceSBenoît Thébaudeau 	ldr	r1, =\mpr
3185d993ceSBenoît Thébaudeau 	str	r1, [r0, #AIPS_MPR_0_7]
3285d993ceSBenoît Thébaudeau 	str	r1, [r0, #AIPS_MPR_8_15]
3385d993ceSBenoît Thébaudeau 	ldr	r2, =IMX_AIPS2_BASE
3485d993ceSBenoît Thébaudeau 	str	r1, [r2, #AIPS_MPR_0_7]
3585d993ceSBenoît Thébaudeau 	str	r1, [r2, #AIPS_MPR_8_15]
3639f0023eSMatthias Weisser .endm
3739f0023eSMatthias Weisser 
3885d993ceSBenoît Thébaudeau /*
3985d993ceSBenoît Thébaudeau  * MAX (Multi-Layer AHB Crossbar Switch) setup
4085d993ceSBenoît Thébaudeau  *
4185d993ceSBenoît Thébaudeau  * Default argument values:
4285d993ceSBenoît Thébaudeau  *  - MPR: priority is IAHB > DAHB > USBOTG > RTIC > eSDHC2/SDMA
4385d993ceSBenoît Thébaudeau  *  - SGPCR: always park on last master
4485d993ceSBenoît Thébaudeau  *  - MGPCR: restore default values
4585d993ceSBenoît Thébaudeau  */
4685d993ceSBenoît Thébaudeau .macro init_max mpr=0x00043210, sgpcr=0x00000010, mgpcr=0x00000000
4785d993ceSBenoît Thébaudeau 	ldr	r0, =IMX_MAX_BASE
4885d993ceSBenoît Thébaudeau 	ldr	r1, =\mpr
4985d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MPR0]	/* for S0 */
5085d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MPR1]	/* for S1 */
5185d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MPR2]	/* for S2 */
5285d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MPR3]	/* for S3 */
5385d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MPR4]	/* for S4 */
5485d993ceSBenoît Thébaudeau 	ldr	r1, =\sgpcr
5585d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_SGPCR0]	/* for S0 */
5685d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_SGPCR1]	/* for S1 */
5785d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_SGPCR2]	/* for S2 */
5885d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_SGPCR3]	/* for S3 */
5985d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_SGPCR4]	/* for S4 */
6085d993ceSBenoît Thébaudeau 	ldr	r1, =\mgpcr
6185d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MGPCR0]	/* for M0 */
6285d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MGPCR1]	/* for M1 */
6385d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MGPCR2]	/* for M2 */
6485d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MGPCR3]	/* for M3 */
6585d993ceSBenoît Thébaudeau 	str	r1, [r0, #MAX_MGPCR4]	/* for M4 */
6685d993ceSBenoît Thébaudeau .endm
6739f0023eSMatthias Weisser 
6885d993ceSBenoît Thébaudeau /*
6985d993ceSBenoît Thébaudeau  * M3IF setup
7085d993ceSBenoît Thébaudeau  *
7185d993ceSBenoît Thébaudeau  * Default argument values:
7285d993ceSBenoît Thébaudeau  *  - CTL:
7385d993ceSBenoît Thébaudeau  * MRRP[0] = LCDC on priority list (1 << 0)			= 0x00000001
7485d993ceSBenoît Thébaudeau  * MRRP[1] = MAX1 not on priority list (0 << 1)			= 0x00000000
7585d993ceSBenoît Thébaudeau  * MRRP[2] = MAX0 not on priority list (0 << 2)			= 0x00000000
7685d993ceSBenoît Thébaudeau  * MRRP[3] = USBH not on priority list (0 << 3)			= 0x00000000
7785d993ceSBenoît Thébaudeau  * MRRP[4] = SDMA not on priority list (0 << 4)			= 0x00000000
7885d993ceSBenoît Thébaudeau  * MRRP[5] = eSDHC1/ATA/FEC not on priority list (0 << 5)	= 0x00000000
7985d993ceSBenoît Thébaudeau  * MRRP[6] = LCDC/SLCDC/MAX2 not on priority list (0 << 6)	= 0x00000000
8085d993ceSBenoît Thébaudeau  * MRRP[7] = CSI not on priority list (0 << 7)			= 0x00000000
8185d993ceSBenoît Thébaudeau  *								------------
8285d993ceSBenoît Thébaudeau  *								  0x00000001
8385d993ceSBenoît Thébaudeau  */
8485d993ceSBenoît Thébaudeau .macro init_m3if ctl=0x00000001
8585d993ceSBenoît Thébaudeau 	/* M3IF Control Register (M3IFCTL) */
8685d993ceSBenoît Thébaudeau 	write32	IMX_M3IF_CTRL_BASE, \ctl
8739f0023eSMatthias Weisser .endm
8839f0023eSMatthias Weisser 
8939f0023eSMatthias Weisser #endif /* __ASSEMBLY__ */
9039f0023eSMatthias Weisser #endif /* __ASM_ARM_ARCH_MACRO_H__ */
91