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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9BF77CC6B38 for ; Fri, 16 Oct 2026 09:35:20 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xHeLE-0004FE-Tc; Fri, 16 Oct 2026 05:35:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xHeL2-00046K-3j for qemu-devel@nongnu.org; Fri, 16 Oct 2026 05:34:57 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xHeKu-0006Bs-MZ for qemu-devel@nongnu.org; Fri, 16 Oct 2026 05:34:55 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-885cd98d226so454273b3a.1 for ; Fri, 16 Oct 2026 02:34:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792143287; x=1792748087; darn=nongnu.org; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=2LHfSIvPOwnOctgQomh3z6+Sr1Dv6u891lc2zcm9z0I=; b=Aj3+C476OBXf5MXX+GLCnYHnfWK1iV/6v5JjzLIslamSaJfwehMY9skIQFMXWQm5mP qdHi2MIbohPIijQTkqtQLnrOJIFyCgBCG7JB2JMeyjy8tIGsEE1lJoUs3C/Yub6mqKIt YclTksyT4TnNZtrsj7Zt1sC77xO4y4gEIlewSytdmD8+PD46sNzui4jtduyxJhwQfgsI E7rNvXJhryT4dgM3s1OdK69R3VnqFoQpKQDczUtWYJa0goEskiVu+WkiGEMDsS1X1vEV f0hJfCUWE9R1sPflEnyHfAuiMAU/Qyyc+BSL53UwXr3mTBm3KIsH1uYU1yHwrIkh0BXg hsPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792143287; x=1792748087; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=2LHfSIvPOwnOctgQomh3z6+Sr1Dv6u891lc2zcm9z0I=; b=nREUpzMEVhEbaqFUvgUPtR2o3wVW34JZlOA7dNf+Kon+octoqgoQsnZvGFeGIg90OB p01gaenspXjMCY9XHler6FW70oX6Yq0JHGAB/MkXYxMjyVtjmgydflP/XdTUrEg5ovG7 C6zf1Pjj1LYmspQGRhCK+cGaLQWgML9RQNOBrpVXKAEb3at9ocOsvPAbp5q6+Q2cVJoZ a0INCwDM/ZYi5Io8izyZ3Peh3klcinAPAbvy4rAsYULu3I8yG2bDJDL0K8LekvEt21l2 tg/Hu21o4B7LRPzmEzqVjoEwz5jauINtwMGREs+37YnJ3PdXTMl1G07Qxke1+oP/pYir aw4Q== X-Gm-Message-State: AFq9FYLR4TyqAHNi/OJJCMdxP+rhlUyAcK9qma+ikFaOyMvh48e0woVX pjRuAnjUiq1MYMhsmS2N/lcaEUV9g4iA1W/VtMHzhMAV2SpnJ+RE5FPj X-Gm-Gg: AYBFou0sUUZP55uI7Pd3hR3Z0Q4NYgm9Rm1iOVeWTXHC084YE4pWAv0EtQ8JqQZ6xst xAkF9dcmD/NYdRAadfM/4ksWmzVXTK6+qoz9jwbY1tgJTCLGa+qmqJx0L0SK/ew0VzC1hZyWuM5 sMkyh3FKa2v2DxekhZalE14qaqibRm3Zsu6ySDVq98JiQql1s886rLWg+jj3USlcUgBoPGnwMd/ nHIOIKZC086pHFC+yqOANNnIdz2Jo72zn992sTGIKZu373uOz9e+3d8vZ7C4OPQ/iFEf8EpnVbk Maf7DfWuyNMjP+xfZl4hl6eyNRF3VqR0LYBmQrwR56qjuqU8/tBURPN13cFH4PD6NdScS+iAuV7 RERhKOq2f+uTPaqyylEkyu7opgHjcmj7+OuHj1BwSVp5pkMLBh9v1AvRNX+bnJ0mNaEjXjirgzL +wRUOxtVuG1UbggGFE3JG829KGy6QArzX0UxgqnqujrKGWzEjnryyQPHO/p/jUiyJ7VKF7+9td7 UHHVpozm9RJaDY= X-Received: by 2002:a05:6a00:2d87:b0:89f:e9a9:4ff2 with SMTP id d2e1a72fcca58-89fe9a9519emr393371b3a.22.1792143286633; Fri, 16 Oct 2026 02:34:46 -0700 (PDT) Received: from JaminLin-PC.aspeed.com ([118.99.183.121]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-89f54b30d7asm839473b3a.5.2026.10.16.02.34.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Oct 2026 02:34:45 -0700 (PDT) Date: Fri, 16 Oct 2026 17:34:40 +0800 From: Jamin Lin To: Emmanuel Blot Cc: qemu-devel@nongnu.org, Philippe =?iso-8859-1?Q?Mathieu-Daud=E9?= , =?iso-8859-1?Q?C=E9dric?= Le Goater , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Kane Chen , Andrew Jeffery , Joel Stanley , qemu-arm@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Pierrick Bouvier Subject: Re: [PATCH 22/22] hw/arm: clemente: populate the FRU EEPROMs Message-ID: References: <20261015-bmc-clemente-v1-0-bf591886b5b6@free.fr> <20261015-bmc-clemente-v1-22-bf591886b5b6@free.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20261015-bmc-clemente-v1-22-bf591886b5b6@free.fr> Received-SPF: pass client-ip=2607:f8b0:4864:20::42d; envelope-from=jaminlin1207@gmail.com; helo=mail-pf1-x42d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org On Thu, Oct 15, 2026 at 01:58:00PM +0200, Emmanuel Blot via wrote: > Back 24 of the 27 FRU EEPROMs with images read from hardware, so guest > firmware can identify the boards, the compute and management modules, > the network adapters, the I/O mezzanines and the drive backplanes > instead of finding them blank. Two EEPROMs were erased on the sampled > chassis and one was absent, so those three stay blank. > > The drive backplane and I/O mezzanine helpers each serve two instances > carrying different images, so both now take a descriptor naming the > EEPROMs they install. > > The content is sanitized: part and serial numbers masked, dates fixed, > asset tags replaced, distinct originals kept distinct. Several images > carry OEM MultiRecords whose contents are undocumented; the records are > kept and their bodies zeroed. > > Signed-off-by: Emmanuel Blot > --- > hw/arm/aspeed_ast2600_clemente.c | 974 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 948 insertions(+), 26 deletions(-) > > diff --git a/hw/arm/aspeed_ast2600_clemente.c b/hw/arm/aspeed_ast2600_clemente.c > index bf5a13bc49..7937097c5b 100644 > --- a/hw/arm/aspeed_ast2600_clemente.c > +++ b/hw/arm/aspeed_ast2600_clemente.c > @@ -32,34 +32,937 @@ > #define CLEMENTE_BMC_HW_STRAP2 0x00000800 > #define CLEMENTE_BMC_RAM_SIZE (2 * GiB) > > +/* > + * FRU images read back from hardware and sanitized: part and serial > + * numbers are masked, manufacturing dates fixed and asset tags replaced, > + * so the layout stays faithful while the identifying data is not real. > + * > + * Names are kept as programmed. The Board Info Area names the board, the > + * Product Info Area the system it is installed in, so the boards sourced > + * from a third party name their own vendor rather than the platform. > + */ > + > +/* > + * FRU: i2c1 @0x50 (PDB) > + * Board mfg: Ingrasys > + * Board product: Clemente PDB PVT2 > + * Board part: 0A00AA000-001-A > + * Board serial: 0A00AA00A0000A001 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_1_0050[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd1, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x50, 0x44, 0x42, > + 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, > + 0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x31, 0xcf, > + 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x31, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e, > + 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xbd, > + 0x01, 0x09, 0x19, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, > + 0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, > + 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, > + 0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc0, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, > +}; > + > +/* > + * FRU: i2c9 @0x50 (SCM) > + * Board mfg: Ingrasys > + * Board product: Clemente SCM PVT2 > + * Board part: 0A00AA000-002-A > + * Board serial: 0A00AA00A000002AA > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_9_0050[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd1, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x53, 0x43, 0x4d, > + 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, > + 0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41, 0x41, 0xcf, > + 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x32, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e, > + 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x9d, > + 0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, > + 0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, > + 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, > + 0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, > +}; > + > +/* > + * FRU: i2c9 @0x56 (BSM) > + * Board mfg: Ingrasys > + * Board product: BMC Storage Module PVT2 > + * Board part: 0A00AAA00-003-A > + * Board serial: 0A00AAA0A0000A003 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_9_0056[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0xf1, 0x01, 0x0c, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd7, > + 0x42, 0x4d, 0x43, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, > + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, > + 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x41, 0x30, 0x41, 0x30, 0x30, 0x30, > + 0x30, 0x41, 0x30, 0x30, 0x33, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, > + 0x41, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x33, 0x2d, 0x41, 0xce, 0x46, 0x52, > + 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, > + 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x09, 0x00, 0xc8, > + 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xcb, 0x43, 0x49, 0x2d, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0xcf, 0x30, 0x41, 0x30, > + 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0x2d, 0x41, > + 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, 0x41, 0x41, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xc1, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, > +}; > + > +/* > + * FRU: i2c10 @0x50 (OCP NIC0) > + * Board mfg: Nvidia > + * Board product: Nvidia ConnectX-7 OCP3.0 > + * Board part: AA00004AAA-AAAA_AA > + * Board serial: AA0000A004AA > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver 0.01 > + * Product mfg: Nvidia > + * Product name: Nvidia ConnectX-7 OCP3.0 > + * Product part: AA00002AAA-AAAA_AA > + * Product version: A2 > + * Product serial: AA0000A002AA > + * Product asset: QEMU > + * OEM records: 1 (53 bytes, zeroed) > + */ > +static const uint8_t fru_10_0050[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0e, 0x1c, 0x00, 0xd4, 0x01, 0x0d, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd8, 0x4e, 0x76, > + 0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, > + 0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50, 0x33, 0x2e, 0x30, 0xd8, 0x41, > + 0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x34, 0x41, 0x41, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd5, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x34, 0x41, 0x41, 0x41, 0x2d, 0x41, > + 0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52, > + 0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00, > + 0x00, 0x00, 0x00, 0xbf, 0x01, 0x0e, 0x19, 0xc6, 0x4e, 0x76, 0x69, 0x64, > + 0x69, 0x61, 0xd8, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f, > + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50, > + 0x33, 0x2e, 0x30, 0xd5, 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41, > + 0x41, 0x41, 0x2d, 0x41, 0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20, > + 0x20, 0xd3, 0x41, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd8, 0x41, 0x41, > + 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x32, 0x41, 0x41, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc0, 0xc1, 0x00, 0x00, 0xfb, 0xc0, 0x82, 0x35, 0x00, > + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c12 @0x50 (HPM 1) > + * Board mfg: NVIDIA > + * Board product: PG548 > + * Board part: 000-0A000-0000-A05 > + * Board serial: 0000000000005 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Product mfg: NVIDIA > + * Product name: GB300 1CPU:2GPU Board PC > + * Product part: 000-0A000-0000-003 > + * Product version: C07 > + * Product serial: 0000000000003 > + * Product asset: QEMU > + */ > +static const uint8_t fru_12_0050[] = { > + 0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xc5, 0x50, 0x47, > + 0x35, 0x34, 0x38, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x35, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x41, 0x30, 0x35, > + 0xc0, 0xc1, 0x00, 0xd8, 0x01, 0x0c, 0x19, 0xc6, 0x4e, 0x56, 0x49, 0x44, > + 0x49, 0x41, 0xd8, 0x47, 0x42, 0x33, 0x30, 0x30, 0x20, 0x31, 0x43, 0x50, > + 0x55, 0x3a, 0x32, 0x47, 0x50, 0x55, 0x20, 0x42, 0x6f, 0x61, 0x72, 0x64, > + 0x20, 0x50, 0x43, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30, > + 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x33, 0xc3, 0x43, > + 0x30, 0x37, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x33, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52, > + 0x55, 0x5f, 0x56, 0x65, 0x72, 0x5f, 0x30, 0x2e, 0x30, 0x33, 0xc1, 0x00, > + 0x00, 0x00, 0x00, 0x0d, > +}; > + > +/* > + * FRU: i2c12 @0x54 (CBC 2) > + * Chassis type: Blade Enclosure > + * Chassis part: 000-00000-0000-001 > + * Chassis serial: 000AAAA000001 > + * Board mfg: Nvidia > + * Board product: 18x1RU CBL Cartridge > + * Board part: 000-0000-006 > + * Board serial: 0000000000006 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: HS33172S03 > + * Product name: 18x1RU CBL Cartridge > + * Product part: 000-00000-0000-004 > + * Product version: E.4 > + * Product serial: 0000000000004 > + * Product asset: QEMU > + */ > +static const uint8_t fru_12_0054[] = { > + 0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03, > + 0x02, 0x80, 0x12, 0x02, 0x00, 0xc1, 0x00, 0xcc, 0x01, 0x0a, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38, > + 0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, > + 0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0xcc, 0x30, 0x30, 0x30, > + 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53, > + 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0xe7, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78, > + 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74, > + 0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34, > + 0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca, > + 0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x39, > +}; > + > +/* > + * FRU: i2c12 @0x55 (CBC 3) > + * Chassis type: Blade Enclosure > + * Chassis part: 000-00000-0000-001 > + * Chassis serial: 000AAAA000001 > + * Board mfg: Nvidia > + * Board product: 18x1RU CBL Cartridge > + * Board part: 000-0000-006 > + * Board serial: 0000000000007 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: HS33172S03 > + * Product name: 18x1RU CBL Cartridge > + * Product part: 000-00000-0000-004 > + * Product version: E.4 > + * Product serial: 0000000000005 > + * Product asset: QEMU > + */ > +static const uint8_t fru_12_0055[] = { > + 0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03, > + 0x02, 0x80, 0x12, 0x02, 0x00, 0xc1, 0x00, 0xcc, 0x01, 0x0a, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38, > + 0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, > + 0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0xcc, 0x30, 0x30, 0x30, > + 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53, > + 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0xe6, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78, > + 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74, > + 0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34, > + 0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca, > + 0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x38, > +}; > + > +/* > + * FRU: i2c13 @0x50 (HPM) > + * Board mfg: NVIDIA > + * Board product: PG548 > + * Board part: 000-0A000-0000-A05 > + * Board serial: 0000000000008 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Product mfg: NVIDIA > + * Product name: GB300 1CPU:2GPU Board PC > + * Product part: 000-0A000-0000-003 > + * Product version: C07 > + * Product serial: 0000000000006 > + * Product asset: QEMU > + */ > +static const uint8_t fru_13_0050[] = { > + 0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xc5, 0x50, 0x47, > + 0x35, 0x34, 0x38, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x38, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x41, 0x30, 0x35, > + 0xc0, 0xc1, 0x00, 0xd5, 0x01, 0x0c, 0x19, 0xc6, 0x4e, 0x56, 0x49, 0x44, > + 0x49, 0x41, 0xd8, 0x47, 0x42, 0x33, 0x30, 0x30, 0x20, 0x31, 0x43, 0x50, > + 0x55, 0x3a, 0x32, 0x47, 0x50, 0x55, 0x20, 0x42, 0x6f, 0x61, 0x72, 0x64, > + 0x20, 0x50, 0x43, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30, > + 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x33, 0xc3, 0x43, > + 0x30, 0x37, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x36, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52, > + 0x55, 0x5f, 0x56, 0x65, 0x72, 0x5f, 0x30, 0x2e, 0x30, 0x33, 0xc1, 0x00, > + 0x00, 0x00, 0x00, 0x0a, > +}; > + > +/* > + * FRU: i2c13 @0x54 (CBC 0) > + * Chassis type: Blade Enclosure > + * Chassis part: 000-00000-0000-001 > + * Chassis serial: 000AAAA000001 > + * Board mfg: Nvidia > + * Board product: 18x1RU CBL Cartridge > + * Board part: 000-0000-006 > + * Board serial: 0000000000009 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: HS33172S03 > + * Product name: 18x1RU CBL Cartridge > + * Product part: 000-00000-0000-004 > + * Product version: E.4 > + * Product serial: 0000000000007 > + * Product asset: QEMU > + */ > +static const uint8_t fru_13_0054[] = { > + 0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03, > + 0x02, 0x80, 0x12, 0x02, 0x00, 0xc1, 0x00, 0xcc, 0x01, 0x0a, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38, > + 0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, > + 0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0xcc, 0x30, 0x30, 0x30, > + 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53, > + 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0xe4, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78, > + 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74, > + 0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34, > + 0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca, > + 0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x36, > +}; > + > +/* > + * FRU: i2c13 @0x55 (CBC 1) > + * Chassis type: Blade Enclosure > + * Chassis part: 000-00000-0000-001 > + * Chassis serial: 000AAAA000001 > + * Board mfg: Nvidia > + * Board product: 18x1RU CBL Cartridge > + * Board part: 000-0000-006 > + * Board serial: 0000000000010 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: HS33172S03 > + * Product name: 18x1RU CBL Cartridge > + * Product part: 000-00000-0000-004 > + * Product version: E.4 > + * Product serial: 0000000000008 > + * Product asset: QEMU > + */ > +static const uint8_t fru_13_0055[] = { > + 0x01, 0x00, 0x01, 0x07, 0x11, 0x00, 0x00, 0xe6, 0x01, 0x06, 0x1d, 0xd2, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x08, 0x02, 0x00, 0x03, > + 0x02, 0x80, 0x15, 0x01, 0x00, 0xc1, 0x00, 0xca, 0x01, 0x0a, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd4, 0x31, 0x38, > + 0x78, 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, > + 0x74, 0x72, 0x69, 0x64, 0x67, 0x65, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0xcc, 0x30, 0x30, 0x30, > + 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x36, 0xca, 0x48, 0x53, > + 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0xec, 0x01, 0x0a, 0x19, 0xc0, 0xd4, 0x31, 0x38, 0x78, > + 0x31, 0x52, 0x55, 0x20, 0x43, 0x42, 0x4c, 0x20, 0x43, 0x61, 0x72, 0x74, > + 0x72, 0x69, 0x64, 0x67, 0x65, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x34, > + 0xc3, 0x45, 0x2e, 0x34, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xca, > + 0x48, 0x53, 0x33, 0x33, 0x31, 0x37, 0x32, 0x53, 0x30, 0x33, 0xc1, 0x35, > +}; > + > +/* > + * FRU: i2c13 @0x57 (HMC) > + * Board mfg: NVIDIA > + * Board product: P4764-A02 > + * Board part: 000-00000-0000-007 > + * Board serial: 0000000000011 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Product mfg: NVIDIA > + * Product name: HMC for GB200 NVL72 > + * Product part: 000-00000-0000-005 > + * Product version: A1 > + * Product serial: 0000000000009 > + * Product asset: QEMU > + */ > +static const uint8_t fru_13_0057[] = { > + 0x01, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xf5, 0x01, 0x08, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xc9, 0x50, 0x34, > + 0x37, 0x36, 0x34, 0x2d, 0x41, 0x30, 0x32, 0xcd, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0xd2, 0x30, 0x30, > + 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, > + 0x2d, 0x30, 0x30, 0x37, 0xc0, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, > + 0x01, 0x0b, 0x19, 0xc6, 0x4e, 0x56, 0x49, 0x44, 0x49, 0x41, 0xd3, 0x48, > + 0x4d, 0x43, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x47, 0x42, 0x32, 0x30, 0x30, > + 0x20, 0x4e, 0x56, 0x4c, 0x37, 0x32, 0xd2, 0x30, 0x30, 0x30, 0x2d, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x35, 0xc2, 0x41, 0x31, 0xcd, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, > + 0x46, 0x52, 0x55, 0x5f, 0x56, 0x65, 0x72, 0x5f, 0x30, 0x2e, 0x30, 0x32, > + 0xc1, 0x00, 0x00, 0xcb, > +}; > + > +/* > + * FRU: i2c15 @0x52 (OCP NIC1) > + * Board mfg: Nvidia > + * Board product: Nvidia ConnectX-7 OCP3.0 > + * Board part: AA00004AAA-AAAA_AA > + * Board serial: AA0000A0012A > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver 0.01 > + * Product mfg: Nvidia > + * Product name: Nvidia ConnectX-7 OCP3.0 > + * Product part: AA00002AAA-AAAA_AA > + * Product version: A2 > + * Product serial: AA0000A0010A > + * Product asset: QEMU > + * OEM records: 1 (53 bytes, zeroed) > + */ > +static const uint8_t fru_15_0052[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0e, 0x1c, 0x00, 0xd4, 0x01, 0x0d, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc6, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0xd8, 0x4e, 0x76, > + 0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, > + 0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50, 0x33, 0x2e, 0x30, 0xd8, 0x41, > + 0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x31, 0x32, 0x41, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd5, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x34, 0x41, 0x41, 0x41, 0x2d, 0x41, > + 0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52, > + 0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00, > + 0x00, 0x00, 0x00, 0xd1, 0x01, 0x0e, 0x19, 0xc6, 0x4e, 0x76, 0x69, 0x64, > + 0x69, 0x61, 0xd8, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x43, 0x6f, > + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x58, 0x2d, 0x37, 0x20, 0x4f, 0x43, 0x50, > + 0x33, 0x2e, 0x30, 0xd5, 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41, > + 0x41, 0x41, 0x2d, 0x41, 0x41, 0x41, 0x41, 0x5f, 0x41, 0x41, 0x20, 0x20, > + 0x20, 0xd3, 0x41, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd8, 0x41, 0x41, > + 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x30, 0x31, 0x30, 0x41, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc0, 0xc1, 0x00, 0x00, 0x0d, 0xc0, 0x82, 0x35, 0x00, > + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c21 @0x54 (interposer) > + * Board mfg: Ingrasys > + * Board product: Clemente Interposer PVT2 > + * Board part: 0A00AA000-008-A > + * Board serial: 0A00AA00A0001A3AA > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_21_0054[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0xf1, 0x01, 0x0c, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd8, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x49, 0x6e, 0x74, > + 0x65, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x20, 0x50, 0x56, 0x54, 0x32, > + 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x30, > + 0x30, 0x31, 0x41, 0x33, 0x41, 0x41, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, > + 0x41, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x38, 0x2d, 0x41, 0xce, 0x46, > + 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, > + 0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x01, 0x09, 0x00, 0xc8, > + 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xcb, 0x43, 0x49, 0x2d, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0xcf, 0x30, 0x41, 0x30, > + 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x31, 0x2d, 0x41, > + 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, 0x41, 0x41, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xc1, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, > +}; > + > +/* > + * FRU: i2c23 @0x51 (FIO) > + * Board mfg: Ingrasys > + * Board product: Clemente FIO PVT2 > + * Board part: 0A00A0A00-009-A > + * Board serial: 0A00A0A0A0000A14A > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_23_0051[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd1, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x46, 0x49, 0x4f, > + 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, > + 0x41, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x41, 0x31, 0x34, 0x41, 0xcf, > + 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, 0x30, > + 0x39, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, 0x2e, > + 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x98, > + 0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, > + 0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, > + 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, > + 0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, > +}; > + > +/* > + * FRU: i2c25 @0x56 (E1.S backplane 0) > + * Board mfg: Ingrasys > + * Board product: Clemente E1.S BP PVT2 > + * Board part: 0A00AA000-010-A > + * Board serial: 0A00AA00A0001A5AA > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_25_0056[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd5, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x45, 0x31, 0x2e, > + 0x53, 0x20, 0x42, 0x50, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, > + 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x31, 0x41, > + 0x35, 0x41, 0x41, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, > + 0x30, 0x2d, 0x30, 0x31, 0x30, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, > + 0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0xbf, > + 0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, > + 0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, > + 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, > + 0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, > +}; > + > +/* > + * FRU: i2c29 @0x50 (IO mezzanine 0) > + * Board mfg: Nvidia > + * Board product: ConnectX-8 800GE 2P NIC > + * Board part: 000-0A00A-A1AA-AA1 > + * Board serial: AA0000001AA6 > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver 0.01 > + * Product mfg: Nvidia > + * Product name: ConnectX-8 800GE 2P NIC > + * Product part: 000-0A00A-A0AA-AA6 > + * Product version: A1 > + * Product serial: AA0000001AA1 > + * Product asset: QEMU > + * OEM records: 1 (25 bytes, zeroed) > + */ > +static const uint8_t fru_29_0050[] = { > + 0x01, 0x00, 0x00, 0x01, 0x15, 0x2a, 0x00, 0xbf, 0x01, 0x14, 0x19, 0xc0, > + 0xc6, 0xf0, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, > + 0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32, 0x50, > + 0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41, 0x41, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x30, 0x31, 0x41, 0x41, 0x36, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0xdd, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d, > + 0x41, 0x31, 0x41, 0x41, 0x2d, 0x41, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52, 0x55, 0x20, > + 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00, 0x00, 0xd4, > + 0x01, 0x15, 0x19, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, > + 0x74, 0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32, > + 0x50, 0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x30, 0x30, 0x30, > + 0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d, 0x41, 0x30, 0x41, 0x41, 0x2d, > + 0x41, 0x41, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0xc7, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41, > + 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x41, 0x41, 0x31, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52, > + 0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x75, > + 0xd0, 0x82, 0x19, 0x00, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c29 @0x52 (IO mezzanine 0 OSFP) > + * Board mfg: Ingrasys > + * Board product: Clemente OSFP PVT2 > + * Board part: 0A00AAA00-012-A > + * Board serial: 0A00AAA0A000017AA > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_29_0052[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd2, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x4f, 0x53, 0x46, > + 0x50, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, 0x30, 0x30, 0x41, > + 0x41, 0x41, 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x37, 0x41, 0x41, > + 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x41, 0x30, 0x30, 0x2d, 0x30, > + 0x31, 0x32, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, 0x56, 0x65, 0x72, > + 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0x00, 0x00, 0x00, 0x1e, > + 0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, > + 0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, > + 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, > + 0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, > +}; > + > +/* > + * FRU: i2c37 @0x56 (E1.S backplane 1) > + * Board mfg: Ingrasys > + * Board product: Clemente E1.S BP PVT2 > + * Board part: 0A00AA000-010-A > + * Board serial: 0A00AA00A0001A8AA > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver. 0.05A > + * Product mfg: Ingrasys > + * Product name: CI-Clemente > + * Product part: 0A00A0A00-001-A > + * Product version: PVT2 > + * Product serial: 0AAA00000001 > + * Product asset: QEMU > + */ > +static const uint8_t fru_37_0056[] = { > + 0x01, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0xf2, 0x01, 0x0b, 0x19, 0xc0, > + 0xc6, 0xf0, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, 0xd5, > + 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x20, 0x45, 0x31, 0x2e, > + 0x53, 0x20, 0x42, 0x50, 0x20, 0x50, 0x56, 0x54, 0x32, 0xd1, 0x30, 0x41, > + 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x30, 0x30, 0x31, 0x41, > + 0x38, 0x41, 0x41, 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, > + 0x30, 0x2d, 0x30, 0x31, 0x30, 0x2d, 0x41, 0xce, 0x46, 0x52, 0x55, 0x20, > + 0x56, 0x65, 0x72, 0x2e, 0x20, 0x30, 0x2e, 0x30, 0x35, 0x41, 0xc1, 0xbc, > + 0x01, 0x09, 0x00, 0xc8, 0x49, 0x6e, 0x67, 0x72, 0x61, 0x73, 0x79, 0x73, > + 0xcb, 0x43, 0x49, 0x2d, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, > + 0xcf, 0x30, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x30, 0x30, 0x2d, 0x30, > + 0x30, 0x31, 0x2d, 0x41, 0xc4, 0x50, 0x56, 0x54, 0x32, 0xcc, 0x30, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0xc4, 0x51, > + 0x45, 0x4d, 0x55, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, > +}; > + > +/* > + * FRU: i2c41 @0x50 (IO mezzanine 1) > + * Board mfg: Nvidia > + * Board product: ConnectX-8 800GE 2P NIC > + * Board part: 000-0A00A-A1AA-AA1 > + * Board serial: AA0000019AAA > + * Board mfg date: 2026-01-01T00:00:00Z > + * Board file ID: FRU Ver 0.01 > + * Product mfg: Nvidia > + * Product name: ConnectX-8 800GE 2P NIC > + * Product part: 000-0A00A-A0AA-AA6 > + * Product version: A1 > + * Product serial: AA0000012AAA > + * Product asset: QEMU > + * OEM records: 1 (25 bytes, zeroed) > + */ > +static const uint8_t fru_41_0050[] = { > + 0x01, 0x00, 0x00, 0x01, 0x15, 0x2a, 0x00, 0xbf, 0x01, 0x14, 0x19, 0xc0, > + 0xc6, 0xf0, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, > + 0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32, 0x50, > + 0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41, 0x41, 0x30, 0x30, > + 0x30, 0x30, 0x30, 0x31, 0x39, 0x41, 0x41, 0x41, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0xdd, 0x30, 0x30, 0x30, 0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d, > + 0x41, 0x31, 0x41, 0x41, 0x2d, 0x41, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xcc, 0x46, 0x52, 0x55, 0x20, > + 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x00, 0x00, 0xc0, > + 0x01, 0x15, 0x19, 0xd9, 0x4e, 0x76, 0x69, 0x64, 0x69, 0x61, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0xf2, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, > + 0x74, 0x58, 0x2d, 0x38, 0x20, 0x38, 0x30, 0x30, 0x47, 0x45, 0x20, 0x32, > + 0x50, 0x20, 0x4e, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x30, 0x30, 0x30, > + 0x2d, 0x30, 0x41, 0x30, 0x30, 0x41, 0x2d, 0x41, 0x30, 0x41, 0x41, 0x2d, > + 0x41, 0x41, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0xc7, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0xdd, 0x41, > + 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x32, 0x41, 0x41, 0x41, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, > + 0x20, 0x20, 0x20, 0x20, 0xc4, 0x51, 0x45, 0x4d, 0x55, 0xcc, 0x46, 0x52, > + 0x55, 0x20, 0x56, 0x65, 0x72, 0x20, 0x30, 0x2e, 0x30, 0x31, 0xc1, 0x63, > + 0xd0, 0x82, 0x19, 0x00, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c45 @0x53 (boot drive) > + * Product mfg: Samsung > + * Product name: PM9D3a > + * Product part: AAAA00A0AAAA-07AAA > + * Product version: > + * Product serial: A0AAAA0A000013 > + * OEM records: 3 (91 bytes, zeroed) > + */ > +static const uint8_t fru_45_0053[] = { > + 0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8, > + 0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39, > + 0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30, > + 0x37, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, > + 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x33, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, > + 0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00, > + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c48 @0x53 (E1.S backplane 0 drive 0) > + * Product mfg: Samsung > + * Product name: PM9D3a > + * Product part: AAAA00A0AAAA-08AAA > + * Product version: > + * Product serial: A0A0AA0A000014 > + * OEM records: 3 (91 bytes, zeroed) > + */ > +static const uint8_t fru_48_0053[] = { > + 0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8, > + 0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39, > + 0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30, > + 0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41, > + 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x34, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, > + 0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00, > + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c50 @0x53 (E1.S backplane 0 drive 2) > + * Product mfg: Samsung > + * Product name: PM9D3a > + * Product part: AAAA00A0AAAA-08AAA > + * Product version: > + * Product serial: A0A0AA0A000015 > + * OEM records: 3 (91 bytes, zeroed) > + */ > +static const uint8_t fru_50_0053[] = { > + 0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8, > + 0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39, > + 0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30, > + 0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41, > + 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x35, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, > + 0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00, > + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c52 @0x53 (E1.S backplane 1 drive 0) > + * Product mfg: Samsung > + * Product name: PM9D3a > + * Product part: AAAA00A0AAAA-08AAA > + * Product version: > + * Product serial: A0A0AA0A000016 > + * OEM records: 3 (91 bytes, zeroed) > + */ > +static const uint8_t fru_52_0053[] = { > + 0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8, > + 0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39, > + 0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30, > + 0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41, > + 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x36, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, > + 0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00, > + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +/* > + * FRU: i2c54 @0x53 (E1.S backplane 1 drive 2) > + * Product mfg: Samsung > + * Product name: PM9D3a > + * Product part: AAAA00A0AAAA-08AAA > + * Product version: > + * Product serial: A0A0AA0A000017 > + * OEM records: 3 (91 bytes, zeroed) > + */ > +static const uint8_t fru_54_0053[] = { > + 0x01, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0xef, 0x01, 0x0e, 0x19, 0xc8, > + 0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x00, 0xd8, 0x50, 0x4d, 0x39, > + 0x44, 0x33, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x41, > + 0x41, 0x41, 0x30, 0x30, 0x41, 0x30, 0x41, 0x41, 0x41, 0x41, 0x2d, 0x30, > + 0x38, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0xc2, 0x00, 0x00, 0xd4, 0x41, 0x30, 0x41, 0x30, 0x41, 0x41, > + 0x30, 0x41, 0x30, 0x30, 0x30, 0x30, 0x31, 0x37, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, > + 0x0b, 0x02, 0x3b, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x0b, 0x00, 0xe7, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x82, 0x15, 0x00, > + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > +}; > + > +typedef struct ClementeFru { > + const uint8_t *data; > + size_t size; > +} ClementeFru; > + > +/* The images an E1.S backplane needs: its own FRU and its two drives. */ > +typedef struct ClementeE1sFru { > + ClementeFru backplane; /* @0x56 */ > + ClementeFru drive0; /* mux channel 0 @0x53 */ > + ClementeFru drive2; /* mux channel 2 @0x53 */ > +} ClementeE1sFru; > + > +static const ClementeE1sFru clemente_e1s_fru[] = { > + { > + .backplane = { fru_25_0056, sizeof(fru_25_0056) }, > + .drive0 = { fru_48_0053, sizeof(fru_48_0053) }, > + .drive2 = { fru_50_0053, sizeof(fru_50_0053) }, > + }, > + { > + .backplane = { fru_37_0056, sizeof(fru_37_0056) }, > + .drive0 = { fru_52_0053, sizeof(fru_52_0053) }, > + .drive2 = { fru_54_0053, sizeof(fru_54_0053) }, > + }, > +}; > + > +/* The images an IO mezzanine needs: its own FRU and the OSFP one. */ > +typedef struct ClementeIoMezzFru { > + ClementeFru mezzanine; /* @0x50 */ > + ClementeFru osfp; /* @0x52 */ > +} ClementeIoMezzFru; > + > +static const ClementeIoMezzFru clemente_io_mezz_fru[] = { > + { > + .mezzanine = { fru_29_0050, sizeof(fru_29_0050) }, > + .osfp = { fru_29_0052, sizeof(fru_29_0052) }, > + }, > + { > + .mezzanine = { fru_41_0050, sizeof(fru_41_0050) }, > + /* the OSFP FRU was absent from the sampled chassis */ > + }, > +}; > + > /* > * E1.S backplane hanging off a PCA9546 channel: an FRU EEPROM plus a > * second PCA9546 fronting per-drive NVMe SSD FRU EEPROMs. > */ > -static void clemente_e1s_backplane_init(I2CBus *bus) > +static void clemente_e1s_backplane_init(I2CBus *bus, > + const ClementeE1sFru *fru) > { > /* eeprom@56 - atmel,24c128 */ > - at24c_eeprom_init(bus, 0x56, 16 * KiB); > + at24c_eeprom_init_rom(bus, 0x56, 16 * KiB, > + fru->backplane.data, fru->backplane.size); > > /* i2c-mux@74 - PCA9546 */ > I2CSlave *mux = i2c_slave_create_simple(bus, TYPE_PCA9546, 0x74); > /* eeprom@53 - atmel,24c02, channels 0 and 2 */ > - at24c_eeprom_init(pca954x_i2c_get_bus(mux, 0), 0x53, 256); > - at24c_eeprom_init(pca954x_i2c_get_bus(mux, 2), 0x53, 256); > + at24c_eeprom_init_rom(pca954x_i2c_get_bus(mux, 0), 0x53, 256, > + fru->drive0.data, fru->drive0.size); > + at24c_eeprom_init_rom(pca954x_i2c_get_bus(mux, 2), 0x53, 256, > + fru->drive2.data, fru->drive2.size); > } > > /* > * IO Mezzanine hanging off a PCA9546 channel: an I/O expander plus the > * mezzanine and OSFP FRU EEPROMs. > */ > -static void clemente_io_mezz_init(I2CBus *bus, uint8_t exp_addr) > +static void clemente_io_mezz_init(I2CBus *bus, uint8_t exp_addr, > + const ClementeIoMezzFru *fru) > { > /* gpio@20/21 - nxp,pca9535 */ > i2c_slave_create_simple(bus, TYPE_PCA9535, exp_addr); > /* eeprom@50 - atmel,24c64 (mezzanine FRU) */ > - at24c_eeprom_init(bus, 0x50, 8 * KiB); > + at24c_eeprom_init_rom(bus, 0x50, 8 * KiB, > + fru->mezzanine.data, fru->mezzanine.size); > /* eeprom@52 - atmel,24c128 (OSFP FRU) */ > - at24c_eeprom_init(bus, 0x52, 16 * KiB); > + at24c_eeprom_init_rom(bus, 0x52, 16 * KiB, > + fru->osfp.data, fru->osfp.size); > } > > static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > @@ -78,12 +981,14 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > /* i2c-mux@71 (PCA9546) */ > i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x71); > /* channel 1 - HDD FRU eeprom@56 and E1.S backplane */ > - clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1)); > + clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1), > + &clemente_e1s_fru[0]); > > /* i2c-mux@72 (PCA9546) */ > i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x72); > /* channel 1 - IO Mezz 0 (io_expander7 @20) */ > - clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x20); > + clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x20, > + &clemente_io_mezz_fru[0]); > > /* i2c-mux@73 (PCA9546) - channels empty */ > i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x73); > @@ -91,17 +996,20 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > /* i2c-mux@75 (PCA9546) */ > i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x75); > /* channel 1 - HDD FRU eeprom@56 and E1.S backplane */ > - clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1)); > + clemente_e1s_backplane_init(pca954x_i2c_get_bus(i2c_mux, 1), > + &clemente_e1s_fru[1]); > > /* i2c-mux@76 (PCA9546) */ > i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x76); > /* channel 1 - IO Mezz 1 (io_expander8 @21) */ > - clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x21); > + clemente_io_mezz_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x21, > + &clemente_io_mezz_fru[1]); > > /* i2c-mux@77 (PCA9546) */ > i2c_mux = i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x77); > /* channel 1 - boot drive FRU eeprom@53 */ > - at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x53, 256); > + at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 1), 0x53, 256, > + fru_45_0053, sizeof(fru_45_0053)); > > /* &i2c1 */ > /* power-monitor@12/14 - ti,lm5066i (no model) */ > @@ -110,7 +1018,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > /* temperature-sensor@4e - ti,tmp1075 */ > i2c_slave_create_simple(i2c[1], TYPE_TMP1075, 0x4e); > /* eeprom@50 - atmel,24c02 (PDB FRU) */ > - at24c_eeprom_init(i2c[1], 0x50, 256); > + at24c_eeprom_init_rom(i2c[1], 0x50, 256, fru_1_0050, > + sizeof(fru_1_0050)); > /* vrm@60/61 - renesas,raa228004 (no model) */ > /* i2c-mux@70 (PCA9548) - interposer */ > i2c_mux = i2c_slave_create_simple(i2c[1], TYPE_PCA9548, 0x70); > @@ -118,7 +1027,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > /* temperature-sensor@4f - ti,tmp75 */ > i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 5), TYPE_TMP75, 0x4f); > /* eeprom@54 - atmel,24c64 */ > - at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 5), 0x54, 8 * KiB); > + at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 5), 0x54, > + 8 * KiB, fru_21_0054, sizeof(fru_21_0054)); > /* channel 6 - io_expander5 gpio@27 - nxp,pca9554 */ > i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 6), > TYPE_PCA9554, 0x27); > @@ -126,7 +1036,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > /* temperature-sensor@4b - ti,tmp75 */ > i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 7), TYPE_TMP75, 0x4b); > /* eeprom@51 - atmel,24c64 */ > - at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 7), 0x51, 8 * KiB); > + at24c_eeprom_init_rom(pca954x_i2c_get_bus(i2c_mux, 7), 0x51, > + 8 * KiB, fru_23_0051, sizeof(fru_23_0051)); > > /* &i2c2 */ > /* gpio@20/21/27 - nxp,pca9555 */ > @@ -156,35 +1067,45 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > /* gpio@4f - nxp,pca9555 */ > i2c_slave_create_simple(i2c[9], TYPE_PCA9555, 0x4f); > /* eeprom@50 - atmel,24c64 (SCM FRU) */ > - at24c_eeprom_init(i2c[9], 0x50, 8 * KiB); > + at24c_eeprom_init_rom(i2c[9], 0x50, 8 * KiB, fru_9_0050, > + sizeof(fru_9_0050)); > /* eeprom@56 - atmel,24c64 (BSM FRU) */ > - at24c_eeprom_init(i2c[9], 0x56, 8 * KiB); > + at24c_eeprom_init_rom(i2c[9], 0x56, 8 * KiB, fru_9_0056, > + sizeof(fru_9_0056)); > > /* &i2c10 */ > /* mctp@10 - mctp-i2c-controller (no model) */ > /* temperature-sensor@1f - ti,tmp421 (OCP NIC0) */ > i2c_slave_create_simple(i2c[10], TYPE_TMP421, 0x1f); > /* eeprom@50 - atmel,24c64 (OCP NIC0 FRU) */ > - at24c_eeprom_init(i2c[10], 0x50, 8 * KiB); > + at24c_eeprom_init_rom(i2c[10], 0x50, 8 * KiB, fru_10_0050, > + sizeof(fru_10_0050)); > > /* &i2c11 */ > /* ssif-bmc@10 - ssif-bmc (no model) */ > > /* &i2c12 */ > /* eeprom@50 - atmel,24c64 (HPM 1 FRU) */ > - at24c_eeprom_init(i2c[12], 0x50, 8 * KiB); > + at24c_eeprom_init_rom(i2c[12], 0x50, 8 * KiB, fru_12_0050, > + sizeof(fru_12_0050)); > /* eeprom@54/55 - atmel,24c02 (CBC 2/3 FRU) */ > - at24c_eeprom_init(i2c[12], 0x54, 256); > - at24c_eeprom_init(i2c[12], 0x55, 256); > + at24c_eeprom_init_rom(i2c[12], 0x54, 256, fru_12_0054, > + sizeof(fru_12_0054)); > + at24c_eeprom_init_rom(i2c[12], 0x55, 256, fru_12_0055, > + sizeof(fru_12_0055)); > > /* &i2c13 */ > /* eeprom@50 - atmel,24c64 (HPM FRU) */ > - at24c_eeprom_init(i2c[13], 0x50, 8 * KiB); > + at24c_eeprom_init_rom(i2c[13], 0x50, 8 * KiB, fru_13_0050, > + sizeof(fru_13_0050)); > /* eeprom@54/55 - atmel,24c02 (CBC 0/1 FRU) */ > - at24c_eeprom_init(i2c[13], 0x54, 256); > - at24c_eeprom_init(i2c[13], 0x55, 256); > + at24c_eeprom_init_rom(i2c[13], 0x54, 256, fru_13_0054, > + sizeof(fru_13_0054)); > + at24c_eeprom_init_rom(i2c[13], 0x55, 256, fru_13_0055, > + sizeof(fru_13_0055)); > /* eeprom@57 - atmel,24c02 (HMC FRU) */ > - at24c_eeprom_init(i2c[13], 0x57, 256); > + at24c_eeprom_init_rom(i2c[13], 0x57, 256, fru_13_0057, > + sizeof(fru_13_0057)); > > /* &i2c14 */ > /* gpio@10/11/12/13/14 - nxp,pca9555 (PDB CPLD) */ > @@ -199,7 +1120,8 @@ static void clemente_bmc_i2c_init(AspeedMachineState *bmc) > /* temperature-sensor@1f - ti,tmp421 (OCP NIC1) */ > i2c_slave_create_simple(i2c[15], TYPE_TMP421, 0x1f); > /* eeprom@52 - atmel,24c64 (OCP NIC1 FRU) */ > - at24c_eeprom_init(i2c[15], 0x52, 8 * KiB); > + at24c_eeprom_init_rom(i2c[15], 0x52, 8 * KiB, fru_15_0052, > + sizeof(fru_15_0052)); > } > > static void aspeed_machine_clemente_class_init(ObjectClass *oc, > > -- > 2.53.0-Meta > > Reviewed-by: Jamin Lin