From patchwork Wed Oct 21 09:57:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: andrej.rosano@f-secure.com X-Patchwork-Id: 1385502 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=f-secure.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=f-secure.com header.i=@f-secure.com header.a=rsa-sha256 header.s=selector1 header.b=kQ7s8mWC; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CGSPz20v4z9sSC for ; Wed, 21 Oct 2020 22:07:24 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E8DCD81281; Wed, 21 Oct 2020 13:07:09 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=f-secure.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=f-secure.com header.i=@f-secure.com header.b="kQ7s8mWC"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 5C7F081B79; Wed, 21 Oct 2020 11:57:20 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER, SPF_HELO_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02hn0309.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe05::309]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 6562F806C5 for ; Wed, 21 Oct 2020 11:57:15 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=f-secure.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=andrej.rosano@f-secure.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KrQX0u31V4Ixm2gGXa7MAigf6eyx578BRrdV5NiGuz4pE9FrjqBMRH5WQHxb3uAiHJoRv8YSU704B2ngyO9aw1AXHcTMEYFdoGPSaWQEFkG5g8yH7yaLJRLFYJCPVS1asY3XiCuOEhqHd7VQtgWuyu86PlMOjbhhCyvdkghfkZTKx8WG05kDgXYsDyHKVfnyaoJLjyu61UMnUJ5DQRzI+c+MSBcfAOpROJF5CEAlu0P7QrDmYX/hjsADBTupHxrl74OPVNrTbEg/GIkO1sGmd+7uDyDRaTQ1+Sm8R5DG24XfJgll4Cjg7d9EGEnk8cD+qocfh4u87EM7uoLw1HR40Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AbXFnv6GxczE31m2oV47uA03Zi/7ouIv9h8MOWHAvBo=; b=h+tdW21c8W7NRwia8OHYEzYoaDDS93zu+ozEoh9XVa0+yLUBcm0f0qFEmg8DloIiezympf4MAjzuIEZV9LIoFTWa5RpZ0bd7SaGKMOgK5t0vak8fovFEoqsWMiA7ulOM1HJz2vPmX8bGWz6Zx+K2NtN99uuzIRF2UFwzVWJfRCZiQDfREEwu+fNTPSZ3Pq8YIoyLF4TlWRE8uBkhZxr/aXRnYqx9iTVsFlQf99CetHRMM1BRILS5qxMjqtSfjsCpNSF3Tekv3KwkLCc9gb3C50gZqDrDiJpvBJM+QTln+K73tPUPqfX+ZjRbaEDdAxL28hkLw/GioVX9jKD7AVdZSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=f-secure.com; dmarc=pass action=none header.from=f-secure.com; dkim=pass header.d=f-secure.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-secure.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AbXFnv6GxczE31m2oV47uA03Zi/7ouIv9h8MOWHAvBo=; b=kQ7s8mWCrV8R+7Iel7Rk9/D6hXngC0FuCeNj4gAldCu9xbYNhtExO8clRMNJLVhXT+gYtIGppq5V5biSS1ETyfmU1Kiyp0OI6RtFkhLuXa7GOTnJliedHCnPBAZFPbr3aEx6VvAPDANnHMwA7sDkK7d4Qz6iMQhMfOj0fWsZ50Q= Authentication-Results: lists.denx.de; dkim=none (message not signed) header.d=none; lists.denx.de; dmarc=none action=none header.from=f-secure.com; Received: from VI1PR08MB4397.eurprd08.prod.outlook.com (2603:10a6:803:f9::22) by VI1PR08MB4192.eurprd08.prod.outlook.com (2603:10a6:803:e3::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20; Wed, 21 Oct 2020 09:57:13 +0000 Received: from VI1PR08MB4397.eurprd08.prod.outlook.com ([fe80::dd49:8344:5361:e6c9]) by VI1PR08MB4397.eurprd08.prod.outlook.com ([fe80::dd49:8344:5361:e6c9%4]) with mapi id 15.20.3477.028; Wed, 21 Oct 2020 09:57:13 +0000 From: andrej.rosano@f-secure.com To: u-boot@lists.denx.de Cc: sbabic@denx.de Subject: [PATCH] ARM: mx6: add support for USB armory Mk II board Date: Wed, 21 Oct 2020 11:57:08 +0200 Message-Id: <20201021095708.162820-1-andrej.rosano@f-secure.com> X-Mailer: git-send-email 2.28.0 X-Originating-IP: [193.110.108.35] X-ClientProxiedBy: GVAP278CA0016.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::26) To VI1PR08MB4397.eurprd08.prod.outlook.com (2603:10a6:803:f9::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost (193.110.108.35) by GVAP278CA0016.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21 via Frontend Transport; Wed, 21 Oct 2020 09:57:12 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 34345301-1b86-4611-7674-08d875a7af31 X-MS-TrafficTypeDiagnostic: VI1PR08MB4192: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1AUK7nE1SXSQxzJDwHEgfioh84hrVSGa+CZs5/88/4FFrB1xn7jpL46BXoXDST43Mwn2I0hMiOTyFL4UPPTL53p10f0PmA+DrIayTVtPcIVELOMRqtu1GfiHFzidTfAMnOskV1qaSbgP10zxHKHAgjcRPlkZUuM5aTju8UqYAeUWwq6JigP7xKJTa/0EGdUzSrxheNyU+yGNllU1Fmy2onZBbYcHimac/6Ok+lLJT12s+um5aAB5j3SA9d667y6t3gJ7CmCLu2UKejPpGh9h5kBOrrDWTW7rW0AQGZeEE5l5IiZ9ZffKqYqtXWJwMEExjvuBY8ANqP/2JdmCxoRInF1kqm3eLL6IV5wwUJ+qGFxcV6sfrsC6oJI642c8vdvu8RbvIglusd0G2T1oKrXd3EPIGn0lDB1RGKe4siPpJ2iI/YB2uWNqW95dONTvPFlIKNcfdm3IYTvSjCrFc73QlkwnM+11PvCBfxy7F154u8S5Ljx+Gm3hJaFUy9qgcJdvPsNyfoIDZFYr8LHd6uEgLNmtVxr9ZPqVN8retq+vIZ8vLtrlMRtI5SZqGzPD33QPZmse5vlRw/6gZegRXQxvmILrPlbHG+moGbPpYuCp78l8Yy3NqFCv0QZ6NCTfkrO6/opKDZg+c/pY0978n9Nk/hyxlSk65sDSANQFTNCx852P46aB2BpClC68IiWgGHj4b25wH8mBHDRNiQQFnXDrPTAj+YX03VWdaMIn7PQKe4ftwf43M3xe+phq9oaqQW0dP39C9d+Zoc48cPwmuB6yGg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:5; SRV:; IPV:NLI; SFV:SPM; H:VI1PR08MB4397.eurprd08.prod.outlook.com; PTR:; CAT:OSPM; SFS:(4636009)(376002)(39850400004)(136003)(366004)(346002)(396003)(316002)(2616005)(36756003)(9686003)(86362001)(5660300002)(478600001)(26005)(16526019)(186003)(6666004)(966005)(956004)(4326008)(2906002)(66556008)(6496006)(66476007)(1076003)(66946007)(6916009)(30864003)(8936002)(6486002)(83380400001)(8676002)(52116002)(23200700001); DIR:OUT; SFP:1501; X-MS-Exchange-AntiSpam-MessageData: cud816eD+A/nDjQGQPD+bbD97K6VmxRKZXiu+ymDUoCPx5D4oh/l0VriiI4vw9JVo8QPFZh3Hx2aJNWtfALfjtyYdG2qSGbX+05STuRvcqRRWLmueetZ8DyC8MOrOqJMsEtSAxVmHMZqNGEGX57SneFBmrrZhb67dGIzia0KILPRpYh8PNyAITPwjlEaTJO1ipc5XM+uYhOlZE7omDCJ0ZBnDeZ3XNWRjsBxVcgAOJ42HkOU69YAzo1n/xRlIvyFez98EJw429/Urtg85Xzz2J3mSWeMD5/D4v41YY0wvceejD0mi3Sca/iiXWxtD5Zy3C1C0drapGht4HyhSYNcrbrFgIGJGIcbEtQUTIpP4ykl/TNM+IEkCVidsojXaFt4KANXTyHUZ77jkQ79S6W9UfOFJBNbjhD+8E2X36WOnzykZYRAiPME59tadi2ZNN+bayK5/f61f0hrIZV9pnPTp43/UJhn+FEb6UTDJKdNHSO2+R0lQzRBDv1wZIP7r4EJyl4CvYTYrEaxsvulP+lAygIEJ5rOUapEqZhdK1ZUPQxUGp26hLPfZbzLUMYkBCDuTnT/VIbdYOnkEYNr8+yGMIkzFBjSGdHWiNq1xmJZX4oi/cXaLT9dfSqa0lx8y74kqXmWT3+5SMoL8OPT7fNYoQ== X-OriginatorOrg: f-secure.com X-MS-Exchange-CrossTenant-Network-Message-Id: 34345301-1b86-4611-7674-08d875a7af31 X-MS-Exchange-CrossTenant-AuthSource: VI1PR08MB4397.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2020 09:57:13.4766 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d5bc339e-b691-425e-9d05-4181afc9e065 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: r8zQp4tv3m8xMESFLsnX3q/QX1+okI21/YmsgjWuHZ48CQv0H6x6lpSMvNfkN87jySNUS4mtYEZtN6VuulA6zQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4192 X-Mailman-Approved-At: Wed, 21 Oct 2020 13:07:08 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean From: Andrej Rosano Add support for F-Secure USB armory Mk II board, an open source flash-drive sized computer based on Freescale i.MX6UL SoC. http://inversepath.com/usbarmory Signed-off-by: Andrej Rosano Cc: Stefano Babic --- arch/arm/dts/Makefile | 1 + arch/arm/dts/imx6ull-usbarmory.dts | 200 ++++++++++ arch/arm/mach-imx/mx6/Kconfig | 5 + board/inversepath/usbarmory-mark-two/Kconfig | 71 ++++ .../usbarmory-mark-two/MAINTAINERS | 6 + board/inversepath/usbarmory-mark-two/Makefile | 10 + .../usbarmory-mark-two/imximage-1gb.cfg | 87 +++++ .../usbarmory-mark-two/imximage-512mb.cfg | 89 +++++ .../usbarmory-mark-two/usbarmory-mark-two.c | 347 ++++++++++++++++++ configs/usbarmory-mark-two_defconfig | 72 ++++ include/configs/usbarmory-mark-two.h | 234 ++++++++++++ 11 files changed, 1122 insertions(+) create mode 100644 arch/arm/dts/imx6ull-usbarmory.dts create mode 100644 board/inversepath/usbarmory-mark-two/Kconfig create mode 100644 board/inversepath/usbarmory-mark-two/MAINTAINERS create mode 100644 board/inversepath/usbarmory-mark-two/Makefile create mode 100644 board/inversepath/usbarmory-mark-two/imximage-1gb.cfg create mode 100644 board/inversepath/usbarmory-mark-two/imximage-512mb.cfg create mode 100644 board/inversepath/usbarmory-mark-two/usbarmory-mark-two.c create mode 100644 configs/usbarmory-mark-two_defconfig create mode 100644 include/configs/usbarmory-mark-two.h diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index b195723f16..d17c14c9bb 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -731,6 +731,7 @@ dtb-$(CONFIG_MX6ULL) += \ imx6ull-myir-mys-6ulx-eval.dtb \ imx6ull-phytec-segin-ff-rdk-emmc.dtb \ imx6ull-dart-6ul.dtb \ + imx6ull-usbarmory.dtb \ imx6ull-somlabs-visionsom.dtb \ imx6ulz-14x14-evk.dtb diff --git a/arch/arm/dts/imx6ull-usbarmory.dts b/arch/arm/dts/imx6ull-usbarmory.dts new file mode 100644 index 0000000000..d5a616f703 --- /dev/null +++ b/arch/arm/dts/imx6ull-usbarmory.dts @@ -0,0 +1,200 @@ +/* + * USB armory Mk II device tree file + * https://github.com/inversepath/usbarmory + * + * Copyright (C) 2019, F-Secure Corporation + * Andrej Rosano + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + * a) This file is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Or, alternatively, + * + * b) Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/dts-v1/; + +#include "imx6ull.dtsi" + +/ { + model = "F-Secure USB armory Mk II"; + compatible = "inversepath,imx6ull-usbarmory-mkII", "fsl,imx6ull"; + + chosen { + stdout-path = &uart2; + }; + + memory { + reg = <0x80000000 0x20000000>; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_led>; + + led-white { + label = "LED_WHITE"; + gpios = <&gpio4 21 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + + led-blue { + label = "LED_BLUE"; + gpios = <&gpio4 22 GPIO_ACTIVE_LOW>; + default-state = "on"; + }; + }; + + regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + reg_sd1_vmmc: sd1_regulator { + compatible = "regulator-fixed"; + regulator-name = "VSD_3V3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + }; +}; + +&cpu0 { + operating-points = < + /* kHz uV */ + 900000 1275000 + 792000 1225000 + 528000 1175000 + 396000 1025000 + 198000 950000 + >; + fsl,soc-operating-points = < + /* KHz uV */ + 900000 1250000 + 792000 1175000 + 528000 1175000 + 396000 1175000 + 198000 1175000 + >; +}; + +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_bluetooth>; + uart-has-rtscts; + status = "okay"; +}; + +&uart2 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart2>; + status = "okay"; +}; + +&usdhc1 { + pinctrl-names = "default"; + no-1-8-v; + keep-power-in-suspend; + wakeup-source; + non-removable; // FIXME: CD works on i.MX6ULL but not i.MX6ULZ + status = "okay"; +}; + +&usdhc2 { + pinctrl-names = "default"; + non-removable; + status = "okay"; +}; + +&i2c1 { + pinctrl-0 = <&pinctrl_i2c1>; + status = "okay"; +}; + +&iomuxc { + pinctrl_uart2: uart2grp { + fsl,pins = < + MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1 + MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1 + >; + }; + + pinctrl_bluetooth: uart1grp { + fsl,pins = < + MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b0 /* BT_UART_TX */ + MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b0 /* BT_UART_RX */ + MX6UL_PAD_UART1_CTS_B__UART1_DCE_CTS 0x1b0b0 /* BT_UART_CTS */ + MX6UL_PAD_GPIO1_IO07__UART1_DCE_RTS 0x1b0b0 /* BT_UART_RTS */ + MX6UL_PAD_UART3_TX_DATA__GPIO1_IO24 0x1f020 /* BT_UART_DSR */ + MX6UL_PAD_UART3_RX_DATA__GPIO1_IO25 0x1f020 /* BT_UART_DTR */ + MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0x1f020 /* BT_SWDCLK */ + MX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x1f020 /* BT_SWDIO */ + MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x1f020 /* BT_RESET */ + MX6UL_PAD_UART3_RTS_B__GPIO1_IO27 0x1f020 /* BT_SWITCH_1 */ + MX6UL_PAD_UART3_CTS_B__GPIO1_IO26 0x1f020 /* BT_SWITCH_2 */ + >; + }; + + pinctrl_i2c1: i2c1grp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO02__I2C1_SCL 0x4001b8b0 + MX6UL_PAD_GPIO1_IO03__I2C1_SDA 0x4001b8b0 + >; + }; + + pinctrl_led: ledgrp { + fsl,pins = < + MX6UL_PAD_CSI_DATA06__GPIO4_IO27 0x1f020 + MX6UL_PAD_CSI_DATA07__GPIO4_IO28 0x1f020 + >; + }; +}; + +&usbotg1 { + dr_mode = "peripheral"; + disable-over-current; + tpl-support; + status = "okay"; +}; + +&usbotg2 { + dr_mode = "host"; + disable-over-current; + tpl-support; + status = "okay"; +}; diff --git a/arch/arm/mach-imx/mx6/Kconfig b/arch/arm/mach-imx/mx6/Kconfig index 3d72517fa1..36b5d46c4b 100644 --- a/arch/arm/mach-imx/mx6/Kconfig +++ b/arch/arm/mach-imx/mx6/Kconfig @@ -644,6 +644,10 @@ config TARGET_UDOO_NEO select SUPPORT_SPL imply CMD_DM +config TARGET_USBARMORY_MARK_TWO + bool "Support USB armory Mk II" + depends on MX6ULL + config TARGET_SOFTING_VINING_2000 bool "Softing VIN|ING 2000" depends on MX6SX @@ -744,6 +748,7 @@ source "board/phytec/pcm058/Kconfig" source "board/phytec/pfla02/Kconfig" source "board/phytec/pcl063/Kconfig" source "board/gateworks/gw_ventana/Kconfig" +source "board/inversepath/usbarmory-mark-two/Kconfig" source "board/kosagi/novena/Kconfig" source "board/softing/vining_2000/Kconfig" source "board/liebherr/display5/Kconfig" diff --git a/board/inversepath/usbarmory-mark-two/Kconfig b/board/inversepath/usbarmory-mark-two/Kconfig new file mode 100644 index 0000000000..e13290b9a1 --- /dev/null +++ b/board/inversepath/usbarmory-mark-two/Kconfig @@ -0,0 +1,71 @@ +if TARGET_USBARMORY_MARK_TWO + +choice + prompt "DDR size" + default SYS_DDR_512MB + +config SYS_DDR_512MB + bool "512 MB" + +config SYS_DDR_1GB + bool "1 GB" + +endchoice + +choice + prompt "Boot device" + default SYS_BOOT_DEV_MICROSD + +config SYS_BOOT_DEV_MICROSD + bool "micro SD" + +config SYS_BOOT_DEV_EMMC + bool "eMMC" + +endchoice + +choice + prompt "Boot mode" + default SYS_BOOT_MODE_NORMAL + +config SYS_BOOT_MODE_NORMAL + select DISTRO_DEFAULTS + select ENV_IS_IN_MMC + bool "Normal" + +config SYS_BOOT_MODE_UMS + bool "UMS" + select ENV_IS_NOWHERE + +config SYS_BOOT_MODE_TFTP + bool "TFTP" + select ENV_IS_NOWHERE + +config SYS_BOOT_MODE_VERIFIED_OPEN + bool "Verified Boot" + select ENV_IS_NOWHERE + +config SYS_BOOT_MODE_VERIFIED_LOCKED + bool "Verified Boot and console disabled" + select ENV_IS_NOWHERE + +endchoice + +config IMX_CONFIG + default "board/inversepath/usbarmory-mark-two/imximage-512mb.cfg" if SYS_DDR_512MB + default "board/inversepath/usbarmory-mark-two/imximage-1gb.cfg" if SYS_DDR_1GB + +config SYS_MEMTEST_END + default 0xa0000000 if SYS_DDR_512MB + default 0xc0000000 if SYS_DDR_1G + +config SYS_BOARD + default "usbarmory-mark-two" + +config SYS_VENDOR + default "inversepath" + +config SYS_CONFIG_NAME + default "usbarmory-mark-two" + +endif diff --git a/board/inversepath/usbarmory-mark-two/MAINTAINERS b/board/inversepath/usbarmory-mark-two/MAINTAINERS new file mode 100644 index 0000000000..89b68ae866 --- /dev/null +++ b/board/inversepath/usbarmory-mark-two/MAINTAINERS @@ -0,0 +1,6 @@ +USBARMORY MK II BOARD +M: Andrej Rosano +S: Maintained +F: board/inversepath/usbarmory-mark-two/ +F: include/configs/usbarmory-mark-two.h +F: configs/usbarmory-mark-two_defconfig diff --git a/board/inversepath/usbarmory-mark-two/Makefile b/board/inversepath/usbarmory-mark-two/Makefile new file mode 100644 index 0000000000..bf84d05bfd --- /dev/null +++ b/board/inversepath/usbarmory-mark-two/Makefile @@ -0,0 +1,10 @@ +# +# USB armory Mk II board Makefile +# https://github.com/inversepath/usbarmory +# +# Copyright (C) 2019, F-Secure +# Andrej Rosano +# +# SPDX-License-Identifier:|____GPL-2.0+ + +obj-y := usbarmory-mark-two.o diff --git a/board/inversepath/usbarmory-mark-two/imximage-1gb.cfg b/board/inversepath/usbarmory-mark-two/imximage-1gb.cfg new file mode 100644 index 0000000000..47bd4830f7 --- /dev/null +++ b/board/inversepath/usbarmory-mark-two/imximage-1gb.cfg @@ -0,0 +1,87 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * USB armory Mk II board imximage configuration + * https://github.com/inversepath/usbarmory + * + * Copyright (C) 2019, F-Secure Corportation + * Andrej Rosano + */ + +#define __ASSEMBLY__ +#include + +IMAGE_VERSION 2 +BOOT_FROM sd +CSF CONFIG_CSF_SIZE + +/* CCM */ + +DATA 4 0x020c4068 0xffffffff /* CCM_CCGR0 */ +DATA 4 0x020c406c 0xffffffff /* CCM_CCGR1 */ +DATA 4 0x020c4070 0xffffffff /* CCM_CCGR2 */ +DATA 4 0x020c4074 0xffffffff /* CCM_CCGR3 */ +DATA 4 0x020c4078 0xffffffff /* CCM_CCGR4 */ +DATA 4 0x020c407c 0xffffffff /* CCM_CCGR5 */ +DATA 4 0x020c4080 0xffffffff /* CCM_CCGR6 */ + +/* IOMUX */ + +DATA 4 0x020E04B4 0x000C0000 /* GRP_DDR_TYPE */ +DATA 4 0x020E04AC 0x00000000 /* GRP_DDRPKE */ +DATA 4 0x020E027C 0x00000030 /* DRAM_SDCLK0_P */ +DATA 4 0x020E0250 0x00000030 /* DRAM_CAS_B */ +DATA 4 0x020E024C 0x00000030 /* DRAM_RAS_B */ +DATA 4 0x020E0490 0x00000030 /* GRP_ADDDS */ +DATA 4 0x020E0288 0x00000030 /* DRAM_RESET */ +DATA 4 0x020E0270 0x00000000 /* DRAM_SDBA2 */ +DATA 4 0x020E0260 0x00000030 /* DRAM_ODT0 */ +DATA 4 0x020E0264 0x00000030 /* DRAM_ODT1 */ +DATA 4 0x020E04A0 0x00000030 /* GRP_CTLDS */ +DATA 4 0x020E0494 0x00020000 /* GRP_DDRMODE_CTL */ +DATA 4 0x020E0280 0x00000030 /* DRAM_SDQS0_P */ +DATA 4 0x020E0284 0x00000030 /* DRAM_SDQS1_P */ +DATA 4 0x020E04B0 0x00020000 /* GRP_DDRMODE */ +DATA 4 0x020E0498 0x00000030 /* GRP_B0DS */ +DATA 4 0x020E04A4 0x00000030 /* GRP_B1DS */ +DATA 4 0x020E0244 0x00000030 /* DRAM_DQM0 */ +DATA 4 0x020E0248 0x00000030 /* DRAM_DQM1 */ + +/* MMDC */ + +DATA 4 0x021B001C 0x00008000 /* MMDC_MDSCR */ +DATA 4 0x021B000C 0x676B52F3 /* MMDC_MDCFG0 */ +DATA 4 0x021B0010 0xB66D0B63 /* MMDC_MDCFG1 */ +DATA 4 0x021B0014 0x01FF00DB /* MMDC_MDCFG2 */ +DATA 4 0x021B0008 0x1B333030 /* MMDC_MDOTC */ +DATA 4 0x021B0018 0x00201740 /* MMDC_MDMISC */ +DATA 4 0x021B002C 0x000026D2 /* MMDC_MDRWD */ +DATA 4 0x021B0040 0x0000005F /* MMDC_MDASP */ +DATA 4 0x021B0030 0x006B1023 /* MMDC_MDOR */ +DATA 4 0x021B0000 0x85180000 /* MMDC_MDCTL */ + +/* Calibration */ +DATA 4 0x021B0800 0xA1390003 /* MMDC_MPZQHWCTRL */ +DATA 4 0x021B080C 0x00100014 /* MMDC_MPWLDECTRL0 */ +DATA 4 0x021B083C 0x415C015C /* MMDC_MPDGCTRL0 */ +DATA 4 0x021B0848 0x40403A40 /* MMDC_MPRDDLCTL */ +DATA 4 0x021B0850 0x40402626 /* MMDC_MPWRDLCTL */ +DATA 4 0x021B081C 0x33333333 /* MMDC_MPRDDQBY0DL */ +DATA 4 0x021B0820 0x33333333 /* MMDC_MPRDDQBY1DL */ +DATA 4 0x021B082C 0xf3333333 /* MMDC_MPWRDQBY0DL */ +DATA 4 0x021B0830 0xf3333333 /* MMDC_MPWRDQBY1DL */ +DATA 4 0x021B08C0 0x00921012 /* MMDC_MPDCCR */ +DATA 4 0x021B08B8 0x00000800 /* MMDC_MPMUR0 */ + +/* JEDEC initialization sequence */ +DATA 4 0x021B001C 0x02008032 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x00008033 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x00048031 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x15208030 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x04008040 /* MMDC_MDSCR */ + +DATA 4 0x021B0004 0x0002556D /* MMDC_MDPDC */ +DATA 4 0x021B0404 0x00011006 /* MMDC_MAPSR */ +DATA 4 0x021B0020 0x00000800 /* MMDC_MDREF */ +DATA 4 0x021B0818 0x00000227 /* MMDC_MPODTCTRL */ + +DATA 4 0x021B001C 0x00000000 /* MMDC_MDSCR */ diff --git a/board/inversepath/usbarmory-mark-two/imximage-512mb.cfg b/board/inversepath/usbarmory-mark-two/imximage-512mb.cfg new file mode 100644 index 0000000000..b856481b08 --- /dev/null +++ b/board/inversepath/usbarmory-mark-two/imximage-512mb.cfg @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * USB armory Mk II board imximage configuration + * https://github.com/inversepath/usbarmory + * + * Copyright (C) 2019, F-Secure Corportation + * Andrej Rosano + */ + +#define __ASSEMBLY__ +#include + +IMAGE_VERSION 2 +BOOT_FROM sd +CSF CONFIG_CSF_SIZE + +/* CCM */ + +DATA 4 0x020c4068 0xffffffff /* CCM_CCGR0 */ +DATA 4 0x020c406c 0xffffffff /* CCM_CCGR1 */ +DATA 4 0x020c4070 0xffffffff /* CCM_CCGR2 */ +DATA 4 0x020c4074 0xffffffff /* CCM_CCGR3 */ +DATA 4 0x020c4078 0xffffffff /* CCM_CCGR4 */ +DATA 4 0x020c407c 0xffffffff /* CCM_CCGR5 */ +DATA 4 0x020c4080 0xffffffff /* CCM_CCGR6 */ + +/* IOMUX */ + +DATA 4 0x020E04B4 0x000C0000 /* GRP_DDR_TYPE */ +DATA 4 0x020E04AC 0x00000000 /* GRP_DDRPKE */ +DATA 4 0x020E027C 0x00000030 /* DRAM_SDCLK0_P */ +DATA 4 0x020E0250 0x00000030 /* DRAM_CAS_B */ +DATA 4 0x020E024C 0x00000030 /* DRAM_RAS_B */ +DATA 4 0x020E0490 0x00000030 /* GRP_ADDDS */ +DATA 4 0x020E0288 0x00000030 /* DRAM_RESET */ +DATA 4 0x020E0270 0x00000000 /* DRAM_SDBA2 */ +DATA 4 0x020E0260 0x00000030 /* DRAM_ODT0 */ +DATA 4 0x020E0264 0x00000030 /* DRAM_ODT1 */ +DATA 4 0x020E04A0 0x00000030 /* GRP_CTLDS */ +DATA 4 0x020E0494 0x00020000 /* GRP_DDRMODE_CTL */ +DATA 4 0x020E0280 0x00000030 /* DRAM_SDQS0_P */ +DATA 4 0x020E0284 0x00000030 /* DRAM_SDQS1_P */ +DATA 4 0x020E04B0 0x00020000 /* GRP_DDRMODE */ +DATA 4 0x020E0498 0x00000030 /* GRP_B0DS */ +DATA 4 0x020E04A4 0x00000030 /* GRP_B1DS */ +DATA 4 0x020E0244 0x00000030 /* DRAM_DQM0 */ +DATA 4 0x020E0248 0x00000030 /* DRAM_DQM1 */ + +/* MMDC */ + +DATA 4 0x021B001C 0x00008000 /* MMDC_MDSCR */ +DATA 4 0x021B000C 0x676B52F3 /* MMDC_MDCFG0 */ +DATA 4 0x021B0010 0xB66D0B63 /* MMDC_MDCFG1 */ +DATA 4 0x021B0014 0x01FF00DB /* MMDC_MDCFG2 */ +DATA 4 0x021B0008 0x1B333030 /* MMDC_MDOTC */ +DATA 4 0x021B0018 0x00201740 /* MMDC_MDMISC */ +DATA 4 0x021B002C 0x000026D2 /* MMDC_MDRWD */ +DATA 4 0x021B0040 0x0000004F /* MMDC_MDASP */ +DATA 4 0x021B0030 0x006B1023 /* MMDC_MDOR */ +DATA 4 0x021B0000 0x84180000 /* MMDC_MDCTL */ + +/* Calibration */ +DATA 4 0x021B0800 0xA1390003 /* MMDC_MPZQHWCTRL */ +DATA 4 0x021B080C 0x000D000F /* MMDC_MPWLDECTRL0 */ +DATA 4 0x021B0810 0x00100010 /* MMDC_MPWLDECTRL1 */ +DATA 4 0x021B083C 0x415C0160 /* MMDC_MPDGCTRL0 */ +DATA 4 0x021B0840 0x00000000 /* MMDC_MPDGCTRL1 */ +DATA 4 0x021B0848 0x40403C42 /* MMDC_MPRDDLCTL */ +DATA 4 0x021B0850 0x40402C26 /* MMDC_MPWRDLCTL */ +DATA 4 0x021B081C 0x33333333 /* MMDC_MPRDDQBY0DL */ +DATA 4 0x021B0820 0x33333333 /* MMDC_MPRDDQBY1DL */ +DATA 4 0x021B082C 0xf3333333 /* MMDC_MPWRDQBY0DL */ +DATA 4 0x021B0830 0xf3333333 /* MMDC_MPWRDQBY1DL */ +DATA 4 0x021B08C0 0x00921012 /* MMDC_MPDCCR */ +DATA 4 0x021B08B8 0x00000800 /* MMDC_MPMUR0 */ + +/* JEDEC initialization sequence */ +DATA 4 0x021B001C 0x02008032 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x00008033 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x00048031 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x15208030 /* MMDC_MDSCR */ +DATA 4 0x021B001C 0x04008040 /* MMDC_MDSCR */ + +DATA 4 0x021B0004 0x0002556D /* MMDC_MDPDC */ +DATA 4 0x021B0404 0x00011006 /* MMDC_MAPSR */ +DATA 4 0x021B0020 0x00000800 /* MMDC_MDREF */ +DATA 4 0x021B0818 0x00000227 /* MMDC_MPODTCTRL */ + +DATA 4 0x021B001C 0x00000000 /* MMDC_MDSCR */ diff --git a/board/inversepath/usbarmory-mark-two/usbarmory-mark-two.c b/board/inversepath/usbarmory-mark-two/usbarmory-mark-two.c new file mode 100644 index 0000000000..97723992ba --- /dev/null +++ b/board/inversepath/usbarmory-mark-two/usbarmory-mark-two.c @@ -0,0 +1,347 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * USB armory Mk II board initialization + * https://github.com/inversepath/usbarmory + * + * Copyright (C) 2019, F-Secure Corporation + * Andrej Rosano + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ + PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) +#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \ + PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) +#define I2C_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ + PAD_CTL_ODE | PAD_CTL_SRE_FAST) +#define WEAK_PULLUP (PAD_CTL_PUS_100K_UP || \ + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS || \ + PAD_CTL_SRE_SLOW) +#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \ + PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) +#define PAD_JTAG (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_60ohm) +#define PAD_JTAG_TDO (PAD_CTL_PKE | \ + PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_60ohm | PAD_CTL_SRE_FAST) +#define PAD_JTAG_MOD (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_60ohm) + +static void setup_iomux_uart(void) +{ + static const iomux_v3_cfg_t pads[] = { +#ifndef CONFIG_SYS_BOOT_MODE_VERIFIED_LOCKED + MX6_PAD_UART2_TX_DATA__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), + MX6_PAD_UART2_RX_DATA__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), + MX6_PAD_UART2_CTS_B__UART2_DCE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL), + MX6_PAD_UART2_RTS_B__UART2_DCE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL) +#else + MX6_PAD_UART2_TX_DATA__GPIO1_IO20 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_UART2_RX_DATA__GPIO1_IO21 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_UART2_CTS_B__GPIO1_IO22 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_UART2_RTS_B__GPIO1_IO23 | MUX_PAD_CTRL(WEAK_PULLUP) +#endif + }; + + imx_iomux_v3_setup_multiple_pads(pads, ARRAY_SIZE(pads)); +} + +static void setup_iomux_i2c(void) +{ + static const iomux_v3_cfg_t pads[] = { + MX6_PAD_GPIO1_IO02__I2C1_SCL | MUX_PAD_CTRL(I2C_PAD_CTRL), + MX6_PAD_GPIO1_IO03__I2C1_SDA | MUX_PAD_CTRL(I2C_PAD_CTRL) + }; + + imx_iomux_v3_setup_multiple_pads(pads, ARRAY_SIZE(pads)); +} + +static void setup_iomux_mmc(void) +{ + static const iomux_v3_cfg_t pads[] = { + /* microSD */ + MX6_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_UART1_RTS_B__USDHC1_CD_B | MUX_PAD_CTRL(USDHC_PAD_CTRL), + /* eMMC */ + MX6_PAD_NAND_RE_B__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_WE_B__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA00__USDHC2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA01__USDHC2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA02__USDHC2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA03__USDHC2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA04__USDHC2_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA05__USDHC2_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA06__USDHC2_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL), + MX6_PAD_NAND_DATA07__USDHC2_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL) + }; + + imx_iomux_v3_setup_multiple_pads(pads, ARRAY_SIZE(pads)); +} + +static void setup_iomux_misc(void) +{ + static const iomux_v3_cfg_t pads[] = { + /* type-c */ + MX6_PAD_GPIO1_IO00__GPIO1_IO00 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_GPIO1_IO01__GPIO1_IO01 | MUX_PAD_CTRL(WEAK_PULLUP), + /* crypto */ + MX6_PAD_ENET2_TX_DATA1__GPIO2_IO12 | MUX_PAD_CTRL(WEAK_PULLUP), + /* pmic */ + MX6_PAD_ENET1_TX_EN__WDOG2_WDOG_RST_B_DEB | MUX_PAD_CTRL(WEAK_PULLUP), + /* usb */ + MX6_PAD_GPIO1_IO05__ANATOP_OTG2_ID | MUX_PAD_CTRL(WEAK_PULLUP) + }; + + imx_iomux_v3_setup_multiple_pads(pads, ARRAY_SIZE(pads)); +} + +static void setup_iomux_jtag(void) +{ + static const iomux_v3_cfg_t pads[] = { +#ifndef CONFIG_SYS_BOOT_MODE_VERIFIED_LOCKED + MX6_PAD_JTAG_TMS__SJC_TMS | MUX_PAD_CTRL(PAD_JTAG), + MX6_PAD_JTAG_TRST_B__SJC_TRSTB | MUX_PAD_CTRL(PAD_JTAG), + MX6_PAD_JTAG_TDI__SJC_TDI | MUX_PAD_CTRL(PAD_JTAG), + MX6_PAD_JTAG_TDO__SJC_TDO | MUX_PAD_CTRL(PAD_JTAG_TDO), + MX6_PAD_JTAG_TCK__SJC_TCK | MUX_PAD_CTRL(PAD_JTAG), + MX6_PAD_JTAG_MOD__SJC_MOD | MUX_PAD_CTRL(PAD_JTAG_MOD), +#else + MX6_PAD_JTAG_TMS__GPIO1_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_JTAG_TRST_B__GPIO1_IO15 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_JTAG_TDI__GPIO1_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_JTAG_TDO__GPIO1_IO12 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_JTAG_TCK__GPIO1_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_JTAG_MOD__GPIO1_IO10 | MUX_PAD_CTRL(WEAK_PULLUP), +#endif + }; + + imx_iomux_v3_setup_multiple_pads(pads, ARRAY_SIZE(pads)); +} + +static void setup_iomux_unused_boot(void) +{ + static const iomux_v3_cfg_t pads[] = { + + /* pulled-up/pulled-down pads */ + MX6_PAD_LCD_DATA05__GPIO3_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL), + MX6_PAD_LCD_DATA11__GPIO3_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL), + MX6_PAD_LCD_DATA14__GPIO3_IO19 | MUX_PAD_CTRL(NO_PAD_CTRL), + MX6_PAD_LCD_DATA08__GPIO3_IO13 | MUX_PAD_CTRL(NO_PAD_CTRL), + + /* floating and pulled-up pads */ + MX6_PAD_LCD_DATA00__GPIO3_IO05 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA01__GPIO3_IO06 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA02__GPIO3_IO07 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA03__GPIO3_IO08 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA04__GPIO3_IO09 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA06__GPIO3_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA07__GPIO3_IO12 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA09__GPIO3_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA10__GPIO3_IO15 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA12__GPIO3_IO17 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA13__GPIO3_IO18 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA15__GPIO3_IO20 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA16__GPIO3_IO21 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA17__GPIO3_IO22 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA18__GPIO3_IO23 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA19__GPIO3_IO24 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA20__GPIO3_IO25 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA21__GPIO3_IO26 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA22__GPIO3_IO27 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_DATA23__GPIO3_IO28 | MUX_PAD_CTRL(WEAK_PULLUP) + }; + + imx_iomux_v3_setup_multiple_pads(pads, ARRAY_SIZE(pads)); +} + +static void setup_iomux_unused_nc(void) +{ + /* Out of reset values define the pin values before the + ROM is executed so we force all the not connected pins + to a known state */ + static const iomux_v3_cfg_t pads[] = { + + /* TAMPER pins */ + MX6_PAD_SNVS_TAMPER0__GPIO5_IO00 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_SNVS_TAMPER1__GPIO5_IO01 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_SNVS_TAMPER2__GPIO5_IO02 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_SNVS_TAMPER3__GPIO5_IO03 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_SNVS_TAMPER4__GPIO5_IO04 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_SNVS_TAMPER5__GPIO5_IO05 | MUX_PAD_CTRL(WEAK_PULLUP), + // FIXME: Configuration of one of the following two pads + // disables console UART for some reason. + //MX6_PAD_SNVS_TAMPER6__GPIO5_IO06 | MUX_PAD_CTRL(WEAK_PULLUP), + //MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_SNVS_TAMPER9__GPIO5_IO09 | MUX_PAD_CTRL(WEAK_PULLUP), + + /* ENET block */ + MX6_PAD_ENET1_RX_DATA0__GPIO2_IO00 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET1_RX_DATA1__GPIO2_IO01 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET1_RX_EN__GPIO2_IO02 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET1_TX_DATA0__GPIO2_IO03 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET1_TX_DATA1__GPIO2_IO04 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET1_TX_CLK__GPIO2_IO06 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET1_RX_ER__GPIO2_IO07 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET2_RX_DATA0__GPIO2_IO08 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET2_RX_DATA1__GPIO2_IO09 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET2_RX_EN__GPIO2_IO10 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET2_TX_DATA0__GPIO2_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET2_TX_CLK__GPIO2_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_ENET2_RX_ER__GPIO2_IO15 | MUX_PAD_CTRL(WEAK_PULLUP), + + /* CSI block */ + MX6_PAD_CSI_MCLK__GPIO4_IO17 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_PIXCLK__GPIO4_IO18 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_VSYNC__GPIO4_IO19 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_HSYNC__GPIO4_IO20 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_DATA02__GPIO4_IO23 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_DATA03__GPIO4_IO24 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_DATA04__GPIO4_IO25 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_DATA05__GPIO4_IO26 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_DATA06__GPIO4_IO27 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_CSI_DATA07__GPIO4_IO28 | MUX_PAD_CTRL(WEAK_PULLUP), + + /* GPIO block */ + MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(WEAK_PULLUP), + + /* NAND block */ + MX6_PAD_NAND_WP_B__GPIO4_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_NAND_READY_B__GPIO4_IO12 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_NAND_CE0_B__GPIO4_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_NAND_CE1_B__GPIO4_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_NAND_DQS__GPIO4_IO16 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_NAND_CLE__GPIO4_IO15 | MUX_PAD_CTRL(WEAK_PULLUP), + + /* LCD block */ + MX6_PAD_LCD_CLK__GPIO3_IO00 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_ENABLE__GPIO3_IO01 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_HSYNC__GPIO3_IO02 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_VSYNC__GPIO3_IO03 | MUX_PAD_CTRL(WEAK_PULLUP), + MX6_PAD_LCD_RESET__GPIO3_IO04 | MUX_PAD_CTRL(WEAK_PULLUP) + }; + + imx_iomux_v3_setup_multiple_pads(pads, ARRAY_SIZE(pads)); +} + +static struct fsl_esdhc_cfg usdhc_cfg[2] = { + {USDHC1_BASE_ADDR}, + {USDHC2_BASE_ADDR}, +}; + +int board_mmc_getcd(struct mmc *mmc) +{ + return 1; +} + +int board_mmc_init(struct bd_info *bis) +{ + int ret = 0; + + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); + usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); + ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]); + ret = fsl_esdhc_initialize(bis, &usdhc_cfg[1]); + + return ret; +} + +int board_eth_init(struct bd_info *bis) +{ + return usb_eth_initialize(bis); +} + +int dram_init(void) +{ + gd->ram_size = imx_ddr_size(); + return 0; +} + +/* Enable FUSB303 receptacle Type-C controller */ +int fusb303_init(void) +{ + uchar val; + + val = 0xbb; + i2c_set_bus_num(0); + i2c_write(0x31, 0x5, 1, &val, 1); + return 0; +} + +int board_early_init_f(void) +{ + // i2c initialization should not be moved in dts as otherwise + // the fsusb303_init() does not have effect. + setup_iomux_i2c(); + setup_iomux_uart(); + setup_iomux_mmc(); + setup_iomux_unused_boot(); + setup_iomux_unused_nc(); + setup_iomux_misc(); + setup_iomux_jtag(); + return 0; +} + +int board_init(void) +{ + fusb303_init(); + return 0; +} + +int checkboard(void) +{ + puts("Board: F-Secure USB armory Mk II\n"); + return 0; +} + +#ifndef CONFIG_CMDLINE +static char *ext2_argv[] = { + "ext2load", + "mmc", + USBARMORY_BOOT_DEV ":1", + USBARMORY_FIT_ADDR, + USBARMORY_FIT_PATH, + USBARMORY_FIT_SIZE +}; + +static char *bootm_argv[] = { + "bootm", + USBARMORY_FIT_ADDR "#" USBARMORY_FIT_CONF +}; + +int board_run_command(const char *cmdline) +{ + if (do_ext2load(NULL, 0, 6, ext2_argv) != 0) { + hang(); + } + + do_bootm(NULL, 0, 2, bootm_argv); + hang(); + + return 1; +} +#endif diff --git a/configs/usbarmory-mark-two_defconfig b/configs/usbarmory-mark-two_defconfig new file mode 100644 index 0000000000..85600f86ff --- /dev/null +++ b/configs/usbarmory-mark-two_defconfig @@ -0,0 +1,72 @@ +CONFIG_ARM=y +CONFIG_ARCH_MX6=y +CONFIG_SYS_TEXT_BASE=0x87800000 +CONFIG_TARGET_USBARMORY_MARK_TWO=y +CONFIG_MX6ULL=y + +CONFIG_SYS_DDR_512MB=y +# CONFIG_SYS_DDR_1GB is not set + +# Boot device +CONFIG_SYS_BOOT_DEV_MICROSD=y +# CONFIG_SYS_BOOT_DEV_EMMC is not set + +# Environment +CONFIG_ENV_OFFSET=0x100000 +CONFIG_ENV_SIZE=0x2000 + +# Boot mode +CONFIG_SYS_BOOT_MODE_NORMAL=y +# CONFIG_SYS_BOOT_MODE_UMS is not set +# CONFIG_SYS_BOOT_MODE_TFTP is not set +# CONFIG_SYS_BOOT_MODE_VERIFIED_OPEN is not set +# CONFIG_SYS_BOOT_MODE_VERIFIED_LOCKED is not set + +CONFIG_NR_DRAM_BANKS=1 +CONFIG_USE_BOOTCOMMAND=y +CONFIG_DOS_PARTITION=y +CONFIG_FSL_USDHC=y +CONFIG_SYS_MEMTEST_START=0x80000000 + +# Commands +CONFIG_CMD_DHCP=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_FUSE=y +CONFIG_CMD_I2C=y +CONFIG_CMD_MEMTEST=y +CONFIG_CMD_MMC=y +CONFIG_CMD_PING=y +CONFIG_CMD_USB=y + +# Device model support +CONFIG_DM=y +CONFIG_DM_MMC=y +CONFIG_DM_USB=y +CONFIG_BLK=y +CONFIG_OF_LIBFDT=y +CONFIG_OF_CONTROL=y +CONFIG_OF_SEPARATE=y +CONFIG_DEFAULT_DEVICE_TREE="imx6ull-usbarmory" + +# Secure/Verified boot +CONFIG_FSL_CAAM=y +CONFIG_IMX_HAB=y +CONFIG_FIT=y +CONFIG_FIT_SIGNATURE=y +CONFIG_RSA=y + +# USB gadgets +CONFIG_USB=y +CONFIG_CI_UDC=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 + +# UMS gadget +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_CMD_USB_MASS_STORAGE=y + +# Ethernet gadget +CONFIG_USB_ETHER=y +CONFIG_USB_ETH_CDC=y diff --git a/include/configs/usbarmory-mark-two.h b/include/configs/usbarmory-mark-two.h new file mode 100644 index 0000000000..4ad19fa8f5 --- /dev/null +++ b/include/configs/usbarmory-mark-two.h @@ -0,0 +1,234 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * USB armory Mk II board configuration settings + * https://github.com/inversepath/usbarmory + * + * Copyright (C) 2019, F-Secure Corporation + * Andrej Rosano + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#include +#include "mx6_common.h" + +#define CONFIG_BOARD_EARLY_INIT_F + +/* UART */ +#define CONFIG_MXC_UART +#define CONFIG_MXC_UART_BASE UART2_BASE + +/* USB */ +#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) +#define CONFIG_USBD_HS + +/* I2C */ +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_MXC +#define CONFIG_SYS_I2C_SPEED 100000 +#define CONFIG_SYS_I2C_MXC_I2C1 + +/* U-Boot memory offsets */ +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR + +/* Boot parameters */ +#define USBARMORY_FIT_PATH "/boot/usbarmory.itb" +#define USBARMORY_FIT_ADDR "0x80800000" +#define USBARMORY_FIT_CONF "conf-1" +#define USBARMORY_FIT_SIZE "0x4000000" + +#ifdef CONFIG_SYS_BOOT_DEV_MICROSD +#define CONFIG_SYS_MMC_ENV_DEV 0 +#define USBARMORY_BOOT_DEV "0" +#define BOOT_TARGET_DEVICES(func) func(MMC, mmc, 0) +#elif CONFIG_SYS_BOOT_DEV_EMMC +#define CONFIG_SYS_MMC_ENV_DEV 1 +#define USBARMORY_BOOT_DEV "1" +#define BOOT_TARGET_DEVICES(func) func(MMC, mmc, 1) +#endif + +/* Bootargs */ + +#define CONFIG_USE_BOOTARGS +#define CONFIG_BOOTARGS "console=ttymxc1,115200 root=/dev/mmcblk" USBARMORY_BOOT_DEV "p1 rootwait rw" + +#define CONFIG_HOSTNAME "usbarmory" +#define CONFIG_SYS_CBSIZE 512 + +/* DDR size config */ + +#ifdef CONFIG_SYS_DDR_1GB +#define BOOTENV_DDR_1GB \ + "fdt_high=0xffffffff\0" \ + "initrd_high=0xffffffff\0" +#else +#define BOOTENV_DDR_1GB +#endif + +/* scripts */ + +#define BOOTENV_CHECK_SILICON_REVISION \ + "check_silicon_revision=" \ + "echo *** Checking Silicon Revision *** ; " \ + "setexpr USB_ANALOG_DIGPROG *0x20c8260 ; " \ + "setexpr imx6_family $USB_ANALOG_DIGPROG '/' 0x10000 ; " \ + "setexpr silicon_revision $USB_ANALOG_DIGPROG '&' 0xffff ; " \ + "if itest $imx6_family == 0x64; then " \ + "if itest $silicon_revision < 0x0002; then " \ + "echo ; " \ + "echo \"***********************************************\" ; " \ + "echo \"* WARNING *\" ; " \ + "echo \"* i.MX6UltraLight with Silicon Revision < 1.2 *\" ; " \ + "echo \"* Important security fixes are missing *\" ; " \ + "echo \"***********************************************\" ; " \ + "echo ; " \ + "fi ; " \ + "fi ; " \ + "if itest $imx6_family == 0x65; then " \ + "if itest $silicon_revision < 0x0001; then " \ + "echo ; " \ + "echo \"********************************************\" ; " \ + "echo \"* WARNING *\" ; " \ + "echo \"* i.MX6ULL/ULZ with Silicon Revision < 1.1 *\" ; " \ + "echo \"* Important security fixes are missing *\" ; " \ + "echo \"********************************************\" ; " \ + "echo ; " \ + "fi ; " \ + "fi\0" + +#define BOOTENV_CHECK_OTPMK \ + "check_otpmk=" \ + "echo *** Checking OTPMK *** ; " \ + "env set check_otpmk_var 0 ; " \ + "setexpr SNVS_HPSR *0x020cc014 ; " \ + "setexpr test $SNVS_HPSR '&' 0x08000000 ; " \ + "if itest $test != 0; then " \ + "env set check_otpmk_var 1 ; " \ + "echo ; " \ + "echo \"**************************\" ; " \ + "echo \"* WARNING: OTPMK is zero *\" ; " \ + "echo \"**************************\" ; " \ + "echo ; " \ + "fi ; " \ + "setexpr test $SNVS_HPSR '&' 0x01FF0000 ; " \ + "if itest $test != 0; then " \ + "env set check_otpmk_var 1 ; " \ + "echo ; " \ + "echo \"******************************************\" ; " \ + "echo \"* WARNING: OTPMK_SYNDROME error detected *\" ; " \ + "echo \"******************************************\" ; " \ + "echo ; " \ + "fi ; " \ + "setexpr test $SNVS_HPSR '&' 0xF00 ; " \ + "if itest $test != 0xD00; then " \ + "env set check_otpmk_var 1 ; " \ + "echo ; " \ + "echo \"***************************************\" ; " \ + "echo \"* WARNING: Device not in TRUSTED mode *\" ; " \ + "echo \"***************************************\" ; " \ + "echo ; " \ + "fi ; " \ + "if itest $check_otpmk_var != 0; then " \ + "echo *** Unable to continue. Resetting in 60s *** ; " \ + "sleep 60 ; " \ + "reset ; " \ + "fi\0" + +#define BOOTENV_UMS \ + "start_ums=" \ + "ums 0 mmc ${mmcdev}\0" + +#define BOOTENV_TFTP \ + "start_tftp=" \ + "dhcp ${kernel_addr_r} ${serverip}:${bootfile} ; " \ + "dhcp ${fdt_addr_r} ${serverip}:${fdtfile} ; " \ + "bootm ${kernel_addr_r} - ${fdt_addr_r}\0" + +#define BOOTENV_VERIFIED_OPEN \ + "start_verified_open=" \ + "ext2load mmc ${mmcdev}:1 " USBARMORY_FIT_ADDR " " USBARMORY_FIT_PATH " " USBARMORY_FIT_SIZE " ; " \ + "bootm " USBARMORY_FIT_ADDR "#" USBARMORY_FIT_CONF "\0" + +#define BOOTENV_NORMAL \ + "start_normal=run distro_bootcmd ; " \ + "ext2load mmc ${mmcdev}:1 ${kernel_addr_r} /boot/${bootfile} ; "\ + "ext2load mmc ${mmcdev}:1 ${fdt_addr_r} /boot/${fdtfile} ; " \ + "bootz ${kernel_addr_r} - ${fdt_addr_r}\0" + +/* Boot modes */ + +#ifdef CONFIG_SYS_BOOT_MODE_UMS + +#undef CONFIG_BOOTCOMMAND +#define CONFIG_BOOTCOMMAND "run start_ums" + +#elif CONFIG_SYS_BOOT_MODE_VERIFIED_OPEN + +#undef CONFIG_BOOTCOMMAND +#define CONFIG_BOOTCOMMAND "run start_verified_open" + +#elif CONFIG_SYS_BOOT_MODE_TFTP + +#undef CONFIG_BOOTCOMMAND +#define CONFIG_BOOTCOMMAND "run start_tftp" + +#elif CONFIG_SYS_BOOT_MODE_NORMAL + +#include +#undef CONFIG_BOOTCOMMAND +#define CONFIG_BOOTCOMMAND "run start_normal" + +#elif CONFIG_SYS_BOOT_MODE_VERIFIED_LOCKED + +#undef CONFIG_CMDLINE +#undef CONFIG_BOOTDELAY +#define CONFIG_BOOTDELAY -2 + +#undef CONFIG_BOOTCOMMAND +#define CONFIG_BOOTCOMMAND "dummy" + +#endif + +/* Custom environment variables */ + +#ifndef BOOTENV +#define BOOTENV +#endif + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "kernel_addr_r=0x80800000\0" \ + "fdt_addr_r=0x82000000\0" \ + "scriptaddr=0x80800000\0" \ + "ramdisk_addr_r=0x83000000\0" \ + "bootfile=zImage\0" \ + "fdtfile=imx6ull-usbarmory.dtb\0" \ + "mmcdev=" USBARMORY_BOOT_DEV "\0" \ + "ethact=usb_ether\0" \ + "cdc_connect_timeout=60\0" \ + "usbnet_devaddr=1a:55:89:a2:69:52\0" \ + "usbnet_hostaddr=1a:55:89:a2:69:51\0" \ + BOOTENV_CHECK_SILICON_REVISION \ + BOOTENV_CHECK_OTPMK \ + BOOTENV_NORMAL \ + BOOTENV_TFTP \ + BOOTENV_UMS \ + BOOTENV_VERIFIED_OPEN \ + BOOTENV_DDR_1GB \ + BOOTENV + +/* Physical Memory Map */ +#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR + +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM +#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR +#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE + +#define CONFIG_SYS_INIT_SP_OFFSET \ + (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_SP_ADDR \ + (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET) + +#define CONFIG_SYS_MALLOC_LEN (10 * SZ_1M) + +#endif /* __CONFIG_H */