armv8/ls2085a: Expose all DDR region(s) to Linux

This patch allows u-boot to expose the complete DDR region(s) to Linux
(after subtracting the memory hidden via MEM_TOP_HIDE mechanism).

This allows the u-boot to support the 48-bit VA support provided by
ARM64 Linux in flavors 3.18 and above, by passing the appropriate
'memory' DTS nodes.

Signed-off-by: Bhupesh Sharma <bhupesh.sharma at freescale.com>
Signed-off-by: Prabhakar Kushwaha <prabhakar at freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
This commit is contained in:
Bhupesh Sharma 2015-05-28 14:54:10 +05:30 committed by York Sun
parent fc7b3855e1
commit a2dc818f21
6 changed files with 68 additions and 18 deletions

View file

@ -14,3 +14,14 @@ Memory map from core's view
Other addresses are either reserved, or not used directly by u-boot. Other addresses are either reserved, or not used directly by u-boot.
This list should be updated when more addresses are used. This list should be updated when more addresses are used.
Booting Linux flavors which do not support 48-bit VA (< Linux 3.18)
-------------------------------------------------------------------
One needs to use appropriate bootargs to boot Linux flavors which do
not support 48-bit VA (for e.g. < Linux 3.18) by appending mem=2048M, as shown
below:
=> setenv bootargs 'console=ttyS1,115200 root=/dev/ram
earlycon=uart8250,mmio,0x21c0600,115200 default_hugepagesz=2m hugepagesz=2m
hugepages=16 mem=2048M'

View file

@ -127,15 +127,18 @@ void fdt_fixup_board_enet(void *fdt)
#ifdef CONFIG_OF_BOARD_SETUP #ifdef CONFIG_OF_BOARD_SETUP
int ft_board_setup(void *blob, bd_t *bd) int ft_board_setup(void *blob, bd_t *bd)
{ {
phys_addr_t base; u64 base[CONFIG_NR_DRAM_BANKS];
phys_size_t size; u64 size[CONFIG_NR_DRAM_BANKS];
ft_cpu_setup(blob, bd); ft_cpu_setup(blob, bd);
/* limit the memory size to bank 1 until Linux can handle 40-bit PA */ /* fixup DT for the two GPP DDR banks */
base = getenv_bootm_low(); base[0] = gd->bd->bi_dram[0].start;
size = getenv_bootm_size(); size[0] = gd->bd->bi_dram[0].size;
fdt_fixup_memory(blob, (u64)base, (u64)size); base[1] = gd->bd->bi_dram[1].start;
size[1] = gd->bd->bi_dram[1].size;
fdt_fixup_memory_banks(blob, base, size, 2);
#ifdef CONFIG_FSL_MC_ENET #ifdef CONFIG_FSL_MC_ENET
fdt_fixup_board_enet(blob); fdt_fixup_board_enet(blob);

View file

@ -127,3 +127,22 @@ b) NOR boot
c) NAND boot c) NAND boot
d) SD boot d) SD boot
e) QSPI boot e) QSPI boot
Environment Variables
---------------------
- mcboottimeout: MC boot timeout in milliseconds. If this variable is not defined
the value CONFIG_SYS_LS_MC_BOOT_TIMEOUT_MS will be assumed.
- mcmemsize: MC DRAM block size. If this variable is not defined
the value CONFIG_SYS_LS_MC_DRAM_BLOCK_MIN_SIZE will be assumed.
Booting Linux flavors which do not support 48-bit VA (< Linux 3.18)
-------------------------------------------------------------------
One needs to use appropriate bootargs to boot Linux flavors which do
not support 48-bit VA (for e.g. < Linux 3.18) by appending mem=2048M, as shown
below:
=> setenv bootargs 'console=ttyS1,115200 root=/dev/ram
earlycon=uart8250,mmio,0x21c0600,115200 default_hugepagesz=2m hugepagesz=2m
hugepages=16 mem=2048M'

View file

@ -244,15 +244,18 @@ void fdt_fixup_board_enet(void *fdt)
#ifdef CONFIG_OF_BOARD_SETUP #ifdef CONFIG_OF_BOARD_SETUP
int ft_board_setup(void *blob, bd_t *bd) int ft_board_setup(void *blob, bd_t *bd)
{ {
phys_addr_t base; u64 base[CONFIG_NR_DRAM_BANKS];
phys_size_t size; u64 size[CONFIG_NR_DRAM_BANKS];
ft_cpu_setup(blob, bd); ft_cpu_setup(blob, bd);
/* limit the memory size to bank 1 until Linux can handle 40-bit PA */ /* fixup DT for the two GPP DDR banks */
base = getenv_bootm_low(); base[0] = gd->bd->bi_dram[0].start;
size = getenv_bootm_size(); size[0] = gd->bd->bi_dram[0].size;
fdt_fixup_memory(blob, (u64)base, (u64)size); base[1] = gd->bd->bi_dram[1].start;
size[1] = gd->bd->bi_dram[1].size;
fdt_fixup_memory_banks(blob, base, size, 2);
#ifdef CONFIG_FSL_MC_ENET #ifdef CONFIG_FSL_MC_ENET
fdt_fixup_board_enet(blob); fdt_fixup_board_enet(blob);

View file

@ -107,3 +107,14 @@ Booting Options
--------------- ---------------
a) NOR boot a) NOR boot
b) NAND boot b) NAND boot
Booting Linux flavors which do not support 48-bit VA (< Linux 3.18)
-------------------------------------------------------------------
One needs to use appropriate bootargs to boot Linux flavors which do
not support 48-bit VA (for e.g. < Linux 3.18) by appending mem=2048M, as shown
below:
=> setenv bootargs 'console=ttyS1,115200 root=/dev/ram
earlycon=uart8250,mmio,0x21c0600,115200 default_hugepagesz=2m hugepagesz=2m
hugepages=16 mem=2048M'

View file

@ -241,15 +241,18 @@ void fdt_fixup_board_enet(void *fdt)
#ifdef CONFIG_OF_BOARD_SETUP #ifdef CONFIG_OF_BOARD_SETUP
int ft_board_setup(void *blob, bd_t *bd) int ft_board_setup(void *blob, bd_t *bd)
{ {
phys_addr_t base; u64 base[CONFIG_NR_DRAM_BANKS];
phys_size_t size; u64 size[CONFIG_NR_DRAM_BANKS];
ft_cpu_setup(blob, bd); ft_cpu_setup(blob, bd);
/* limit the memory size to bank 1 until Linux can handle 40-bit PA */ /* fixup DT for the two GPP DDR banks */
base = getenv_bootm_low(); base[0] = gd->bd->bi_dram[0].start;
size = getenv_bootm_size(); size[0] = gd->bd->bi_dram[0].size;
fdt_fixup_memory(blob, (u64)base, (u64)size); base[1] = gd->bd->bi_dram[1].start;
size[1] = gd->bd->bi_dram[1].size;
fdt_fixup_memory_banks(blob, base, size, 2);
#ifdef CONFIG_FSL_MC_ENET #ifdef CONFIG_FSL_MC_ENET
fdt_fixup_board_enet(blob); fdt_fixup_board_enet(blob);