mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
fd90410e9d
A number of architectures either kept the screen_info definition for historical purposes as it used to be required by the generic VT code, or they copied it from another architecture in order to build the VGA console driver in an allmodconfig build. The mips definition is used by some platforms, but the initialization on jazz is not needed. Now that vgacon no longer builds on these architectures, remove the stale definitions and initializations. Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Acked-by: Dinh Nguyen <dinguyen@kernel.org> Acked-by: Max Filippov <jcmvbkbc@gmail.com> Acked-by: Palmer Dabbelt <palmer@rivosinc.com> Acked-by: Guo Ren <guoren@kernel.org> Acked-by: Helge Deller <deller@gmx.de> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Link: https://lore.kernel.org/r/20231009211845.3136536-5-arnd@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
123 lines
2.5 KiB
C
123 lines
2.5 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
|
|
|
|
#include <linux/console.h>
|
|
#include <linux/memblock.h>
|
|
#include <linux/initrd.h>
|
|
#include <linux/of.h>
|
|
#include <linux/of_fdt.h>
|
|
#include <linux/start_kernel.h>
|
|
#include <linux/dma-map-ops.h>
|
|
#include <asm/sections.h>
|
|
#include <asm/mmu_context.h>
|
|
#include <asm/pgalloc.h>
|
|
|
|
static void __init csky_memblock_init(void)
|
|
{
|
|
unsigned long lowmem_size = PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET);
|
|
unsigned long sseg_size = PFN_DOWN(SSEG_SIZE - PHYS_OFFSET_OFFSET);
|
|
unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0 };
|
|
signed long size;
|
|
|
|
memblock_reserve(__pa(_start), _end - _start);
|
|
|
|
early_init_fdt_reserve_self();
|
|
early_init_fdt_scan_reserved_mem();
|
|
|
|
memblock_dump_all();
|
|
|
|
min_low_pfn = PFN_UP(memblock_start_of_DRAM());
|
|
max_low_pfn = max_pfn = PFN_DOWN(memblock_end_of_DRAM());
|
|
|
|
size = max_pfn - min_low_pfn;
|
|
|
|
if (size >= lowmem_size) {
|
|
max_low_pfn = min_low_pfn + lowmem_size;
|
|
#ifdef CONFIG_PAGE_OFFSET_80000000
|
|
write_mmu_msa1(read_mmu_msa0() + SSEG_SIZE);
|
|
#endif
|
|
} else if (size > sseg_size) {
|
|
max_low_pfn = min_low_pfn + sseg_size;
|
|
}
|
|
|
|
max_zone_pfn[ZONE_NORMAL] = max_low_pfn;
|
|
|
|
mmu_init(min_low_pfn, max_low_pfn);
|
|
|
|
#ifdef CONFIG_HIGHMEM
|
|
max_zone_pfn[ZONE_HIGHMEM] = max_pfn;
|
|
|
|
highstart_pfn = max_low_pfn;
|
|
highend_pfn = max_pfn;
|
|
#endif
|
|
memblock_set_current_limit(PFN_PHYS(max_low_pfn));
|
|
|
|
dma_contiguous_reserve(0);
|
|
|
|
free_area_init(max_zone_pfn);
|
|
}
|
|
|
|
void __init setup_arch(char **cmdline_p)
|
|
{
|
|
*cmdline_p = boot_command_line;
|
|
|
|
console_verbose();
|
|
|
|
pr_info("Phys. mem: %ldMB\n",
|
|
(unsigned long) memblock_phys_mem_size()/1024/1024);
|
|
|
|
setup_initial_init_mm(_start, _etext, _edata, _end);
|
|
|
|
parse_early_param();
|
|
|
|
csky_memblock_init();
|
|
|
|
unflatten_and_copy_device_tree();
|
|
|
|
#ifdef CONFIG_SMP
|
|
setup_smp();
|
|
#endif
|
|
|
|
sparse_init();
|
|
|
|
fixaddr_init();
|
|
|
|
#ifdef CONFIG_HIGHMEM
|
|
kmap_init();
|
|
#endif
|
|
}
|
|
|
|
unsigned long va_pa_offset;
|
|
EXPORT_SYMBOL(va_pa_offset);
|
|
|
|
static inline unsigned long read_mmu_msa(void)
|
|
{
|
|
#ifdef CONFIG_PAGE_OFFSET_80000000
|
|
return read_mmu_msa0();
|
|
#endif
|
|
|
|
#ifdef CONFIG_PAGE_OFFSET_A0000000
|
|
return read_mmu_msa1();
|
|
#endif
|
|
}
|
|
|
|
asmlinkage __visible void __init csky_start(unsigned int unused,
|
|
void *dtb_start)
|
|
{
|
|
/* Clean up bss section */
|
|
memset(__bss_start, 0, __bss_stop - __bss_start);
|
|
|
|
va_pa_offset = read_mmu_msa() & ~(SSEG_SIZE - 1);
|
|
|
|
pre_trap_init();
|
|
|
|
if (dtb_start == NULL)
|
|
early_init_dt_scan(__dtb_start);
|
|
else
|
|
early_init_dt_scan(dtb_start);
|
|
|
|
start_kernel();
|
|
|
|
asm volatile("br .\n");
|
|
}
|