Incl. misc not upstream patches for RISC-V

1. Increase default stack size from 8KiB to 16KiB to avoid illegal instruction
   panics while bringing up harts online. Not posted yet online.
2. Add Image.gz booti support (RFC/RFT) for testing.

Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com>
This commit is contained in:
David Abdurachmanov 2019-10-17 10:30:05 +03:00
parent 2b10fe613a
commit 0600cc956f
Signed by: davidlt
GPG Key ID: 8B7F1DA0E2C9FDBB
3 changed files with 329 additions and 0 deletions

View File

@ -0,0 +1,290 @@
From patchwork Thu Oct 10 21:23:17 2019
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Atish Patra <atish.patra@wdc.com>
X-Patchwork-Id: 1174807
X-Patchwork-Delegate: trini@ti.com
Return-Path: <u-boot-bounces@lists.denx.de>
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=none (mailfrom) smtp.mailfrom=lists.denx.de
(client-ip=81.169.180.215; helo=lists.denx.de;
envelope-from=u-boot-bounces@lists.denx.de;
receiver=<UNKNOWN>)
Authentication-Results: ozlabs.org;
dmarc=fail (p=none dis=none) header.from=wdc.com
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (2048-bit key;
unprotected) header.d=wdc.com header.i=@wdc.com header.b="jLbUoQO5";
dkim-atps=neutral
Received: from lists.denx.de (dione.denx.de [81.169.180.215])
by ozlabs.org (Postfix) with ESMTP id 46q3wm58g1z9s7T
for <incoming@patchwork.ozlabs.org>;
Fri, 11 Oct 2019 08:23:34 +1100 (AEDT)
Received: by lists.denx.de (Postfix, from userid 105)
id 936A1C21E13; Thu, 10 Oct 2019 21:23:31 +0000 (UTC)
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de
X-Spam-Level:
X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID
autolearn=unavailable autolearn_force=no version=3.4.0
Received: from lists.denx.de (localhost [IPv6:::1])
by lists.denx.de (Postfix) with ESMTP id E723AC21C38;
Thu, 10 Oct 2019 21:23:27 +0000 (UTC)
Received: by lists.denx.de (Postfix, from userid 105)
id 385B1C21C38; Thu, 10 Oct 2019 21:23:26 +0000 (UTC)
Received: from esa4.hgst.iphmx.com (esa4.hgst.iphmx.com [216.71.154.42])
by lists.denx.de (Postfix) with ESMTPS id 37872C21C27
for <u-boot@lists.denx.de>; Thu, 10 Oct 2019 21:23:25 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com;
t=1570742605; x=1602278605;
h=from:to:cc:subject:date:message-id:mime-version:
content-transfer-encoding;
bh=Kp4i9HSKZ54C5mzMriNg89Nhk+VaBisYH/XOTqfSl4E=;
b=jLbUoQO5C/ZQCZ0SR+j5DgTnEkj86ErU1+lf8lxjyoIKLzn66uEknDG9
/tRe9acH8qooP2fdyOLs8QsHTFfaf10P/0Ys5FUIKeD1DFVksnIkH3dIj
A2m5arryrA5KvhdYMJqZkmV7Yj5X7B1i/Ceptnyn1GWAgjuCfQuiaG9cx
Barh2ZenBQkpTpa+SE5lnNcTQiJDpnvxhoiKkiSvaECx0Mv8qFFCBlZTf
Ztgz4Geld8p+8DSqxfuevNbzwU03CwAishA5lyCqRsn4TKYTLiQSsUjJa
ulZoeJWT0NKwC9qr13OwYgmmvHyAivnN6StRmLwQRmqOUe4EFlCM3H6jr g==;
IronPort-SDR: TwtnnsJy/N00N83EtuiWHVWsh2VFqg7rc28xVqFc7H/NBZMX//1pVrhxcRdYwAY1REc3H45wX9
vzCshumIJa7Lb++uKHaWfUrIKnJfJv2fz8JdA9GMtSqgjebXPthQAedOM+gMDahv1Zb6q+o1vV
p6YRbznrXtzqlIwPnbaoqs+6BkfMxWSzRABM6ydvqQ7a9lYpcGOuVHWRPR4xq7/I8z4lN1pZAM
RHOQu7NPPaippZV/eKdblYChITakYGJwd5Pkk8bb4ODcMpE+uU32JB+yjCH1vc7LFpa0wz+OF3
ZmM=
X-IronPort-AV: E=Sophos;i="5.67,281,1566835200"; d="scan'208";a="120282489"
Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com)
([199.255.45.15])
by ob1.hgst.iphmx.com with ESMTP; 11 Oct 2019 05:23:23 +0800
IronPort-SDR: 1LgY18tiY3vOm+mPdKRhTMfwqngixI4mOg6LEGQawZgPnwtSvk30LW5mGAhjr71XS1VNnWitJo
ZnvWLumBpWTvrcMGLbslV5jVqZQ+NOfA5NVOGRUVVjd7ARikTNZlRy8ytdJoCnHzXPYXkVCIX+
oznGSQBvjfnL3bg9tFmS62GpVy1zbAgKdzVC1LZCEjUrXN1wF9qt1zOEEgRefKOpCXi+vT4iT2
6sPzJIL4z9CBm7gBsh8qYpjGG68mKEzWbLZwcIu1OY3OkSB3fLw+uc0NCUvl5CUVNU50tq/pTB
K0THcmrxb75ovie2yGWsDvwz
Received: from uls-op-cesaip01.wdc.com ([10.248.3.36])
by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
10 Oct 2019 14:19:20 -0700
IronPort-SDR: mHx+paImtg13Y6VpyjKx/DHfspMkO9tPvRKNExNKsGOi2npXC0K7EvZvyX7BgEjaAn2qWUC9ca
rsWGJjDp6SLRYIveYCVqRTlL2sUTMv5dhS8VQxBAr/bXFZTns4kTSObcoQ+CUg1Rcsnx1URNGJ
NITy8IWCmmxM432KYP7c9G1dAqm2mCYcEJs6YaQcXtJYdZ9rHqE8Q4kfrGsAgssIW9XMrAquLi
dLhyXKTsqSMt/v+6RMbgzH58kiGy+EScEWfjsZ7BpDRoNDczEvPqXq+kvSW3SXx0X+Wx4tNzkt
PMk=
WDCIronportException: Internal
Received: from jedi-01.sdcorp.global.sandisk.com (HELO
jedi-01.int.fusionio.com) ([10.11.143.218])
by uls-op-cesaip01.wdc.com with ESMTP; 10 Oct 2019 14:23:23 -0700
From: Atish Patra <atish.patra@wdc.com>
To: u-boot@lists.denx.de
Date: Thu, 10 Oct 2019 14:23:17 -0700
Message-Id: <20191010212317.3884-1-atish.patra@wdc.com>
X-Mailer: git-send-email 2.21.0
MIME-Version: 1.0
Cc: david.abdurachmanov@sifive.com, Joe Hershberger <joe.hershberger@ni.com>,
Alexander Graf <agraf@csgraf.de>
Subject: [U-Boot] [RFC/RFT U-Boot PATCH] image: Add Image.gz parsing support
in booti.
X-BeenThere: u-boot@lists.denx.de
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: U-Boot discussion <u-boot.lists.denx.de>
List-Unsubscribe: <https://lists.denx.de/options/u-boot>,
<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>
List-Archive: <http://lists.denx.de/pipermail/u-boot/>
List-Post: <mailto:u-boot@lists.denx.de>
List-Help: <mailto:u-boot-request@lists.denx.de?subject=help>
List-Subscribe: <https://lists.denx.de/listinfo/u-boot>,
<mailto:u-boot-request@lists.denx.de?subject=subscribe>
Errors-To: u-boot-bounces@lists.denx.de
Sender: "U-Boot" <u-boot-bounces@lists.denx.de>
Add gz parsing logic so that booti can parse both Image
and Image.gz to boot Linux. Currently, it is difficult to calculate
a safe address for every board where the Image.gz can be decompressed.
It is also not possible to figure out the size of the compressed file
as well. Thus, user need to set two additional environment variables
kernel_gz_addr_r and kernel_gz_size to make Image.gz work.
Tested on HiFive Unleashed and Qemu for RISC-V.
Signed-off-by: Atish Patra <atish.patra@wdc.com>
---
I could not test this patch on any ARM64 devices due to lack of
access to any ARM64 board. If anybody can test it on ARM64, that
would be great.
---
cmd/booti.c | 39 ++++++++++++++++++++++++++-
doc/README.distro | 11 ++++++++
doc/board/sifive/fu540.rst | 55 ++++++++++++++++++++++++++++++++++++++
3 files changed, 104 insertions(+), 1 deletion(-)
diff --git a/cmd/booti.c b/cmd/booti.c
index c36b0235df8c..6c37f84833d0 100644
--- a/cmd/booti.c
+++ b/cmd/booti.c
@@ -13,6 +13,9 @@
#include <linux/kernel.h>
#include <linux/sizes.h>
+DECLARE_GLOBAL_DATA_PTR;
+#define GZ_HEADER_0 0x1f
+#define GZ_HEADER_1 0x8b
/*
* Image booting support
*/
@@ -23,6 +26,10 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
ulong ld;
ulong relocated_addr;
ulong image_size;
+ uint8_t *temp;
+ ulong dest;
+ ulong dest_end;
+ unsigned long gz_len;
ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START,
images, 1);
@@ -37,6 +44,34 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
debug("* kernel: cmdline image address = 0x%08lx\n", ld);
}
+ temp = map_sysmem(ld, 0);
+
+ if (*(temp) == GZ_HEADER_0 && *(temp+1) == GZ_HEADER_1) {
+ dest = env_get_ulong("kernel_gz_addr_r", 16, 0);
+ gz_len = env_get_ulong("kernel_gz_size", 16, 0);
+ if (!dest || !gz_len) {
+ puts("kernel_gz_addr_r or kernel_gz_size is not provided for Image.gz!\n");
+ return -EINVAL;
+ }
+ if (dest < gd->ram_base || dest > gd->ram_top) {
+ puts("kernel_gz_addr_r size is outside of dram range!\n");
+ return -EINVAL;
+ }
+
+ debug("Image.gz of size = 0x%08lx will be decompressed at 0x%08lx\n",
+ gz_len, (ulong)dest);
+
+ ret = image_decomp(IH_COMP_GZIP, 0, ld, IH_TYPE_KERNEL,
+ (void *)dest, (void *)ld, gz_len,
+ CONFIG_SYS_BOOTM_LEN, &dest_end);
+ if (ret)
+ return ret;
+ /* dest_end contains the uncompressed Image size */
+ memmove((void *) ld, (void *)dest, dest_end);
+ unmap_sysmem((void *)dest);
+ }
+ unmap_sysmem((void *)ld);
+
ret = booti_setup(ld, &relocated_addr, &image_size, false);
if (ret != 0)
return 1;
@@ -96,10 +131,12 @@ int do_booti(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#ifdef CONFIG_SYS_LONGHELP
static char booti_help_text[] =
"[addr [initrd[:size]] [fdt]]\n"
- " - boot Linux 'Image' stored at 'addr'\n"
+ " - boot Linux 'Image' or Image.gz stored at 'addr'\n"
"\tThe argument 'initrd' is optional and specifies the address\n"
"\tof an initrd in memory. The optional parameter ':size' allows\n"
"\tspecifying the size of a RAW initrd.\n"
+ "\tIn order to boot from Image.gz, user have to set kernel_gz_addr_r\n"
+ "\tand kernel_gz_size enviornment variables beforehand.\n"
#if defined(CONFIG_OF_LIBFDT)
"\tSince booting a Linux kernel requires a flat device-tree, a\n"
"\tthird argument providing the address of the device-tree blob\n"
diff --git a/doc/README.distro b/doc/README.distro
index ab6e6f4e74be..dbf6eef07e35 100644
--- a/doc/README.distro
+++ b/doc/README.distro
@@ -246,6 +246,17 @@ kernel_addr_r:
A size of 16MB for the kernel is likely adequate.
+kernel_gz_addr_r:
+ Optional. This is only required if user wants to boot Linux from a Image.gz
+ using booti command. It represents the location in RAM where a Image.gz will
+ be decompressed temporarily. Once the decompression is complete, decompressed
+ data will be moved kernel_addr_r for booting.
+
+kernel_gz_size:
+ Optional. This is only required if user wants to boot Linux from a Image.gz
+ using booti command. It represents the size of the Image.gz file. The size
+ has to at least the size of Image.gz file for decompression to succeed.
+
pxefile_addr_r:
Mandatory. The location in RAM where extlinux.conf will be loaded to prior
diff --git a/doc/board/sifive/fu540.rst b/doc/board/sifive/fu540.rst
index 7807f5b2c128..ad4485eb7cdb 100644
--- a/doc/board/sifive/fu540.rst
+++ b/doc/board/sifive/fu540.rst
@@ -138,6 +138,10 @@ load uImage.
=> setenv netmask 255.255.252.0
=> setenv serverip 10.206.4.143
=> setenv gateway 10.206.4.1
+
+If you want to use a flat kernel image such as Image file
+
+.. code-block:: none
=> tftpboot ${kernel_addr_r} /sifive/fu540/Image
ethernet@10090000: PHY present at 0
ethernet@10090000: Starting autonegotiation...
@@ -177,6 +181,57 @@ load uImage.
1.2 MiB/s
done
Bytes transferred = 8867100 (874d1c hex)
+
+Or if you want to use a compressed kernel image file such as Image.gz
+
+.. code-block:: none
+ => tftpboot ${kernel_addr_r} /sifive/fu540/Image
+ ethernet@10090000: PHY present at 0
+ ethernet@10090000: Starting autonegotiation...
+ ethernet@10090000: Autonegotiation complete
+ ethernet@10090000: link up, 1000Mbps full-duplex (lpa: 0x3c00)
+ Using ethernet@10090000 device
+ TFTP from server 10.206.4.143; our IP address is 10.206.7.133
+ Filename '/sifive/fu540/Image'.
+ Load address: 0x84000000
+ Loading: #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ #################################################################
+ ##########################################
+ 1.2 MiB/s
+ done
+ Bytes transferred = 4809458 (4962f2 hex)
+ =>setenv kernel_gz_addr_r 0x90000000
+ =>setenv kernel_gz_size 0x500000
+
+By this time, correct kernel image is loaded and required enviornment variables
+are set. You can proceed to load the ramdisk and device tree from the tftp server
+as well.
+
+.. code-block:: none
=> tftpboot ${ramdisk_addr_r} /sifive/fu540/uRamdisk
ethernet@10090000: PHY present at 0
ethernet@10090000: Starting autonegotiation...

View File

@ -0,0 +1,29 @@
From 942d0cd249300365271b37d9173e05677f141368 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: Thu, 17 Oct 2019 07:25:17 +0000
Subject: [PATCH] riscv: increase stack size to 16KiB
There are posibilit that 8KiB is not enough and causes illegal
instruction while bringing up harts online.
See: https://lore.kernel.org/linux-riscv/mvm5zkrhe8q.fsf@suse.de/T/#t
---
arch/riscv/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 01975d7c..85e15ebf 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -224,7 +224,7 @@ config XIP
config STACK_SIZE_SHIFT
int
- default 13
+ default 14
config SPL_LDSCRIPT
default "arch/riscv/cpu/u-boot-spl.lds"
--
2.23.0

View File

@ -53,6 +53,16 @@ Patch21: riscv-bootargs-preboot.patch
# https://lists.denx.de/pipermail/u-boot/2019-October/385906.html
Patch22: riscv-align-boot-image-header.patch
# Not upstream
# Adds support for Image.gz to booti (RFC/RFT)
# See: https://patchwork.ozlabs.org/patch/1174807/
Patch23: image-add-image.gz-parsing-support-in-booti.patch
# Not upstream
# See: https://lore.kernel.org/linux-riscv/mvm5zkrhe8q.fsf@suse.de/T/#t
# Increase stack from 8KiB to 16KiB to avoid issues bringing up harts online
Patch24: riscv-increase-stack-size-to-16KiB.patch
BuildRequires: bc
BuildRequires: dtc
BuildRequires: make