//;
//; Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
//; Copyright Marvell Semiconductor, Inc. 2006. All rights reserved.
//;
//; This program is free software; you can redistribute it and/or modify
//; it under the terms of the GNU General Public License version 2 as
//; published by the Free Software Foundation.
//;
//; INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
//; SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
//; INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//; A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
//; INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
//; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
//; CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
//; OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
//; BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
//; NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
//; ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
//; COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
//; DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
//; TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
//;

//;  This code initialises the Integrator board (eg REMAP) before calling
//;  TCM Initialization and MMU Initialization if they exist.
//;  this allows scatter loading to relocate code into the TCMs
//;
//;  This code must be run from a privileged mode
#define Access_R_ONLY	ox2
#define	Access_R_W	0x3

.global InitMultiLevelMMU
InitMultiLevelMMU:
	//; --- if MMU/MPU enabled - disable (useful for ARMulator tests)
        MRC     p15, 0, r0, c1, c0, 0		//; read CP15 register 1 into r0
        BIC     r0, r0, #0x1				//; clear bit 0
        MCR     p15, 0, r0, c1, c0, 0		//; write value back


	STMFD	r13!, {r0-r12,lr}

	BL		FLAT_MAP_SECTION
	LDR		r0, ttb
	MCR		p15, 0, r0, c2, c0, 0	//; write TTB address to CP15 register
	LDR		r0, =0x3 //accesses domain #0 are not checked against the access permission
	MCR		p15, 0, r0, c3, c0, 0	//; bits so a permission fault cannot be generated.
	MRC		p15, 0, r0, c1, c0, 0
	ORR		r0, r0, #0x1000		//; icache on
	ORR		r0, r0, #0x4		//; dcache on
	ORR		r0, r0, #0x1		//; mmu on
	MCR		p15, 0, r0, c1, c0, 0

	NOP
	LDMFD	r13!, {r0-r12, lr}
	BX		lr

	//; --- make section descriptor
	//; --- r0 = section mva base
	//; --- r1 = section pa base
	//; --- r2 = AP
	//; --- r3 = domain
	//; --- r4 = c,b bit
	//; --- r7 = coarse L2 page table base
	//; --- return r0 = 1st level descriptor
	//; --- return r1 = 1st level descriptor addr
	//; bit 31-20: section base address
	//; bit 19-12: SBZ
	//; bit 11,10: Access Permission
	//; bit 9:     SBZ
	//; bit 8-5:   domain
	//; bit 4:     1
	//; bit 3:     Cachable
	//; bit 2:     Bufferable
	//; bit 1,0:   10 (section descriptor)

MK_SECTION_DS:
	MOV	r1, r1, LSR #20				//; | clear the last 20 bits
	MOV	r1, r1, LSL #20				//; | section base addr
	ORR	r1, r1, r2, LSL #10			//; | access permission bits
	ORR	r1, r1, r3, LSL #5			//; | domain
	LDR	r3, ttb
	ORR	r1, r1, r4, LSL #2			//; | shift domain
	ORR	r1, r1, #0x2				//; | level 1 entry is section
	MOV	r2, r1
	MOV	r1, r0, LSR #20
	MOV	r1, r1, LSL #2
	MOV	r3, r3, LSR #14
	MOV	r3, r3, LSL #14
	ORR	r1, r3, r1                  //; | get the TTB entry address in r1
	MOV	r0, r2
	BX	lr


	//; --- build flat map secion
FLAT_MAP_SECTION:
	STMFD	r13!, {r2-r9, lr}
	MOV	r5, #0x0
	MOV	r6, #0			//; counter
FLAT_MAP_SECTION_LOOP:
	MOV	r0, r5
	MOV	r1, r5
	MOV	r2, #Access_R_W		//; access permission -- read/write
	MOV	r3, #0x0		//; domain #0
	MOV	r4, #0x0		//; default non-cacheable/non-bufferable
	CMP	r6, #1024		//; first 1 GB address space
	MOVLT	r4, #0x3		//; cacheable/bufferable
	BL	MK_SECTION_DS
	STR	r0, [r1]
	ADD	r5, r5, #0x100000		//; incrememt 1 MB
	ADD	r6, r6, #1
	CMP	r6, #4096			//; 4 GB address space
	BLT	FLAT_MAP_SECTION_LOOP		//; < 4GB
	LDMFD	r13!, {r2-r9, lr}
	BX	lr

//; put ttb to a safe place, table size is 16KB
ttb:		.word	__ttb_base_start 
