/*
 * Copyright (C) 2018 Synaptics Incorporated. 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.
 */
#ifndef _MEM_CONFIG_
#define _MEM_CONFIG_

/*
 *	memory map
 *		memory map is flat
 *		address 0xE000_0000 - 0xFFFF_FFFF is mapped to I/O
 *
 *	(1)	Cache & buffer
 *	0x0000_0000 - 0xE000_0000		Memory space
 *	    0x0000_0000 - 0x0080_0000		Cacheable, bufferable memory
 *	    0x0E0_0000  - 0x0FD0_0000		Cacheable, bufferable memory
 *	    Others		                    Un-Cacheable memory
 *	0xE000_0000 - 0xFFFF_FFFF		Device space
 *
 *	(2)	functionality
 *	0x0000_0000 - 0x0080_0000		User memory for test, Cache-able
  *	0x0080_0000 - 0x0300_0000		User memory
 *		0x0160_0000 - 0x0170_0000		Memory benchmark (random NCNB read)
 * (0x0170_0000 - 0x0300_0000		MA/MI area)
 *		0x0170_0000 - 0x0190_0000
 *		0x0190_0000 - 0x01B0_0000
 *		0x01B0_0000 - 0x0200_0000
 *		0x0200_0000 - 0x0220_0000
 *		0x0220_0000 - 0x0240_0000
 *		0x0260_0000 - 0x0268_0000		I2S src
 *		0x0268_0000 - 0x0270_0000		I2S dst
 *		0x0270_0000 - 0x0280_0000		SATA src
 *		0x0280_0000 - 0x0290_0000		SATA dst
 *		0x0290_0000 - 0x02A0_0000
 *		0x02A0_0000 - 0x02B0_0000
 *		0x02B0_0000 - 0x02B8_0000
 *		0x02B8_0000 - 0x02C0_0000
 *		0x02C0_0000 - 0x02E0_0000
 *		0x02E0_0000 - 0x0300_0000
 *		0x0300_0000 - 0x0308_0000		USB src
 *      0x0308_0000 - 0x0310_0000		USB dst
 *	0x0310_0000 - 0x0320_0000		RESERVED
 *	0x0320_0000 - 0x0340_0000
 *	0x0340_0000 - 0x0340_4000
 *	0x0340_4000 - 0x0360_0000
 *	0x0360_0000 - 0x0360_4000
 *	0x0360_4000 - 0x0380_0000
 *
 *

 *	0x0680_0000 - 0x0D00_0000		GFX3D
 *
 *  0x0D00_0000 - 0x0E00_0000
 *
 *  32MB for MMU/STACK/CODE/DATA, cache-able
 *	0x0E00_0000 - 0x0E90_0000		MMU
 *	0x0E90_0000 - 0x0EF0_0000		reserved
 *	0x0EF0_0000 - 0x0F00_0000		stacks
 *	0x0F00_0000 - 0x0F90_0000		code
 *	0x0F90_0000 - 0x0FD0_0000		data
 */

/*
    0x00000000- 0x00800000 cacheable region for test, kept as not defined.
    0x00800000- 0x0E000000 uncacheable.
                0x00800000- 0x01000000 for memory test, kept as not defined.
                0x01000000- 0x03000000 for modules test, kept as not defined. Free to be used for any standalone test.
                0x03000000- 0x0E000000 for modules big buffer. Need define.   Any module need the fixed buffer, define it here.
    0x0E000000- 0x10000000 Diag MMU/CODE/DATA/STACK.
    0x10000000- 0x20000000 HEAP
    0x20000000- 0x30000000 NNA(buffer pool?) if NNA not use buffer pool, define buffer pool with 16MB/32MB region.
    0x30000000- 0x40000000 Free for test.
*/


#define CB_BASE_			(0x0)
#define CB_SIZE_			(0x00800000)

#define LOADER_REGION_BASE    (0x0D000000)    // Region for Diag MMU/STACK/CODE/DATA/BSS, Cacheble
#define LOADER_REGION_SIZE    (0x01000000)

#define DIAG_REGION_BASE    (0x0E000000)    // Region for Diag MMU/STACK/CODE/DATA/BSS, Cacheble
#define DIAG_REGION_SIZE    (0x02000000)
#define     TTB_BASE                MMU_TABLE_BASE
#define     MMU_TABLE_BASE  	    DIAG_REGION_BASE       // MMU table
#define     MMU_TABLE_SIZE  	    (0x00811000)    //
#define     STACK_BOTTOM            (0x0EF00000)
#define     STACK_SIZE_TOTAL        (0x00100000)
#define     ROM_BASE			    (0x0F000000)
#define     ROM_SIZE			    (0x00900000)
#define     GLB_BASE			    (0x0F900000)    //all the global variables including RW and ZI
#define     GLB_SIZE			    (0x00400000)
// modules\sw_dec_h264\app\swdech264.lds, image size is about 400KB.
#define     AARCH32_TESTBIN_FOR_AARCH64	    (0x0FD00000)
//#define     UNCACHED_HEAP_BASE	    (0x0FE00000)    // leave it un-used
//#define     UNCACHED_HEAP_SIZE        (0x00200000)

#define HEAP_BASE			(0x10000000)
#define HEAP_SIZE			(0x08000000)      // 128MB

// for big nna bw test case
#define BUFFER_POOL_BASE    (0x18100000)
#define BUFFER_POOL_SIZE    (0x10000000)      // 256MB

//#define     BUFFER_POOL_BLOCK_SIZE (0x10000)  // 64KB
//#define     BUFFER_POOL_BLOCK_SIZE (512)      // 0.5KB
#define     BUFFER_POOL_BLOCK_SIZE (4096)


// Total stack size for each core
#define STACK_SIZE          (0x10000)
#define STACKS_SIZE_PER_CORE  (4*STACK_SIZE)

// for aarch32
#define SVC_STACK_0         (STACK_BOTTOM + STACKS_SIZE_PER_CORE)   // 0x0EF40000
#define FIQ_STACK_0         (SVC_STACK_0-STACK_SIZE)                // 0x0EF30000
#define IRQ_STACK_0         (FIQ_STACK_0-STACK_SIZE)                // 0x0EF20000
#define OTHERS_STACK        (IRQ_STACK_0-STACK_SIZE)                // 0x0EF10000
// for aarch64
#define EL1_STACK_0         (STACK_BOTTOM + STACKS_SIZE_PER_CORE)   // 0x0EF40000
#define EL3_STACK_0         (EL1_STACK_0-STACK_SIZE)                // 0x0EF30000



#endif
