From patchwork Mon Jun 22 20:27:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Opaniuk X-Patchwork-Id: 1314726 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=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=a4JdWkVT; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (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 49rLbB5BBtz9sSt for ; Tue, 23 Jun 2020 06:28:38 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id AD5F781E4B; Mon, 22 Jun 2020 22:28:18 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com 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=gmail.com header.i=@gmail.com header.b="a4JdWkVT"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 5E3F981E2E; Mon, 22 Jun 2020 22:28:16 +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=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com [IPv6:2a00:1450:4864:20::22d]) (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 7F4D581E2E for ; Mon, 22 Jun 2020 22:28:13 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=igor.opaniuk@gmail.com Received: by mail-lj1-x22d.google.com with SMTP id s9so642712ljm.11 for ; Mon, 22 Jun 2020 13:28:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=eNYJx/Ev8G2WBMdNm/UAYrlO58S+v9EoUs5vQzZT3OQ=; b=a4JdWkVTwXCAUpbrM1ai4t0ZV5jhtdy/JFd7/yst1JUDV3Swh0yL5L8ePv2gMMLU89 je+7paE3lonXOfFgANnILdJ8mu7ojCNwjn9f2O7eh4La7RQkABHj2eItVMfMjNEiBD0N 2igH1Fb2/eGgEU2+F603X0gZdLW8aSukVBRxGqmFLUuVTRi/a9FbOqUcb3aORzoAp58l CoAiFXuk7B6HyyllhFlTGUKkZA8g6O0RmTA9goEb603h1ySmidFLVPeQnozvsO2cMNs2 uo6pltn69xQnROJCrR2r1CbAx+DPxt1cm3spCqxgmPOtLQYOvtmYnv6c/xnNlBhmBV00 qwug== 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; bh=eNYJx/Ev8G2WBMdNm/UAYrlO58S+v9EoUs5vQzZT3OQ=; b=RqLVECsZVAWVpGilowppBf8/HEYV28xgpRTgb9s9n0OvyXyhehtJ4pEF/wjQTLBvU9 h2O4JmH8uYWTsST1UrRbgJffA6C2CHgidfzocK5TzJNpJMeYLT+JWJu0IdEW0adl7oEy Sx/V7PR2K2+hYKzqpqm0WrHDaQ3DJpqUOIJ5YnVxRxkhlVkLIozZWoWYIcfmvdOykVzJ eFuVtCSHQFD7jQA5iskV/AOAFwbCCFYhz0vNvG3hcwhO28/vi13thqVjx7mYj3P/wuDz 5TCcgkneXaVXr+cglsaDizVkF3rziorTiWK5WHMbDIj0oZnG62uYX13eqTw4ZgJeDGKB NCLg== X-Gm-Message-State: AOAM531gK6ISNCWu/W1+4ECjQh87l9tA+YBWDa1rtgF9BQgC+RS9JFMQ 1ZDq8oeqkLHUIWUK2YFB6aVkgPRp X-Google-Smtp-Source: ABdhPJxe6wDJ06hk8mKa7pVawbBbjMVSeCJGVG7lYu4Bmeew/1iN/VTrf9V9yEg/NaDdDyFi+IYNQQ== X-Received: by 2002:a2e:9bd2:: with SMTP id w18mr9056623ljj.448.1592857692469; Mon, 22 Jun 2020 13:28:12 -0700 (PDT) Received: from localhost ([194.44.43.171]) by smtp.gmail.com with ESMTPSA id t4sm3684414lfp.21.2020.06.22.13.28.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 22 Jun 2020 13:28:11 -0700 (PDT) From: Igor Opaniuk To: u-boot@lists.denx.de Cc: oleksandr.suvorov@toradex.com, marcel.ziswiler@toradex.com, sbabic@denx.de, max.krummenacher@toradex.com, stefan.agner@toradex.com, philippe.schenker@toradex.com, Igor Opaniuk Subject: [PATCH v1 1/7] toradex: tdx-cfg-block: add EEPROM read/store wrappers Date: Mon, 22 Jun 2020 23:27:54 +0300 Message-Id: <1592857680-637-2-git-send-email-igor.opaniuk@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1592857680-637-1-git-send-email-igor.opaniuk@gmail.com> References: <1592857680-637-1-git-send-email-igor.opaniuk@gmail.com> X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.30rc1 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.2 at phobos.denx.de X-Virus-Status: Clean From: Igor Opaniuk These functions wrap functionality for storing config blocks in EEPROM. Signed-off-by: Igor Opaniuk --- board/toradex/common/Makefile | 1 + board/toradex/common/tdx-eeprom.c | 90 +++++++++++++++++++++++++++++++++++++++ board/toradex/common/tdx-eeprom.h | 14 ++++++ 3 files changed, 105 insertions(+) create mode 100644 board/toradex/common/tdx-eeprom.c create mode 100644 board/toradex/common/tdx-eeprom.h diff --git a/board/toradex/common/Makefile b/board/toradex/common/Makefile index 6b9fccb..7b19b6e 100644 --- a/board/toradex/common/Makefile +++ b/board/toradex/common/Makefile @@ -8,4 +8,5 @@ obj- := __dummy__.o else obj-$(CONFIG_TDX_CFG_BLOCK) += tdx-cfg-block.o obj-y += tdx-common.o +obj-y += tdx-eeprom.o endif diff --git a/board/toradex/common/tdx-eeprom.c b/board/toradex/common/tdx-eeprom.c new file mode 100644 index 0000000..fbc267d --- /dev/null +++ b/board/toradex/common/tdx-eeprom.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2020 Toradex + */ + +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static int get_tdx_eeprom(u32 eeprom_id, struct udevice **devp) +{ + int ret = 0; + int node; + ofnode eeprom; + char eeprom_str[16]; + const char *path; + + if (!gd->fdt_blob) { + printf("%s: don't have a valid gd->fdt_blob!\n", __func__); + return -EFAULT; + } + + node = fdt_path_offset(gd->fdt_blob, "/aliases"); + if (node < 0) + return -ENODEV; + + sprintf(eeprom_str, "eeprom%d", eeprom_id); + + path = fdt_getprop(gd->fdt_blob, node, eeprom_str, NULL); + if (!path) { + printf("%s: no alias for %s\n", __func__, eeprom_str); + return -ENODEV; + } + + eeprom = ofnode_path(path); + if (!ofnode_valid(eeprom)) { + printf("%s: invalid hardware path to EEPROM\n", __func__); + return -ENODEV; + } + + ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, eeprom, devp); + if (ret) { + printf("%s: cannot find EEPROM by node\n", __func__); + return ret; + } + + return ret; +} + +int read_tdx_eeprom_data(u32 eeprom_id, int offset, u8 *buf, + int size) +{ + struct udevice *dev; + int ret; + + ret = get_tdx_eeprom(eeprom_id, &dev); + if (ret) + return ret; + + ret = i2c_eeprom_read(dev, 0x0, buf, size); + if (ret) { + printf("%s: error reading data from EEPROM id: %d!, ret = %d\n", + __func__, eeprom_id, ret); + return ret; + } + + return ret; +} + +int write_tdx_eeprom_data(u32 eeprom_id, int offset, u8 *buf, + int size) +{ + struct udevice *dev; + int ret; + + ret = get_tdx_eeprom(eeprom_id, &dev); + if (ret) + return ret; + + ret = i2c_eeprom_write(dev, 0x0, buf, size); + if (ret) { + printf("%s: error writing data to EEPROM id: %d, ret = %d\n", + __func__, eeprom_id, ret); + return ret; + } + + return ret; +} diff --git a/board/toradex/common/tdx-eeprom.h b/board/toradex/common/tdx-eeprom.h new file mode 100644 index 0000000..a6772d2 --- /dev/null +++ b/board/toradex/common/tdx-eeprom.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (c) 2020 Toradex + */ + +#ifndef _TDX_EEPROM_H +#define _TDX_EEPROM_H + +#include + +int read_tdx_eeprom_data(u32 eeprom_id, int offset, uint8_t *buf, int size); +int write_tdx_eeprom_data(u32 eeprom_id, int offset, uint8_t *buf, int size); + +#endif /* _TDX_EEPROM_H */