Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b362e3e authored by David Daney's avatar David Daney Committed by Ralf Baechle
Browse files

MIPS: Decode c0_config4 for large TLBs.



For processors that have more than 64 TLBs, we need to decode both
config1 and config4 to determine the total number TLBs.

Signed-off-by: default avatarDavid Daney <ddaney@caviumnetworks.com>
To: linux-mips@linux-mips.org
Patchwork: http://patchwork.linux-mips.org/patch/866/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 2a880986
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -576,6 +576,10 @@
#define MIPS_CONF3_DSP		(_ULCAST_(1) << 10)
#define MIPS_CONF3_DSP		(_ULCAST_(1) << 10)
#define MIPS_CONF3_ULRI		(_ULCAST_(1) << 13)
#define MIPS_CONF3_ULRI		(_ULCAST_(1) << 13)


#define MIPS_CONF4_MMUSIZEEXT	(_ULCAST_(255) << 0)
#define MIPS_CONF4_MMUEXTDEF	(_ULCAST_(3) << 14)
#define MIPS_CONF4_MMUEXTDEF_MMUSIZEEXT (_ULCAST_(1) << 14)

#define MIPS_CONF7_WII		(_ULCAST_(1) << 31)
#define MIPS_CONF7_WII		(_ULCAST_(1) << 31)


#define MIPS_CONF7_RPS		(_ULCAST_(1) << 2)
#define MIPS_CONF7_RPS		(_ULCAST_(1) << 2)
+15 −0
Original line number Original line Diff line number Diff line
@@ -700,6 +700,19 @@ static inline unsigned int decode_config3(struct cpuinfo_mips *c)
	return config3 & MIPS_CONF_M;
	return config3 & MIPS_CONF_M;
}
}


static inline unsigned int decode_config4(struct cpuinfo_mips *c)
{
	unsigned int config4;

	config4 = read_c0_config4();

	if ((config4 & MIPS_CONF4_MMUEXTDEF) == MIPS_CONF4_MMUEXTDEF_MMUSIZEEXT
	    && cpu_has_tlb)
		c->tlbsize += (config4 & MIPS_CONF4_MMUSIZEEXT) * 0x40;

	return config4 & MIPS_CONF_M;
}

static void __cpuinit decode_configs(struct cpuinfo_mips *c)
static void __cpuinit decode_configs(struct cpuinfo_mips *c)
{
{
	int ok;
	int ok;
@@ -718,6 +731,8 @@ static void __cpuinit decode_configs(struct cpuinfo_mips *c)
		ok = decode_config2(c);
		ok = decode_config2(c);
	if (ok)
	if (ok)
		ok = decode_config3(c);
		ok = decode_config3(c);
	if (ok)
		ok = decode_config4(c);


	mips_probe_watch_registers(c);
	mips_probe_watch_registers(c);
}
}