forked from rubenslte/android_kernel_samsung_msm8226
ARM: 7465/1: Handle >4GB memory sizes in device tree and mem=size@start option
The memory regions which are passed to arm_add_memory() from device tree blobs via early_init_dt_add_memory_arch() can have sizes which are larger than will fit in a 32 bit integer, so switch to using a phys_addr_t to hold them, to avoid silently dropping the top 32 bits of the size. Similarly, use phys_addr_t in early_mem() so that mem=size@start command line options specifying more than 4GB behave sensibly. Change-Id: I8ea0fa31904903aa78750dadb2e830fa5c6deb1b Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Git-commit: a5d5f7daa744b34477c4a12728bde0a1694a1707 Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
This commit is contained in:
committed by
Stepan Moskovchenko
parent
b255559f75
commit
66ef19f104
@@ -196,7 +196,7 @@ static const struct tagtable __tagtable_##fn __tag = { tag, fn }
|
||||
|
||||
struct membank {
|
||||
phys_addr_t start;
|
||||
unsigned long size;
|
||||
phys_addr_t size;
|
||||
unsigned int highmem;
|
||||
};
|
||||
|
||||
@@ -218,7 +218,7 @@ extern struct meminfo meminfo;
|
||||
#define bank_phys_end(bank) ((bank)->start + (bank)->size)
|
||||
#define bank_phys_size(bank) (bank)->size
|
||||
|
||||
extern int arm_add_memory(phys_addr_t start, unsigned long size);
|
||||
extern int arm_add_memory(phys_addr_t start, phys_addr_t size);
|
||||
extern void early_print(const char *str, ...);
|
||||
extern void dump_machine_table(void);
|
||||
|
||||
|
||||
@@ -510,7 +510,7 @@ void __init dump_machine_table(void)
|
||||
/* can't use cpu_relax() here as it may require MMU setup */;
|
||||
}
|
||||
|
||||
int __init arm_add_memory(phys_addr_t start, unsigned long size)
|
||||
int __init arm_add_memory(phys_addr_t start, phys_addr_t size)
|
||||
{
|
||||
struct membank *bank = &meminfo.bank[meminfo.nr_banks];
|
||||
|
||||
@@ -540,7 +540,7 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
|
||||
}
|
||||
#endif
|
||||
|
||||
bank->size = size & PAGE_MASK;
|
||||
bank->size = size & ~(phys_addr_t)(PAGE_SIZE - 1);
|
||||
|
||||
/*
|
||||
* Check whether this memory region has non-zero size or
|
||||
@@ -560,7 +560,7 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
|
||||
static int __init early_mem(char *p)
|
||||
{
|
||||
static int usermem __initdata = 0;
|
||||
unsigned long size;
|
||||
phys_addr_t size;
|
||||
phys_addr_t start;
|
||||
char *endp;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user