From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E204C433EF for ; Tue, 5 Oct 2021 11:13:56 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E9FEF6120C for ; Tue, 5 Oct 2021 11:13:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org E9FEF6120C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=foundries.io Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 441A882D78; Tue, 5 Oct 2021 13:13:43 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=foundries.io Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=foundries.io header.i=@foundries.io header.b="irj1NObu"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 9724282900; Tue, 5 Oct 2021 13:13:38 +0200 (CEST) Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id BE4DB8291E for ; Tue, 5 Oct 2021 13:13:32 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=foundries.io Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=jorge@foundries.io Received: by mail-wr1-x431.google.com with SMTP id o20so18619961wro.3 for ; Tue, 05 Oct 2021 04:13:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foundries.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=myncwlF8c4vmGBNb+0vJ43QeQ4OJtMhWem38MMIBIPE=; b=irj1NObuU89dbe1j0g/VycosyhXuJ9c9CHUKXyCaXd09ADaRm4wI+vFNnSZUZKq+mt Sdi+5oj16HigwIdckPP5g8y60qIRFvs7ryuu9CrtJv5eTdm6VQhUTkP+Nih/BFi5S7Us YxZEPsvYSIBlzbNyMxLBuUSv/jxuv3ScxEEXL+uNgE84q+mFFsChtn2VqS0yaV75+epP jVnmb7WKk6C0nGWtH+umFZDA3F3V/thJL/ZiaKHy3MuaBUki8TsOwVAPLVDcNubNpiR/ JkR/gc1lETkw1Zf0xmnZ/2HGvEIBVMT2t3Ul6b1WGnCgeaq+g2/S1uUFXTIRhZDuWL4z /b3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=myncwlF8c4vmGBNb+0vJ43QeQ4OJtMhWem38MMIBIPE=; b=H8DcLPQfbQEuNsxEjPdDJelbncr6dJTUvDD5k/AgHjCyJd4QXaOehw0ep6cXKKpT1Z erA+Ev+6bQI8zlHJUafBqS4tTuo6t17a9XmIiNn8jPGi0/oKmY7muJUupntau9K7K0Tf Sy9quBoMpg9FUtl2hvVT24f7ugnsmNplneliCdKW85Ixlnpv+hZKEicuu1ViN6timKJi Mg9UN4SefxqmVRh8kOddqVoXOTQRhj5YjQxLEjef9m83mfmzPx7Dfa+lhDqX2XVtAoxF NaHEwP0dJV3qNFsI1QmbbKMdawfhZvUtVxJAXH5XtEQt64X7KxE9dQJOqIkJNyPFWBDa BhSQ== X-Gm-Message-State: AOAM531+mDT98A7a3hpIwz2nIsfyDHfFSAOkcaVRQaBl9s/VwxrC409i 6SMZAS5vKPCLMVz1blhPgbC/DL2W33WWIw== X-Google-Smtp-Source: ABdhPJy5k99qs5pSzmaz3GhrHQ6t8uD9qd5RGk88r6MF3lF1wvMXjIQzmBCkiBt2QoL1GB2kSnrfeA== X-Received: by 2002:a05:6000:1546:: with SMTP id 6mr20751367wry.305.1633432412414; Tue, 05 Oct 2021 04:13:32 -0700 (PDT) Received: from localhost.localdomain (197.red-79-154-202.dynamicip.rima-tde.net. [79.154.202.197]) by smtp.gmail.com with ESMTPSA id i92sm16882825wri.28.2021.10.05.04.13.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Oct 2021 04:13:32 -0700 (PDT) From: Jorge Ramirez-Ortiz To: jorge@foundries.io, michal.simek@xilinx.com, trini@konsulko.com, sjg@chromium.org, mr.nuke.me@gmail.com Cc: u-boot@lists.denx.de, ricardo@foundries.io, mike@foundries.io, igor.opaniuk@foundries.io Subject: [RFC PATCH 2/2] fpga: xilinx: allow loading authenticated images (DDR) Date: Tue, 5 Oct 2021 13:13:24 +0200 Message-Id: <20211005111324.19749-3-jorge@foundries.io> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211005111324.19749-1-jorge@foundries.io> References: <20211005111324.19749-1-jorge@foundries.io> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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.103.2 at phobos.denx.de X-Virus-Status: Clean Add new compatible string u-boot,zynqmp-fpga-ddrauth to handle this use case. Signed-off-by: Jorge Ramirez-Ortiz --- drivers/fpga/xilinx.c | 29 +++++++++++++++++++++++++---- drivers/fpga/zynqmppl.c | 4 ++-- include/xilinx.h | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/drivers/fpga/xilinx.c b/drivers/fpga/xilinx.c index cbebefb55f..c8035105e2 100644 --- a/drivers/fpga/xilinx.c +++ b/drivers/fpga/xilinx.c @@ -135,23 +135,44 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size, dataptr += 4; printf(" bytes in bitstream = %d\n", swapsize); - return fpga_load(devnum, dataptr, swapsize, bstype); + return fpga_load(devnum, dataptr, swapsize, bstype, NULL); } int xilinx_load(xilinx_desc *desc, const void *buf, size_t bsize, - bitstream_type bstype) + bitstream_type bstype, const char *compatible) { + struct fpga_secure_info info = { 0 }; + if (!xilinx_validate (desc, (char *)__FUNCTION__)) { printf ("%s: Invalid device descriptor\n", __FUNCTION__); return FPGA_FAIL; } - if (!desc->operations || !desc->operations->load) { + if (!desc->operations) { printf("%s: Missing load operation\n", __func__); return FPGA_FAIL; } - return desc->operations->load(desc, buf, bsize, bstype); + if (!compatible || !strcmp(compatible, "u-boot,fpga-legacy")) { + if (!desc->operations->load) { + printf("%s: Missing load operation\n", __func__); + return FPGA_FAIL; + } + return desc->operations->load(desc, buf, bsize, bstype); + } + + if (!strcmp(compatible, "u-boot,zynqmp-fpga-ddrauth")) { + if (!desc->operations->loads) { + printf("%s: Missing load operation\n", __func__); + return FPGA_FAIL; + } + /* DDR authentication */ + info.authflag = 1; + return desc->operations->loads(desc, buf, bsize, &info); + } + + printf("%s: compatible support not implemented\n", __func__); + return FPGA_FAIL; } #if defined(CONFIG_CMD_FPGA_LOADFS) diff --git a/drivers/fpga/zynqmppl.c b/drivers/fpga/zynqmppl.c index 6b394869db..65a9412123 100644 --- a/drivers/fpga/zynqmppl.c +++ b/drivers/fpga/zynqmppl.c @@ -245,7 +245,7 @@ static int zynqmp_load(xilinx_desc *desc, const void *buf, size_t bsize, return ret; } -#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) && !defined(CONFIG_SPL_BUILD) +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) static int zynqmp_loads(xilinx_desc *desc, const void *buf, size_t bsize, struct fpga_secure_info *fpga_sec_info) { @@ -306,7 +306,7 @@ static int zynqmp_pcap_info(xilinx_desc *desc) struct xilinx_fpga_op zynqmp_op = { .load = zynqmp_load, -#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) && !defined(CONFIG_SPL_BUILD) +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) .loads = zynqmp_loads, #endif .info = zynqmp_pcap_info, diff --git a/include/xilinx.h b/include/xilinx.h index ab4537becf..ae78009e6b 100644 --- a/include/xilinx.h +++ b/include/xilinx.h @@ -59,7 +59,7 @@ struct xilinx_fpga_op { /* Generic Xilinx Functions *********************************************************************/ int xilinx_load(xilinx_desc *desc, const void *image, size_t size, - bitstream_type bstype); + bitstream_type bstype, const char *compatible); int xilinx_dump(xilinx_desc *desc, const void *buf, size_t bsize); int xilinx_info(xilinx_desc *desc); int xilinx_loadfs(xilinx_desc *desc, const void *buf, size_t bsize, -- 2.31.1