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 X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2805CC04AAC for ; Thu, 23 May 2019 05:51:40 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ED8CA2133D for ; Thu, 23 May 2019 05:51:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="S1RsoWTG"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="lWBtdeG0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ED8CA2133D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MgRdDOSTxZ+fi4I6ArWUb/deKTZCbh02RcYcG8jMIko=; b=S1RsoWTGAhGyRH NM4XoZwf43xlTZYCb/t9fTYsXJN+F7MXcesn9J5aDhcl6GJ5Ue9FvpS3JjeIlnAOgURqVgHJ4m9OC 6n57A0AhoykIfBUUZsCUO1d+K60r/Bpv7S01lOXQFGyUxn4Sl4+R3dMISR3ONdWlbjNDFVYf9bbe2 vyj6kRF0ePB6cWnpy61ZY3kZ1qr2H8F/9S0BrNP5oXMMIutKOfxOi3JkM4f4e/yOvRRrHO5fFiAKa kMWYTPnszGRu78lf8ygy1IpY+QI7SH+Sew0c5Eq+iVKRyhUGnH92FA5deXuG42khinblp+Pemnsn4 iFBl868RdF/Y7HYtVnrA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hTgdQ-0007SD-1p; Thu, 23 May 2019 05:51:24 +0000 Received: from mail-eopbgr30047.outbound.protection.outlook.com ([40.107.3.47] helo=EUR03-AM5-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hTgd9-00072u-6n for linux-arm-kernel@lists.infradead.org; Thu, 23 May 2019 05:51:11 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xLK6J4oxrIr5ZhYuaEdROLR+w74RnHB147OWCWDCdao=; b=lWBtdeG0rgcsWyvFLqKIaixGk1eTr+Mh+ZKJfwMYLKx+hj10zYY5w+NmmXzY/tLmLkrq03bXcXpb3//rcRlZQQxAhEGqu2f4vkflvdtWTxMmX3zGtnd7Eg+pDVFcjRyR/WAZlMrvw/3DSxmXZyyF3ZZjk68aWlXk8h6yPWdAR4c= Received: from AM0PR04MB4481.eurprd04.prod.outlook.com (52.135.147.15) by AM0PR04MB3956.eurprd04.prod.outlook.com (52.134.93.159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1900.18; Thu, 23 May 2019 05:51:02 +0000 Received: from AM0PR04MB4481.eurprd04.prod.outlook.com ([fe80::3173:24:d401:2378]) by AM0PR04MB4481.eurprd04.prod.outlook.com ([fe80::3173:24:d401:2378%6]) with mapi id 15.20.1900.020; Thu, 23 May 2019 05:51:02 +0000 From: Peng Fan To: "robh+dt@kernel.org" , "mark.rutland@arm.com" , "jassisinghbrar@gmail.com" , "sudeep.holla@arm.com" Subject: [PATCH 2/2] mailbox: introduce ARM SMC based mailbox Thread-Topic: [PATCH 2/2] mailbox: introduce ARM SMC based mailbox Thread-Index: AQHVESuByCLdCQE1i0W9lURWmZ2DUQ== Date: Thu, 23 May 2019 05:51:02 +0000 Message-ID: <20190523060437.11059-3-peng.fan@nxp.com> References: <20190523060437.11059-1-peng.fan@nxp.com> In-Reply-To: <20190523060437.11059-1-peng.fan@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.16.4 x-clientproxiedby: HK0P153CA0040.APCP153.PROD.OUTLOOK.COM (2603:1096:203:17::28) To AM0PR04MB4481.eurprd04.prod.outlook.com (2603:10a6:208:70::15) authentication-results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4c06b37c-4476-495f-b629-08d6df42a3a0 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:AM0PR04MB3956; x-ms-traffictypediagnostic: AM0PR04MB3956: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1824; x-forefront-prvs: 00462943DE x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(39860400002)(376002)(346002)(396003)(366004)(199004)(189003)(2201001)(86362001)(6512007)(256004)(6436002)(6306002)(44832011)(486006)(2501003)(2906002)(2616005)(476003)(6116002)(3846002)(81166006)(8676002)(25786009)(6486002)(305945005)(81156014)(8936002)(50226002)(4326008)(53936002)(11346002)(15650500001)(7736002)(316002)(446003)(186003)(26005)(14454004)(66066001)(68736007)(1076003)(36756003)(71200400001)(71190400001)(102836004)(5660300002)(966005)(386003)(54906003)(110136005)(76176011)(6506007)(99286004)(66556008)(66446008)(66476007)(7416002)(66946007)(478600001)(73956011)(52116002)(64756008); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR04MB3956; H:AM0PR04MB4481.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: xEIak1FsGsOKUrHVuEcMgkyDAl5EMvmyjyFSLqQ3lWqfnL7oiWp8OneiEZ2bmttZxNue/HyBf97iOAYKVKd9FDsIBZFXk38P/nswJLLRT66VjHmK+opCWEniYLw0dDVLJ8kNC4ZrT73XHCNKHtsnbKOBjbahurXHjiwmy52TUqS+i1tiyj62bRxL1EtsjlouVa24a4M3vRFX3nXJ4q8rsbZ1AqAcafhE1QbljfOl8aSSsA/U+IGUpO/09H0RtEgf5TnrhqdHqZMLImtmupqfUqx6SfAF/EJ//8PorI62k7KX6UEXlGj8/depNOXkSOxZ9aIXZ/r9O+/U7DiqjeX3fuUlHO7nORW1GhRcrI2tSmw+pXVZKvvU/39pVh1jIFDOcolUlTMYt2pT7mbQWJ+b222kTykUuZY7ebof47rtM74= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4c06b37c-4476-495f-b629-08d6df42a3a0 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 May 2019 05:51:02.9106 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB3956 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190522_225107_972415_339352B0 X-CRM114-Status: GOOD ( 20.12 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "devicetree@vger.kernel.org" , Peng Fan , "shawnguo@kernel.org" , "linux-kernel@vger.kernel.org" , dl-linux-imx , "kernel@pengutronix.de" , "andre.przywara@arm.com" , "van.freenix@gmail.com" , "festevam@gmail.com" , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org This mailbox driver implements a mailbox which signals transmitted data via an ARM smc (secure monitor call) instruction. The mailbox receiver is implemented in firmware and can synchronously return data when it returns execution to the non-secure world again. An asynchronous receive path is not implemented. This allows the usage of a mailbox to trigger firmware actions on SoCs which either don't have a separate management processor or on which such a core is not available. A user of this mailbox could be the SCP interface. Modified from Andre Przywara's v2 patch https://lore.kernel.org/patchwork/patch/812999/ Cc: Andre Przywara Signed-off-by: Peng Fan --- drivers/mailbox/Kconfig | 7 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/arm-smc-mailbox.c | 154 ++++++++++++++++++++++++++++++++ include/linux/mailbox/arm-smc-mailbox.h | 10 +++ 4 files changed, 173 insertions(+) create mode 100644 drivers/mailbox/arm-smc-mailbox.c create mode 100644 include/linux/mailbox/arm-smc-mailbox.h diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig index 595542bfae85..c3bd0f1ddcd8 100644 --- a/drivers/mailbox/Kconfig +++ b/drivers/mailbox/Kconfig @@ -15,6 +15,13 @@ config ARM_MHU The controller has 3 mailbox channels, the last of which can be used in Secure mode only. +config ARM_SMC_MBOX + tristate "Generic ARM smc mailbox" + depends on OF && HAVE_ARM_SMCCC + help + Generic mailbox driver which uses ARM smc calls to call into + firmware for triggering mailboxes. + config IMX_MBOX tristate "i.MX Mailbox" depends on ARCH_MXC || COMPILE_TEST diff --git a/drivers/mailbox/Makefile b/drivers/mailbox/Makefile index c22fad6f696b..93918a84c91b 100644 --- a/drivers/mailbox/Makefile +++ b/drivers/mailbox/Makefile @@ -7,6 +7,8 @@ obj-$(CONFIG_MAILBOX_TEST) += mailbox-test.o obj-$(CONFIG_ARM_MHU) += arm_mhu.o +obj-$(CONFIG_ARM_SMC_MBOX) += arm-smc-mailbox.o + obj-$(CONFIG_IMX_MBOX) += imx-mailbox.o obj-$(CONFIG_ARMADA_37XX_RWTM_MBOX) += armada-37xx-rwtm-mailbox.o diff --git a/drivers/mailbox/arm-smc-mailbox.c b/drivers/mailbox/arm-smc-mailbox.c new file mode 100644 index 000000000000..f4da1061f7f0 --- /dev/null +++ b/drivers/mailbox/arm-smc-mailbox.c @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2016,2017 ARM Ltd. + * Copyright 2019 NXP + */ + +#include +#include +#include +#include +#include +#include +#include + +#define ARM_SMC_MBOX_USE_HVC BIT(0) + +struct arm_smc_chan_data { + u32 function_id; + u32 flags; +}; + +static int arm_smc_send_data(struct mbox_chan *link, void *data) +{ + struct arm_smc_chan_data *chan_data = link->con_priv; + struct arm_smccc_mbox_cmd *cmd = data; + struct arm_smccc_res res; + u32 function_id; + + if (chan_data->function_id != UINT_MAX) + function_id = chan_data->function_id; + else + function_id = cmd->a0; + + if (chan_data->flags & ARM_SMC_MBOX_USE_HVC) + arm_smccc_hvc(function_id, cmd->a1, cmd->a2, cmd->a3, cmd->a4, + cmd->a5, cmd->a6, cmd->a7, &res); + else + arm_smccc_smc(function_id, cmd->a1, cmd->a2, cmd->a3, cmd->a4, + cmd->a5, cmd->a6, cmd->a7, &res); + + mbox_chan_received_data(link, (void *)res.a0); + + return 0; +} + +static const struct mbox_chan_ops arm_smc_mbox_chan_ops = { + .send_data = arm_smc_send_data, +}; + +static int arm_smc_mbox_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct mbox_controller *mbox; + struct arm_smc_chan_data *chan_data; + const char *method; + bool use_hvc = false; + int ret, i; + u32 val; + + if (!of_property_read_u32(dev->of_node, "arm,num-chans", &val)) { + if (val < 1 || val > INT_MAX) { + dev_err(dev, "invalid arm,num-chans value %u of %pOFn\n", val, pdev->dev.of_node); + return -EINVAL; + } + } + + if (!of_property_read_string(dev->of_node, "method", &method)) { + if (!strcmp("hvc", method)) { + use_hvc = true; + } else if (!strcmp("smc", method)) { + use_hvc = false; + } else { + dev_warn(dev, "invalid \"method\" property: %s\n", + method); + + return -EINVAL; + } + } + + mbox = devm_kzalloc(dev, sizeof(*mbox), GFP_KERNEL); + if (!mbox) + return -ENOMEM; + + mbox->num_chans = val; + mbox->chans = devm_kcalloc(dev, mbox->num_chans, sizeof(*mbox->chans), + GFP_KERNEL); + if (!mbox->chans) + return -ENOMEM; + + chan_data = devm_kcalloc(dev, mbox->num_chans, sizeof(*chan_data), + GFP_KERNEL); + if (!chan_data) + return -ENOMEM; + + for (i = 0; i < mbox->num_chans; i++) { + u32 function_id; + + ret = of_property_read_u32_index(dev->of_node, + "arm,func-ids", i, + &function_id); + if (ret) + chan_data[i].function_id = UINT_MAX; + + else + chan_data[i].function_id = function_id; + + if (use_hvc) + chan_data[i].flags |= ARM_SMC_MBOX_USE_HVC; + mbox->chans[i].con_priv = &chan_data[i]; + } + + mbox->txdone_poll = false; + mbox->txdone_irq = false; + mbox->ops = &arm_smc_mbox_chan_ops; + mbox->dev = dev; + + ret = mbox_controller_register(mbox); + if (ret) + return ret; + + platform_set_drvdata(pdev, mbox); + dev_info(dev, "ARM SMC mailbox enabled with %d chan%s.\n", + mbox->num_chans, mbox->num_chans == 1 ? "" : "s"); + + return ret; +} + +static int arm_smc_mbox_remove(struct platform_device *pdev) +{ + struct mbox_controller *mbox = platform_get_drvdata(pdev); + + mbox_controller_unregister(mbox); + return 0; +} + +static const struct of_device_id arm_smc_mbox_of_match[] = { + { .compatible = "arm,smc-mbox", }, + {}, +}; +MODULE_DEVICE_TABLE(of, arm_smc_mbox_of_match); + +static struct platform_driver arm_smc_mbox_driver = { + .driver = { + .name = "arm-smc-mbox", + .of_match_table = arm_smc_mbox_of_match, + }, + .probe = arm_smc_mbox_probe, + .remove = arm_smc_mbox_remove, +}; +module_platform_driver(arm_smc_mbox_driver); + +MODULE_AUTHOR("Andre Przywara "); +MODULE_DESCRIPTION("Generic ARM smc mailbox driver"); +MODULE_LICENSE("GPL v2"); diff --git a/include/linux/mailbox/arm-smc-mailbox.h b/include/linux/mailbox/arm-smc-mailbox.h new file mode 100644 index 000000000000..ca366fe491c3 --- /dev/null +++ b/include/linux/mailbox/arm-smc-mailbox.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _LINUX_ARM_SMC_MAILBOX_H_ +#define _LINUX_ARM_SMC_MAILBOX_H_ + +struct arm_smccc_mbox_cmd { + unsigned long a0, a1, a2, a3, a4, a5, a6, a7; +}; + +#endif /* _LINUX_ARM_SMC_MAILBOX_H_ */ -- 2.16.4 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peng Fan Subject: [PATCH 2/2] mailbox: introduce ARM SMC based mailbox Date: Thu, 23 May 2019 05:51:02 +0000 Message-ID: <20190523060437.11059-3-peng.fan@nxp.com> References: <20190523060437.11059-1-peng.fan@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190523060437.11059-1-peng.fan@nxp.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: "robh+dt@kernel.org" , "mark.rutland@arm.com" , "jassisinghbrar@gmail.com" , "sudeep.holla@arm.com" Cc: "kernel@pengutronix.de" , dl-linux-imx , "shawnguo@kernel.org" , "festevam@gmail.com" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "andre.przywara@arm.com" , "van.freenix@gmail.com" , Peng Fan List-Id: devicetree@vger.kernel.org VGhpcyBtYWlsYm94IGRyaXZlciBpbXBsZW1lbnRzIGEgbWFpbGJveCB3aGljaCBzaWduYWxzIHRy YW5zbWl0dGVkIGRhdGEKdmlhIGFuIEFSTSBzbWMgKHNlY3VyZSBtb25pdG9yIGNhbGwpIGluc3Ry dWN0aW9uLiBUaGUgbWFpbGJveCByZWNlaXZlcgppcyBpbXBsZW1lbnRlZCBpbiBmaXJtd2FyZSBh bmQgY2FuIHN5bmNocm9ub3VzbHkgcmV0dXJuIGRhdGEgd2hlbiBpdApyZXR1cm5zIGV4ZWN1dGlv biB0byB0aGUgbm9uLXNlY3VyZSB3b3JsZCBhZ2Fpbi4KQW4gYXN5bmNocm9ub3VzIHJlY2VpdmUg cGF0aCBpcyBub3QgaW1wbGVtZW50ZWQuClRoaXMgYWxsb3dzIHRoZSB1c2FnZSBvZiBhIG1haWxi b3ggdG8gdHJpZ2dlciBmaXJtd2FyZSBhY3Rpb25zIG9uIFNvQ3MKd2hpY2ggZWl0aGVyIGRvbid0 IGhhdmUgYSBzZXBhcmF0ZSBtYW5hZ2VtZW50IHByb2Nlc3NvciBvciBvbiB3aGljaCBzdWNoCmEg Y29yZSBpcyBub3QgYXZhaWxhYmxlLiBBIHVzZXIgb2YgdGhpcyBtYWlsYm94IGNvdWxkIGJlIHRo ZSBTQ1AKaW50ZXJmYWNlLgoKTW9kaWZpZWQgZnJvbSBBbmRyZSBQcnp5d2FyYSdzIHYyIHBhdGNo Cmh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3BhdGNod29yay9wYXRjaC84MTI5OTkvCgpDYzogQW5k cmUgUHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+ClNpZ25lZC1vZmYtYnk6IFBlbmcg RmFuIDxwZW5nLmZhbkBueHAuY29tPgotLS0KIGRyaXZlcnMvbWFpbGJveC9LY29uZmlnICAgICAg ICAgICAgICAgICB8ICAgNyArKwogZHJpdmVycy9tYWlsYm94L01ha2VmaWxlICAgICAgICAgICAg ICAgIHwgICAyICsKIGRyaXZlcnMvbWFpbGJveC9hcm0tc21jLW1haWxib3guYyAgICAgICB8IDE1 NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9tYWlsYm94 L2FybS1zbWMtbWFpbGJveC5oIHwgIDEwICsrKwogNCBmaWxlcyBjaGFuZ2VkLCAxNzMgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWFpbGJveC9hcm0tc21jLW1haWxi b3guYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbWFpbGJveC9hcm0tc21jLW1h aWxib3guaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFpbGJveC9LY29uZmlnIGIvZHJpdmVycy9t YWlsYm94L0tjb25maWcKaW5kZXggNTk1NTQyYmZhZTg1Li5jM2JkMGYxZGRjZDggMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvbWFpbGJveC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWFpbGJveC9LY29uZmln CkBAIC0xNSw2ICsxNSwxMyBAQCBjb25maWcgQVJNX01IVQogCSAgVGhlIGNvbnRyb2xsZXIgaGFz IDMgbWFpbGJveCBjaGFubmVscywgdGhlIGxhc3Qgb2Ygd2hpY2ggY2FuIGJlCiAJICB1c2VkIGlu IFNlY3VyZSBtb2RlIG9ubHkuCiAKK2NvbmZpZyBBUk1fU01DX01CT1gKKwl0cmlzdGF0ZSAiR2Vu ZXJpYyBBUk0gc21jIG1haWxib3giCisJZGVwZW5kcyBvbiBPRiAmJiBIQVZFX0FSTV9TTUNDQwor CWhlbHAKKwkgIEdlbmVyaWMgbWFpbGJveCBkcml2ZXIgd2hpY2ggdXNlcyBBUk0gc21jIGNhbGxz IHRvIGNhbGwgaW50bworCSAgZmlybXdhcmUgZm9yIHRyaWdnZXJpbmcgbWFpbGJveGVzLgorCiBj b25maWcgSU1YX01CT1gKIAl0cmlzdGF0ZSAiaS5NWCBNYWlsYm94IgogCWRlcGVuZHMgb24gQVJD SF9NWEMgfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL21haWxib3gvTWFrZWZp bGUgYi9kcml2ZXJzL21haWxib3gvTWFrZWZpbGUKaW5kZXggYzIyZmFkNmY2OTZiLi45MzkxOGE4 NGM5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFpbGJveC9NYWtlZmlsZQorKysgYi9kcml2ZXJz L21haWxib3gvTWFrZWZpbGUKQEAgLTcsNiArNyw4IEBAIG9iai0kKENPTkZJR19NQUlMQk9YX1RF U1QpCSs9IG1haWxib3gtdGVzdC5vCiAKIG9iai0kKENPTkZJR19BUk1fTUhVKQkrPSBhcm1fbWh1 Lm8KIAorb2JqLSQoQ09ORklHX0FSTV9TTUNfTUJPWCkJKz0gYXJtLXNtYy1tYWlsYm94Lm8KKwog b2JqLSQoQ09ORklHX0lNWF9NQk9YKQkrPSBpbXgtbWFpbGJveC5vCiAKIG9iai0kKENPTkZJR19B Uk1BREFfMzdYWF9SV1RNX01CT1gpCSs9IGFybWFkYS0zN3h4LXJ3dG0tbWFpbGJveC5vCmRpZmYg LS1naXQgYS9kcml2ZXJzL21haWxib3gvYXJtLXNtYy1tYWlsYm94LmMgYi9kcml2ZXJzL21haWxi b3gvYXJtLXNtYy1tYWlsYm94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5mNGRhMTA2MWY3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21haWxib3gvYXJt LXNtYy1tYWlsYm94LmMKQEAgLTAsMCArMSwxNTQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LDIwMTcgQVJNIEx0ZC4KKyAq IENvcHlyaWdodCAyMDE5IE5YUAorICovCisKKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4K KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNp bmNsdWRlIDxsaW51eC9tYWlsYm94X2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWls Ym94L2FybS1zbWMtbWFpbGJveC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjZGVmaW5lIEFSTV9TTUNfTUJPWF9VU0Vf SFZDCUJJVCgwKQorCitzdHJ1Y3QgYXJtX3NtY19jaGFuX2RhdGEgeworCXUzMiBmdW5jdGlvbl9p ZDsKKwl1MzIgZmxhZ3M7Cit9OworCitzdGF0aWMgaW50IGFybV9zbWNfc2VuZF9kYXRhKHN0cnVj dCBtYm94X2NoYW4gKmxpbmssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFybV9zbWNfY2hhbl9k YXRhICpjaGFuX2RhdGEgPSBsaW5rLT5jb25fcHJpdjsKKwlzdHJ1Y3QgYXJtX3NtY2NjX21ib3hf Y21kICpjbWQgPSBkYXRhOworCXN0cnVjdCBhcm1fc21jY2NfcmVzIHJlczsKKwl1MzIgZnVuY3Rp b25faWQ7CisKKwlpZiAoY2hhbl9kYXRhLT5mdW5jdGlvbl9pZCAhPSBVSU5UX01BWCkKKwkJZnVu Y3Rpb25faWQgPSBjaGFuX2RhdGEtPmZ1bmN0aW9uX2lkOworCWVsc2UKKwkJZnVuY3Rpb25faWQg PSBjbWQtPmEwOworCisJaWYgKGNoYW5fZGF0YS0+ZmxhZ3MgJiBBUk1fU01DX01CT1hfVVNFX0hW QykKKwkJYXJtX3NtY2NjX2h2YyhmdW5jdGlvbl9pZCwgY21kLT5hMSwgY21kLT5hMiwgY21kLT5h MywgY21kLT5hNCwKKwkJCSAgICAgIGNtZC0+YTUsIGNtZC0+YTYsIGNtZC0+YTcsICZyZXMpOwor CWVsc2UKKwkJYXJtX3NtY2NjX3NtYyhmdW5jdGlvbl9pZCwgY21kLT5hMSwgY21kLT5hMiwgY21k LT5hMywgY21kLT5hNCwKKwkJCSAgICAgIGNtZC0+YTUsIGNtZC0+YTYsIGNtZC0+YTcsICZyZXMp OworCisJbWJveF9jaGFuX3JlY2VpdmVkX2RhdGEobGluaywgKHZvaWQgKilyZXMuYTApOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWJveF9jaGFuX29wcyBhcm1fc21j X21ib3hfY2hhbl9vcHMgPSB7CisJLnNlbmRfZGF0YQk9IGFybV9zbWNfc2VuZF9kYXRhLAorfTsK Kworc3RhdGljIGludCBhcm1fc21jX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtYm94 X2NvbnRyb2xsZXIgKm1ib3g7CisJc3RydWN0IGFybV9zbWNfY2hhbl9kYXRhICpjaGFuX2RhdGE7 CisJY29uc3QgY2hhciAqbWV0aG9kOworCWJvb2wgdXNlX2h2YyA9IGZhbHNlOworCWludCByZXQs IGk7CisJdTMyIHZhbDsKKworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2Rl LCAiYXJtLG51bS1jaGFucyIsICZ2YWwpKSB7CisJCWlmICh2YWwgPCAxIHx8IHZhbCA+IElOVF9N QVgpIHsKKwkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBhcm0sbnVtLWNoYW5zIHZhbHVlICV1IG9m ICVwT0ZuXG4iLCB2YWwsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJfQorCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYtPm9mX25vZGUsICJt ZXRob2QiLCAmbWV0aG9kKSkgeworCQlpZiAoIXN0cmNtcCgiaHZjIiwgbWV0aG9kKSkgeworCQkJ dXNlX2h2YyA9IHRydWU7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCgic21jIiwgbWV0aG9kKSkgewor CQkJdXNlX2h2YyA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4oZGV2LCAiaW52YWxp ZCBcIm1ldGhvZFwiIHByb3BlcnR5OiAlc1xuIiwKKwkJCQkgbWV0aG9kKTsKKworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX0KKwl9CisKKwltYm94ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpt Ym94KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1i b3gtPm51bV9jaGFucyA9IHZhbDsKKwltYm94LT5jaGFucyA9IGRldm1fa2NhbGxvYyhkZXYsIG1i b3gtPm51bV9jaGFucywgc2l6ZW9mKCptYm94LT5jaGFucyksCisJCQkJICAgR0ZQX0tFUk5FTCk7 CisJaWYgKCFtYm94LT5jaGFucykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGFuX2RhdGEgPSBk ZXZtX2tjYWxsb2MoZGV2LCBtYm94LT5udW1fY2hhbnMsIHNpemVvZigqY2hhbl9kYXRhKSwKKwkJ CQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGFuX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJ Zm9yIChpID0gMDsgaSA8IG1ib3gtPm51bV9jaGFuczsgaSsrKSB7CisJCXUzMiBmdW5jdGlvbl9p ZDsKKworCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChkZXYtPm9mX25vZGUsCisJ CQkJCQkgImFybSxmdW5jLWlkcyIsIGksCisJCQkJCQkgJmZ1bmN0aW9uX2lkKTsKKwkJaWYgKHJl dCkKKwkJCWNoYW5fZGF0YVtpXS5mdW5jdGlvbl9pZCA9IFVJTlRfTUFYOworCisJCWVsc2UKKwkJ CWNoYW5fZGF0YVtpXS5mdW5jdGlvbl9pZCA9IGZ1bmN0aW9uX2lkOworCisJCWlmICh1c2VfaHZj KQorCQkJY2hhbl9kYXRhW2ldLmZsYWdzIHw9IEFSTV9TTUNfTUJPWF9VU0VfSFZDOworCQltYm94 LT5jaGFuc1tpXS5jb25fcHJpdiA9ICZjaGFuX2RhdGFbaV07CisJfQorCisJbWJveC0+dHhkb25l X3BvbGwgPSBmYWxzZTsKKwltYm94LT50eGRvbmVfaXJxID0gZmFsc2U7CisJbWJveC0+b3BzID0g JmFybV9zbWNfbWJveF9jaGFuX29wczsKKwltYm94LT5kZXYgPSBkZXY7CisKKwlyZXQgPSBtYm94 X2NvbnRyb2xsZXJfcmVnaXN0ZXIobWJveCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1ib3gpOworCWRldl9pbmZvKGRldiwgIkFSTSBT TUMgbWFpbGJveCBlbmFibGVkIHdpdGggJWQgY2hhbiVzLlxuIiwKKwkJIG1ib3gtPm51bV9jaGFu cywgbWJveC0+bnVtX2NoYW5zID09IDEgPyAiIiA6ICJzIik7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IGFybV9zbWNfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgbWJveF9jb250cm9sbGVyICptYm94ID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7CisKKwltYm94X2NvbnRyb2xsZXJfdW5yZWdpc3RlcihtYm94KTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX3NtY19tYm94 X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhcm0sc21jLW1ib3giLCB9LAorCXt9 LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFybV9zbWNfbWJveF9vZl9tYXRjaCk7CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybV9zbWNfbWJveF9kcml2ZXIgPSB7CisJ LmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXJtLXNtYy1tYm94IiwKKwkJLm9mX21hdGNoX3RhYmxl ID0gYXJtX3NtY19tYm94X29mX21hdGNoLAorCX0sCisJLnByb2JlCQk9IGFybV9zbWNfbWJveF9w cm9iZSwKKwkucmVtb3ZlCQk9IGFybV9zbWNfbWJveF9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihhcm1fc21jX21ib3hfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQW5kcmUg UHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04o IkdlbmVyaWMgQVJNIHNtYyBtYWlsYm94IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYWlsYm94L2FybS1zbWMtbWFpbGJveC5o IGIvaW5jbHVkZS9saW51eC9tYWlsYm94L2FybS1zbWMtbWFpbGJveC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2EzNjZmZTQ5MWMzCi0tLSAvZGV2L251bGwKKysr IGIvaW5jbHVkZS9saW51eC9tYWlsYm94L2FybS1zbWMtbWFpbGJveC5oCkBAIC0wLDAgKzEsMTAg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisKKyNpZm5kZWYgX0xJ TlVYX0FSTV9TTUNfTUFJTEJPWF9IXworI2RlZmluZSBfTElOVVhfQVJNX1NNQ19NQUlMQk9YX0hf CisKK3N0cnVjdCBhcm1fc21jY2NfbWJveF9jbWQgeworCXVuc2lnbmVkIGxvbmcgYTAsIGExLCBh MiwgYTMsIGE0LCBhNSwgYTYsIGE3OworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9BUk1fU01DX01B SUxCT1hfSF8gKi8KLS0gCjIuMTYuNAoK