From patchwork Wed Feb 21 04:53:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shubhrajyoti Datta X-Patchwork-Id: 10231253 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 150C160392 for ; Wed, 21 Feb 2018 04:47:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 04B0428A19 for ; Wed, 21 Feb 2018 04:47:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EC97128A1B; Wed, 21 Feb 2018 04:47:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 60CED28A19 for ; Wed, 21 Feb 2018 04:47:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751312AbeBUErW (ORCPT ); Tue, 20 Feb 2018 23:47:22 -0500 Received: from mail-cys01nam02on0059.outbound.protection.outlook.com ([104.47.37.59]:35840 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751168AbeBUErV (ORCPT ); Tue, 20 Feb 2018 23:47:21 -0500 Received: from CY4PR02CA0032.namprd02.prod.outlook.com (2603:10b6:903:117::18) by BY1PR0201MB0904.namprd02.prod.outlook.com (2a01:111:e400:4817::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.506.18; Wed, 21 Feb 2018 04:47:19 +0000 Received: from SN1NAM02FT009.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::200) by CY4PR02CA0032.outlook.office365.com (2603:10b6:903:117::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.527.15 via Frontend Transport; Wed, 21 Feb 2018 04:47:19 +0000 Authentication-Results: spf=softfail (sender IP is 149.199.60.100) smtp.mailfrom=gmail.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=fail action=none header.from=gmail.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning gmail.com discourages use of 149.199.60.100 as permitted sender) Received: from xsj-pvapsmtpgw02 (149.199.60.100) by SN1NAM02FT009.mail.protection.outlook.com (10.152.73.32) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.506.19 via Frontend Transport; Wed, 21 Feb 2018 04:47:18 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66]:41686 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw02 with esmtp (Exim 4.63) (envelope-from ) id 1eoMJH-00073p-By; Tue, 20 Feb 2018 20:47:15 -0800 Received: from [127.0.0.1] (helo=xsj-smtp-dlp2.xlnx.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1eoMJH-0001M4-7H; Tue, 20 Feb 2018 20:47:15 -0800 Received: from xsj-pvapsmtp01 (smtp3.xilinx.com [149.199.38.66]) by xsj-smtp-dlp2.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id w1L4lECH032159; Tue, 20 Feb 2018 20:47:14 -0800 Received: from [172.23.37.106] (helo=xhdshubhraj40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1eoMJF-0001In-PL; Tue, 20 Feb 2018 20:47:14 -0800 From: To: CC: , , , , , , , Shubhrajyoti Datta Subject: [PATCH 2/2] fpga: reset bridge: Add the reset bridge Date: Wed, 21 Feb 2018 10:23:46 +0530 Message-ID: <1519188826-2047-2-git-send-email-shubhrajyoti.datta@gmail.com> X-Mailer: git-send-email 2.1.1 In-Reply-To: <1519188826-2047-1-git-send-email-shubhrajyoti.datta@gmail.com> References: <1519188826-2047-1-git-send-email-shubhrajyoti.datta@gmail.com> X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23620.005 X-TM-AS-Result: No--5.420-7.0-31-1 X-imss-scan-details: No--5.420-7.0-31-1;No--5.420-5.0-31-1 X-TM-AS-User-Approved-Sender: No;No X-TM-AS-Result-Xfilter: Match text exemption rules:No X-EOPAttributedMessage: 0 X-Matching-Connectors: 131636620391206487; (f9e945fa-a09a-4caa-7158-08d2eb1d8c44); () X-Forefront-Antispam-Report: CIP:149.199.60.100; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(39860400002)(396003)(376002)(346002)(39380400002)(2980300002)(199004)(189003)(81156014)(61266001)(450100002)(4326008)(8676002)(73392003)(54906003)(106466001)(107886003)(2351001)(498600001)(105596002)(26005)(316002)(16586007)(83322999)(36756003)(77096007)(81166006)(575784001)(86362001)(82202002)(8936002)(87572001)(86152003)(76482006)(47776003)(76176011)(5660300001)(2950100002)(6916009)(6666003)(305945005)(2906002)(48376002)(63266004)(356003)(50466002)(2876002)(336011)(50226002)(59450400001)(51416003)(55446002)(73972006)(9786002)(107986001)(5001870100001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0201MB0904; H:xsj-pvapsmtpgw02; FPR:; SPF:SoftFail; PTR:xapps1.xilinx.com,unknown-60-100.xilinx.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02FT009; 1:bR+9Zr47eeWSY80PPbUhcSIoPAjFlnrOVFr/cpJCdrKUqEaZnK7vrY9uFuuvxUDhhF578VFwfHlWEKBzwHFRwiB+m3q+Jlp8aeCNAbXTZfQf1kb41vNrviGeuAbilYhC MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 72079295-02ea-4a91-e27d-08d578e63044 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(5600026)(4604075)(2017052603307); SRVR:BY1PR0201MB0904; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0201MB0904; 3:2gqdlHA59xJgUJhWKXctadVh57VHX5xnS29D/FRqOt++4NyW0AN8AbEpONGyffQ2BRYr4RvJMQiUUO5Iat/3+VGGYzVJFnAOtonssibvQz/K5jVz2Y0T5E+xF9KshR35d18dZdsahQyFsphZ/pgsvgZ/tkijDtLc+DvxDjuJkK7FXldIRAyaweFXk2D+1QUhOb1i1x18aaZYH1xeCXVEBxAusGnjZ2mRxRkPDcPsE4Ol1Jluz/3wLSSynpAkHnxUpuwEw7QgGur5A3vdbB0y7EgIqSCXqJ4GPvWQS2k5DDsK+X5vNG7UcXN6t+SeguTEpyVkFNzhm9Oprgev50d/163e04xXwuRQkrtuMecFRhQ=; 25:5DvM4V2WtJH8I32UAdpFoKuIo6qerRy9Lda40mO03/bGnLuh9hvF8p8Rbof0xVnJxrmnQOipag7mUAvJK+y6IjTpPXIcW/7WpKf0qKnOb/Ne34H3k3unNKo7zf5I1sn1L+6Qfwm+XtXbL6R3HLE3tAtI6NGMnONmTy1GSIr4/HkimmuScyQSDhlVINxBM2PsL6ZD04iIcD+6RWruEp00lr3eEbM+sxusuU2hRNpHWqxCqpbxrL+v+j3NSaudBsMoxzK+vZbnHjdGRjCZ8bXCZf/e6/HQRQI2kTYCa6aS8YiZKjftP+l+5OpthVGhKz5qrzYi7ItW2ni735euv2A0UA== X-MS-TrafficTypeDiagnostic: BY1PR0201MB0904: X-Microsoft-Exchange-Diagnostics: 1; BY1PR0201MB0904; 31:zd2XTwHB+KxyA2yspZMIwkpLSrRd5NKlxHDF7cK69LP/D9Yl3z1/5V3pkFI6O8qJKoqaxS1BHZC1SaLAgTw3q/40uwDAvIyQvln81FjZg2qoyrIoRAZERwq/cLvdDb5GuhdrJXMNqTz601lWCGrk2SSgfdecsBSpjksIk4wQsGsB1pzI+GjnWJGhdPRwCWBVmFg1F0xkxjn0MF35wj6PQl2W1b1ap6E7Dni2O+IVV4Q=; 4:f/TUY+WnhOfFc7fHcc2lgggn8cvs6GLHCmGCeVk4qYEIn7kjLlvHxAkmwLmSV7AS/ubskCEIymwbOG5B63MaXbfUm+kE2dh0Lt7MUU2T48yJvP8R2ogfNenoEuPaezFDA7175TyOaoLUNWNGswn5fdOMWSJyS3/7THJpKAyImWSJIf3yva0BljCnNsY3C/aBe2HmeNAS9ZL5ux6pRHdeFbWCW596nXCUPhd33IGnjjdKAaQT7QbOr0+b+lz5OVKJFMbPOrMTGo8n6Bq+g34fZ33DPPhBtJfCaV33PDYODeuKcVuXVWcKE/uJnbaNByLT X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(10201501046)(3231101)(944501161)(6055026)(6096035)(20161123563025)(201703131430075)(201703131448075)(201703131433075)(201703151042153)(20161123565025)(20161123559100)(20161123556025)(20161123561025)(201708071742011); SRVR:BY1PR0201MB0904; BCL:0; PCL:0; RULEID:(400006); SRVR:BY1PR0201MB0904; X-Forefront-PRVS: 0590BBCCBC X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0201MB0904; 23:DOYUmayLi+r5/EAm5cXe6pU7OCtc/OVs1EvFeSJ?= =?us-ascii?Q?NRnpTVXik1WF0YPhwZznCBS9NEbe5dhJZpZpvIDU0JG9XwFLGyr1TgjGiG2A?= =?us-ascii?Q?bYy08gOghKEDR0Mp6Ecf1y3sQy6rZe6xHjeEeVKN6gwwBmFCm5uXWJDXZLD1?= =?us-ascii?Q?6iXUWEsreorbhUSe0HkIxWh4fSKMan98BYYmUOczWhueUmMdUeUyY9gIpJmT?= =?us-ascii?Q?NRt6AbH/ueVmfTdmA6tiLvMW9GURk7ZIj/kXlRs3sHw65ZAUYH1EktLpsWEx?= =?us-ascii?Q?QfMHrFc85vFmsZ/H+DGdkk/JeK58sZ9YUYfzUVLSxmw9ya6jtLr9disd6j+k?= =?us-ascii?Q?dSccbhpsvApHtoW+tb5kjE+q8ot4s86sUogTeh0JyPdydJV4FBKbd4jJmU9E?= =?us-ascii?Q?pg+NGyETnkG8rD4OipzM45dZyOpZijXAc98eOUse3go5gtJcro26moG6D4bi?= =?us-ascii?Q?dl1mHPbdD7u6R92DidRxp4FUUkM6MriyNGekdZq5jgK9gjTLDUKuZDGoLxPV?= =?us-ascii?Q?RZ8UIYczvfb+i9lChA2GNlz/aeannfiP3SMscqjB3WuCNgFsyWUwTiBjiP2O?= =?us-ascii?Q?YZq/IqeLbGy3ebI/IsXcdiVdJpJFYx7TNMXWXC1tl7kbdmDNYxkbYSVzA9Z4?= =?us-ascii?Q?DeleTQkm86+IyTGKy5C0CXKoaXZCR8k9CF264LMTX7K/x81BAy0R+gX/dfFQ?= =?us-ascii?Q?ZK3T7YlIa2njOSPcQsmnYlViXKyA3JDe27LK5wwK9SlznpmgU1vQKfPJiqUR?= =?us-ascii?Q?okAVJNcyGgx7nRjhDvd3p0QKl2XpbhBJjcuh7bsRO5ot7x7YL4J/BOefUXPB?= =?us-ascii?Q?iWLsHIm7/Q6OdOl3IbMInqfDuHyNercogq0cPvyeQMzPYJddqhBanGgc3v4i?= =?us-ascii?Q?9Ovaea9Ds/nwgJtFLEj1k1q6xS1swfpRmI8zDFYkxOn5aFpI47TOpPfPEdQ5?= =?us-ascii?Q?DQZukHwjvCLrcrzbCRqbriyWq58KeDg41bKxI8xidcNwRvszIvnvWVmJWurb?= =?us-ascii?Q?rWOESgxim70FqdJfdzJuS0MPuf0AkpuZxwWqg3dlDqWACXKmgoSJCv+ElB8c?= =?us-ascii?Q?6qZB6rxkNDSpOAP7uMl9v+z5xP+aBRXg+9nE5aGOJTG7HIroROrdkkmALoDm?= =?us-ascii?Q?RRkJOegR/OMtY9hIDlq+2Z6btTEHJPGPouIPJ0xnObGI3fEGAWzHIyNhKPRi?= =?us-ascii?Q?DP7p22PbmodTp6ePiBmOXuPqlvKtFFrhzcp12zd4qjNTXQa87xfIYiJzopAQ?= =?us-ascii?Q?D27a2KietKx8n0uVES65hDmDqoXDqzHsZHePyb5EUL8OwswFoLjPPCV0F+Ka?= =?us-ascii?Q?hg8BsQbnp8Y7yjiOdpKVM+bU=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0201MB0904; 6:cjdmVkWB6ITfwyUa3A86fdFBKrzRgW1o9W8Y1DR3Xp+/4+KEk65xV3MetAdp6IeF/oISlcJlRzwPu6I6y9mJnblIUS/1X3bJ1FRqS3/GMSlvN6e/3yaVK907MWVnDiHUPO80kLR2u7bJ35JdzqzMLcCZOe/4kdHM0FR+WCQXSFwY6R4EkD0r6RPkfOHSt70bvR3zzY6UtJNLA+zF0x3mbvKFBOl+xLWBuoO1UMVcoeL0LhAh1bT/j/+u/u1Of9xMXnNEtUdYfIwoFElUZLlo8TaBRcfW0Ztwq2OJm/lp0eyGI6kfyNTuHrPHA5pmjA0RY//dHJKKTwaGgPOVlB9Mz32GX/Fgf96QebFHUSp2mWo=; 5:s2lx4OfHGNd2Hp8aQr9QEaTzpIZ2JeK7/bBXsy+yfX/LwORCPMPVzL9w881l5qwybyYOeT85PTytSbDE8qlzAIpn/bVSZrMpGnzFGeUlKqz5YNVvC7nBmFNfUHL9WZ1DzG0Gb7ke10CKvWv/hPJexlV36KSVCYcbypVJ9cta++s=; 24:erM/USXF6IQu6am/k4wvoM2Su7vAyCcbmCpfTU8fV4cWqSY+/EnrKPxQoPbqBf65ASD0QkHJb1juDQ/YzqtbuzgIYN9B9QVw6b+TALj51BU=; 7:trBRj4p2Q9xCGNr/CuLqXogLVUpRLjvaqGDL1H5VIbzVDQLtObOoz3Iw63usxSLhWNoM6DOhqiCdONMAcjHXd7jU0Hqx3V5PUQpNUNp663nE0MQ6wuxvvX4wvWg2pywEtiexoilE6QAGiJCnOlWdTZ4yVHcz8mXO/gf6K4j661NS9mk2axl/DAAfbg3zVD29I0MtUQjrEYLlXkRAf5XRnX8RPr5Q8Ybff5jszRM2Ph1UjJ98xo7Q9UwVu0eSNCUu SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2018 04:47:18.1987 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 72079295-02ea-4a91-e27d-08d578e63044 X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[149.199.60.100]; Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0201MB0904 Sender: linux-fpga-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fpga@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Shubhrajyoti Datta Adds the reset bridge. After the bitstream load the reset bridge helps in reseting the programable logic. The reset lines depends on the design. Signed-off-by: Shubhrajyoti Datta --- drivers/fpga/Kconfig | 8 ++++ drivers/fpga/Makefile | 1 + drivers/fpga/xilinx-rst-bridge.c | 100 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 drivers/fpga/xilinx-rst-bridge.c diff --git a/drivers/fpga/Kconfig b/drivers/fpga/Kconfig index ad5448f..752a907 100644 --- a/drivers/fpga/Kconfig +++ b/drivers/fpga/Kconfig @@ -117,4 +117,12 @@ config XILINX_PR_DECOUPLER region of the FPGA from the busses while that region is being reprogrammed during partial reconfig. +config XILINX_RST_BRIDGE + tristate "Xilinx Reset bridge" + depends on FPGA_BRIDGE + help + Say Y to enable drivers for Xilinx Reset bridge. + After writing the bitstream there has to be a reset. + The reset lines are design specific. + endif # FPGA diff --git a/drivers/fpga/Makefile b/drivers/fpga/Makefile index f98dcf1..c1b0d13 100644 --- a/drivers/fpga/Makefile +++ b/drivers/fpga/Makefile @@ -23,6 +23,7 @@ obj-$(CONFIG_FPGA_BRIDGE) += fpga-bridge.o obj-$(CONFIG_SOCFPGA_FPGA_BRIDGE) += altera-hps2fpga.o altera-fpga2sdram.o obj-$(CONFIG_ALTERA_FREEZE_BRIDGE) += altera-freeze-bridge.o obj-$(CONFIG_XILINX_PR_DECOUPLER) += xilinx-pr-decoupler.o +obj-$(CONFIG_FPGA_MGR_ZYNQMP_FPGA) += xilinx-rst-bridge.o # High Level Interfaces obj-$(CONFIG_FPGA_REGION) += fpga-region.o diff --git a/drivers/fpga/xilinx-rst-bridge.c b/drivers/fpga/xilinx-rst-bridge.c new file mode 100644 index 0000000..8062283 --- /dev/null +++ b/drivers/fpga/xilinx-rst-bridge.c @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Xilinx FPGA reset bridge. + * Copyright (c) 2018 Xilinx Inc. + * + */ + +#include +#include +#include +#include +#include + +struct xlnx_rst_bridge_priv { + struct device *dev; + bool enable; +}; + +static int xlnx_rst_bridge_enable_set(struct fpga_bridge *bridge, bool enable) +{ + struct xlnx_rst_bridge_priv *priv = bridge->priv; + struct device *dev = priv->dev; + struct reset_control *rstc; + int ret = 0; + + if (enable) { + rstc = of_reset_control_array_get(dev->of_node, false, false); + if (IS_ERR(rstc)) + return PTR_ERR(rstc); + + ret = reset_control_reset(rstc); + + reset_control_put(rstc); + + if (ret) + dev_err(dev, "Reset failed\n"); + } else { + dev_dbg(dev, "Bridge disabled\n"); + } + + if (!ret) + priv->enable = enable; + + return ret; +} + +static int xlnx_rst_bridge_enable_show(struct fpga_bridge *bridge) +{ + struct xlnx_rst_bridge_priv *priv = bridge->priv; + + return priv->enable; +} + +static struct fpga_bridge_ops xlnx_rst_bridge_ops = { + .enable_set = xlnx_rst_bridge_enable_set, + .enable_show = xlnx_rst_bridge_enable_show, +}; + +static int xlnx_rst_bridge_probe(struct platform_device *pdev) +{ + struct xlnx_rst_bridge_priv *priv; + struct device *dev = &pdev->dev; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->dev = dev; + + return fpga_bridge_register(dev, "xlnx_rst_bridge", + &xlnx_rst_bridge_ops, priv); +} + +static int xlnx_rst_bridge_remove(struct platform_device *pdev) +{ + fpga_bridge_unregister(&pdev->dev); + + return 0; +} + +static const struct of_device_id xlnx_rst_bridge_of_match[] = { + { .compatible = "xlnx,rst-bridge", }, + {}, +}; +MODULE_DEVICE_TABLE(of, xlnx_rst_bridge_of_match); + +static struct platform_driver xlnx_rst_bridge_driver = { + .probe = xlnx_rst_bridge_probe, + .remove = xlnx_rst_bridge_remove, + .driver = { + .name = "xlnx_rst_bridge", + .of_match_table = of_match_ptr(xlnx_rst_bridge_of_match), + }, +}; + +module_platform_driver(xlnx_rst_bridge_driver); + +MODULE_DESCRIPTION("Xilinx reset Bridge"); +MODULE_AUTHOR("Shubhrajyoti Datta "); +MODULE_LICENSE("GPL v2");