From patchwork Tue Feb 19 07:53:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver O'Halloran X-Patchwork-Id: 1044525 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 443Y082Wdzz9s21 for ; Tue, 19 Feb 2019 18:54:00 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="UnV4hKd3"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 443Y0801YvzDqJf for ; Tue, 19 Feb 2019 18:54:00 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::444; helo=mail-pf1-x444.google.com; envelope-from=oohall@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="UnV4hKd3"; dkim-atps=neutral Received: from mail-pf1-x444.google.com (mail-pf1-x444.google.com [IPv6:2607:f8b0:4864:20::444]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 443Y031JgvzDqJ3 for ; Tue, 19 Feb 2019 18:53:54 +1100 (AEDT) Received: by mail-pf1-x444.google.com with SMTP id v21so6847278pfm.12 for ; Mon, 18 Feb 2019 23:53:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fjWg3BSNZFA5rShlmDdOM/sirVdF3LgG6G5/6EMYAiQ=; b=UnV4hKd3CpYRtWuL+oM08VzJqjkmAGdZe3LF32+0rytgxiewUwPN54WiMXwZpbIMU0 WI5N2dJTRDQ5qFPvibogMgyypJAmpN+ra1XlXIYa6ADb2pPDCWSAhaaxOrAGrDPt3CjF LvzoCQWlceoLa3qOqpchtzEGG297ESEVfTlN9TT/A5KFLW6VlxqltfvT7zrHKI0pLID7 CQi/hH8bLptZPc6aR5rMMJxRLNtFuJBkOkGRXuJhznfiyxbaZe04mUmryD7UziHEHWnp OcomKUrshYQkE+usVqcWKSVU3aM0k1BhAre60vaiJd9qSmgHtaXDL+eB18fmNn8QzL8Y TUxg== 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:mime-version :content-transfer-encoding; bh=fjWg3BSNZFA5rShlmDdOM/sirVdF3LgG6G5/6EMYAiQ=; b=dammeQgsmR79wgIlsbxzBkGci4EmjS3lExeJFOIf25aIZ6eaC9/+1xMcCb3IdNcYX1 muIBsYs4mXD9VYO+/xmwOa+9BXygs9VZzxFEAgRG4b2YXSFYVw+GP/hrrYshm3F2VsZm icoihDYYd0liD9hQo81cPxJRwT5iDkgKa0JNAsn1WnlD+6ftE8uD4zDinS+TcSbLyYHw Qz+YdvkPOdrOaDqwdBaG9OyHhCNcbaPsNiPuYOjxAxlytS2VvsPI5g/atVmMmiO4zBSn Kw1ATS59qoiHhQEiQ63zVPrS6LmiuP+x2fgO4In13PNgbgw+TY6mMIWrokxQCX4doUCS Oagw== X-Gm-Message-State: AHQUAubQd/122I4zJ+wm0yegaooG+R66n9Kzf8r4ML20cyCS4fCVRNdk jWtV5aDgUGAhHwHZBgRBhTTN1Um7 X-Google-Smtp-Source: AHgI3IZbEsP1Ku+sc6dcsXFIWfqrGCoemYaWowHx9L0B8hz31IB/mj7SY7PypaiZunIlzz92vd7eFA== X-Received: by 2002:a65:62ca:: with SMTP id m10mr22536786pgv.6.1550562832858; Mon, 18 Feb 2019 23:53:52 -0800 (PST) Received: from wafer.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id r3sm39651582pgn.48.2019.02.18.23.53.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Feb 2019 23:53:52 -0800 (PST) From: Oliver O'Halloran To: skiboot@lists.ozlabs.org Date: Tue, 19 Feb 2019 18:53:36 +1100 Message-Id: <20190219075339.14226-1-oohall@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [Skiboot] [PATCH 1/4] hdata/test: Fix up linux,sml-base property X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" The linux,sml-base property stores a raw pointer into the HDAT area. When running the hdat parser tester the load address of the HDAT will change each time the tool is run so we need to sanatise the property to get consistent output. Signed-off-by: Oliver O'Halloran --- hdata/test/hdata_to_dt.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hdata/test/hdata_to_dt.c b/hdata/test/hdata_to_dt.c index fd2957ce60d0..a5f152e86b63 100644 --- a/hdata/test/hdata_to_dt.c +++ b/hdata/test/hdata_to_dt.c @@ -253,8 +253,23 @@ static void squash_blobs(struct dt_node *root) static void dump_hdata_fdt(struct dt_node *root) { + struct dt_node *n; void *fdt_blob; + /* delete some properties that hardcode pointers */ + dt_for_each_node(dt_root, n) { + struct dt_property *base; + + /* + * sml-base is a raw pointer into the HDAT area so it changes + * on each execution of hdata_to_dt. Work around this by + * zeroing it. + */ + base = __dt_find_property(n, "linux,sml-base"); + if (base) + memset(base->prop, 0, base->len); + } + fdt_blob = create_dtb(root, false); if (!fdt_blob) { From patchwork Tue Feb 19 07:53:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver O'Halloran X-Patchwork-Id: 1044527 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 443Y0t2Lhqz9s21 for ; Tue, 19 Feb 2019 18:54:38 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HB3Fqa5+"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 443Y0t00PFzDqKV for ; Tue, 19 Feb 2019 18:54:38 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::62a; helo=mail-pl1-x62a.google.com; envelope-from=oohall@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HB3Fqa5+"; dkim-atps=neutral Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 443Y084X5mzDqK3 for ; Tue, 19 Feb 2019 18:54:00 +1100 (AEDT) Received: by mail-pl1-x62a.google.com with SMTP id bj4so10030560plb.7 for ; Mon, 18 Feb 2019 23:54:00 -0800 (PST) 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 :mime-version:content-transfer-encoding; bh=AaYHUynlc2EcXmXD0bDzA1d73VJaEtGcGsMqoDgBbVk=; b=HB3Fqa5+5tTLlhC5crksf5CXFsoCW6ESnDhcd97McoB5WIJFemi22sNjaUz/qcD3pA fDU4ANjlhw7xxH7yQR2apNCpcOBethKn4RqeaJXfJ+aAC2nQB86r9EbOPTw1LRZbtNNK 7t6mIQd4Vnk7/jMdST2C947+sdkDz9pYT1W+5ugYEuaVxgm3rEqFwKN1n7mUusNDnr86 1gSku8BTMxhxcpleEtkz3drlkS8Xi2FyShFKoJTQs7TtblIKlfdzll/+OwUmvAjpU5BB GZcutKA8dRBU3JTbQgHPPexLpXK1rmijQvzXIgMmsfNBca5+gg6b1poFa1OhP2M6gw14 ZL5A== 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:mime-version:content-transfer-encoding; bh=AaYHUynlc2EcXmXD0bDzA1d73VJaEtGcGsMqoDgBbVk=; b=FcKODccJz7iIfEjPHxX14Svkm2s7anfS8owYmt7bcugS5TRkmyC3560OdPUZJLT+u5 2L4A7B92xR4ZRcf/iltRNFptYjRjRRsSz2RQJCDor5hXCUiuZQ0ut/avchnyD9ukzBY3 biAouERDbo5zC13UhgRdglODMOJjgrq51KxwDjkoSjlEGEiHO+wuf6XIAwc6SLtlEuK5 h7lLrFqkj736aOheq0lDFPFssoSB51UGwQM+MCYDJTxz5W2mCNqwfIzJ9tMN3OchpeS2 HUL3u2I8FgGxofQ9eSA5B8/8Y7hdnl6kjvdj100HW3nXSOg8nE4ecv7XjD83b2/pHgZ9 LeeA== X-Gm-Message-State: AHQUAuaY8oaWlstVvERz31dgtIX1/3jG0XqjdxkvGVFREYUAgkL4UGMv GzJNq+U1I2pLGtR3Nuc7p/DluIk/ X-Google-Smtp-Source: AHgI3Ib0pmdeGdnk6VjhRnOD/bHotGpy17xzTk6hDDmHiqISEegZxkbiCGEr4tsVPw4v0Rwl9cwaxQ== X-Received: by 2002:a17:902:1027:: with SMTP id b36mr29788562pla.339.1550562835185; Mon, 18 Feb 2019 23:53:55 -0800 (PST) Received: from wafer.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id r3sm39651582pgn.48.2019.02.18.23.53.53 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Feb 2019 23:53:54 -0800 (PST) From: Oliver O'Halloran To: skiboot@lists.ozlabs.org Date: Tue, 19 Feb 2019 18:53:37 +1100 Message-Id: <20190219075339.14226-2-oohall@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190219075339.14226-1-oohall@gmail.com> References: <20190219075339.14226-1-oohall@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH 2/4] hdata/test: Add OP920 HDAT test data X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" It's probably about time we did that. Signed-off-by: Oliver O'Halloran --- hdata/test/Makefile.check | 3 +++ hdata/test/op920.wsp.heap | Bin 0 -> 2644400 bytes 2 files changed, 3 insertions(+) create mode 100644 hdata/test/op920.wsp.heap diff --git a/hdata/test/op920.wsp.heap b/hdata/test/op920.wsp.heap new file mode 100644 index 0000000000000000000000000000000000000000..77bff65c9ad68d0522aaa3a421080305fe718d63 GIT binary patch literal 2644400 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5Gc36%JrkF>l%v1P`4^6CUZiJ)5WABd}hO-uqKYDq;c!g(lO>3 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009DjK7p!a zPEz&f`#HZvfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oU%*1XiveSvR46L^0H^N|K5JA;#%qQV~A0VQ7-%UJdK^3A6bv%i4w`!%T-K3!US# z4o~j-t1Na~mBsGQWwGk{7;{}-+AEEPm$TTtL;rNXXD*kVV_j^7ejzZ94E?tDTzpU>S| zjPv=z{4{pVEy!YFVH!K-Zp&if_B3|R{V^%Mop*UQ2}7UUEopoDDo{J6RiV?+HONiJC!Vlf@l%@0#aGBhk76vpN-y-SGahd3y%*fNCuHY`oH zd~eIbg}2X}9~Xw9n6AyH)6dq@Z5D>f{li$_+;m!TbWL%@%%-X54H}$%wW1>px%FarL`<_G&z8MemEA z%_pTYVnaq%SI1hdrS3TOt{3YYHlDa(_N7n1_wq?iU!D8H+6R^%KIFK%tB)P~!ApJe zNvVvi)adO?%{!sX<-NYer82To zHL+9_%r>IX*159eBSJ0{jAC7opxr^^p6xire|#M4u?>< zL`G%EAAek3aoXv{;b%^6{z%Ck7Ry$YZfo51W2QAW6(={wghCiI$?Quz{`}Z-9m`v; zQ+dm6Zx`owHsn8gY^KQ(tD$*Hv99UwW=uY}sd4+7Lx1({mgyJ&;jC3h&sa5k((iX& z^X{ywU$^gd|z9v@V$ znRk7|4c9-lc+aZ}_tosSVa+d&cy|3Yr`|X}pOngo2TJYm;oFzGdB889+jvpU(%%34 z-je)6JFmp}SeMbk;U|6|X8U3g_aDV342)is2w=@nDl$@0mIOPlt& z_1*l14_tO;uRGq^@BHsBxTR}la_9GZ?Xm2ke_6KZ?xVlCsP>tC=im1JDYIYw&iXlb zJoLLE7i{VlYqf+Swkb}RqgGa8l<9{osGPs*3umAF{)fl)xNhFb|GuF3 z<@aBlnomk)M6Kb&#*dG&wRwBb`sqJaerdwnuby-IudkhYWlP_u`t>_~%7lK04BGh8 zPrmYRU&$w>GU63Tb!~0Km=Sfyq!*pr`r?xuiKUL<*s6~npY5&H_V{dXt+vN!duzpQ zjbpaIef*hgXI^cO&-S*f?eW>(T5XTd_SOni1_A^K5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=ENIDtN)#k+>FDvT9d VVw{dcE(^)fEz?`)$8TAl{13)b=2-v$ literal 0 HcmV?d00001 diff --git a/hdata/test/Makefile.check b/hdata/test/Makefile.check index 35524cc33098..368fcbace226 100644 --- a/hdata/test/Makefile.check +++ b/hdata/test/Makefile.check @@ -19,16 +19,19 @@ hdata/test/hdata_to_dt-check: hdata/test/hdata_to_dt-check-dt hdata/test/hdata_to_dt-check-q: hdata/test/hdata_to_dt $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E -q hdata/test/p81-811.spira hdata/test/p81-811.spira.heap, $<) $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E -s -q hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras, $<) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -9 -s -q hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap, $<) hdata/test/hdata_to_dt-check-dt: hdata/test/hdata_to_dt $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E hdata/test/p81-811.spira hdata/test/p81-811.spira.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p81-811.spira.dts, $< device-tree) $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -8E -s hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p8-840-spira.dts, $< device-tree) + $(call Q, TEST , $(VALGRIND) hdata/test/hdata_to_dt -9 -s hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/op920.wsp.dts, $< device-tree) hdata/test/hdata_to_dt-gcov-run: hdata/test/hdata_to_dt-check-dt-gcov-run hdata/test/hdata_to_dt-check-dt-gcov-run: hdata/test/hdata_to_dt-gcov $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt-gcov -8E hdata/test/p81-811.spira hdata/test/p81-811.spira.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p81-811.spira.dts, $< device-tree) $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt-gcov -8E -s hdata/test/p8-840-spira.spirah hdata/test/p8-840-spira.spiras 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/p8-840-spira.dts, $< device-tree) + $(call Q, TEST-COVERAGE , ./hdata/test/hdata_to_dt -9 -s hdata/test/p8-840-spira.spirah hdata/test/op920.wsp.heap 2>/dev/null | hdata/test/dtdiff_wrap.sh hdata/test/op920.wsp.dts, $< device-tree) hdata/test/stubs.o: hdata/test/stubs.c $(call Q, HOSTCC , $(HOSTCC) $(HOSTCFLAGS) -g -c -o $@ $<, $<) From patchwork Tue Feb 19 07:53:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver O'Halloran X-Patchwork-Id: 1044526 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 443Y0T417mz9s7h for ; Tue, 19 Feb 2019 18:54:17 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NOhsqc75"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 443Y0T1wV0zDqKr for ; Tue, 19 Feb 2019 18:54:17 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::443; helo=mail-pf1-x443.google.com; envelope-from=oohall@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NOhsqc75"; dkim-atps=neutral Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 443Y0701LszDqJ3 for ; Tue, 19 Feb 2019 18:53:58 +1100 (AEDT) Received: by mail-pf1-x443.google.com with SMTP id g6so9827581pfh.13 for ; Mon, 18 Feb 2019 23:53:58 -0800 (PST) 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 :mime-version:content-transfer-encoding; bh=yEhaR345Apjs7GtnMPu/whf0ZJ69eubfmoJ2Ea9LAPI=; b=NOhsqc75eBElkxEvPbP3EBKQaoxpEgyVf2TsHmW/cdcmVJDREZ+nsi0GXqHO1yZAfJ SPahIrhMHLLPZfZDXYK561DINQ8/H7+Y8BiP0g9i8nlXQp6JlcUxxXktxdwvI+utn9Bg 2xEunxn2lDWrdBPjtHURgXWsXsMFOVoLc5JiTQ9ZcwXr7L7ZqbwbvKWSA+IL8QMfU+c/ e9QmIs/Mec2lXxAdvruQbTlBVpOa927YzGoXhRt4UIc9XC3nh8COL5IeaFJsEsmEryt6 v1+rstCDCwyCvOLtBdECd6z6eFwHZvf9u/TYfoV0Jm8/EOls7Rg5g9zRxjKio6g4ku+D KpKQ== 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:mime-version:content-transfer-encoding; bh=yEhaR345Apjs7GtnMPu/whf0ZJ69eubfmoJ2Ea9LAPI=; b=U923X7Zp4EhFn7bK/ClC6sbpAsU7ZTD2rKgI6CuRzaShqyLqSbltdWhZXpzRzcZlsZ 9YwbzMwHSXNyT4KpAPvl9vm+LpuYwPK8yfV8/WXrEZuS8NpILT0SY9XiiE6A48w4EEmd Sm11ItSwM8g+DJYIHKYaHqmmkZG1bIMuq0sYqgFUevSh/eGju064U+yovN2fVLsUCY5I LJIsVBnGYmRKoGHhYSC4W0Nss75YEzg0ImaWB9q44YC60kHmJgGLRamARxEuGygWBtAN Poc+nOe9kqosyqYIcYDljvf+9cLC9mbCIBJFjQWn8e0fcwdXD32ktToZKR4tJGXUmdIQ bnxg== X-Gm-Message-State: AHQUAuajfZ1gmivh3GZFrMHwlx/1eBHUNcgiOOxKvP9FK5YTQIriISEa FB3jbMtwSiP8FMfwsLt3Ll74Nc4i X-Google-Smtp-Source: AHgI3IYKva9RPw6yB9lOGsytzFuUF1EwKmo0fVTIyYTjcPxufGmpZji9TIM3k4KQ8bj+HlKpzeXhUg== X-Received: by 2002:a62:4188:: with SMTP id g8mr28991282pfd.205.1550562837076; Mon, 18 Feb 2019 23:53:57 -0800 (PST) Received: from wafer.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id r3sm39651582pgn.48.2019.02.18.23.53.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Feb 2019 23:53:56 -0800 (PST) From: Oliver O'Halloran To: skiboot@lists.ozlabs.org Date: Tue, 19 Feb 2019 18:53:38 +1100 Message-Id: <20190219075339.14226-3-oohall@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190219075339.14226-1-oohall@gmail.com> References: <20190219075339.14226-1-oohall@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH 3/4] hdata/memory: Remove find_shared() X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" This helper function is used to check if the node we are about to create already exists. There's no real need for this considering we already have perfectly functional methods for searching the device-tree, so drop it in favour of the more standard dt_find_name_addr(). Signed-off-by: Oliver O'Halloran --- hdata/memory.c | 43 +++---------------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/hdata/memory.c b/hdata/memory.c index a36337b20e3b..3e6271444ce6 100644 --- a/hdata/memory.c +++ b/hdata/memory.c @@ -68,32 +68,6 @@ struct HDIF_ms_area_id { __be16 share_id; } __packed; -static struct dt_node *find_shared(struct dt_node *root, u16 id, u64 start, u64 len) -{ - struct dt_node *i; - - for (i = dt_first(root); i; i = dt_next(root, i)) { - __be64 reg[2]; - const struct dt_property *shared, *type, *region; - - type = dt_find_property(i, "device_type"); - if (!type || strcmp(type->prop, "memory") != 0) - continue; - - shared = dt_find_property(i, DT_PRIVATE "share-id"); - if (!shared || fdt32_to_cpu(*(u32 *)shared->prop) != id) - continue; - - region = dt_find_property(i, "reg"); - if (!region) - continue; - memcpy(reg, region->prop, sizeof(reg)); - if (be64_to_cpu(reg[0]) == start && be64_to_cpu(reg[1]) == len) - break; - } - return i; -} - static void append_chip_id(struct dt_node *mem, u32 id) { struct dt_property *prop; @@ -123,13 +97,8 @@ static bool add_address_range(struct dt_node *root, const struct HDIF_ms_area_address_range *arange) { struct dt_node *mem; + u32 chip_id, type; u64 reg[2]; - char *name; - u32 chip_id; - size_t namesz = sizeof("memory@") + STR_MAX_CHARS(reg[0]); - - name = (char*)malloc(namesz); - assert(name); chip_id = pcid_to_chip_id(be32_to_cpu(arange->chip)); @@ -144,18 +113,14 @@ static bool add_address_range(struct dt_node *root, reg[1] = cleanup_addr(be64_to_cpu(arange->end)) - reg[0]; if (be16_to_cpu(id->flags) & MS_AREA_SHARED) { - /* Only enter shared nodes once. */ - mem = find_shared(root, be16_to_cpu(id->share_id), - reg[0], reg[1]); + mem = dt_find_by_name_addr("memory", reg[0]); if (mem) { append_chip_id(mem, chip_id); - free(name); return true; } } - snprintf(name, namesz, "memory@%llx", (long long)reg[0]); - mem = dt_new(root, name); + mem = dt_new_addr(root, name, reg[0]); dt_add_property_string(mem, "device_type", "memory"); dt_add_property_cells(mem, "ibm,chip-id", chip_id); dt_add_property_u64s(mem, "reg", reg[0], reg[1]); @@ -163,8 +128,6 @@ static bool add_address_range(struct dt_node *root, dt_add_property_cells(mem, DT_PRIVATE "share-id", be16_to_cpu(id->share_id)); - free(name); - return true; } From patchwork Tue Feb 19 07:53:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver O'Halloran X-Patchwork-Id: 1044528 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 443Y190XZ9z9s7h for ; Tue, 19 Feb 2019 18:54:53 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tldjEf6h"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 443Y185V3vzDqJK for ; Tue, 19 Feb 2019 18:54:52 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::643; helo=mail-pl1-x643.google.com; envelope-from=oohall@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tldjEf6h"; dkim-atps=neutral Received: from mail-pl1-x643.google.com (mail-pl1-x643.google.com [IPv6:2607:f8b0:4864:20::643]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 443Y086sfpzDqKD for ; Tue, 19 Feb 2019 18:54:00 +1100 (AEDT) Received: by mail-pl1-x643.google.com with SMTP id q3so2656135pll.4 for ; Mon, 18 Feb 2019 23:54:00 -0800 (PST) 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 :mime-version:content-transfer-encoding; bh=1qcU6I6wnO0b+U7lvxqpqiJ3i0UXLHBh+5YF0XksDM4=; b=tldjEf6hnFAopgRnTYk7pLAZZbqI5Jr06ZimBThx7UllG6Fys0rrRHDiraTUoX7PN0 Dis3Rm8b+nPD1/VgAPMlDNIOjvhYm54oe5JVN2wY1i9aELWwez5eZprZtIx6srayIT6A cAdni78Zc/ziwHhdZAc4WXAW+vka4N49PIlFhzQlB4+OVqtczxWfhWcwog8rlHLK30mI kNEBUEhQDfH5O5rDCv6vrT0ZVSHdr5mnlXQE77z90VjMa02qrUd4Xkd1fzBDQmyELZHv UiYDAhg6zY8ZYuxJzQVVouKuznSORTLJnql2AKS9bIkmQganm2/GIYXar5OCesZCU880 7PkQ== 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:mime-version:content-transfer-encoding; bh=1qcU6I6wnO0b+U7lvxqpqiJ3i0UXLHBh+5YF0XksDM4=; b=X0bKQPYNpxFiYEnEv7PqR6GHNhS87t4OrjNS3YwVK4QOTXHMSAdNLOQaC2Z0C7ETsM YXNz6wQfqFanomNZaXATaRErvrMF+M9z5kSrEt1/BxUPo3Nv2Dyzk8mDhtVFiWjqDyA1 ySW1YyUrGXVl+qCFYrUqb13B/jLzD2mI1imWTPStW1z1oz7B1njm0EpUN373NBsFiQxv zGJvr/6QxAx2V6w0LImLYja4YcvFha92QaLTVofyPpvl1bsOWZtkwzVuj9zCBRm/UaEw +MCdncRn8iHIGINcWZgRAzaXMWXppoUxevnU+y15rzFKwdIUkK1cMljO1yY+SJzT8Zux Rw9g== X-Gm-Message-State: AHQUAuYWihz+xqXHAUEVlbcYej/6SQjxbNRH5iPWI7trOWo5Hz6kODdm juqmWN4J3x6oR32pzZJklPcjquCV X-Google-Smtp-Source: AHgI3IZvDJc5v9w1I8RXjQ0Wm3qr9YAmtCRbEKQ/XEDkoTqWfo69ZpwBQ/s0SgoW2iM+1sddlzM54A== X-Received: by 2002:a17:902:6b03:: with SMTP id o3mr29619501plk.126.1550562839001; Mon, 18 Feb 2019 23:53:59 -0800 (PST) Received: from wafer.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id r3sm39651582pgn.48.2019.02.18.23.53.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Feb 2019 23:53:58 -0800 (PST) From: Oliver O'Halloran To: skiboot@lists.ozlabs.org Date: Tue, 19 Feb 2019 18:53:39 +1100 Message-Id: <20190219075339.14226-4-oohall@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190219075339.14226-1-oohall@gmail.com> References: <20190219075339.14226-1-oohall@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH 4/4] hdata/memory: Add NVDIMM support X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" NVDIMMs are memory modules that use a battery backup system to allow the contents RAM to be saved to non-volatile storage if system power goes away unexpectedly. This allows them to be used a high-performance storage device, suitable for serving as a cache for SSDs and the like. Configuration of NVDIMMs is handled by hostboot and communicated to OPAL via the HDAT. We need to parse out the NVDIMM memory ranges and create memory regions with the "pmem-region" compatible label to make them available to the host. Signed-off-by: Oliver O'Halloran --- hdata/memory.c | 110 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 100 insertions(+), 10 deletions(-) diff --git a/hdata/memory.c b/hdata/memory.c index 3e6271444ce6..1ac03c137dbd 100644 --- a/hdata/memory.c +++ b/hdata/memory.c @@ -48,7 +48,25 @@ struct HDIF_ms_area_address_range { __be32 mirror_attr; __be64 mirror_start; __be32 controller_id; + __be32 phys_attr; } __packed; +#define PHYS_ATTR_TYPE_MASK 0xff000000 +#define PHYS_ATTR_TYPE_STD 0 +#define PHYS_ATTR_TYPE_NVDIMM 1 +#define PHYS_ATTR_TYPE_MRAM 2 +#define PHYS_ATTR_TYPE_PCM 3 + +#define PHYS_ATTR_STATUS_MASK 0x00ff0000 +/* + * The values here are mutually exclusive. I have no idea why anyone + * decided encoding these are flags rather than sequential numbers was + * a good idea, but here we are. + */ +#define PHYS_ATTR_STATUS_CANT_SAVE 0x01 +#define PHYS_ATTR_STATUS_SAVE_FAILED 0x02 +#define PHYS_ATTR_STATUS_SAVED 0x04 +#define PHYS_ATTR_STATUS_NOT_SAVED 0x08 +#define PHYS_ATTR_STATUS_MEM_INVALID 0xff #define MS_CONTROLLER_MCBIST_ID(id) GETFIELD(PPC_BITMASK32(0, 1), id) #define MS_CONTROLLER_MCS_ID(id) GETFIELD(PPC_BITMASK32(4, 7), id) @@ -92,42 +110,99 @@ static void append_chip_id(struct dt_node *mem, u32 id) p[len] = cpu_to_be32(id); } +static void update_status(struct dt_node *mem, uint32_t status) +{ + switch (status) { + case PHYS_ATTR_STATUS_CANT_SAVE: + if (!dt_find_property(mem, "save-trigged-unarmed")) + dt_add_property(mem, "save-trigger-unarmed", NULL, 0); + break; + + case PHYS_ATTR_STATUS_SAVE_FAILED: + if (!dt_find_property(mem, "save-failed")) + dt_add_property(mem, "save-failed", NULL, 0); + + break; + + case PHYS_ATTR_STATUS_MEM_INVALID: + if (dt_find_property(mem, "save-trigged-unarmed")) + dt_add_property_string(mem, "status", + "disabled-memory-invalid"); + break; + } +} + static bool add_address_range(struct dt_node *root, const struct HDIF_ms_area_id *id, - const struct HDIF_ms_area_address_range *arange) + const struct HDIF_ms_area_address_range *arange, + uint32_t mem_type, uint32_t mem_status) { + const char *compat = NULL, *dev_type = NULL, *name = NULL; struct dt_node *mem; - u32 chip_id, type; + u32 chip_id; u64 reg[2]; chip_id = pcid_to_chip_id(be32_to_cpu(arange->chip)); prlog(PR_DEBUG, " Range: 0x%016llx..0x%016llx " - "on Chip 0x%x mattr: 0x%x\n", + "on Chip 0x%x mattr: 0x%x pattr: 0x%x status:0x%x\n", (long long)be64_to_cpu(arange->start), (long long)be64_to_cpu(arange->end), - chip_id, arange->mirror_attr); + chip_id, arange->mirror_attr, mem_type, mem_status); /* reg contains start and length */ reg[0] = cleanup_addr(be64_to_cpu(arange->start)); reg[1] = cleanup_addr(be64_to_cpu(arange->end)) - reg[0]; + switch (mem_type) { + case PHYS_ATTR_TYPE_STD: + name = "memory"; + dev_type = "memory"; + break; + + case PHYS_ATTR_TYPE_NVDIMM: + case PHYS_ATTR_TYPE_MRAM: + case PHYS_ATTR_TYPE_PCM: + /* fall through */ + name = "nvdimm"; + compat = "pmem-region"; + break; + + /* + * Future memory types could be volatile or non-volatile. Bail if don't + * recognise the type so we don't end up trashing data accidently. + */ + default: + return false; + } + if (be16_to_cpu(id->flags) & MS_AREA_SHARED) { - mem = dt_find_by_name_addr("memory", reg[0]); + mem = dt_find_by_name_addr(dt_root, name, reg[0]); if (mem) { append_chip_id(mem, chip_id); + if (mem_type == PHYS_ATTR_TYPE_NVDIMM) + update_status(mem, mem_status); return true; } } mem = dt_new_addr(root, name, reg[0]); - dt_add_property_string(mem, "device_type", "memory"); - dt_add_property_cells(mem, "ibm,chip-id", chip_id); + if (compat) + dt_add_property_string(mem, "compatible", compat); + if (dev_type) + dt_add_property_string(mem, "device_type", dev_type); + + /* add in the nvdimm backup status flags */ + if (mem_type == PHYS_ATTR_TYPE_NVDIMM) + update_status(mem, mem_status); + + /* common properties */ + dt_add_property_u64s(mem, "reg", reg[0], reg[1]); + dt_add_property_cells(mem, "ibm,chip-id", chip_id); if (be16_to_cpu(id->flags) & MS_AREA_SHARED) dt_add_property_cells(mem, DT_PRIVATE "share-id", be16_to_cpu(id->share_id)); - return true; } @@ -515,12 +590,27 @@ static void get_msareas(struct dt_node *root, /* This offset is from the arr, not the header! */ arange = (void *)arr + be32_to_cpu(arr->offset); for (j = 0; j < be32_to_cpu(arr->ecnt); j++) { + uint32_t type = 0, status = 0; + + /* + * Check that the required fields are present in this + * version of the HDAT structure. + */ offset = offsetof(struct HDIF_ms_area_address_range, controller_id); if (be32_to_cpu(arr->eactsz) >= offset) add_memory_controller(msarea, arange); - if (!add_address_range(root, id, arange)) - return; + offset = offsetof(struct HDIF_ms_area_address_range, phys_attr); + if (be32_to_cpu(arr->eactsz) >= offset) { + uint32_t attr = be32_to_cpu(arange->phys_attr); + + type = GETFIELD(PHYS_ATTR_TYPE_MASK, attr); + status = GETFIELD(PHYS_ATTR_STATUS_MASK, attr); + } + + if (add_address_range(root, id, arange, type, status)) + prerror("Unable to use memory range %d from MSAREA %d\n", j, i); + arange = (void *)arange + be32_to_cpu(arr->esize); } }