From patchwork Fri Jul 19 12:59:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?C=C3=A9dric_Le_Goater?= X-Patchwork-Id: 1134060 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 (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45qs3z11Rcz9s3l for ; Fri, 19 Jul 2019 23:17:19 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=kaod.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 45qs3y5MGTzDqgn for ; Fri, 19 Jul 2019 23:17:18 +1000 (AEST) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=kaod.org (client-ip=46.105.63.100; helo=6.mo68.mail-out.ovh.net; envelope-from=clg@kaod.org; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=kaod.org Received: from 6.mo68.mail-out.ovh.net (6.mo68.mail-out.ovh.net [46.105.63.100]) (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 45qs3p1HlDzDqcQ for ; Fri, 19 Jul 2019 23:17:05 +1000 (AEST) Received: from player731.ha.ovh.net (unknown [10.109.143.238]) by mo68.mail-out.ovh.net (Postfix) with ESMTP id 79C5713B776 for ; Fri, 19 Jul 2019 14:59:25 +0200 (CEST) Received: from kaod.org (lfbn-1-2240-157.w90-76.abo.wanadoo.fr [90.76.60.157]) (Authenticated sender: clg@kaod.org) by player731.ha.ovh.net (Postfix) with ESMTPSA id B63B18019CD2; Fri, 19 Jul 2019 12:59:20 +0000 (UTC) From: =?utf-8?q?C=C3=A9dric_Le_Goater?= To: skiboot@lists.ozlabs.org Date: Fri, 19 Jul 2019 14:59:16 +0200 Message-Id: <20190719125916.6554-1-clg@kaod.org> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 X-Ovh-Tracer-Id: 13739638038882126809 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: -100 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeduvddrieejgdeitdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemucehtddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd Subject: [Skiboot] [PATCH] platforms/qemu: update phandle of "interrupt-parent" 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: , Cc: Stewart Smith , Greg Kurz Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" QEMU provides a DT populated with the serial devices but the "interrupt-parent" property is empty (0x0). It was not a problem until now. But since OpenFirmare started using a recent libdft (>= 1.4.7), petitboot fails to boot the system image with error : dtc_resize: fdt_open_into returned FDT_ERR_BADMAGIC Provide a DT fixup for "interrupt-parent" properties of the LPC bus. Signed-off-by: Cédric Le Goater --- platforms/astbmc/astbmc.h | 1 + platforms/astbmc/common.c | 6 +++--- platforms/qemu/qemu.c | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/platforms/astbmc/astbmc.h b/platforms/astbmc/astbmc.h index c302b6070d0e..122b0007aabb 100644 --- a/platforms/astbmc/astbmc.h +++ b/platforms/astbmc/astbmc.h @@ -96,6 +96,7 @@ extern const struct bmc_platform bmc_plat_ast2500_ami; extern const struct bmc_platform bmc_plat_ast2500_openbmc; extern void astbmc_early_init(void); +extern struct dt_node *astbmc_dt_find_primary_lpc(void); extern int64_t astbmc_ipmi_reboot(void); extern int64_t astbmc_ipmi_power_down(uint64_t request); extern void astbmc_init(void); diff --git a/platforms/astbmc/common.c b/platforms/astbmc/common.c index 76fa25f8ab98..7f581bebeb90 100644 --- a/platforms/astbmc/common.c +++ b/platforms/astbmc/common.c @@ -381,7 +381,7 @@ static void astbmc_fixup_bmc_sensors(void) } } -static struct dt_node *dt_find_primary_lpc(void) +struct dt_node *astbmc_dt_find_primary_lpc(void) { struct dt_node *n, *primary_lpc = NULL; @@ -406,7 +406,7 @@ static void astbmc_fixup_dt(void) { struct dt_node *primary_lpc; - primary_lpc = dt_find_primary_lpc(); + primary_lpc = astbmc_dt_find_primary_lpc(); if (!primary_lpc) return; @@ -496,7 +496,7 @@ void astbmc_early_init(void) * fallback. */ if (proc_gen == proc_gen_p9) { - astbmc_fixup_dt_mbox(dt_find_primary_lpc()); + astbmc_fixup_dt_mbox(astbmc_dt_find_primary_lpc()); ast_setup_sio_mbox(MBOX_IO_BASE, MBOX_LPC_IRQ); } } else { diff --git a/platforms/qemu/qemu.c b/platforms/qemu/qemu.c index b528a826301a..193bec06b195 100644 --- a/platforms/qemu/qemu.c +++ b/platforms/qemu/qemu.c @@ -23,6 +23,26 @@ static bool bt_device_present; +static void qemu_fixup_dt_lpc_interrupt_parent(void) +{ + struct dt_node *lpc, *node; + + lpc = astbmc_dt_find_primary_lpc(); + + if (!lpc) + return; + + dt_for_each_child(lpc, node) { + struct dt_property *prop; + + prop = __dt_find_property(node, "interrupt-parent"); + if (!prop) + return; + dt_del_property(node, prop); + dt_add_property_cells(node, "interrupt-parent", lpc->phandle); + } +} + static bool qemu_probe_common(const char *compat) { struct dt_node *n; @@ -37,6 +57,8 @@ static bool qemu_probe_common(const char *compat) bt_device_present = true; } + qemu_fixup_dt_lpc_interrupt_parent(); + return true; }