mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 15:41:39 +00:00
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. 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>
This commit is contained in:
parent
ff081e05bf
commit
a5d5f7daa7
@ -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;
|
||||
};
|
||||
|
||||
@ -217,7 +217,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);
|
||||
|
||||
|
@ -508,7 +508,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];
|
||||
|
||||
@ -538,7 +538,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
|
||||
@ -558,7 +558,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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user