@ -15,16 +15,28 @@
DECLARE_GLOBAL_DATA_PTR ;
static struct mm_region zynqmp_mem_map [ ] = {
/*
* Number of filled static entries and also the first empty
* slot in zynqmp_mem_map .
*/
# define ZYNQMP_MEM_MAP_USED 4
# if !defined(CONFIG_ZYNQMP_NO_DDR)
{
. virt = 0x0UL ,
. phys = 0x0UL ,
. size = 0x80000000UL ,
. attrs = PTE_BLOCK_MEMTYPE ( MT_NORMAL ) |
PTE_BLOCK_INNER_SHARE
} ,
# define DRAM_BANKS CONFIG_NR_DRAM_BANKS
# else
# define DRAM_BANKS 0
# endif
# if defined(CONFIG_DEFINE_TCM_OCM_MMAP)
# define TCM_MAP 1
# else
# define TCM_MAP 0
# endif
/* +1 is end of list which needs to be empty */
# define ZYNQMP_MEM_MAP_MAX (ZYNQMP_MEM_MAP_USED + DRAM_BANKS + TCM_MAP + 1)
static struct mm_region zynqmp_mem_map [ ZYNQMP_MEM_MAP_MAX ] = {
{
. virt = 0x80000000UL ,
. phys = 0x80000000UL ,
@ -32,8 +44,7 @@ static struct mm_region zynqmp_mem_map[] = {
. attrs = PTE_BLOCK_MEMTYPE ( MT_DEVICE_NGNRNE ) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
} ,
{
} , {
. virt = 0xf8000000UL ,
. phys = 0xf8000000UL ,
. size = 0x07e00000UL ,
@ -41,42 +52,51 @@ static struct mm_region zynqmp_mem_map[] = {
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
} , {
# if defined(CONFIG_DEFINE_TCM_OCM_MMAP)
. virt = 0xffe00000UL ,
. phys = 0xffe00000UL ,
. size = 0x00200000UL ,
. attrs = PTE_BLOCK_MEMTYPE ( MT_NORMAL ) |
PTE_BLOCK_INNER_SHARE
} , {
# endif
. virt = 0x400000000UL ,
. phys = 0x400000000UL ,
. size = 0x400000000UL ,
. attrs = PTE_BLOCK_MEMTYPE ( MT_DEVICE_NGNRNE ) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
} ,
# if !defined(CONFIG_ZYNQMP_NO_DDR)
{
. virt = 0x800000000UL ,
. phys = 0x800000000UL ,
. size = 0x800000000UL ,
. attrs = PTE_BLOCK_MEMTYPE ( MT_NORMAL ) |
PTE_BLOCK_INNER_SHARE
} ,
# endif
{
} , {
. virt = 0x1000000000UL ,
. phys = 0x1000000000UL ,
. size = 0xf000000000UL ,
. attrs = PTE_BLOCK_MEMTYPE ( MT_DEVICE_NGNRNE ) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
} , {
/* List terminator */
0 ,
}
} ;
void mem_map_fill ( void )
{
int banks = ZYNQMP_MEM_MAP_USED ;
# if defined(CONFIG_DEFINE_TCM_OCM_MMAP)
zynqmp_mem_map [ banks ] . virt = 0xffe00000UL ;
zynqmp_mem_map [ banks ] . phys = 0xffe00000UL ;
zynqmp_mem_map [ banks ] . size = 0x00200000UL ;
zynqmp_mem_map [ banks ] . attrs = PTE_BLOCK_MEMTYPE ( MT_NORMAL ) |
PTE_BLOCK_INNER_SHARE ;
banks = banks + 1 ;
# endif
# if !defined(CONFIG_ZYNQMP_NO_DDR)
for ( int i = 0 ; i < CONFIG_NR_DRAM_BANKS ; i + + ) {
/* Zero size means no more DDR that's this is end */
if ( ! gd - > bd - > bi_dram [ i ] . size )
break ;
zynqmp_mem_map [ banks ] . virt = gd - > bd - > bi_dram [ i ] . start ;
zynqmp_mem_map [ banks ] . phys = gd - > bd - > bi_dram [ i ] . start ;
zynqmp_mem_map [ banks ] . size = gd - > bd - > bi_dram [ i ] . size ;
zynqmp_mem_map [ banks ] . attrs = PTE_BLOCK_MEMTYPE ( MT_NORMAL ) |
PTE_BLOCK_INNER_SHARE ;
banks = banks + 1 ;
}
# endif
}
struct mm_region * mem_map = zynqmp_mem_map ;
u64 get_page_table_size ( void )