riscv: Call identify_cpu() earlier for CPU 0

It is advantageous to have knowledge of ISA features as early as
possible. For example, the presence of newer virtual memory extensions
may be useful to pmap_bootstrap().

To achieve this, split out the printf() parts of identify_cpu() into a
separate function, printcpuinfo(). This latter function will be called
later in boot after the console has been initialized.

Reviewed by:	markj
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D39810
This commit is contained in:
Mitchell Horne 2023-05-22 20:50:09 -03:00
parent 88b4d124ef
commit b0d45b023e
4 changed files with 16 additions and 3 deletions

View File

@ -90,6 +90,7 @@ void cpu_halt(void) __dead2;
void cpu_reset(void) __dead2;
void fork_trampoline(void);
void identify_cpu(void);
void printcpuinfo(void);
static __inline uint64_t
get_cyclecount(void)

View File

@ -365,6 +365,14 @@ identify_cpu_ids(struct cpu_desc *desc)
void
identify_cpu(void)
{
struct cpu_desc *desc = &cpu_desc[PCPU_GET(cpuid)];
identify_cpu_ids(desc);
}
void
printcpuinfo(void)
{
struct cpu_desc *desc;
u_int cpu, hart;
@ -373,8 +381,6 @@ identify_cpu(void)
hart = PCPU_GET(hart);
desc = &cpu_desc[cpu];
identify_cpu_ids(desc);
/* Print details for boot CPU or if we want verbose output */
if (cpu == 0 || bootverbose) {
/* Summary line. */

View File

@ -128,7 +128,7 @@ cpu_startup(void *dummy)
{
sbi_print_version();
identify_cpu();
printcpuinfo();
printf("real memory = %ju (%ju MB)\n", ptoa((uintmax_t)realmem),
ptoa((uintmax_t)realmem) / (1024 * 1024));
@ -536,6 +536,11 @@ initriscv(struct riscv_bootparams *rvbp)
physmem_hardware_regions(mem_regions, mem_regions_sz);
#endif
/*
* Identify CPU/ISA features.
*/
identify_cpu();
/* Do basic tuning, hz etc */
init_param1();

View File

@ -255,6 +255,7 @@ init_secondary(uint64_t hart)
* runtime chip identification.
*/
identify_cpu();
printcpuinfo();
/* Enable software interrupts */
riscv_unmask_ipi();