Rebase all RISCV patches on top of RC2
Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com>
This commit is contained in:
parent
bb6b35ba8b
commit
47f52c146b
|
@ -1,222 +1,144 @@
|
||||||
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
|
diff --git a/cmd/booti.c b/cmd/booti.c
|
||||||
index c36b0235df8c..6c37f84833d0 100644
|
index 841eff10..60bb4920 100644
|
||||||
--- a/cmd/booti.c
|
--- a/cmd/booti.c
|
||||||
+++ b/cmd/booti.c
|
+++ b/cmd/booti.c
|
||||||
@@ -13,6 +13,9 @@
|
@@ -13,6 +13,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
|
|
||||||
+DECLARE_GLOBAL_DATA_PTR;
|
+DECLARE_GLOBAL_DATA_PTR;
|
||||||
+#define GZ_HEADER_0 0x1f
|
|
||||||
+#define GZ_HEADER_1 0x8b
|
|
||||||
/*
|
/*
|
||||||
* Image booting support
|
* Image booting support
|
||||||
*/
|
*/
|
||||||
@@ -23,6 +26,10 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
|
@@ -23,6 +24,12 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
ulong ld;
|
ulong ld;
|
||||||
ulong relocated_addr;
|
ulong relocated_addr;
|
||||||
ulong image_size;
|
ulong image_size;
|
||||||
+ uint8_t *temp;
|
+ uint8_t *temp;
|
||||||
+ ulong dest;
|
+ ulong dest;
|
||||||
+ ulong dest_end;
|
+ ulong dest_end;
|
||||||
+ unsigned long gz_len;
|
+ unsigned long comp_len;
|
||||||
|
+ unsigned long decomp_len;
|
||||||
|
+ int ctype;
|
||||||
|
|
||||||
ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START,
|
ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START,
|
||||||
images, 1);
|
images, 1);
|
||||||
@@ -37,6 +44,34 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
|
@@ -37,6 +44,33 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
debug("* kernel: cmdline image address = 0x%08lx\n", ld);
|
debug("* kernel: cmdline image address = 0x%08lx\n", ld);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ temp = map_sysmem(ld, 0);
|
+ temp = map_sysmem(ld, 0);
|
||||||
+
|
+ ctype = image_decomp_type(temp, 2);
|
||||||
+ if (*(temp) == GZ_HEADER_0 && *(temp+1) == GZ_HEADER_1) {
|
+ if (ctype > 0) {
|
||||||
+ dest = env_get_ulong("kernel_gz_addr_r", 16, 0);
|
+ dest = env_get_ulong("kernel_comp_addr_r", 16, 0);
|
||||||
+ gz_len = env_get_ulong("kernel_gz_size", 16, 0);
|
+ comp_len = env_get_ulong("filesize", 16, 0);
|
||||||
+ if (!dest || !gz_len) {
|
+ if (!dest || !comp_len) {
|
||||||
+ puts("kernel_gz_addr_r or kernel_gz_size is not provided for Image.gz!\n");
|
+ puts("kernel_comp_addr_r or filesize is not provided!\n");
|
||||||
+ return -EINVAL;
|
+ return -EINVAL;
|
||||||
+ }
|
+ }
|
||||||
+ if (dest < gd->ram_base || dest > gd->ram_top) {
|
+ if (dest < gd->ram_base || dest > gd->ram_top) {
|
||||||
+ puts("kernel_gz_addr_r size is outside of dram range!\n");
|
+ puts("kernel_comp_addr_r is outside of DRAM range!\n");
|
||||||
+ return -EINVAL;
|
+ return -EINVAL;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ debug("Image.gz of size = 0x%08lx will be decompressed at 0x%08lx\n",
|
+ debug("kernel image compression type %d size = 0x%08lx address = 0x%08lx\n",
|
||||||
+ gz_len, (ulong)dest);
|
+ ctype, comp_len, (ulong)dest);
|
||||||
+
|
+ decomp_len = comp_len * 10;
|
||||||
+ ret = image_decomp(IH_COMP_GZIP, 0, ld, IH_TYPE_KERNEL,
|
+ ret = image_decomp(ctype, 0, ld, IH_TYPE_KERNEL,
|
||||||
+ (void *)dest, (void *)ld, gz_len,
|
+ (void *)dest, (void *)ld, comp_len,
|
||||||
+ CONFIG_SYS_BOOTM_LEN, &dest_end);
|
+ decomp_len, &dest_end);
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
+ return ret;
|
+ return ret;
|
||||||
+ /* dest_end contains the uncompressed Image size */
|
+ /* dest_end contains the uncompressed Image size */
|
||||||
+ memmove((void *) ld, (void *)dest, dest_end);
|
+ memmove((void *) ld, (void *)dest, dest_end);
|
||||||
+ unmap_sysmem((void *)dest);
|
|
||||||
+ }
|
+ }
|
||||||
+ unmap_sysmem((void *)ld);
|
+ unmap_sysmem((void *)ld);
|
||||||
+
|
+
|
||||||
ret = booti_setup(ld, &relocated_addr, &image_size, false);
|
ret = booti_setup(ld, &relocated_addr, &image_size, false);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return 1;
|
return 1;
|
||||||
@@ -96,10 +131,12 @@ int do_booti(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
@@ -99,10 +133,14 @@ int do_booti(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
#ifdef CONFIG_SYS_LONGHELP
|
#ifdef CONFIG_SYS_LONGHELP
|
||||||
static char booti_help_text[] =
|
static char booti_help_text[] =
|
||||||
"[addr [initrd[:size]] [fdt]]\n"
|
"[addr [initrd[:size]] [fdt]]\n"
|
||||||
- " - boot Linux 'Image' stored at 'addr'\n"
|
- " - boot Linux 'Image' stored at 'addr'\n"
|
||||||
+ " - boot Linux 'Image' or Image.gz stored at 'addr'\n"
|
+ " - boot Linux flat or compressed 'Image' stored at 'addr'\n"
|
||||||
"\tThe argument 'initrd' is optional and specifies the address\n"
|
"\tThe argument 'initrd' is optional and specifies the address\n"
|
||||||
"\tof an initrd in memory. The optional parameter ':size' allows\n"
|
"\tof an initrd in memory. The optional parameter ':size' allows\n"
|
||||||
"\tspecifying the size of a RAW initrd.\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"
|
+ "\tCurrently only booting from gz, bz2, lzma and lz4 compression\n"
|
||||||
+ "\tand kernel_gz_size enviornment variables beforehand.\n"
|
+ "\ttypes are supported. In order to boot from any of these compressed\n"
|
||||||
|
+ "\timages, user have to set kernel_comp_addr_r and filesize enviornment\n"
|
||||||
|
+ "\tvariables beforehand.\n"
|
||||||
#if defined(CONFIG_OF_LIBFDT)
|
#if defined(CONFIG_OF_LIBFDT)
|
||||||
"\tSince booting a Linux kernel requires a flat device-tree, a\n"
|
"\tSince booting a Linux kernel requires a flat device-tree, a\n"
|
||||||
"\tthird argument providing the address of the device-tree blob\n"
|
"\tthird argument providing the address of the device-tree blob\n"
|
||||||
|
diff --git a/common/image.c b/common/image.c
|
||||||
|
index f17fa40c..cbd6c494 100644
|
||||||
|
--- a/common/image.c
|
||||||
|
+++ b/common/image.c
|
||||||
|
@@ -197,6 +197,14 @@ struct table_info {
|
||||||
|
const table_entry_t *table;
|
||||||
|
};
|
||||||
|
|
||||||
|
+static const struct comp_magic_map image_comp[] = {
|
||||||
|
+ { IH_COMP_BZIP2, "bzip2", {0x42, 0x5a},},
|
||||||
|
+ { IH_COMP_GZIP, "gzip", {0x1f, 0x8b},},
|
||||||
|
+ { IH_COMP_LZMA, "lzma", {0x5d, 0x00},},
|
||||||
|
+ { IH_COMP_LZO, "lzo", {0x89, 0x4c},},
|
||||||
|
+ { IH_COMP_NONE, "none", {}, },
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static const struct table_info table_info[IH_COUNT] = {
|
||||||
|
{ "architecture", IH_ARCH_COUNT, uimage_arch },
|
||||||
|
{ "compression", IH_COMP_COUNT, uimage_comp },
|
||||||
|
@@ -402,6 +410,21 @@ static void print_decomp_msg(int comp_type, int type, bool is_xip)
|
||||||
|
printf(" Uncompressing %s\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
+int image_decomp_type(const unsigned char *buf, ulong len)
|
||||||
|
+{
|
||||||
|
+ const struct comp_magic_map *cmagic = image_comp;
|
||||||
|
+
|
||||||
|
+ if (len < 2)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ for (; cmagic->comp_id > 0; cmagic++) {
|
||||||
|
+ if (!memcmp(buf, cmagic->magic, 2))
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return cmagic->comp_id;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int image_decomp(int comp, ulong load, ulong image_start, int type,
|
||||||
|
void *load_buf, void *image_buf, ulong image_len,
|
||||||
|
uint unc_len, ulong *load_end)
|
||||||
diff --git a/doc/README.distro b/doc/README.distro
|
diff --git a/doc/README.distro b/doc/README.distro
|
||||||
index ab6e6f4e74be..dbf6eef07e35 100644
|
index ab6e6f4e..67b49e1e 100644
|
||||||
--- a/doc/README.distro
|
--- a/doc/README.distro
|
||||||
+++ b/doc/README.distro
|
+++ b/doc/README.distro
|
||||||
@@ -246,6 +246,17 @@ kernel_addr_r:
|
@@ -246,6 +246,18 @@ kernel_addr_r:
|
||||||
|
|
||||||
A size of 16MB for the kernel is likely adequate.
|
A size of 16MB for the kernel is likely adequate.
|
||||||
|
|
||||||
+kernel_gz_addr_r:
|
+kernel_comp_addr_r:
|
||||||
+ Optional. This is only required if user wants to boot Linux from a Image.gz
|
+ Optional. This is only required if user wants to boot Linux from a compressed
|
||||||
+ using booti command. It represents the location in RAM where a Image.gz will
|
+ Image(.gz, .bz2, .lzma, .lzo) using booti command. It represents the location
|
||||||
+ be decompressed temporarily. Once the decompression is complete, decompressed
|
+ in RAM where the compressed Image will be decompressed temporarily. Once the
|
||||||
+ data will be moved kernel_addr_r for booting.
|
+ decompression is complete, decompressed data will be moved kernel_addr_r for
|
||||||
|
+ booting.
|
||||||
+
|
+
|
||||||
+kernel_gz_size:
|
+filesize:
|
||||||
+ Optional. This is only required if user wants to boot Linux from a Image.gz
|
+ Optional. This is only required if user wants to boot Linux from a compressed
|
||||||
+ using booti command. It represents the size of the Image.gz file. The size
|
+ Image using booti command. It represents the size of the compressed file. The
|
||||||
+ has to at least the size of Image.gz file for decompression to succeed.
|
+ size has to at least the size of loaded image for decompression to succeed.
|
||||||
+
|
+
|
||||||
pxefile_addr_r:
|
pxefile_addr_r:
|
||||||
|
|
||||||
Mandatory. The location in RAM where extlinux.conf will be loaded to prior
|
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
|
diff --git a/doc/board/sifive/fu540.rst b/doc/board/sifive/fu540.rst
|
||||||
index 7807f5b2c128..ad4485eb7cdb 100644
|
index 7807f5b2..df2c5ad8 100644
|
||||||
--- a/doc/board/sifive/fu540.rst
|
--- a/doc/board/sifive/fu540.rst
|
||||||
+++ b/doc/board/sifive/fu540.rst
|
+++ b/doc/board/sifive/fu540.rst
|
||||||
@@ -138,6 +138,10 @@ load uImage.
|
@@ -138,6 +138,10 @@ load uImage.
|
||||||
|
@ -238,14 +160,14 @@ index 7807f5b2c128..ad4485eb7cdb 100644
|
||||||
+Or if you want to use a compressed kernel image file such as Image.gz
|
+Or if you want to use a compressed kernel image file such as Image.gz
|
||||||
+
|
+
|
||||||
+.. code-block:: none
|
+.. code-block:: none
|
||||||
+ => tftpboot ${kernel_addr_r} /sifive/fu540/Image
|
+ => tftpboot ${kernel_addr_r} /sifive/fu540/Image.gz
|
||||||
+ ethernet@10090000: PHY present at 0
|
+ ethernet@10090000: PHY present at 0
|
||||||
+ ethernet@10090000: Starting autonegotiation...
|
+ ethernet@10090000: Starting autonegotiation...
|
||||||
+ ethernet@10090000: Autonegotiation complete
|
+ ethernet@10090000: Autonegotiation complete
|
||||||
+ ethernet@10090000: link up, 1000Mbps full-duplex (lpa: 0x3c00)
|
+ ethernet@10090000: link up, 1000Mbps full-duplex (lpa: 0x3c00)
|
||||||
+ Using ethernet@10090000 device
|
+ Using ethernet@10090000 device
|
||||||
+ TFTP from server 10.206.4.143; our IP address is 10.206.7.133
|
+ TFTP from server 10.206.4.143; our IP address is 10.206.7.133
|
||||||
+ Filename '/sifive/fu540/Image'.
|
+ Filename '/sifive/fu540/Image.gz'.
|
||||||
+ Load address: 0x84000000
|
+ Load address: 0x84000000
|
||||||
+ Loading: #################################################################
|
+ Loading: #################################################################
|
||||||
+ #################################################################
|
+ #################################################################
|
||||||
|
@ -277,8 +199,8 @@ index 7807f5b2c128..ad4485eb7cdb 100644
|
||||||
+ 1.2 MiB/s
|
+ 1.2 MiB/s
|
||||||
+ done
|
+ done
|
||||||
+ Bytes transferred = 4809458 (4962f2 hex)
|
+ Bytes transferred = 4809458 (4962f2 hex)
|
||||||
+ =>setenv kernel_gz_addr_r 0x90000000
|
+ =>setenv kernel_comp_addr_r 0x90000000
|
||||||
+ =>setenv kernel_gz_size 0x500000
|
+ =>setenv filesize 0x500000
|
||||||
+
|
+
|
||||||
+By this time, correct kernel image is loaded and required enviornment variables
|
+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
|
+are set. You can proceed to load the ramdisk and device tree from the tftp server
|
||||||
|
@ -288,3 +210,58 @@ index 7807f5b2c128..ad4485eb7cdb 100644
|
||||||
=> tftpboot ${ramdisk_addr_r} /sifive/fu540/uRamdisk
|
=> tftpboot ${ramdisk_addr_r} /sifive/fu540/uRamdisk
|
||||||
ethernet@10090000: PHY present at 0
|
ethernet@10090000: PHY present at 0
|
||||||
ethernet@10090000: Starting autonegotiation...
|
ethernet@10090000: Starting autonegotiation...
|
||||||
|
diff --git a/include/image.h b/include/image.h
|
||||||
|
index f4d2aaf5..823c187b 100644
|
||||||
|
--- a/include/image.h
|
||||||
|
+++ b/include/image.h
|
||||||
|
@@ -447,6 +447,15 @@ typedef struct table_entry {
|
||||||
|
char *lname; /* long (output) name to print for messages */
|
||||||
|
} table_entry_t;
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * Compression type and magic number mapping table.
|
||||||
|
+ */
|
||||||
|
+struct comp_magic_map {
|
||||||
|
+ int comp_id;
|
||||||
|
+ const char *name;
|
||||||
|
+ unsigned char magic[2];
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* get_table_entry_id() scans the translation table trying to find an
|
||||||
|
* entry that matches the given short name. If a matching entry is
|
||||||
|
@@ -851,6 +860,18 @@ static inline int image_check_target_arch(const image_header_t *hdr)
|
||||||
|
}
|
||||||
|
#endif /* USE_HOSTCC */
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * image_decomp_type() - Find out compression type of an image
|
||||||
|
+ *
|
||||||
|
+ * @buf: Address in U-Boot memory where image is loaded.
|
||||||
|
+ * @len: Length of the compressed image.
|
||||||
|
+ * @return compression type or IH_COMP_NONE if not compressed.
|
||||||
|
+ *
|
||||||
|
+ * Note: Only following compression types are supported now.
|
||||||
|
+ * lzo, lzma, gzip, bzip2
|
||||||
|
+ */
|
||||||
|
+int image_decomp_type(const unsigned char *buf, ulong len);
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* image_decomp() - decompress an image
|
||||||
|
*
|
||||||
|
diff --git a/lib/Kconfig b/lib/Kconfig
|
||||||
|
index b8a8509d..53661baf 100644
|
||||||
|
--- a/lib/Kconfig
|
||||||
|
+++ b/lib/Kconfig
|
||||||
|
@@ -397,6 +397,11 @@ config GZIP
|
||||||
|
help
|
||||||
|
This enables support for GZIP compression algorithm.
|
||||||
|
|
||||||
|
+config BZIP2
|
||||||
|
+ bool "Enable bzip2 decompression support"
|
||||||
|
+ help
|
||||||
|
+ This enables support for BZIP2 compression algorithm.
|
||||||
|
+
|
||||||
|
config ZLIB
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
|
@ -1,141 +0,0 @@
|
||||||
From patchwork Wed Oct 9 01:14:02 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: 1173557
|
|
||||||
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="gtFhR2Pl";
|
|
||||||
dkim-atps=neutral
|
|
||||||
Received: from lists.denx.de (dione.denx.de [81.169.180.215])
|
|
||||||
by ozlabs.org (Postfix) with ESMTP id 46nx9M2gjMz9sPJ
|
|
||||||
for <incoming@patchwork.ozlabs.org>;
|
|
||||||
Wed, 9 Oct 2019 12:15:33 +1100 (AEDT)
|
|
||||||
Received: by lists.denx.de (Postfix, from userid 105)
|
|
||||||
id E8E79C21EF7; Wed, 9 Oct 2019 01:15:23 +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 0C1C6C21DEC;
|
|
||||||
Wed, 9 Oct 2019 01:15:22 +0000 (UTC)
|
|
||||||
Received: by lists.denx.de (Postfix, from userid 105)
|
|
||||||
id CC46CC21DEC; Wed, 9 Oct 2019 01:15:19 +0000 (UTC)
|
|
||||||
Received: from esa3.hgst.iphmx.com (esa3.hgst.iphmx.com [216.71.153.141])
|
|
||||||
by lists.denx.de (Postfix) with ESMTPS id C8941C21C38
|
|
||||||
for <u-boot@lists.denx.de>; Wed, 9 Oct 2019 01:15:18 +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=1570583719; x=1602119719;
|
|
||||||
h=from:to:cc:subject:date:message-id:mime-version:
|
|
||||||
content-transfer-encoding;
|
|
||||||
bh=svAg//dsQ1xSEGIXIiHkuIHltzOaETv1pGmecUe8B9g=;
|
|
||||||
b=gtFhR2Plcfn/+ugh0ZySqZ2uPyFAKoSPRAr1i9Ns8gxJceu1whMVdkzl
|
|
||||||
srFuy8/er88wP3FYxeU7AGFT3suYndiT3nbArtM1N6McHyzgYU/qVs5HD
|
|
||||||
CVM1IaH8z3w/4fkiU9wCsrw1guGNWyrf9roAg2knx3piFhNDcVZM62Vp+
|
|
||||||
UEpDFRJztTgPl0QIhoFVky0+Hf3KdmXV+OOOzzm0Z7Q5v50aXSE1vD1+J
|
|
||||||
ln+KR4SsqhtiQQf8UJI77INRz2Lxs7TNdtv3vfjoyXr8H1H86BFejeEyp
|
|
||||||
0HU5xbyaxQhEuOqW9Yxo7PY4KefFfH7UdQX4utU4QfnBbRePmlt27ZrKG w==;
|
|
||||||
IronPort-SDR: sgogNYpUsZGzLeDJAWo084U0k0ZU9wpDWm3t4S454aWfuYpvgVUqpjsMDz8EIKqqvGWKYIEeXn
|
|
||||||
dcI7HvYw88Li02yYVMZ3EgWbSdYyB6eH0Y2A5iQ9GkweAgHHdlGDKeFMkR15U0zZ3ykgENByCh
|
|
||||||
fwVVSj21S10S0JA8Kj78n//9wJ8ilZY73VZK5xfmPp667JpJkR9qeQHHX0xRbyuclLP4vZq8Aj
|
|
||||||
Q5mZFiCs9B/Bc5rHVqKwnFxb4GmA47eecNgTraHiPVP5F+LNWvX6Pp6v4f9DQ2XSyRALVZXBLr
|
|
||||||
zjs=
|
|
||||||
X-IronPort-AV: E=Sophos;i="5.67,273,1566835200"; d="scan'208";a="124526357"
|
|
||||||
Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com)
|
|
||||||
([199.255.45.15])
|
|
||||||
by ob1.hgst.iphmx.com with ESMTP; 09 Oct 2019 09:15:16 +0800
|
|
||||||
IronPort-SDR: Buy5knbyrOlIPw883De4JQRCyL13MC+JUKv2QQHfk2RqqRn47FtggQ3q0Vym3kSgxnxeA7Yc8x
|
|
||||||
riyH9+bdnQg6eihgDLKWH/vRjEHs/Z0ERN27PJ2uKZyqtzxM7HSXwvh3RC0gdL/qfIzo2i9GJm
|
|
||||||
F0RQsBIbtZdpDd/eEfImVJs7RIYMYgPB1LwqfxvjDCybjznjURM3tJbCGGAK5Xjqd3UwSO1rz+
|
|
||||||
Aiw96+5ut5Px6otY5gmqnIIqaUh8WaH5y8DsfxEZYXy5cVFkOzvuR9clYRIe7kZ5/9lWkODh+i
|
|
||||||
mQYFP6OQprMQCadWgutUuUbq
|
|
||||||
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;
|
|
||||||
08 Oct 2019 18:11:16 -0700
|
|
||||||
IronPort-SDR: 6InoWq/jhVafNMtixHXFGtBARFkZWd63qbIi4fZHmKXP/zR0GpGae73S7qZZgZMwBjMELgmlUq
|
|
||||||
N0P84XWhIgTwZTu5mhZ72pljZkiUDKdRrA441zR0F+quzmQpoCTUlzjxUUNjgnpu3DygmWNH6Y
|
|
||||||
bFdk85ApZmnCKpQWCotp2eTzsFpIOFWJJY0EAHJTKBEgGPqo47vtoz9bEKxtXPOZBk+LxDmPBx
|
|
||||||
ncKAhnuEoHrNlqPFbE7BYRK3Kz6A9odnkc9D4JXN9UBnjD9v4f6m0mg4Lqr4vYAtjB/AkV3PU9
|
|
||||||
mBc=
|
|
||||||
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; 08 Oct 2019 18:15:16 -0700
|
|
||||||
From: Atish Patra <atish.patra@wdc.com>
|
|
||||||
To: u-boot@lists.denx.de
|
|
||||||
Date: Tue, 8 Oct 2019 18:14:02 -0700
|
|
||||||
Message-Id: <20191009011402.13728-1-atish.patra@wdc.com>
|
|
||||||
X-Mailer: git-send-email 2.21.0
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Cc: David Abdurachmanov <david.abdurachmanov@sifive.com>
|
|
||||||
Subject: [U-Boot] [PATCH] RISC-V: Align boot image header with Linux.
|
|
||||||
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>
|
|
||||||
|
|
||||||
The release linux boot image header in v5.3 is different from the
|
|
||||||
one present in U-boot. Align the header with the new version. The
|
|
||||||
changes in Linux are backward compatible. Previous u-boot releases
|
|
||||||
with older header will continue to work as well. As v5.3 kernel is
|
|
||||||
the first one to support image header, there is no compatibility
|
|
||||||
issue between new U-boot (with this patch) and older kernel.
|
|
||||||
|
|
||||||
Signed-off-by: Atish Patra <atish.patra@wdc.com>
|
|
||||||
---
|
|
||||||
arch/riscv/lib/image.c | 11 ++++++-----
|
|
||||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/arch/riscv/lib/image.c b/arch/riscv/lib/image.c
|
|
||||||
index d063beb7dfbe..41fca5939020 100644
|
|
||||||
--- a/arch/riscv/lib/image.c
|
|
||||||
+++ b/arch/riscv/lib/image.c
|
|
||||||
@@ -14,20 +14,21 @@
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
|
||||||
|
|
||||||
-/* ASCII version of "RISCV" defined in Linux kernel */
|
|
||||||
-#define LINUX_RISCV_IMAGE_MAGIC 0x5643534952
|
|
||||||
+/* ASCII version of "RSC\0x5" defined in Linux kernel */
|
|
||||||
+#define LINUX_RISCV_IMAGE_MAGIC 0x05435352
|
|
||||||
|
|
||||||
struct linux_image_h {
|
|
||||||
uint32_t code0; /* Executable code */
|
|
||||||
uint32_t code1; /* Executable code */
|
|
||||||
uint64_t text_offset; /* Image load offset */
|
|
||||||
uint64_t image_size; /* Effective Image size */
|
|
||||||
- uint64_t res1; /* reserved */
|
|
||||||
+ uint64_t flags; /* kernel flags(little endian) */
|
|
||||||
+ uint32_t version; /* version of the header */
|
|
||||||
+ uint32_t res1; /* reserved */
|
|
||||||
uint64_t res2; /* reserved */
|
|
||||||
uint64_t res3; /* reserved */
|
|
||||||
- uint64_t magic; /* Magic number */
|
|
||||||
+ uint32_t magic; /* Magic number */
|
|
||||||
uint32_t res4; /* reserved */
|
|
||||||
- uint32_t res5; /* reserved */
|
|
||||||
};
|
|
||||||
|
|
||||||
int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
|
|
|
@ -1,9 +1,9 @@
|
||||||
diff --git a/configs/qemu-riscv64_smode_defconfig b/configs/qemu-riscv64_smode_defconfig
|
diff --git a/configs/qemu-riscv64_smode_defconfig b/configs/qemu-riscv64_smode_defconfig
|
||||||
index 1c7a2d15..5548a649 100644
|
index 7e1e5a77..792afee8 100644
|
||||||
--- a/configs/qemu-riscv64_smode_defconfig
|
--- a/configs/qemu-riscv64_smode_defconfig
|
||||||
+++ b/configs/qemu-riscv64_smode_defconfig
|
+++ b/configs/qemu-riscv64_smode_defconfig
|
||||||
@@ -10,3 +10,7 @@ CONFIG_DISPLAY_BOARDINFO=y
|
@@ -11,3 +11,7 @@ CONFIG_CMD_BOOTEFI_SELFTEST=y
|
||||||
CONFIG_CMD_BOOTEFI_SELFTEST=y
|
CONFIG_CMD_NVEDIT_EFI=y
|
||||||
# CONFIG_CMD_MII is not set
|
# CONFIG_CMD_MII is not set
|
||||||
CONFIG_OF_PRIOR_STAGE=y
|
CONFIG_OF_PRIOR_STAGE=y
|
||||||
+CONFIG_USE_BOOTARGS=y
|
+CONFIG_USE_BOOTARGS=y
|
||||||
|
|
|
@ -7,7 +7,7 @@ index bc831a84..442f0f9d 100644
|
||||||
"pxefile_addr_r=0x88200000\0" \
|
"pxefile_addr_r=0x88200000\0" \
|
||||||
"ramdisk_addr_r=0x88300000\0" \
|
"ramdisk_addr_r=0x88300000\0" \
|
||||||
+ "kernel_gz_addr_r=0x90000000\0" \
|
+ "kernel_gz_addr_r=0x90000000\0" \
|
||||||
+ "kernel_gz_size=0x4000000\0" \
|
+ "filesize=0x4000000\0" \
|
||||||
BOOTENV
|
BOOTENV
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ index 59cf0281..5114dde1 100644
|
||||||
"pxefile_addr_r=0x88200000\0" \
|
"pxefile_addr_r=0x88200000\0" \
|
||||||
"ramdisk_addr_r=0x88300000\0" \
|
"ramdisk_addr_r=0x88300000\0" \
|
||||||
+ "kernel_gz_addr_r=0x90000000\0" \
|
+ "kernel_gz_addr_r=0x90000000\0" \
|
||||||
+ "kernel_gz_size=0x4000000\0" \
|
+ "filesize=0x4000000\0" \
|
||||||
BOOTENV
|
BOOTENV
|
||||||
|
|
||||||
#endif /* __CONFIG_H */
|
#endif /* __CONFIG_H */
|
|
@ -49,10 +49,6 @@ Patch20: riscv64-set-fdt_addr.patch
|
||||||
# https://patchwork.kernel.org/patch/11165207/
|
# https://patchwork.kernel.org/patch/11165207/
|
||||||
Patch21: riscv-bootargs-preboot.patch
|
Patch21: riscv-bootargs-preboot.patch
|
||||||
|
|
||||||
# https://patchwork.ozlabs.org/patch/1173557/
|
|
||||||
# https://lists.denx.de/pipermail/u-boot/2019-October/385906.html
|
|
||||||
Patch22: riscv-align-boot-image-header.patch
|
|
||||||
|
|
||||||
# Not upstream
|
# Not upstream
|
||||||
# Adds support for Image.gz to booti (RFC/RFT)
|
# Adds support for Image.gz to booti (RFC/RFT)
|
||||||
# See: https://patchwork.ozlabs.org/patch/1174807/
|
# See: https://patchwork.ozlabs.org/patch/1174807/
|
||||||
|
@ -68,8 +64,8 @@ Patch24: riscv-increase-stack-size-to-16KiB.patch
|
||||||
Patch25: uboot-addappend.patch
|
Patch25: uboot-addappend.patch
|
||||||
|
|
||||||
# Not upstream
|
# Not upstream
|
||||||
# Define kernel_gz_addr_r and kernel_gz_size for booti Image.gz support
|
# Define kernel_gz_addr_r and filesize for booti Image.gz support
|
||||||
Patch26: uboot-riscv-def-kernel_gz_addr_r-kernel_gz_size.patch
|
Patch26: uboot-riscv-def-kernel_gz_addr_r-filesize.patch
|
||||||
|
|
||||||
BuildRequires: bc
|
BuildRequires: bc
|
||||||
BuildRequires: dtc
|
BuildRequires: dtc
|
||||||
|
@ -334,19 +330,17 @@ cp -p board/warp7/README builds/docs/README.warp7
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
<<<<<<< HEAD
|
* Wed Nov 13 2019 David Abdurachmanov <david.abdurachmanov@sifive.com> 2020.01-0.3.0.riscv64
|
||||||
* Fri Nov 1 2019 David Abdurachmanov <david.abdurachmanov@sifive.com> 2020.01-0.1.0.riscv64
|
|
||||||
- Add support for RISC-V (riscv64)
|
- Add support for RISC-V (riscv64)
|
||||||
- Define kernel_gz_size and kernel_gz_addr_r for QEMU virt and SiFive FU540 boards
|
- Define filesize and kernel_gz_addr_r for QEMU virt and SiFive FU540 boards
|
||||||
to support Image.gz with booti
|
to support Image.gz with booti
|
||||||
- Add 'addappend' label to PXE/EXTLINUX configuration
|
- Add 'addappend' label to PXE/EXTLINUX configuration
|
||||||
=======
|
|
||||||
* Tue Nov 12 2019 Peter Robinson <pbrobinson@fedoraproject.org> 2020.01-0.3
|
* Tue Nov 12 2019 Peter Robinson <pbrobinson@fedoraproject.org> 2020.01-0.3
|
||||||
- 2020.01 RC2
|
- 2020.01 RC2
|
||||||
|
|
||||||
* Tue Nov 5 2019 Peter Robinson <pbrobinson@fedoraproject.org> 2020.01-0.2
|
* Tue Nov 5 2019 Peter Robinson <pbrobinson@fedoraproject.org> 2020.01-0.2
|
||||||
- Include new ATF 2.2
|
- Include new ATF 2.2
|
||||||
>>>>>>> up/master
|
|
||||||
|
|
||||||
* Wed Oct 30 2019 Peter Robinson <pbrobinson@fedoraproject.org> 2020.01-0.1
|
* Wed Oct 30 2019 Peter Robinson <pbrobinson@fedoraproject.org> 2020.01-0.1
|
||||||
- 2020.01 RC1
|
- 2020.01 RC1
|
||||||
|
|
Loading…
Reference in New Issue