Received: by 10.213.65.68 with SMTP id h4csp1059973imn; Sun, 18 Mar 2018 12:56:13 -0700 (PDT) X-Google-Smtp-Source: AG47ELtym4r7F5ABb1uuw87LEBdezbyf/xj3sUlzHlAME7OYdp9L6cLKe7iidXGpRfAagGbxbYkk X-Received: by 10.98.251.5 with SMTP id x5mr8119446pfm.18.1521402973903; Sun, 18 Mar 2018 12:56:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521402973; cv=none; d=google.com; s=arc-20160816; b=muO56OtHeONhAxtjl5nUac11aQYASxplhfnxBHB5bBtzDQ0khgws7m9RWcuZzz3bdt rgFMH7jWxE4rURkwwgvuF9pvDswixWgnz8fXD3UjGrc4gU69evym5pXpGGKbMoYa4vIE B2w484oQteveYY+tszA76fzi2Hsds6Y7XYkkPJ4oYwoOYy6lzPXW3DzFp3VEXz17RQWh MpCwiiYlNM9M2K1Vk7q3hqpOdaaj9y4zae+Sr0aetztkWUNkQpNMWpuMo7lNqhvf9ACI 5i64rEsHwCN+/3eQZ+/+Ox4Zxa6ra2S5Fr6B/UBsWQS0tGL1ySy6XCLX3ynJ1+vg3zuP 8SGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=5fzyDDLvmNsAnQoyTwqOfhLviqw+fagMWN/CXV6Zx8Q=; b=nNaYhWP0tNmTkIzxp2+oNaxetDGCHZzfBBxHpugERuEgWLbwc9PucOeFVLgUKfRR8e MruhY+FMCorPRjgQp2/aRC2VufO7bDLbpeJm2sbxryp9DBiKyah1wKkl80eVt1DDKIvl f7z9Cm1bssu0WxtYkb4z5D0Vhr7N7YGce6hGIbCJVXXrqKmM1fh0B5OA38FZQtE4Tmy2 zhOkScW5NsIEOAt04+TtnrWtc/Yj0RoJKRkBTl/OUA+JgRFAZA1bBjWb+HeNUfJ/ytJH ipyfgepabeUYjafGnATTyLwok7Gk1c6J2q+3VTC+XD8NinaDa1Aq2TgJXn2mKs07yqHd vEww== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 32-v6si10601838plg.555.2018.03.18.12.55.59; Sun, 18 Mar 2018 12:56:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754723AbeCRTxw (ORCPT + 99 others); Sun, 18 Mar 2018 15:53:52 -0400 Received: from smtp2200-217.mail.aliyun.com ([121.197.200.217]:41108 "EHLO smtp2200-217.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754448AbeCRTxt (ORCPT ); Sun, 18 Mar 2018 15:53:49 -0400 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.02444205|-1;CH=green;FP=0|0|0|0|0|-1|-1|-1;HT=e02c03271;MF=ren_guo@c-sky.com;NM=1;PH=DS;RN=11;RT=11;SR=0;TI=SMTPD_---.BMC.GMa_1521402706; Received: from localhost(mailfrom:ren_guo@c-sky.com fp:183.159.50.56) by smtp.aliyun-inc.com(10.147.41.199); Mon, 19 Mar 2018 03:51:47 +0800 From: Guo Ren To: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, daniel.lezcano@linaro.org, jason@lakedaemon.net, arnd@arndb.de Cc: c-sky_gcc_upstream@c-sky.com, gnu-csky@mentor.com, thomas.petazzoni@bootlin.com, wbx@uclibc-ng.org, Guo Ren Subject: [PATCH 01/19] csky: Kernel booting Date: Mon, 19 Mar 2018 03:51:23 +0800 Message-Id: <1cde8ee5cb31fc0bbe366434aeee489b2e16eed3.1521399976.git.ren_guo@c-sky.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Guo Ren --- arch/csky/kernel/head.S | 20 ++++++ arch/csky/kernel/setup.c | 157 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 arch/csky/kernel/head.S create mode 100644 arch/csky/kernel/setup.c diff --git a/arch/csky/kernel/head.S b/arch/csky/kernel/head.S new file mode 100644 index 0000000..a746caf --- /dev/null +++ b/arch/csky/kernel/head.S @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. +#include +#include +#include +#include + +ENTRY(_start) + /* set super user mode */ + lrw a3, DEFAULT_PSR_VALUE + mtcr a3, psr + psrset ee + + /* set stack point */ + lrw a3, init_thread_union + THREAD_SIZE + mov sp, a3 + + jmpi csky_start +END(_start) + diff --git a/arch/csky/kernel/setup.c b/arch/csky/kernel/setup.c new file mode 100644 index 0000000..04c9fbd --- /dev/null +++ b/arch/csky/kernel/setup.c @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +phys_addr_t __init_memblock memblock_end_of_REG0(void) +{ + return (memblock.memory.regions[0].base + memblock.memory.regions[0].size); +} + +phys_addr_t __init_memblock memblock_start_of_REG1(void) +{ + return memblock.memory.regions[1].base; +} + +size_t __init_memblock memblock_size_of_REG1(void) +{ + return memblock.memory.regions[1].size; +} + +static void __init csky_memblock_init(void) +{ + unsigned long zone_size[MAX_NR_ZONES]; + unsigned long zhole_size[MAX_NR_ZONES]; + signed long size; + + memblock_reserve(__pa(_stext), _end - _stext); +#ifdef CONFIG_BLK_DEV_INITRD + memblock_reserve(__pa(initrd_start), initrd_end - initrd_start); +#endif + + early_init_fdt_reserve_self(); + early_init_fdt_scan_reserved_mem(); + + memblock_dump_all(); + + memset(zone_size, 0, sizeof(zone_size)); + memset(zhole_size, 0, sizeof(zhole_size)); + + min_low_pfn = PFN_UP(memblock_start_of_DRAM()); + max_low_pfn = PFN_UP(memblock_end_of_REG0()); + max_pfn = PFN_DOWN(memblock_end_of_DRAM()); + + size = max_pfn - min_low_pfn; + + if (memblock.memory.cnt > 1) { + zone_size[ZONE_NORMAL] = PFN_DOWN(memblock_start_of_REG1()) - min_low_pfn; + zhole_size[ZONE_NORMAL] = PFN_DOWN(memblock_start_of_REG1()) - max_low_pfn; + } else { + if (size <= PFN_DOWN(LOWMEM_LIMIT - CONFIG_RAM_BASE)) + zone_size[ZONE_NORMAL] = max_pfn - min_low_pfn; + else { + zone_size[ZONE_NORMAL] = PFN_DOWN(LOWMEM_LIMIT - CONFIG_RAM_BASE); + max_low_pfn = min_low_pfn + zone_size[ZONE_NORMAL]; + } + } + +#ifdef CONFIG_HIGHMEM + size = 0; + if(memblock.memory.cnt > 1) { + size = PFN_DOWN(memblock_size_of_REG1()); + highstart_pfn = PFN_DOWN(memblock_start_of_REG1()); + } else { + size = max_pfn - min_low_pfn - PFN_DOWN(LOWMEM_LIMIT - CONFIG_RAM_BASE); + highstart_pfn = min_low_pfn + PFN_DOWN(LOWMEM_LIMIT - CONFIG_RAM_BASE); + } + + if (size > 0) + zone_size[ZONE_HIGHMEM] = size; + + highend_pfn = max_pfn; +#endif + memblock_set_current_limit(PFN_PHYS(max_low_pfn)); + + free_area_init_node(0, zone_size, min_low_pfn, zhole_size); +} + +extern void cpu_dt_probe(void); +void __init setup_arch(char **cmdline_p) +{ + *cmdline_p = boot_command_line; + + console_verbose(); + + printk("C-SKY: https://c-sky.github.io\n"); + + init_mm.start_code = (unsigned long) _stext; + init_mm.end_code = (unsigned long) _etext; + init_mm.end_data = (unsigned long) _edata; + init_mm.brk = (unsigned long) _end; + + parse_early_param(); + + csky_memblock_init(); + + unflatten_and_copy_device_tree(); + + cpu_dt_probe(); + + sparse_init(); + +#ifdef CONFIG_HIGHMEM + kmap_init(); +#endif + cache_wbinv_all(); + +#if defined(CONFIG_VT) && defined(CONFIG_DUMMY_CONSOLE) + conswitchp = &dummy_con; +#endif +} + +extern void pre_trap_init(void); +asmlinkage __visible void __init csky_start( + unsigned int unused, + void * param + ) +{ + /* Clean up bss section */ + memset(__bss_start, 0, __bss_stop - __bss_start); + + pre_trap_init(); + + /* Setup mmu as coprocessor */ + select_mmu_cp(); + + /* + * Setup page-table and enable TLB-hardrefill + */ + flush_tlb_all(); + pgd_init((unsigned long *)swapper_pg_dir); + TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir); + + asid_cache(smp_processor_id()) = ASID_FIRST_VERSION; + + /* Setup page mask to 4k */ + write_mmu_pagemask(0); + +#ifdef CONFIG_CSKY_BUILTIN_DTB + printk("Use builtin dtb\n"); + early_init_dt_scan(__dtb_start); +#else + early_init_dt_scan(param); +#endif + printk("Phys. mem: %ldMB\n", (unsigned long) memblock_phys_mem_size()/1024/1024); + start_kernel(); + + while(1); +} + -- 2.7.4