From patchwork Mon Oct 12 16:48:39 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Auger Eric X-Patchwork-Id: 54805 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f198.google.com (mail-wi0-f198.google.com [209.85.212.198]) by patches.linaro.org (Postfix) with ESMTPS id 4766F23001 for ; Mon, 12 Oct 2015 16:48:59 +0000 (UTC) Received: by wijq8 with SMTP id q8sf36761153wij.1 for ; Mon, 12 Oct 2015 09:48:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-unsubscribe; bh=q56DjC56SkbDIf/Q8fJyN+RtEAkhAxqtLbb9VAzqqdE=; b=JGu5kbsicZYY/dhaW0Z5pd/HKvR3S53wVnelPDLsv5RhZRVnWyTWL+fcQWdchdRLUB ugjF3MsYNU1iKNpNpBsCpSpHII+YTwJgesZ6kTACOgrtxEAw0rNqt1EMsdyG+vhYgnEk QPfGALjYUoudhMMVaUZWHhtgfXZ6bVLPOlC/btZBB/rpUzxBBrSBdpW6WuWrz8SmgSaK Ezh19wcbWkLnPiuNKM7AhA8g7y0HVtMeHS81HZZO7vuKczrKb1DnHZtz/5BBHSE/xKLw 1+xki5u7Migjb1o7h1a3gldGVQL1xPDd4NbFRUnDLvrLyFOXfZxJRhSm6kbgD0+0i4gi TA7g== X-Gm-Message-State: ALoCoQmgd8Go0m4TWckn+99ay4iVfNWEvTkJheVyywnDRXHWX/g+RBhI1L+2kzuFTt8Ag45jczp6 X-Received: by 10.194.118.65 with SMTP id kk1mr5895451wjb.5.1444668538633; Mon, 12 Oct 2015 09:48:58 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.25.164.135 with SMTP id n129ls568192lfe.7.gmail; Mon, 12 Oct 2015 09:48:58 -0700 (PDT) X-Received: by 10.112.170.70 with SMTP id ak6mr9509423lbc.107.1444668538338; Mon, 12 Oct 2015 09:48:58 -0700 (PDT) Received: from mail-lb0-f182.google.com (mail-lb0-f182.google.com. [209.85.217.182]) by mx.google.com with ESMTPS id r1si11797170lbb.175.2015.10.12.09.48.58 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Oct 2015 09:48:58 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.182 as permitted sender) client-ip=209.85.217.182; Received: by lbbck17 with SMTP id ck17so28790026lbb.1 for ; Mon, 12 Oct 2015 09:48:58 -0700 (PDT) X-Received: by 10.25.153.145 with SMTP id b139mr6942544lfe.117.1444668538195; Mon, 12 Oct 2015 09:48:58 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.112.59.35 with SMTP id w3csp1650554lbq; Mon, 12 Oct 2015 09:48:57 -0700 (PDT) X-Received: by 10.180.12.241 with SMTP id b17mr16931222wic.55.1444668535021; Mon, 12 Oct 2015 09:48:55 -0700 (PDT) Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com. [209.85.212.175]) by mx.google.com with ESMTPS id iz18si17045505wic.82.2015.10.12.09.48.54 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Oct 2015 09:48:55 -0700 (PDT) Received-SPF: pass (google.com: domain of eric.auger@linaro.org designates 209.85.212.175 as permitted sender) client-ip=209.85.212.175; Received: by wijq8 with SMTP id q8so66641149wij.0 for ; Mon, 12 Oct 2015 09:48:54 -0700 (PDT) X-Received: by 10.180.36.195 with SMTP id s3mr13016734wij.64.1444668534809; Mon, 12 Oct 2015 09:48:54 -0700 (PDT) Received: from localhost.localdomain.home (LCaen-156-56-7-90.w80-11.abo.wanadoo.fr. [80.11.198.90]) by smtp.gmail.com with ESMTPSA id xt1sm20805130wjb.32.2015.10.12.09.48.53 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 12 Oct 2015 09:48:54 -0700 (PDT) From: Eric Auger To: eric.auger@st.com, eric.auger@linaro.org, qemu-devel@nongnu.org, alex.williamson@redhat.com Cc: patches@linaro.org, christoffer.dall@linaro.org, pbonzini@redhat.com, b.reynal@virtualopensystems.com, suravee.suthikulpanit@amd.com, thomas.lendacky@amd.com Subject: [RFC 2/6] device_tree: introduce load_device_tree_from_sysfs Date: Mon, 12 Oct 2015 16:48:39 +0000 Message-Id: <1444668523-2252-3-git-send-email-eric.auger@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1444668523-2252-1-git-send-email-eric.auger@linaro.org> References: <1444668523-2252-1-git-send-email-eric.auger@linaro.org> X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: eric.auger@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.182 as permitted sender) smtp.mailfrom=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , This function returns the host device tree blob from sysfs (/sys/firmware/devicetree/base). This has a runtime dependency on the dtc binary. This functionality is useful for platform device passthrough where the host device tree needs to be parsed to feed information into the guest device tree. Signed-off-by: Eric Auger --- device_tree.c | 40 ++++++++++++++++++++++++++++++++++++++++ include/sysemu/device_tree.h | 1 + 2 files changed, 41 insertions(+) diff --git a/device_tree.c b/device_tree.c index a9f5f8e..58a5329 100644 --- a/device_tree.c +++ b/device_tree.c @@ -117,6 +117,46 @@ fail: return NULL; } +/** + * load_device_tree_from_sysfs + * + * extract the dt blob from host sysfs + * this has a runtime dependency on the dtc binary + */ +void *load_device_tree_from_sysfs(void) +{ + char cmd[] = "dtc -I fs -O dtb /sys/firmware/devicetree/base"; + FILE *pipe; + void *fdt; + int ret, actual_dt_size; + + pipe = popen(cmd, "r"); + if (!pipe) { + error_report("%s: Error when executing dtc", __func__); + return NULL; + } + fdt = g_malloc0(FDT_MAX_SIZE); + actual_dt_size = fread(fdt, 1, FDT_MAX_SIZE, pipe); + pclose(pipe); + + if (actual_dt_size == 0) { + error_report("%s: could not copy host device tree in memory: %m", + __func__); + goto fail; + } + ret = fdt_check_header(fdt); + if (ret) { + error_report("%s: Host dt file loaded into memory is invalid: %s", + __func__, fdt_strerror(ret)); + goto fail; + } + return fdt; + +fail: + g_free(fdt); + return NULL; +} + static int findnode_nofail(void *fdt, const char *node_path) { int offset; diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h index 359e143..307e53d 100644 --- a/include/sysemu/device_tree.h +++ b/include/sysemu/device_tree.h @@ -16,6 +16,7 @@ void *create_device_tree(int *sizep); void *load_device_tree(const char *filename_path, int *sizep); +void *load_device_tree_from_sysfs(void); int qemu_fdt_setprop(void *fdt, const char *node_path, const char *property, const void *val, int size);