From owner-svn-src-head@freebsd.org Thu Jun 7 21:24:22 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4CB98FEDB81; Thu, 7 Jun 2018 21:24:22 +0000 (UTC) (envelope-from leitao@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 032A680195; Thu, 7 Jun 2018 21:24:22 +0000 (UTC) (envelope-from leitao@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D992425A50; Thu, 7 Jun 2018 21:24:21 +0000 (UTC) (envelope-from leitao@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w57LOLrw076850; Thu, 7 Jun 2018 21:24:21 GMT (envelope-from leitao@FreeBSD.org) Received: (from leitao@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w57LOLUC076849; Thu, 7 Jun 2018 21:24:21 GMT (envelope-from leitao@FreeBSD.org) Message-Id: <201806072124.w57LOLUC076849@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: leitao set sender to leitao@FreeBSD.org using -f From: Breno Leitao Date: Thu, 7 Jun 2018 21:24:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r334816 - head/sys/powerpc/ofw X-SVN-Group: head X-SVN-Commit-Author: leitao X-SVN-Commit-Paths: head/sys/powerpc/ofw X-SVN-Commit-Revision: 334816 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jun 2018 21:24:22 -0000 Author: leitao Date: Thu Jun 7 21:24:21 2018 New Revision: 334816 URL: https://svnweb.freebsd.org/changeset/base/334816 Log: Fix excise_initrd_region() to support 32- and 64-bit initrd params. Changed excise_initrd_region to support both 32- and 64-bit values for linux,initrd-start and linux,initrd-end. This fixes the boot problem on some machines after rS334485. Submitted by: Luis Pires Reviewed by: jhibbits, leitao Approved by: jhibbits (mentor) Differential Revision: https://reviews.freebsd.org/D15667 Modified: head/sys/powerpc/ofw/ofw_machdep.c Modified: head/sys/powerpc/ofw/ofw_machdep.c ============================================================================== --- head/sys/powerpc/ofw/ofw_machdep.c Thu Jun 7 20:57:12 2018 (r334815) +++ head/sys/powerpc/ofw/ofw_machdep.c Thu Jun 7 21:24:21 2018 (r334816) @@ -297,14 +297,37 @@ excise_initrd_region(struct mem_region *avail, int asz uint64_t start, end; ssize_t size; struct mem_region initrdmap[1]; + pcell_t cell[2]; chosen = OF_finddevice("/chosen"); - size = OF_getprop(chosen, "linux,initrd-start", &start, sizeof(start)); - if (size <= 0) + + size = OF_getencprop(chosen, "linux,initrd-start", cell, sizeof(cell)); + if (size < 0) return (asz); + else if (size == 4) + start = cell[0]; + else if (size == 8) + start = (uint64_t)cell[0] << 32 | cell[1]; + else { + /* Invalid value length */ + printf("WARNING: linux,initrd-start must be either 4 or 8 bytes long\n"); + return (asz); + } - size = OF_getprop(chosen, "linux,initrd-end", &end, sizeof(end)); - if (size <= 0) + size = OF_getencprop(chosen, "linux,initrd-end", cell, sizeof(cell)); + if (size < 0) + return (asz); + else if (size == 4) + end = cell[0]; + else if (size == 8) + end = (uint64_t)cell[0] << 32 | cell[1]; + else { + /* Invalid value length */ + printf("WARNING: linux,initrd-end must be either 4 or 8 bytes long\n"); + return (asz); + } + + if (end <= start) return (asz); initrdmap[0].mr_start = start;