From nobody Mon Feb 9 01:51:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1597770625; cv=none; d=zohomail.com; s=zohoarc; b=ZgcNeiX0fEr/FeL0JvZ82iDLCZkbSdRbysl1/KDcS+oMEfMoBbengx+42eeIadQwyTgotLnUveG3mbL317pry/xiXK28YyaUq6BLbj6HxFc7dGNbhHlPGfW+xZUl0v/16oJnCgNoapBJB4t3pwywbHvbWGzC/3JQUcytqSrOU94= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597770625; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject; bh=0T4Wtrmv4d/iFWaZyNVtP1A4DrIkBJVNCMFjoDI7cYI=; b=XZZBbWVYGFbYv8SL+FlLTVOZsU2t54fmpkxli8RytChMys+m4aAzIU/DXNI2JgUO7o6cs7g0hFX1MdPaiLb5FR1kaqCr8rdzdeNiSDEwczYO5lspFggorWClfXJYyGBe8odu7cb6X83396f2PnJTpCpw+NgqHQiLwWC4vXzpI0w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597770625042997.7616991432375; Tue, 18 Aug 2020 10:10:25 -0700 (PDT) Received: from localhost ([::1]:47114 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k857t-0007Vl-LO for importer@patchew.org; Tue, 18 Aug 2020 13:10:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k856t-0006Zm-K2 for qemu-devel@nongnu.org; Tue, 18 Aug 2020 13:09:19 -0400 Received: from mail-pj1-x1044.google.com ([2607:f8b0:4864:20::1044]:33607) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k856r-0002zh-Fu for qemu-devel@nongnu.org; Tue, 18 Aug 2020 13:09:19 -0400 Received: by mail-pj1-x1044.google.com with SMTP id i92so9627268pje.0 for ; Tue, 18 Aug 2020 10:09:17 -0700 (PDT) Received: from localhost.localdomain (114-47-163-2.dynamic-ip.hinet.net. [114.47.163.2]) by smtp.gmail.com with ESMTPSA id m3sm460043pjs.22.2020.08.18.10.09.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2020 10:09:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0T4Wtrmv4d/iFWaZyNVtP1A4DrIkBJVNCMFjoDI7cYI=; b=XjejeylsdTUAlE1633RECHlDYZsg2GFUS+NX04B+9sWrOjMfbGCtRKL6vIptpvFdzU bCefoU/R4bF5nL5aYi2y/WxFxPs1clmLFOrNMOsuRdJ1+UDymuzXmxzK8HDy7VFAVxXp WNvlHMkwWxMtVRF6sTrlqtbG+XuHMvILYpkp/UXqfZtl7aASL+++1+lU/5XT+VqMOB5I ghHtacive3wO5PRFUdIcKwCL4Bn4Wifl7RsdShxsBc2yf1hv2EKSSqraoc5ay5hVvRqP SmQPO3qIaW61+S73QpvGOAh+LUmLpOYyIcdqXuZleBosNUUtgK7FutRlQxoQg7KFa4BM x9yA== 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=0T4Wtrmv4d/iFWaZyNVtP1A4DrIkBJVNCMFjoDI7cYI=; b=hyZXTlofxCM24UBXLOwuwnsrmJeEWyVAnDRglRAPHKVLYqdpNL1SoI59dYPrXIXfT9 TT2/tHQJgy/mCvwsd1ynkNjXTDb+mzijENm2/xehOSJHSPSssA5A9rQc5HDd3XY7PsS0 F3BMhZt906z6OMfKgEpGd61yu5Tyl1u9CZhkSIZG+1LJxAqvFy+gh+ndjhU+39iakhWc orqO0CBC9oClE8ycE3Na8MwxV5Fg78VD3s9gNjMkPQXkyn3y21zV2ztX1DTb3yqjDptP ZkYgBI3XhfMM05nL96D4KdknIT3FhkrQ3nVn5hZqJRgvxDpm+AKhBwLQ7THS9g9mjj+Z tE5w== X-Gm-Message-State: AOAM532TouPD/nJlIUZhOSTTOJJXdh3HbDBmvszMLWTZwr8yzuXRCO1K 874rjHEpWXsBqIKTHkrndZ7HZw== X-Google-Smtp-Source: ABdhPJwhtd0on1GGrlhdH/IbP58QxHcXhDvxCNBsNgoANaOUCGfj672+ejTUDv5o/w+TFN5LOQhpEw== X-Received: by 2002:a17:902:c382:: with SMTP id g2mr15087368plg.120.1597770555713; Tue, 18 Aug 2020 10:09:15 -0700 (PDT) From: Green Wan To: Subject: [RFC PATCH v3 1/2] hw/riscv: sifive_u: Add backend drive support Date: Wed, 19 Aug 2020 01:08:38 +0800 Message-Id: <20200818170839.20258-2-green.wan@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200818170839.20258-1-green.wan@sifive.com> References: <20200818170839.20258-1-green.wan@sifive.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1044; envelope-from=green.wan@sifive.com; helo=mail-pj1-x1044.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-riscv@nongnu.org, Sagar Karandikar , Bastian Koppelmann , qemu-devel@nongnu.org, Green Wan , Alistair Francis , Palmer Dabbelt , bmeng.cn@gmail.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add '-drive' support to OTP device. Allow users to assign a raw file as OTP image. Signed-off-by: Green Wan --- hw/riscv/sifive_u_otp.c | 50 +++++++++++++++++++++++++++++++++ include/hw/riscv/sifive_u_otp.h | 2 ++ 2 files changed, 52 insertions(+) diff --git a/hw/riscv/sifive_u_otp.c b/hw/riscv/sifive_u_otp.c index f6ecbaa2ca..4552b2409e 100644 --- a/hw/riscv/sifive_u_otp.c +++ b/hw/riscv/sifive_u_otp.c @@ -24,6 +24,8 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/riscv/sifive_u_otp.h" +#include "sysemu/blockdev.h" +#include "sysemu/block-backend.h" =20 static uint64_t sifive_u_otp_read(void *opaque, hwaddr addr, unsigned int = size) { @@ -46,6 +48,16 @@ static uint64_t sifive_u_otp_read(void *opaque, hwaddr a= ddr, unsigned int size) if ((s->pce & SIFIVE_U_OTP_PCE_EN) && (s->pdstb & SIFIVE_U_OTP_PDSTB_EN) && (s->ptrim & SIFIVE_U_OTP_PTRIM_EN)) { + + /* read from backend*/ + if (s->blk) { + int32_t buf; + + blk_pread(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD, &buf, + SIFIVE_U_OTP_FUSE_WORD); + return buf; + } + return s->fuse[s->pa & SIFIVE_U_OTP_PA_MASK]; } else { return 0xff; @@ -123,6 +135,12 @@ static void sifive_u_otp_write(void *opaque, hwaddr ad= dr, s->ptrim =3D val32; break; case SIFIVE_U_OTP_PWE: + /* write to backend */ + if (s->blk) { + blk_pwrite(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD, &val32, + SIFIVE_U_OTP_FUSE_WORD, 0); + } + s->pwe =3D val32; break; default: @@ -143,16 +161,48 @@ static const MemoryRegionOps sifive_u_otp_ops =3D { =20 static Property sifive_u_otp_properties[] =3D { DEFINE_PROP_UINT32("serial", SiFiveUOTPState, serial, 0), + DEFINE_PROP_DRIVE("drive", SiFiveUOTPState, blk), DEFINE_PROP_END_OF_LIST(), }; =20 static void sifive_u_otp_realize(DeviceState *dev, Error **errp) { SiFiveUOTPState *s =3D SIFIVE_U_OTP(dev); + DriveInfo *dinfo; =20 memory_region_init_io(&s->mmio, OBJECT(dev), &sifive_u_otp_ops, s, TYPE_SIFIVE_U_OTP, SIFIVE_U_OTP_REG_SIZE); sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->mmio); + + dinfo =3D drive_get_next(IF_NONE); + if (dinfo) { + int ret; + uint64_t perm; + int filesize; + BlockBackend *blk; + + blk =3D blk_by_legacy_dinfo(dinfo); + filesize =3D SIFIVE_U_OTP_NUM_FUSES * SIFIVE_U_OTP_FUSE_WORD; + if (blk_getlength(blk) < filesize) { + qemu_log_mask(LOG_GUEST_ERROR, "OTP drive size < 16K\n"); + return; + } + + qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(dinfo)); + + perm =3D BLK_PERM_CONSISTENT_READ | + (blk_is_read_only(s->blk) ? 0 : BLK_PERM_WRITE); + ret =3D blk_set_perm(s->blk, perm, BLK_PERM_ALL, errp); + if (ret < 0) { + qemu_log_mask(LOG_GUEST_ERROR, "set perm error."); + } + + if (blk_pread(s->blk, 0, s->fuse, filesize) !=3D filesize) { + qemu_log_mask(LOG_GUEST_ERROR, + "failed to read the initial flash content"); + return; + } + } } =20 static void sifive_u_otp_reset(DeviceState *dev) diff --git a/include/hw/riscv/sifive_u_otp.h b/include/hw/riscv/sifive_u_ot= p.h index 639297564a..dea1df6f6c 100644 --- a/include/hw/riscv/sifive_u_otp.h +++ b/include/hw/riscv/sifive_u_otp.h @@ -43,6 +43,7 @@ =20 #define SIFIVE_U_OTP_PA_MASK 0xfff #define SIFIVE_U_OTP_NUM_FUSES 0x1000 +#define SIFIVE_U_OTP_FUSE_WORD 4 #define SIFIVE_U_OTP_SERIAL_ADDR 0xfc =20 #define SIFIVE_U_OTP_REG_SIZE 0x1000 @@ -75,6 +76,7 @@ typedef struct SiFiveUOTPState { uint32_t fuse[SIFIVE_U_OTP_NUM_FUSES]; /* config */ uint32_t serial; + BlockBackend *blk; } SiFiveUOTPState; =20 #endif /* HW_SIFIVE_U_OTP_H */ --=20 2.17.1 From nobody Mon Feb 9 01:51:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1597770683; cv=none; d=zohomail.com; s=zohoarc; b=BhFzWGO8sDIW1udc4Cct1UGgMGtzOlVQcdw0LUB0PCQFl5O+NuiZGFtlKIjQY7vrSKShGj6lWv88HyBIV+wQotraLv9tzB+YBKtNAjEoFjejdodE3RhUF0RMNHeVFZVAQ8XboJzZedzzCRygP0xyuYwyJ8yjO8tqS9p1J7PUwJQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597770683; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject; bh=7Qs2rtxT3/R6MXxuyS8SeDFTvt7qJW/PWlDHxREUlis=; b=IdYR/mvxOMb/nz0V6n2G+h9vqfPhrQ6WuB0HdpfETPLXgPRQa7eJ8PVbntn8wbpYFUPN0Rq5elZ8be6HY1Ex7hXSaGNTD5U/ClP3jfp5MzjOmu0uvRORmGFfPZvvXrN9dFt0ZSGyen6qJVKI7AwJg5CbzRWZ5lDhB2D5uqJbs5c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159777068355843.6481892523542; Tue, 18 Aug 2020 10:11:23 -0700 (PDT) Received: from localhost ([::1]:50598 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k858r-0000bs-EG for importer@patchew.org; Tue, 18 Aug 2020 13:11:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k856w-0006bA-39 for qemu-devel@nongnu.org; Tue, 18 Aug 2020 13:09:22 -0400 Received: from mail-pj1-x1041.google.com ([2607:f8b0:4864:20::1041]:53076) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k856u-00031H-E4 for qemu-devel@nongnu.org; Tue, 18 Aug 2020 13:09:21 -0400 Received: by mail-pj1-x1041.google.com with SMTP id kr4so9697118pjb.2 for ; Tue, 18 Aug 2020 10:09:20 -0700 (PDT) Received: from localhost.localdomain (114-47-163-2.dynamic-ip.hinet.net. [114.47.163.2]) by smtp.gmail.com with ESMTPSA id m3sm460043pjs.22.2020.08.18.10.09.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2020 10:09:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7Qs2rtxT3/R6MXxuyS8SeDFTvt7qJW/PWlDHxREUlis=; b=IJ6wvDCaYyYTd8iJBQmGXJen7uE0lCKJb82qNKLRSnR0uLgVUPAlKLOPm4qNkMysb+ W8y2RWutT5Rjat0lFAJhQxbbeSfrkiNO1lfa6HaOuQoiH9f1gQNFVADIi8eRBHJIUcQN KWmPWP4fURUqXVFAX/73z1pJSMxNmkTTYWlVS/ySo5jfzENtiNPCwpg8wFWQQMvSgbsT x8neLqoS/XVHDEyF97ugKOCoMQpomrmqar+ufbKF4DzFPkzS7BmE9k/Cszo/GJ8QP9YX Dwo1haTDiOsW+WzPZsd8twYQrbusqsq2U6md4HLw3U7x0eob10AD3G3ABUAIQeYZ8Zbq 6ZMg== 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=7Qs2rtxT3/R6MXxuyS8SeDFTvt7qJW/PWlDHxREUlis=; b=JzGSjNnmBTUv7sfuobs/kuZw1qtdTw46SD8Uowco7GFWy+K7Ev3ch8+S/v/H5XJ31F QDSeyY09rocQ8PZEN7LhkjJ84PiM7ogPg++waBzr+lJh65SscR/J+5yOaBhz4aDaziNP bWTUkaNWu8A1SlLLC9NqfcnljWxqXgG6I+ftl/3a2z+tMEuebY6cak2azr74iWGshDAs xXW3jEA2KtQ/WMMywm2LtTXfWp4Z8QggVVtNOGpCGuvTXr6QCDNbtJDSWmsicuOsYYqa P4/kokQpb0k51ad7CJiSGKS0UE7ww8AJ7Xpu0oU2PiZ7NjnpNFWJl1g3rUXZHxQKGEIp c3gA== X-Gm-Message-State: AOAM530LEug8XwacnO5CMtJmpiB3ptpwYlctGmc/0bIRoSGqjmsNt3c2 fgTU4uPbjl3sj1kPi6DVl8wMcA== X-Google-Smtp-Source: ABdhPJyvpzGZC4y9LR5A5GfY9hssJdpYIbJZFCgV36uJgWaH6t/csFklP88LK/eBzG+D/GZriJmC4Q== X-Received: by 2002:a17:902:b594:: with SMTP id a20mr15887590pls.339.1597770557934; Tue, 18 Aug 2020 10:09:17 -0700 (PDT) From: Green Wan To: Subject: [RFC PATCH v3 2/2] hw/riscv: sifive_u: Add write-once protection. Date: Wed, 19 Aug 2020 01:08:39 +0800 Message-Id: <20200818170839.20258-3-green.wan@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200818170839.20258-1-green.wan@sifive.com> References: <20200818170839.20258-1-green.wan@sifive.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1041; envelope-from=green.wan@sifive.com; helo=mail-pj1-x1041.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-riscv@nongnu.org, Sagar Karandikar , Bastian Koppelmann , qemu-devel@nongnu.org, Green Wan , Alistair Francis , Palmer Dabbelt , bmeng.cn@gmail.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add array to store the 'written' status for all bit of OTP to block the write operation to the same bit. Ignore the control register offset from 0x0 to 0x38 of OTP memory mapping. Signed-off-by: Green Wan --- hw/riscv/sifive_u_otp.c | 21 +++++++++++++++++++++ include/hw/riscv/sifive_u_otp.h | 1 + 2 files changed, 22 insertions(+) diff --git a/hw/riscv/sifive_u_otp.c b/hw/riscv/sifive_u_otp.c index 4552b2409e..3a25652735 100644 --- a/hw/riscv/sifive_u_otp.c +++ b/hw/riscv/sifive_u_otp.c @@ -27,6 +27,12 @@ #include "sysemu/blockdev.h" #include "sysemu/block-backend.h" =20 +#define SET_WRITTEN_BIT(map, idx, bit) \ + (map[idx] |=3D (0x1 << bit)) + +#define GET_WRITTEN_BIT(map, idx, bit) \ + ((map[idx] >> bit) & 0x1) + static uint64_t sifive_u_otp_read(void *opaque, hwaddr addr, unsigned int = size) { SiFiveUOTPState *s =3D opaque; @@ -135,6 +141,18 @@ static void sifive_u_otp_write(void *opaque, hwaddr ad= dr, s->ptrim =3D val32; break; case SIFIVE_U_OTP_PWE: + /* Keep written state for data only and PWE is enabled. Ignore PAS= =3D1 */ + if ((s->pa > SIFIVE_U_OTP_PWE) && (val32 & 0x1) && !s->pas) { + if (GET_WRITTEN_BIT(s->fuse_wo, s->pa, s->paio)) { + qemu_log_mask(LOG_GUEST_ERROR, + "Error: write idx<%u>, bit<%u>\n", + s->pa, s->paio); + break; + } else { + SET_WRITTEN_BIT(s->fuse_wo, s->pa, s->paio); + } + } + /* write to backend */ if (s->blk) { blk_pwrite(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD, &val32, @@ -215,6 +233,9 @@ static void sifive_u_otp_reset(DeviceState *dev) /* Make a valid content of serial number */ s->fuse[SIFIVE_U_OTP_SERIAL_ADDR] =3D s->serial; s->fuse[SIFIVE_U_OTP_SERIAL_ADDR + 1] =3D ~(s->serial); + + /* Initialize write-once map */ + memset(s->fuse_wo, 0x00, sizeof(s->fuse_wo)); } =20 static void sifive_u_otp_class_init(ObjectClass *klass, void *data) diff --git a/include/hw/riscv/sifive_u_otp.h b/include/hw/riscv/sifive_u_ot= p.h index dea1df6f6c..ab6e46b013 100644 --- a/include/hw/riscv/sifive_u_otp.h +++ b/include/hw/riscv/sifive_u_otp.h @@ -74,6 +74,7 @@ typedef struct SiFiveUOTPState { uint32_t ptrim; uint32_t pwe; uint32_t fuse[SIFIVE_U_OTP_NUM_FUSES]; + uint32_t fuse_wo[SIFIVE_U_OTP_NUM_FUSES]; /* config */ uint32_t serial; BlockBackend *blk; --=20 2.17.1