From patchwork Sat Aug 24 13:22:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1152615 X-Patchwork-Delegate: sjg@chromium.org Return-Path: 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=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="SmDnGztx"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46Fzdz2X5jz9s7T for ; Sat, 24 Aug 2019 23:29:59 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id EA697C21DF8; Sat, 24 Aug 2019 13:28:19 +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=RCVD_IN_MSPIKE_H2, 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 A6A4BC21E12; Sat, 24 Aug 2019 13:27:47 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0A9BAC21D8E; Sat, 24 Aug 2019 13:27:26 +0000 (UTC) Received: from mail-io1-f68.google.com (mail-io1-f68.google.com [209.85.166.68]) by lists.denx.de (Postfix) with ESMTPS id 8521EC21DD3 for ; Sat, 24 Aug 2019 13:27:22 +0000 (UTC) Received: by mail-io1-f68.google.com with SMTP id e20so26587651iob.9 for ; Sat, 24 Aug 2019 06:27:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qLGxJrqDZyyQOMXik//Xce7RnlaC5H+n3hDFSKk7670=; b=SmDnGztxx5jB0JtczuyWlqVYxu1+WfQELZQVC7X28u1wTJ+ZPr7MJPSe4VAGIwUCG1 4CcazL2bjo9z6SDTBSIuEbh3CJAAj5cLWdhLm+Y762TtENbiHAeLAC/k6B7F/cTrp9mo ziwusMQRFyoZsAI9Eswhf6/3LZDtgXPxEvYSU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qLGxJrqDZyyQOMXik//Xce7RnlaC5H+n3hDFSKk7670=; b=YKI0eatobBSjXc0ECgawZkpmr8sw2K1oByANp666i6YipiLwEGjClOrpeyGrMIg12U hDnM3A2mGs1WD1CLx4sn6omSKD25LLXSFrBCTmu6uRT1M4WG0P4bFC2D6kjME/m8L7aQ nJL6kT7Ykk9npR5F7OhqW9szVfDOshn+aNeDf0k9EMocAr1NA13AHbw5JD3t2IUVsGWq tPkD+4oGwdLKd5sS3OoL6PnNdrxXBg8EHrotqDx+PM4bEYPSfXwerWQGV8GpTCBuxIFL fv+sJrIPxOHk5xz4/XG76WtpdFBwZu5/LckX8C0c0XB8xWkNZlUbqjhnsdzA+l8NJVlP Exuw== X-Gm-Message-State: APjAAAWcJMxXUp48I9lC+j3PC3nTkT8fY9KTaokDZq1mzmfqKX6LsO0A xrlVQA1aN9HCBAb5kusbVMgu8Mma5YA= X-Google-Smtp-Source: APXvYqy630EgSmoLMAChurEIMD9v2wzK1PoDdCuvNwbkOvLkryE2R0YEUVgRRXaHrWVZS3Y1QcEFhw== X-Received: by 2002:a02:a11e:: with SMTP id f30mr9852238jag.0.1566653241157; Sat, 24 Aug 2019 06:27:21 -0700 (PDT) Received: from kiwi.bld.corp.google.com ([2620:15c:183:0:8223:87c:a681:66aa]) by smtp.gmail.com with ESMTPSA id l2sm8881790ioq.83.2019.08.24.06.27.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2019 06:27:20 -0700 (PDT) From: Simon Glass To: U-Boot Mailing List Date: Sat, 24 Aug 2019 07:22:49 -0600 Message-Id: <20190824132315.53130-10-sjg@chromium.org> X-Mailer: git-send-email 2.23.0.187.g17f5b7556c-goog In-Reply-To: <20190824132315.53130-1-sjg@chromium.org> References: <20190824132315.53130-1-sjg@chromium.org> MIME-Version: 1.0 Subject: [U-Boot] [PATCH 09/34] binman: x86: Separate out 16-bit reset and init code X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" At present these two sections of code are linked together into a single 2KB chunk in a single file. Some Intel SoCs like to have a FIT (Firmware Interface Table) in the ROM and the pointer for this needs to go at 0xffffffc0 which is in the middle of these two sections. Make use of the new 'reset' entry and change the existing 16-bit entry to include just the 16-bit data. Signed-off-by: Simon Glass Signed-off-by: Simon Glass --- Makefile | 10 ++++-- arch/x86/dts/u-boot.dtsi | 9 ++++++ scripts/Makefile.spl | 22 +++++++++---- tools/binman/README.entries | 46 +++++++++++++++------------ tools/binman/etype/x86_start16.py | 15 +++++---- tools/binman/etype/x86_start16_spl.py | 19 +++++------ tools/binman/etype/x86_start16_tpl.py | 18 ++++++----- tools/binman/ftest.py | 6 ++-- 8 files changed, 88 insertions(+), 57 deletions(-) diff --git a/Makefile b/Makefile index 3b0864ae8e..df4a54e204 100644 --- a/Makefile +++ b/Makefile @@ -1402,14 +1402,18 @@ quiet_cmd_ldr = LD $@ cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \ $(filter-out FORCE,$^) -o $@ -u-boot.rom: u-boot-x86-16bit.bin u-boot.bin \ +u-boot.rom: u-boot-x86-start16.bin u-boot-x86-reset16.bin u-boot.bin \ $(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \ $(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin) \ $(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE $(call if_changed,binman) -OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec -u-boot-x86-16bit.bin: u-boot FORCE +OBJCOPYFLAGS_u-boot-x86-start16.bin := -O binary -j .start16 +u-boot-x86-start16.bin: u-boot FORCE + $(call if_changed,objcopy) + +OBJCOPYFLAGS_u-boot-x86-reset16.bin := -O binary -j .resetvec +u-boot-x86-reset16.bin: u-boot FORCE $(call if_changed,objcopy) endif diff --git a/arch/x86/dts/u-boot.dtsi b/arch/x86/dts/u-boot.dtsi index daeb168b65..0e87b88e10 100644 --- a/arch/x86/dts/u-boot.dtsi +++ b/arch/x86/dts/u-boot.dtsi @@ -120,14 +120,23 @@ x86-start16-tpl { offset = ; }; + x86-reset16-tpl { + offset = ; + }; #elif defined(CONFIG_SPL) x86-start16-spl { offset = ; }; + x86-reset16-spl { + offset = ; + }; #else x86-start16 { offset = ; }; + x86-reset16 { + offset = ; + }; #endif }; #endif diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl index 7af6b120b6..0f3d89b215 100644 --- a/scripts/Makefile.spl +++ b/scripts/Makefile.spl @@ -229,9 +229,11 @@ ALL-y += $(obj)/boot.bin endif ifdef CONFIG_TPL_BUILD -ALL-$(CONFIG_TPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-16bit-tpl.bin +ALL-$(CONFIG_TPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-start16-tpl.bin \ + $(obj)/u-boot-x86-reset16-tpl.bin else -ALL-$(CONFIG_SPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-16bit-spl.bin +ALL-$(CONFIG_SPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-start16-spl.bin \ + $(obj)/u-boot-x86-reset16-spl.bin endif ALL-$(CONFIG_ARCH_ZYNQ) += $(obj)/boot.bin @@ -337,12 +339,20 @@ OBJCOPYFLAGS_$(SPL_BIN)-nodtb.bin = $(SPL_OBJCFLAGS) -O binary \ $(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE $(call if_changed,objcopy) -OBJCOPYFLAGS_u-boot-x86-16bit-spl.bin := -O binary -j .start16 -j .resetvec -$(obj)/u-boot-x86-16bit-spl.bin: $(obj)/u-boot-spl FORCE +OBJCOPYFLAGS_u-boot-x86-start16-spl.bin := -O binary -j .start16 +$(obj)/u-boot-x86-start16-spl.bin: $(obj)/u-boot-spl FORCE $(call if_changed,objcopy) -OBJCOPYFLAGS_u-boot-x86-16bit-tpl.bin := -O binary -j .start16 -j .resetvec -$(obj)/u-boot-x86-16bit-tpl.bin: $(obj)/u-boot-tpl FORCE +OBJCOPYFLAGS_u-boot-x86-start16-tpl.bin := -O binary -j .start16 +$(obj)/u-boot-x86-start16-tpl.bin: $(obj)/u-boot-tpl FORCE + $(call if_changed,objcopy) + +OBJCOPYFLAGS_u-boot-x86-reset16-spl.bin := -O binary -j .resetvec +$(obj)/u-boot-x86-reset16-spl.bin: $(obj)/u-boot-spl FORCE + $(call if_changed,objcopy) + +OBJCOPYFLAGS_u-boot-x86-reset16-tpl.bin := -O binary -j .resetvec +$(obj)/u-boot-x86-reset16-tpl.bin: $(obj)/u-boot-tpl FORCE $(call if_changed,objcopy) LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL) diff --git a/tools/binman/README.entries b/tools/binman/README.entries index 55e3fa0dcc..d17b3cb078 100644 --- a/tools/binman/README.entries +++ b/tools/binman/README.entries @@ -989,14 +989,15 @@ Entry: x86-start16: x86 16-bit start-up code for U-Boot ------------------------------------------------------- Properties / Entry arguments: - - filename: Filename of u-boot-x86-16bit.bin (default - 'u-boot-x86-16bit.bin') + - filename: Filename of u-boot-x86-start16.bin (default + 'u-boot-x86-start16.bin') x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code -must be placed at a particular address. This entry holds that code. It is -typically placed at offset CONFIG_SYS_X86_START16. The code is responsible -for changing to 32-bit mode and jumping to U-Boot's entry point, which -requires 32-bit mode (for 32-bit U-Boot). +must be placed in the top 64KB of the ROM. The reset code jumps to it. This +entry holds that code. It is typically placed at offset +CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode +and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit +U-Boot). For 64-bit U-Boot, the 'x86_start16_spl' entry type is used instead. @@ -1006,16 +1007,17 @@ Entry: x86-start16-spl: x86 16-bit start-up code for SPL -------------------------------------------------------- Properties / Entry arguments: - - filename: Filename of spl/u-boot-x86-16bit-spl.bin (default - 'spl/u-boot-x86-16bit-spl.bin') + - filename: Filename of spl/u-boot-x86-start16-spl.bin (default + 'spl/u-boot-x86-start16-spl.bin') -x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code -must be placed at a particular address. This entry holds that code. It is -typically placed at offset CONFIG_SYS_X86_START16. The code is responsible -for changing to 32-bit mode and starting SPL, which in turn changes to -64-bit mode and jumps to U-Boot (for 64-bit U-Boot). +x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code +must be placed in the top 64KB of the ROM. The reset code jumps to it. This +entry holds that code. It is typically placed at offset +CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode +and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit +U-Boot). -For 32-bit U-Boot, the 'x86_start16' entry type is used instead. +For 32-bit U-Boot, the 'x86-start16' entry type is used instead. @@ -1023,15 +1025,17 @@ Entry: x86-start16-tpl: x86 16-bit start-up code for TPL -------------------------------------------------------- Properties / Entry arguments: - - filename: Filename of tpl/u-boot-x86-16bit-tpl.bin (default - 'tpl/u-boot-x86-16bit-tpl.bin') + - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default + 'tpl/u-boot-x86-start16-tpl.bin') -x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code -must be placed at a particular address. This entry holds that code. It is -typically placed at offset CONFIG_SYS_X86_START16. The code is responsible -for changing to 32-bit mode and starting TPL, which in turn jumps to SPL. +x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code +must be placed in the top 64KB of the ROM. The reset code jumps to it. This +entry holds that code. It is typically placed at offset +CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode +and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit +U-Boot). -If TPL is not being used, the 'x86_start16_spl or 'x86_start16' entry types +If TPL is not being used, the 'x86-start16-spl or 'x86-start16' entry types may be used instead. diff --git a/tools/binman/etype/x86_start16.py b/tools/binman/etype/x86_start16.py index 7d32ecd321..6736b692d5 100644 --- a/tools/binman/etype/x86_start16.py +++ b/tools/binman/etype/x86_start16.py @@ -12,14 +12,15 @@ class Entry_x86_start16(Entry_blob): """x86 16-bit start-up code for U-Boot Properties / Entry arguments: - - filename: Filename of u-boot-x86-16bit.bin (default - 'u-boot-x86-16bit.bin') + - filename: Filename of u-boot-x86-start16.bin (default + 'u-boot-x86-start16.bin') x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code - must be placed at a particular address. This entry holds that code. It is - typically placed at offset CONFIG_SYS_X86_START16. The code is responsible - for changing to 32-bit mode and jumping to U-Boot's entry point, which - requires 32-bit mode (for 32-bit U-Boot). + must be placed in the top 64KB of the ROM. The reset code jumps to it. This + entry holds that code. It is typically placed at offset + CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode + and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit + U-Boot). For 64-bit U-Boot, the 'x86_start16_spl' entry type is used instead. """ @@ -27,4 +28,4 @@ class Entry_x86_start16(Entry_blob): Entry_blob.__init__(self, section, etype, node) def GetDefaultFilename(self): - return 'u-boot-x86-16bit.bin' + return 'u-boot-x86-start16.bin' diff --git a/tools/binman/etype/x86_start16_spl.py b/tools/binman/etype/x86_start16_spl.py index d85909e7ae..c8c70639de 100644 --- a/tools/binman/etype/x86_start16_spl.py +++ b/tools/binman/etype/x86_start16_spl.py @@ -12,19 +12,20 @@ class Entry_x86_start16_spl(Entry_blob): """x86 16-bit start-up code for SPL Properties / Entry arguments: - - filename: Filename of spl/u-boot-x86-16bit-spl.bin (default - 'spl/u-boot-x86-16bit-spl.bin') + - filename: Filename of spl/u-boot-x86-start16-spl.bin (default + 'spl/u-boot-x86-start16-spl.bin') - x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code - must be placed at a particular address. This entry holds that code. It is - typically placed at offset CONFIG_SYS_X86_START16. The code is responsible - for changing to 32-bit mode and starting SPL, which in turn changes to - 64-bit mode and jumps to U-Boot (for 64-bit U-Boot). + x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code + must be placed in the top 64KB of the ROM. The reset code jumps to it. This + entry holds that code. It is typically placed at offset + CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode + and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit + U-Boot). - For 32-bit U-Boot, the 'x86_start16' entry type is used instead. + For 32-bit U-Boot, the 'x86-start16' entry type is used instead. """ def __init__(self, section, etype, node): Entry_blob.__init__(self, section, etype, node) def GetDefaultFilename(self): - return 'spl/u-boot-x86-16bit-spl.bin' + return 'spl/u-boot-x86-start16-spl.bin' diff --git a/tools/binman/etype/x86_start16_tpl.py b/tools/binman/etype/x86_start16_tpl.py index 46ce169ae0..5261a8adf0 100644 --- a/tools/binman/etype/x86_start16_tpl.py +++ b/tools/binman/etype/x86_start16_tpl.py @@ -12,19 +12,21 @@ class Entry_x86_start16_tpl(Entry_blob): """x86 16-bit start-up code for TPL Properties / Entry arguments: - - filename: Filename of tpl/u-boot-x86-16bit-tpl.bin (default - 'tpl/u-boot-x86-16bit-tpl.bin') + - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default + 'tpl/u-boot-x86-start16-tpl.bin') - x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code - must be placed at a particular address. This entry holds that code. It is - typically placed at offset CONFIG_SYS_X86_START16. The code is responsible - for changing to 32-bit mode and starting TPL, which in turn jumps to SPL. + x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code + must be placed in the top 64KB of the ROM. The reset code jumps to it. This + entry holds that code. It is typically placed at offset + CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode + and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit + U-Boot). - If TPL is not being used, the 'x86_start16_spl or 'x86_start16' entry types + If TPL is not being used, the 'x86-start16-spl or 'x86-start16' entry types may be used instead. """ def __init__(self, section, etype, node): Entry_blob.__init__(self, section, etype, node) def GetDefaultFilename(self): - return 'tpl/u-boot-x86-16bit-tpl.bin' + return 'tpl/u-boot-x86-start16-tpl.bin' diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py index 77445814a7..04127faa6f 100644 --- a/tools/binman/ftest.py +++ b/tools/binman/ftest.py @@ -120,10 +120,10 @@ class TestFunctional(unittest.TestCase): TestFunctional._MakeInputFile('u-boot-br.bin', PPC_MPC85XX_BR_DATA) - TestFunctional._MakeInputFile('u-boot-x86-16bit.bin', X86_START16_DATA) - TestFunctional._MakeInputFile('spl/u-boot-x86-16bit-spl.bin', + TestFunctional._MakeInputFile('u-boot-x86-start16.bin', X86_START16_DATA) + TestFunctional._MakeInputFile('spl/u-boot-x86-start16-spl.bin', X86_START16_SPL_DATA) - TestFunctional._MakeInputFile('tpl/u-boot-x86-16bit-tpl.bin', + TestFunctional._MakeInputFile('tpl/u-boot-x86-start16-tpl.bin', X86_START16_TPL_DATA) TestFunctional._MakeInputFile('u-boot-x86-reset16.bin',