Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp1356200imm; Fri, 22 Jun 2018 15:20:00 -0700 (PDT) X-Google-Smtp-Source: ADUXVKItHIlUJCneoq0/runnk3+ZE8gWU1oHZOE/B3GTa0l4oJbRUFBQ/3KafM1gzIYwo+UgucYL X-Received: by 2002:a17:902:8491:: with SMTP id c17-v6mr3297848plo.97.1529706000404; Fri, 22 Jun 2018 15:20:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529706000; cv=none; d=google.com; s=arc-20160816; b=UYRCxIZLmR+yDMrHRDIeiCJFbQ6Qd+EriK5qS/eaKKExLbOnKcDxNQ+MRqi2ekEpme Zi6ryr2wNoU/lyWt+/kWCZPr+vUPF9x6jRBysBYD8SLYYSPfhM4qEpm+86yv3/mXGRmS j4GE8DzvXxhZpQkSMcuV+GzFUGZACR/N3m5B4kt54H/B7reuijv5ymc5UpST0Mz5DU2R fw9gpUYrZj8Q7fcIczfVAurCGYOMCbzCeeHK7kGJNxcsPaQQ+m1diHjEB6Wie2J42eJV 5OG4p54FFeHaI6hZdDfT50wZpmSgSLjhNREOMmZVgrtJ3uDNccn72gMjQJTjm/yXMe49 Ah9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:from:cc:message-id:date:subject :dkim-signature:arc-authentication-results; bh=7n/n0GZ1fT7uqme1QP3PnoK9kmSVy0/xv553QRNYgTE=; b=yd0G/2kFC20urjZl56HK4JhOEREdQlzmGfUqygn4OR/50cFRxJxMw2UTzti0QiLUgz tetl16gNtt+OzSS01yfBmYSqtPefjMG3naHah4+t1gAfe+SFYJP9469aXc863YvzAxkr xSm30XI9vN/OxtFYUWVwHQZLndae5BRvebzFfHS6j2dzjcJGgBtVazQMKwQYUGRA6FrY JRMCWaxuWzt99PhSttKZsanM/3u6qGZSXs6+SohYDcfKdE+xkbwgjTTyUIYukevN7Gk7 D7WuUdfMkjWgBnLvZuNL715JSE1QHf2XxmFp3WcRrxvRfiioJ/hYS78zZljjQ18jsU7M LMTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sifive.com header.s=google header.b=NeUKGFkI; 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 f5-v6si9181407pln.414.2018.06.22.15.19.43; Fri, 22 Jun 2018 15:20:00 -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; dkim=pass header.i=@sifive.com header.s=google header.b=NeUKGFkI; 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 S933635AbeFVWTC (ORCPT + 99 others); Fri, 22 Jun 2018 18:19:02 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:46600 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754543AbeFVWTB (ORCPT ); Fri, 22 Jun 2018 18:19:01 -0400 Received: by mail-pf0-f194.google.com with SMTP id q1-v6so3810016pff.13 for ; Fri, 22 Jun 2018 15:19:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=subject:date:message-id:cc:from:to; bh=7n/n0GZ1fT7uqme1QP3PnoK9kmSVy0/xv553QRNYgTE=; b=NeUKGFkIaQ+oIm/3qg+7vczE2b9yy1DsWWyAFFWrHu7C08orEVLJ/4er7IpxRsof8C TG8Le+BhUgURhKCN47WRm+zxm59A4DJe0ejYpAaCIuPWh51maU3cQY0MW9yyXZYwOs3Z ZsaIJI581G9jB0M1Wpj5kpKzc9ab7KtmotweVSx6ufYmgC72ml5vMd0zQsiy96mspLwW uykQOL9kU6CDgqrIojtlOYvwrtsJluMnz2568/scTVbxO/gMf6mBII1vMwyhslMeYi7k ZbZxyZYEWjAFo7j0a81x7Gvn3+soi8V6zZbSqUCZGb3WxvboNQeXNT3WWuC2r3VdBT+H 1Ouw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:date:message-id:cc:from:to; bh=7n/n0GZ1fT7uqme1QP3PnoK9kmSVy0/xv553QRNYgTE=; b=mTtxU47JwsKglB94CeY8k4PiHhlQcXMmokJMjUT9pXiiYwYX/n/tVmM08exCTyQAFV N+/KXxqUcCpFk1JlVinkvMGXOV6u4r21GBLGyzzJbkAcAMQYwdGOCw93Jak6ORZYMAwd YYG0wCah8Hb0ExkQd7xWRLGUbwLXv8iQWhew4yLvoLHlgWa7PuksxtkDqPpOElLdR0wd WiewjkdNo/C+CPCCHu8Q1kuF6lyk5e0TUpyFCnJMJYqInFAOrSi4j34gAqsHP3oPWY8j D57h12ps5CaEMcnGanE9b64gsSNzObB6v+UdNXNConxZM98TY2j5wiLREZToCaxRpIA/ k6rw== X-Gm-Message-State: APt69E1Ipk1X4mNN4Tt2eQdVYD3C3ktr2RYRKp5ds41g8+FIoukfJKPq AGPVvalQLaCtbYn2EimRWtLBdw== X-Received: by 2002:a65:49cb:: with SMTP id t11-v6mr2898856pgs.218.1529705940720; Fri, 22 Jun 2018 15:19:00 -0700 (PDT) Received: from localhost ([12.206.222.5]) by smtp.gmail.com with ESMTPSA id j23-v6sm12978981pfi.137.2018.06.22.15.18.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Jun 2018 15:18:59 -0700 (PDT) Subject: [PATCH] RISC-V: Add early printk support via the SBI console Date: Fri, 22 Jun 2018 15:18:14 -0700 Message-Id: <20180622221814.29025-1-palmer@sifive.com> X-Mailer: git-send-email 2.16.4 Cc: Palmer Dabbelt , aou@eecs.berkeley.edu, Olof Johansson , Michael Clark , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org From: Palmer Dabbelt To: linux-riscv@lists.infradead.org Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This code lives entirely within the RISC-V arch code. I've left it within an "#ifdef CONFIG_EARLY_PRINTK" despite always having EARLY_PRINTK support on RISC-V just in case someone wants to remove it. Signed-off-by: Palmer Dabbelt --- arch/riscv/kernel/setup.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c index ee44a48faf79..494c15ba4610 100644 --- a/arch/riscv/kernel/setup.c +++ b/arch/riscv/kernel/setup.c @@ -39,6 +39,27 @@ #include #include +#ifdef CONFIG_EARLY_PRINTK +static void sbi_console_write(struct console *co, const char *buf, + unsigned int n) +{ + int i; + + for (i = 0; i < n; ++i) { + if (buf[i] == '\n') + sbi_console_putchar('\r'); + sbi_console_putchar(buf[i]); + } +} + +struct console riscv_sbi_early_console_dev __initdata = { + .name = "early", + .write = sbi_console_write, + .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME, + .index = -1 +}; +#endif + #ifdef CONFIG_DUMMY_CONSOLE struct screen_info screen_info = { .orig_video_lines = 30, @@ -195,6 +216,12 @@ static void __init setup_bootmem(void) void __init setup_arch(char **cmdline_p) { +#if defined(CONFIG_EARLY_PRINTK) + if (likely(early_console == NULL)) { + early_console = &riscv_sbi_early_console_dev; + register_console(early_console); + } +#endif *cmdline_p = boot_command_line; parse_early_param(); -- 2.16.4