Commit e497c8e5 authored by Vineet Gupta's avatar Vineet Gupta

ARCv2: IOC: Use actual memory size to setup aperture size

vs. fixed 512M before.

But this still assumes that all of memory is under IOC which may not be
true for the SoC. Improve that later when this becomes a real issue, by
specifying this from DT.
Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent 8c47f83b
...@@ -31,6 +31,7 @@ extern int root_mountflags, end_mem; ...@@ -31,6 +31,7 @@ extern int root_mountflags, end_mem;
void setup_processor(void); void setup_processor(void);
void __init setup_arch_memory(void); void __init setup_arch_memory(void);
long __init arc_get_mem_sz(void);
/* Helpers used in arc_*_mumbojumbo routines */ /* Helpers used in arc_*_mumbojumbo routines */
#define IS_AVAIL1(v, s) ((v) ? s : "") #define IS_AVAIL1(v, s) ((v) ? s : "")
......
...@@ -995,6 +995,8 @@ SYSCALL_DEFINE3(cacheflush, uint32_t, start, uint32_t, sz, uint32_t, flags) ...@@ -995,6 +995,8 @@ SYSCALL_DEFINE3(cacheflush, uint32_t, start, uint32_t, sz, uint32_t, flags)
*/ */
noinline void arc_ioc_setup(void) noinline void arc_ioc_setup(void)
{ {
unsigned int ap_sz;
/* Flush + invalidate + disable L1 dcache */ /* Flush + invalidate + disable L1 dcache */
__dc_disable(); __dc_disable();
...@@ -1005,8 +1007,14 @@ noinline void arc_ioc_setup(void) ...@@ -1005,8 +1007,14 @@ noinline void arc_ioc_setup(void)
/* IOC Aperture start: TDB: handle non default CONFIG_LINUX_LINK_BASE */ /* IOC Aperture start: TDB: handle non default CONFIG_LINUX_LINK_BASE */
write_aux_reg(ARC_REG_IO_COH_AP0_BASE, 0x80000); write_aux_reg(ARC_REG_IO_COH_AP0_BASE, 0x80000);
/* IOC Aperture size: TBD: handle different mem sizes, PAE... */ /*
write_aux_reg(ARC_REG_IO_COH_AP0_SIZE, 0x11); * IOC Aperture size:
* decoded as 2 ^ (SIZE + 2) KB: so setting 0x11 implies 512M
* TBD: fix for PGU + 1GB of low mem
* TBD: fix for PAE
*/
ap_sz = order_base_2(arc_get_mem_sz()/1024) - 2;
write_aux_reg(ARC_REG_IO_COH_AP0_SIZE, ap_sz);
write_aux_reg(ARC_REG_IO_COH_PARTIAL, 1); write_aux_reg(ARC_REG_IO_COH_PARTIAL, 1);
write_aux_reg(ARC_REG_IO_COH_ENABLE, 1); write_aux_reg(ARC_REG_IO_COH_ENABLE, 1);
......
...@@ -40,6 +40,11 @@ struct pglist_data node_data[MAX_NUMNODES] __read_mostly; ...@@ -40,6 +40,11 @@ struct pglist_data node_data[MAX_NUMNODES] __read_mostly;
EXPORT_SYMBOL(node_data); EXPORT_SYMBOL(node_data);
#endif #endif
long __init arc_get_mem_sz(void)
{
return low_mem_sz;
}
/* User can over-ride above with "mem=nnn[KkMm]" in cmdline */ /* User can over-ride above with "mem=nnn[KkMm]" in cmdline */
static int __init setup_mem_sz(char *str) static int __init setup_mem_sz(char *str)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment