Re: [PATCH v6 06/36] nds32: Kernel booting and initialization

From: Arnd Bergmann
Date: Thu Jan 18 2018 - 05:11:24 EST


On Mon, Jan 15, 2018 at 6:53 AM, Greentime Hu <green.hu@xxxxxxxxx> wrote:

I had not looked at this patch in enough detail earlier, sorry about
that. It should be
easy enough to fix though.

> +#ifdef CONFIG_VGA_CONSOLE
> +struct screen_info screen_info;
> +#endif

I would assume that you can't ever have a VGA console. Just drop all
the references
here and instead send a patch to the fbdev maintainer to add the dependency
at CONFIG_VGA_CONSOLE to prevent selecting it with nds32.

> +extern struct mm_struct init_mm;

init_mm is declared in linux/mm_types.h, so you should need another declaration.
In general, you should never put 'extern' declarations in to .c files anyway.

> +
> +extern void __init early_init_devtree(void *params);
> +extern void __init early_trap_init(void);

similarly, these are declared in include/linux/of_fdt.h

> +void __init setup_arch(char **cmdline_p)
> +{
> + early_init_devtree(__atags_pointer ?
> + phys_to_virt(__atags_pointer) : __dtb_start);

The reference to '__atags_pointer' appears to be a leftover from pre-DT
days. Can you just remove that?

> +void calibrate_delay(void)
> +{
> + const int *val;
> + struct device_node *cpu = NULL;
> + cpu = of_find_compatible_node(NULL, NULL, "andestech,nds32v3");
> + val = of_get_property(cpu, "clock-frequency", NULL);
> + if (!val || !*val)
> + panic("no cpu 'clock-frequency' parameter in device tree");
> + loops_per_jiffy = be32_to_cpup(val) / HZ;
> + pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n",
> + loops_per_jiffy / (500000 / HZ),
> + (loops_per_jiffy / (5000 / HZ)) % 100, loops_per_jiffy);
> +}

This seems very odd to me: The 'clock-frequency' property in the
cpu node should refer to the actual frequency it is running at, but that
tends to be different from the bogomips as needed by the ndelay()
function. Can you explain what is going on here?

Arnd