From patchwork Wed Sep 28 18:21:49 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Tull X-Patchwork-Id: 9354647 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 0632F60757 for ; Wed, 28 Sep 2016 18:30:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E8A50297A3 for ; Wed, 28 Sep 2016 18:30:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DC07B297A5; Wed, 28 Sep 2016 18:30:12 +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=-4.1 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 88F3B297A3 for ; Wed, 28 Sep 2016 18:30:11 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bpJao-0006Xe-Eo; Wed, 28 Sep 2016 18:28:30 +0000 Received: from mail-sn1nam02on0073.outbound.protection.outlook.com ([104.47.36.73] helo=NAM02-SN1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bpJUw-0000BR-Kp for linux-arm-kernel@lists.infradead.org; Wed, 28 Sep 2016 18:23:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=altera.onmicrosoft.com; s=selector1-opensource-altera-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=n3XJmh7SgTCpbJAKG+ZAPIzwO/Ax6R9qdxPpHw8QrcE=; b=EzTgja3sXylVkdw0LfryzgPqLagqiY2OSBNrWAi6nKhV8eURhXP3Usz/Zfarua1eBpiGLh4Kn14EXlkz1sbvpGrVeV9z22OUxOGF3Y/ebLSS3eTXT18+8nDYb9jeJQ5cK9bFMPHPoIrHrusgr5+6ST8Tnu0R8jIuJAtnH7SyBGs= Received: from BLUPR0301CA0022.namprd03.prod.outlook.com (10.162.113.160) by BL2PR03MB1908.namprd03.prod.outlook.com (10.164.115.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.649.6; Wed, 28 Sep 2016 18:21:52 +0000 Received: from BY2FFO11FD040.protection.gbl (2a01:111:f400:7c0c::146) by BLUPR0301CA0022.outlook.office365.com (2a01:111:e400:5259::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.639.5 via Frontend Transport; Wed, 28 Sep 2016 18:21:52 +0000 Authentication-Results: spf=fail (sender IP is 66.35.236.236) smtp.mailfrom=opensource.altera.com; ni.com; dkim=pass (signature was verified) header.d=altera.onmicrosoft.com; ni.com; dmarc=none action=none header.from=opensource.altera.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.altera.com does not designate 66.35.236.236 as permitted sender) receiver=protection.outlook.com; client-ip=66.35.236.236; helo=sj-itexedge04.altera.priv.altera.com; Received: from sj-itexedge04.altera.priv.altera.com (66.35.236.236) by BY2FFO11FD040.mail.protection.outlook.com (10.1.14.225) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.629.5 via Frontend Transport; Wed, 28 Sep 2016 18:21:46 +0000 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (207.46.163.82) by webmail.altera.com (66.35.236.236) with Microsoft SMTP Server (TLS) id 14.3.174.1; Wed, 28 Sep 2016 11:21:04 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=altera.onmicrosoft.com; s=selector1-opensource-altera-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=n3XJmh7SgTCpbJAKG+ZAPIzwO/Ax6R9qdxPpHw8QrcE=; b=EzTgja3sXylVkdw0LfryzgPqLagqiY2OSBNrWAi6nKhV8eURhXP3Usz/Zfarua1eBpiGLh4Kn14EXlkz1sbvpGrVeV9z22OUxOGF3Y/ebLSS3eTXT18+8nDYb9jeJQ5cK9bFMPHPoIrHrusgr5+6ST8Tnu0R8jIuJAtnH7SyBGs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=atull@opensource.altera.com; Received: from linuxheads99.altera.com (64.129.157.38) by BLUPR03MB1508.namprd03.prod.outlook.com (10.163.81.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.639.5; Wed, 28 Sep 2016 18:21:36 +0000 From: Alan Tull To: Rob Herring Subject: [PATCH v19 01/12] fpga: add bindings document for fpga region Date: Wed, 28 Sep 2016 13:21:49 -0500 Message-ID: <20160928182200.15800-2-atull@opensource.altera.com> X-Mailer: git-send-email 2.10.0 In-Reply-To: <20160928182200.15800-1-atull@opensource.altera.com> References: <20160928182200.15800-1-atull@opensource.altera.com> MIME-Version: 1.0 X-Originating-IP: [64.129.157.38] X-ClientProxiedBy: BY2PR1001CA0078.namprd10.prod.outlook.com (10.164.163.46) To BLUPR03MB1508.namprd03.prod.outlook.com (10.163.81.26) X-MS-Office365-Filtering-Correlation-Id: 257c2d5d-905e-4478-dfa7-08d3e7cc519a X-Microsoft-Exchange-Diagnostics-untrusted: 1; BLUPR03MB1508; 2:YDMUWRp6EfvZhA5sKf1jnKpqLm30DP+BhkEC9nG/gDowAVDJ0tLGUVIlIcPgAIAysk+L602U4fu048ETF+N6dXP9sR2CkkmnV5fjN+ucry90NfbkKqfGM6zd6/wg1BI637BLcgi4ws8u3OCUfsVKqhrJwhEghnwuNGcA4TMlWXr31JAsQPCCHxdIQTGV8xy2; 3:mXpRDXrQJWt0iTWbAXga8ktY/q+661REUeyM+cpr6kCvZO5MY8m8KVKZePGMK+EdBJTwAq+vPFxWA9PtYlcpXXMqhD4IPFqm3L3x3ffyTTYnmIJ1iYEGgxecV6uroMjO X-Microsoft-Antispam-Untrusted: UriScan:; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB1508; X-Microsoft-Exchange-Diagnostics-untrusted: 1; BLUPR03MB1508; 25:KsA7lesP/4VSKsKoO5HUnePVhrdvMiFcabT18J8gmwm2vQXL19HrxVCOSuH3KyEt6esCqvLto4UzLsJ/J0rVtErMl+3F5m72yaNK8USHevFPITJt6ZW7lq9MrbG9Q+wFV4+uVohC3QRGWq66kyLdNlyQMp/B1nkxG2/on4TKxe/bQ/J/qoRmtDEIJGCU36/XK5gcp7tzkThMUxTD4tDlvHopMAmvCV2jRQlUjn+G9wXNEJOCrvysk2TeHD0NWVzQ4nwLHXajjuWsiVhZwLPSEqNgJrUg8w0QKIHM6mN36WbHUGAcjS5joYq+upS3fQqwO8ej4KeCjQKFtgOFTGxGjzZHOkBORLcr4DyPG3MHXgfLslRlwZfHXpzAKaCXHUSX3elil3cd861WbKY+acCC8n88E1H90UhQsKy4DMQZ/DdNVcAPceZyPKjVK3W5U0o3Hp9XMoDY6TSRylj77y2Xviql8Q1EOBXi0wmhUrIMyuM5ccyllpF4RV4U04hGMtXyWqyjsm0Ar8teyFSYJl3Fzf+9V0O/7jU0sA/5kSWim/af8CUv/MOIdYPK7nRGY95bzziIE91G6V/mof+RIZBdCL0zS9JknxauC9j1RZ/0Shu4H/rYtFQOhDXTvcCdQuLrUqCKIzw0/hT0MwnbsVDKjxx6djV82D/4cRTceRPshDhx7TQkLH7+mFUoNce304wEqUMV3GUm3s/7d4KYAIZMPS3WoU7YnrRCHGIhw1gl2/7lRGrcVHPDgpcDolmCm0u7eYBYTp9OmLkbrL7f/Ic+qtd81Fv+X2vSnKoOoKppzPWGHLPhlT3bzeMIqXeSaYI2xmbTMfoUJNM59RHqwEPbn8JZn+Kj7kmO+rUUsNHI2kY= X-Microsoft-Exchange-Diagnostics-untrusted: 1; BLUPR03MB1508; 31:f88LrJwzKbAbBQdrkoI2g5PGSQ6B/DaJEcSWTyv6A2K1y1sNu1Rt7mOJ4Yk/+bcNy3t3T9CcUf+JF+TZayTBXwZnmJVB26gDbRGt+c1/8xJTWhr9GNo29Lhb6/GI1HFi/rQpmvQETzLfgkTdANhddqKr1XfZVhBOmAdS33Ge1aj86QadPG13bB6M+Up8/tCxxjlbay5zeueiR7NxeIF3DVHNSyVYipexp7pCI8xr5Wg=; 20:x0OLhNT8FQ5vuhtCekGECXwJDFHrjrBNOrT1R09x6b+vGhFiW1C1KH++kIarr2Rfpv0czjWfLUMdOpFCxZUrrYdyatzwRCPoh/T7bdouv3dpHxJcAlfyM2fprn0dRo2gNzEpMN+naFY3BfrFvuehIgtmDli7CUXwHdYhjE9Rw5k= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(34691856369561)(52743740316358)(131327999870524)(80048183373757)(788757137089)(192813158149592)(189271028609987); UriScan:(34691856369561)(52743740316358)(131327999870524)(80048183373757)(788757137089)(192813158149592)(189271028609987); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:BLUPR03MB1508; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB1508; BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(13023025)(13017025)(13018025)(13015025)(13024025)(10201501046)(3002001)(6055026); SRVR:BL2PR03MB1908; BCL:0; PCL:0; RULEID:; SRVR:BL2PR03MB1908; X-Microsoft-Exchange-Diagnostics-untrusted: 1; BLUPR03MB1508; 4:U+knDvwiU37oLPaRoLY3k80B1/GqCiLYTS2Iv/KLJ1XcahfWkqhGbP8AkhtoJv4CiVOyibU8RRh6w3pWirc/LxFJA4xvI+ay6BKmmwy1Zj+R3qDCaSKZlM7KAKsFcSQZVGYRqwe3csbGoDeNS8caYUufPi8D/NjepCj93noBkQkeuOfJriV5zcrwOesfK6ijpCxjMF02uwSbsHDtZ9Dnfr2keAqaFfXeqdcpzAV8NycIdBvMzC3bKmnqMamGjz4RX+JNY3rItLP9ktPzgVGb8SQ60JbcGHHnhlWvK6CxfWp+/v3/5/ZUs+3c5v+0C4cvCdXw81+hBdcWHgzBc3FRrfmXgUrbFZEWrpGUX59nuQKERL3/txs44p5cT69xosbR0NAWiZYK0qpNj8VV8YKirjkvydRp4PO4rNVms7/OEZrjeJEO95t0E5y2RfWRXCNX4kjoJ7nLN6jrVdaELnaXwvWwkv0bws+xezMC0qLpv1DC1kSHulIma0ddQW8UPo5vYu7YZbamAAp9ZXgqzw6NaqrjT13MO4n6sEH824DfNIVDD5GOJG35uFYLGnLwnCxJKXCpKLfpTROETGVmabiPuEWgGcU7nqaWzb+9TkQUQSdwxBSAOAqbRxcAhL4Vu3sbtXpJEIQxZUteKJtlN6mHCQ== X-Forefront-PRVS: 0079056367 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(199003)(189002)(53416004)(97736004)(189998001)(107886002)(19580405001)(86362001)(33646002)(19580395003)(5660300001)(7416002)(2950100002)(42882006)(76176999)(110136003)(15975445007)(101416001)(77096005)(5003940100001)(4326007)(106356001)(92566002)(50986999)(66066001)(2906002)(42186005)(48376002)(1076002)(105586002)(50466002)(7520500002)(47776003)(586003)(6116002)(3846002)(50226002)(229853001)(69596002)(4001430100002)(15974865002)(81156014)(81166006)(7736002)(7846002)(305945005)(8676002)(8666005)(68736007)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR03MB1508; H:linuxheads99.altera.com; FPR:; SPF:None; PTR:InfoNoRecords; A:0; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: opensource.altera.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics-untrusted: =?us-ascii?Q?1; BLUPR03MB1508; 23:/9Tvd4XkhmDrFDRB9ZWZPzbHLQx5+1rMhL1vgj9Xv?= =?us-ascii?Q?AtjL4bDuTSxvwb0n2QsLGKfSMjxK/rgTGWGtO3j99tBgVrz7MUs6lSftqk8Q?= =?us-ascii?Q?/+cjTzmQTrfo7MjLKIc0Mv+c5B4Gqt+LRPMpDiuaMoU8FvXmNNBzP+xS7X07?= =?us-ascii?Q?JbsQ5QWAohLoT+cnniuj6J7HG/ODXqAKzOU9DYM4PuSkesNJpjkbO1TJwxjg?= =?us-ascii?Q?rTy6ejRQk2LroigilVWgSqz5NogUzDzWMBC809YyOaH1qh6dp8LnzQz3YbYj?= =?us-ascii?Q?S0AM5BF+nJ8SfCfd0RY8+CNgb/THtavTQStDH0eICp3YSIOicwA2KuUmJVDa?= =?us-ascii?Q?VtFEsS9FXDItvQqYQ5zWfMvXSZd4W0k39uXAjYsIWnBXbTLDeqBPkVy5S080?= =?us-ascii?Q?rqU7xiXcT8auuz0XomRk2D/8PAiyuVb3rymENkQfar6u8ct5jjS/hCsgcdrp?= =?us-ascii?Q?fXDvtTrpXkHwz4gMSD2HXhKeVV8zRlBPym2TuivXf6X12i7T3+L1qVMEl2+T?= =?us-ascii?Q?A/bS0HMs2ByU4sGSSWz9zqCyz2XhRf7ykRmJV8lnIQdGvWXagy+vx3kpuedo?= =?us-ascii?Q?/wsnTprTayOivBOwrUur489wfhPki2x+WP0uyI5Sy2aa3Xjf4HBUzsgh7ozA?= =?us-ascii?Q?yMNvGu2cfQgd4h7go0hRGKnu7ai+qk2t/1GcqOYHLiM9peW879eI3j6TZUDA?= =?us-ascii?Q?ZQmWHuHNBnpO4PDOzY23YekSupwE426Bc1N93PJDz0yN1jQQgJW3x6Eccen4?= =?us-ascii?Q?DpBZFCNoksUX9vdCvLIC5zzd5eQrpyPV2KUoEccjwFMARizczDVhbv+jim1M?= =?us-ascii?Q?SII0AefxttMxSnnKejDzm20st5+eagh8F8atXUhCMh4CjLiRKZhp/ufwN13F?= =?us-ascii?Q?Ml5Zhf4goWLVoMNRP1zduTTxt9NkVZhXiv4D4VltDRA5sXUOqD66wEMfkYFE?= =?us-ascii?Q?tfAzGoUjCoHeEzw0vRGe9mISKQmFKt5x5/lRsJMDS30hXG+Qo1exlUC38na0?= =?us-ascii?Q?gzIOVMRuL1FICe4SMooUeo0Px/wcCeNTpY4YeQJ8BPTXg0atvWximcKE61jM?= =?us-ascii?Q?6+Sj1QSPkkL4KGRopRzK+2lNtrGWRzdIUrWzx8qY5hA6LiB67JO2ZRO88sDj?= =?us-ascii?Q?v6qxqmnNDylqT9vYTsdnZ82gSrNugJxYsqBwy2DmbyVng+U+bjRPP9zWVgIv?= =?us-ascii?Q?CJ5iL7mlsChR94VXp/otEnO25G9ijJgbtbjuh+/fm6+b06Wg2yTde3vK44B4?= =?us-ascii?Q?qFS9+YJ5kY74aIb5TBv0pCFhHqiDOTvx9uheLSki+j4DA0HhNl7ADj2NtcbI?= =?us-ascii?B?Zz09?= X-Microsoft-Exchange-Diagnostics-untrusted: 1; BLUPR03MB1508; 6:zzM5Lc1g4DJdxAhiM9PqGY3bSRVG8/6l9Xlm9HZ8DgYpbatkCtQ5P0HicuimJ3pfUYU6y/tY48MiXsY829cGE4Ta3bcXOArnfSeLCsD6TcLSEClKFCAGaBtPa9XGjMGSyMhIQUaN+2Wick7Ih6XIQXjYcoBsvHEVO0Dhq2iY5LwfEEf905UFaM7ZHbKsEAajEh9/8Sv2PlDqkNpbuVGWw3FoARB+gTJbK2yJ3436f8g2+K1RjZFfWtFPGAgrbFeKrLq+1N2I/gwjI7a8e61/VpX5GMpwcHrHzrycXOHMAuwFjSvxOKzjDtziHmFh3KWLRXoJ99oar1q5MfzRo9I5ZQ==; 5:6ZVa8n4xFv4hDbhaxIt2H0C+yOsrXcc1Tz70pdkiGC9Xju+N6y8JK+ugMmfPsCWv1zL4nZ6Uiza/gezmwM8EuZKW0DGsyIH6w2/ySPwGsMDxmOJNcnju17k4S83+br02J9vX67Zc1c/k0KeLL5h+9w==; 24:nLgMHouUAbbEmoJyLGp1aRapXXflfoCjxK2ruqffX9ku7cu3waeynZVd3GlEapX83FrfmakAj179ud6XmKLowzFzTP013nn+pTneYvSf0Sk=; 7:lMg1RsF5+cJ3uqfR+YzEgcsFQUe6NoUkfTX+TQBKuSsEBCg3y0cDQSEgbU6Hz76IaGGMOcQOQewhrFHdzmIj9igQjjBlcOnZQnGw52sreOP9ida3yfvV5/yiNQdOJhJoy35YwAiCFaS+TjK+I2km1XoJxmbqeYZmaLFNQOK51KPNqN7mPls0PUgDDzsR89zM7+s1Eamy6/dRJizch2xsZv4Cgzf2vPc0h/nSnPUiny50Z98ELUi46bviV3fvf5b/+++Z2QAoN6gHMNJY0xTQ7vHUrnHECEXqv4JNtn4xvdTJab2wguz/TiqLUmXBd8iQ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB1508 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:66.35.236.236; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(7846002)(8676002)(68736007)(50226002)(11100500001)(77096005)(33646002)(15975445007)(42882006)(2950100002)(5003940100001)(50986999)(47776003)(66066001)(97736004)(6070500001)(76176999)(48376002)(50466002)(105606002)(106466001)(107886002)(229853001)(92566002)(189998001)(956001)(19580405001)(3720700001)(19580395003)(53416004)(7416002)(626004)(7736002)(15974865002)(305945005)(4001430100002)(2906002)(87936001)(8666005)(81166006)(3846002)(81156014)(4326007)(586003)(7520500002)(336002)(16796002)(356003)(86362001)(1076002)(8936002)(110136003)(85426001)(5660300001)(6116002)(7099028)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:BL2PR03MB1908; H:sj-itexedge04.altera.priv.altera.com; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:0; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD040; 1:M1PO5QEoU32DYavRVA3A1GQFiESudP3ZFN4ez+LmV9Ty1oMq/zIyEGwDvo75q9jO5fYfrVuJRYCgNpSnxNrLBOPrChVW1AWElu3Una79lZ0hZa+UXCTgT5x1aa903Vu9Vg4kNnobLaOzod6etrJm/R2E9xLFnroAAp4yVElmUNWYyPN07vZdVmv7cNpnABM1XCPNOzJZOW5dH1nUDO63OZ+jGce7KmSy+ptllfxIl05wunFQZpVDcrFpuwa4IRPEes+tE0yh7K6VTc3yVReurSWxa0nwRNuQJwj6w9zSRN+ODlwHREyrQ/pbmXV+7OVtCfVEvM3z/CZXhhk0tWH0dAuLhAQ/ZNvDpZU9iFIWjgjDBHrv13ssV8nhKOcHFv7LwY/YT09ZYQBBycgWQtQmTtj88Xya7tmFcber5VtG1xq/DqPpOenCx0AnOtvd+iMhtS/bkD+AkwGQ1/DQtG+IYUpKTcN2poCHp3r/5g+s2ggjAWNgsxr+lfx7c0Er21GC7Aj7DhzNi01dAsS2MVbaLG09tdTlpoVn3OCmPC/olb4au/WwnphcqSMtNrBcEzU7HPJfTBAJopKQYgca50nagUuE33VMxU2cUZDK6DohgbI= X-MS-Exchange-Transport-CrossTenantHeadersStripped: BY2FFO11FD040.protection.gbl X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB1908; 2:KzDZlrAEdGQpc1XF2k/0AG5O48SMzZAghZr1GLQKqCg4ox9IhHroNFMl1+0DdYLNeW06676dYrPvVH9FDYSLErNafV7iYUHIy4WJf1PN4aH2v7WpHxG//voyz9igLQezZsrCwJyQEaKKuQ85tbpZCnthFc/IafQSmIFfcXrzywTqofO+YMkNW5M082iGDnVI+7nwEgMuwP6yrrtc68D+uw==; 3:0UwVhgbfzOJlQi00Rlrl7nK9eRYON8G8Jakg3dXHgk9qTOv+YI8kHyHwxgqAwDVSSgpYKFpn+CNzAHPswia6Ml3vtbRZOLPSkgaKHYCxKLaQUppe9caD0aIP6Vltf5M8uHABYPWSfEj2R7OuikWY85i4NPtSYfdWGSH7yzeam3ACFkb/Hpdpk7BHVzyCdV7x5+NsodxWUZOIzKntqEaIILN/SwmwgLtNx/olQP1UF1LMB8CW6PSABhHt+BHdBg0GWJVd9e8C6+5ZImMs2ACFNw==; 25:yw2oOolUbPxa23cCjOjMc7BnDsMhcbsa8XxR3IXzI33tET1N0OAWfKiieRbvNIsL6EHB8AlK+EkpwtGjKiTQtPC6UmtM59AlrAsiyXIGbbPnH9TSgloxBzZVN3ulRG00gJ0ZlMTImaiwtGNxeMg4iUxHCcr6ZSW44vyz7wWg9d7bWUvaZlxNVprqU7zmR3MJdIy/A6BkWZ6KtPeVUg3ySdB67XKdmayHM5Sja6izy3LKhbsle/8op0PU4o+Fsdb5/o/MyYUCTZTAzkveNFcBsWoCb5+9NAm3z/boC4beuYb6S/AMsujmc+HrbmWutHA/w7JYkRFJuLHVgxW1VxRYHGABXLoOeDgvoQPzqT/g7S+xyLn/TZOtf2+IgyS+Z5LSJ/ULhBAYpGobImBKRNao2+LUvHDMv/uuqIlbqiAhBLuHrJNin707c4DywSK+/QR9 X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(3001016); SRVR:BL2PR03MB1908; X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB1908; 31:0NbUheoOiRCMiKP8bd+JjPzX+eed0kgXs2uHJdpBVGsI1VleC95otcaEV8DjkYYg+Mko4TiCbS7QiKcM+ZTxoahj6n4GYHDTs4GVYPcU3ZzK+3d3D6/HmujS+EdwI0xv+cGLLEFyAn9TwYVXgA91FxJpX/HcxYXi9n6xhD7pNInCdlaFzfpNFhXmC/12o/RKy+sSrSoUQUhnU8Mc6fQss8VSd1ae/szHZ55GSLIo8lopyiTVImZRbS4hB054X01t; 20:5aq8js51bNMxOoRwWgZwpXdKzI9s/Lc8QPq/QSYtoJD3sziv4fBl62p/rzDNDXiMuLfK9IzSp35D6wARlGlz4zmBVBGb+Qr7rYtSOtg0eKAo7QH+f9JnphyRvfV0ZP4Hp8YxKPi9bgBqamk1zJf4mG9U8IgfOtUznWncOyfRA48= X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB1908; 4:bx4CPTa7WstMp9Aau6DnjN/wJ3BMChcDYQCucuoa03+9LyEmzyuJV7tAcFtbyQ04KgX9ACB82DK8bWT+uSHOp23yhQU44xpqjTpEpOKSOulhHb5c0ho1v6NloI1KP3vHJm5/O2bZErp4qj1Km2fvTK460rV7sCtPRcWrh/NCRCfQXH1uaZGWWGIPPQAd1ECnufTjtPCZJP5STWAszb2Zz8uOMdGa5+X1S0KhrGxc75JeeZY1rO1/nSVaZ6IBw6yGhWANoDmsipG2fK9XGVb+FIotITNvatEUckQ0Qdl8KPGIhmBziZoncko9Hm43HP1Z4uYu66LhT7ZN2LcXdeI8EkzvAVNgcw9CnfKSVdeBcLnjbWA959znIzD6/UU5DOWuscAS84cW4k6LJvUt6XN7O3YciPNDjDmzXE3xPP30GWfdnVGn4rPSNc6diskX7TIS81HOmh6xENcJtkcIbCSBCKLVXLLSKoGct4MkGNTfNFaaGgdGnJrAhjhElDrLO8wKY68Mrlloh6JqFpuYvz1MwmpiPAm9gl1eNv9jrClcginSlkGmJN2uiAhpDBkzGVdLdJ0WqfUQv/gSvlCRqtqkM+n0qhYE80gPWl0hnbSRzXrZAU1uhzpzCXGUF8ucniysjBmoD62kJFpFACngoYhrIRgIkmNG2TLYszRM1XBg74wpEcYgGM1LHpDt7ATCVKAjwFnbVVWKWYFULiq8wbrNuLk+kQDu5gxA8VaMQlobBsCH8AmMXPjslhGG1f4s6QIA X-Forefront-PRVS: 0079056367 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BL2PR03MB1908; 23:kyTBeyyrw6PQTM01EPAQsDfD4Q9OUD67ZV61bhB6A?= =?us-ascii?Q?4v7nlbokt30NGVQaXhPvRQiP2xnB/dl83w006sTXe0xLRXQa+7XGGGCFtojT?= =?us-ascii?Q?ljPa7N4gHhJ3hlqqfn0iLfiMChnAFRJpqRZt866HAimTRZIfJWbnM9O7We3H?= =?us-ascii?Q?nRXgY05UkdWyGePutNaXpT4jWvVOjn2dmXWbaac6GDItGCIeEY7GVYuD729I?= =?us-ascii?Q?E4zUxXZ9AOF7WCej0JZX6KF/2kRyPq8DHSzBuXml3CTRjLjWz+9Dp3owV0io?= =?us-ascii?Q?lH1tSTZj/EQMfRv7Eklr4zGL9/qmbpRncEHhqiUH1FrwMAfWFrKgUdCSp0EZ?= =?us-ascii?Q?k7dgfDS0p4OcIBUctQgvTXmffb4rzdPAsbNimwi4rRJ3wmROHKBCq+cQBFXe?= =?us-ascii?Q?Rfm1FV1P9hbnD1gR9SDHYjWB00o740PUP/4fI+rmS8+DSzN+XENJ7aB7b8QR?= =?us-ascii?Q?o29hauTMO33wGglxefwluy0jS5nikn9ew42z9vYttjLzPXm/G7eoWc43Vxir?= =?us-ascii?Q?Tl5FyCk1MqhnA9cSZyzrJVo5Gmlwly+D/OnLnS1lfFYzHUCBhucacmPU/arj?= =?us-ascii?Q?PHF4TJt9FM4H7wAEmnn2oOqnyMA/DjdgpYxRl3ETFk8hEM45qUlY04k+pPl4?= =?us-ascii?Q?whGYalb9FPWpZZd6c2TTv6On0UPi6nZHp96dOu6goGzTvsaFN/hzSfc6280H?= =?us-ascii?Q?3GPQOmn2gH8bEfzHl6qSj11xasCSRtao+VCTP+Fjs9DIz6oP2druf6Jjy5TT?= =?us-ascii?Q?WXQ7LPsb8XvB9KEeKCC5ksNE+OAb0t3S2m69s9y6zDN6c0M3Tc/k964nBXqj?= =?us-ascii?Q?vC+Jn+1GqZzlwuNpBoCI0mOVVNnIOOw0wRlCbN3r5hH2qPNRHTYLe4I0pdqT?= =?us-ascii?Q?LZQqbRtYtPvqrM1IPdUKI0UblVvOWN+O8SPm2p4dm27Y9SnkC6P4cQP3msUS?= =?us-ascii?Q?ORC6nZerxwg0vhLiCu6QrtdZioJl5J26rZe1vKGpWJemUsP8fjJWUsN2+2Y/?= =?us-ascii?Q?HFSLgypBXqTK+M+4csqA8YQpCMN9C3+IZ7dEPk+K+Y414uZhJFKukYuajRKg?= =?us-ascii?Q?kgRl2zN9LU4GiAvUvzhUB48ZEVOFevYmIUwDs3FKv9ZzO1E5o4JGGNDlzrxY?= =?us-ascii?Q?2rsmCiYTpcbLdHI5iqrhnh1bk6XqKOM38TfkqRovJnKmN274G2qM7sbyha54?= =?us-ascii?Q?aECLCtMwMLbiDy3FOCCXRjXmiWVQS4NHdzzATIhSukZeHR67EjyPDHjPSZC4?= =?us-ascii?Q?CotVrZNwpjTKswzELTNHS3bymV+GIpzRQeZKc4xUIx4gVNMkiVaVnCZVp1Cv?= =?us-ascii?Q?NcqpFqAmCBOLpy/CS/H3pKpq6eTA6A4yJ6xBS42trO+NXfU/WSinbJVn7RR+?= =?us-ascii?Q?xkKl4gcm0bGdZL+VyE1mt8BqTZuPFrLQQn2nlMozFAsOSIrZmtbPpbqSj5bn?= =?us-ascii?Q?ilxeNftg/1GnobXAw/F+aY+OA5IR6SiYkHoaD27DOl9i8Cd6k9hii+XnPIBz?= =?us-ascii?Q?5FbPH8DBXtdyWzBeiQ/a6474sHQ6UIHnGXk5AZMq6dvO5UNrkUrMINZ?= X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB1908; 6:05zaf9zWuDxcszoomAJT44AbeZ56Pt5UtvxCw7iw5N1z40fgnPKa5s3BlH5kzSVEl5mpKrTDthBvq29LEX7kJ0i3dKuyqHW0K92dr2PigBjtjGB63Sxoz41AuOzOxgF9iwIclFvz27dJ1Fiw1839Hoivtcprx71XWYk3fX/tVaKuuQ7o/O/wzkh8lLx8zo60kfSBeqarhwd8I0IMeeTkUdR+QVFJuZm3avVeV3lXFUNQnCsNjdxqZDRABxyCG5iJPhGgNEA9asD0NkWInLheOj0lMGHc0JiPNK0UzO9d+A1gZZwcnBms+LbaBCewde5F92i0iA6GYx+2Gszwi+SmOOhlRIfAFts3Ionel0uoD+Q=; 5:NY78JeX4G0FIRsr8/+DD1c7djJj/tHx6hgp4DIWvHjo3w1gO3BXYe0nF3ha/imicpJUR9uhIWkhcr4rMSKyWkKnxhCiRwDqnBLQ5VK4XfKzQn6oik0RBIp1ZHeMMVD2kHDGUlhc27mjixQ4n1yxz3HyMF7UzjHdDklDcvvKArZE=; 24:eMinGgwc+Sq4Kw2FAXe76wQnIavy3JTDrs+xdVWyPxHMmQr9aHgVerqWU3szeTJqP2JikSmieme9fRcx3dwr0rzQbypsn4qd8FPpFTkS7Ts=; 7:0u7bAT9ORM87g1PDL87AdB+/QOjLSlntT95TQH4k20Aa06qQFDUsxh6TaOrwb5RTNkKBJZvMTbuHIbcAg4xLb787SKPVhW98oMOxa88zlduUVIg8GaN4WDf0YT7x7326PQF4OTuaENaAs6PkDh+FJq0Az1y5+hCZdTt5RH/qC+bhD7u1O3Uhqo98M6CwJOcVyP8+GJcgm36Og/LxP2WrDQfbjDt5yUildb77WdhRLK6Wj2HsSvLiDgKmBW+Zzzu30/cU8FRSOFTVsWN18YTi5RE6k1wvYcjXenwm7tkrhMU= X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2016 18:21:46.1501 (UTC) X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fbd72e03-d4a5-4110-adce-614d51f2077a; Ip=[66.35.236.236]; Helo=[sj-itexedge04.altera.priv.altera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR03MB1908 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160928_112227_688427_E433EB75 X-CRM114-Status: UNSURE ( 5.25 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Moritz Fischer , delicious.quinoa@gmail.com, Ian Campbell , Alan Tull , Greg Kroah-Hartman , Josh Cartwright , Michal Simek , linux-kernel@vger.kernel.org, Cyril Chemparathy , devicetree@vger.kernel.org, Dinh Nguyen , Jon Masters , Matthew Gerlach , Frank Rowand , Walter Goossens , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP New bindings document for FPGA Region to support programming FPGA's under Device Tree control Signed-off-by: Alan Tull Signed-off-by: Moritz Fischer Reviewed-by: Rob Herring --- v9: initial version added to this patchset v10: s/fpga/FPGA/g replace DT overlay example with slightly more complicated example move to staging/simple-fpga-bus v11: No change in this patch for v11 of the patch set v12: Moved out of staging. Changed to use FPGA bridges framework instead of resets for bridges. v13: bridge@0xff20000 -> bridge@ff200000, etc Leave out directly talking about overlays Remove regs and clocks directly under simple-fpga-bus in example Use common "firmware-name" binding instead of "fpga-firmware" v14: Use firmware-name in bindings description Call it FPGA Area Remove bindings that specify FPGA Manager and FPGA Bridges v15: Cleanup as per Rob's comments Combine usage doc with bindings document Document as being Altera specific Additions and changes to add FPGA Bus v16: Reworked to document FPGA Regions rename altera-fpga-bus-fpga-area.txt -> fpga-region.txt Remove references that made it sound exclusive to Altera Remove altr, prefix from fpga-bus and fpga-area compatible strings Added Moritz' usage example with Xilinx Cleaned up unit addresses v17: Lots of rewrites to try to make things clearer Clarify that overlay can be rejected if FPGA isn't programmed Add external-fpga-config binding already used in u-boot Change partial-reconfig binding to partial-fpga-config to align with existing u-boot binding format *-fpga-config Add a document from Xilinx' website v18: Fix node names underscores to be hyphens Fix copy/pasted duplicate nodes in diagram v19: Fix more underscores Make FPGA regions to be children of bridges General cleanup and clarification --- .../devicetree/bindings/fpga/fpga-region.txt | 494 +++++++++++++++++++++ 1 file changed, 494 insertions(+) create mode 100644 Documentation/devicetree/bindings/fpga/fpga-region.txt diff --git a/Documentation/devicetree/bindings/fpga/fpga-region.txt b/Documentation/devicetree/bindings/fpga/fpga-region.txt new file mode 100644 index 0000000..3b32ba1 --- /dev/null +++ b/Documentation/devicetree/bindings/fpga/fpga-region.txt @@ -0,0 +1,494 @@ +FPGA Region Device Tree Binding + +Alan Tull 2016 + + CONTENTS + - Introduction + - Terminology + - Sequence + - FPGA Region + - Supported Use Models + - Device Tree Examples + - Constraints + + +Introduction +============ + +FPGA Regions represent FPGA's and partial reconfiguration regions of FPGA's in +the Device Tree. FPGA Regions provide a way to program FPGAs under device tree +control. + +This device tree binding document hits some of the high points of FPGA usage and +attempts to include terminology used by both major FPGA manufacturers. This +document isn't a replacement for any manufacturers specifications for FPGA +usage. + + +Terminology +=========== + +Full Reconfiguration + * The entire FPGA is programmed. + +Partial Reconfiguration (PR) + * A section of an FPGA is reprogrammed while the rest of the FPGA is not + affected. + * Not all FPGA's support PR. + +Partial Reconfiguration Region (PRR) + * Also called a "reconfigurable partition" + * A PRR is a specific section of a FPGA reserved for reconfiguration. + * A base (or static) FPGA image may create a set of PRR's that later may + be independently reprogrammed many times. + * The size and specific location of each PRR is fixed. + * The connections at the edge of each PRR are fixed. The image that is loaded + into a PRR must fit and must use a subset of the region's connections. + * The busses within the FPGA are split such that each region gets its own + branch that may be gated independently. + +Persona + * Also called a "partial bit stream" + * An FPGA image that is designed to be loaded into a PRR. There may be + any number of personas designed to fit into a PRR, but only one at at time + may be loaded. + * A persona may create more regions. + +FPGA Bridge + * FPGA Bridges gate bus signals between a host and FPGA. + * FPGA Bridges should be disabled while the FPGA is being programmed to + prevent spurious signals on the cpu bus and to the soft logic. + * FPGA bridges may be actual hardware or soft logic on an FPGA. + * During Full Reconfiguration, hardware bridges between the host and FPGA + will be disabled. + * During Partial Reconfiguration of a specific region, that region's bridge + will be used to gate the busses. Traffic to other regions is not affected. + * In some implementations, the FPGA Manager transparantly handles gating the + buses, eliminating the need to show the hardware FPGA bridges in the + device tree. + * An FPGA image may create a set of reprogrammable regions, each having its + own bridge and its own split of the busses in the FPGA. + +FPGA Manager + * An FPGA Manager is a hardware block that programs an FPGA under the control + of a host processor. + +Base Image + * Also called the "static image" + * An FPGA image that is designed to do full reconfiguration of the FPGA. + * A base image may set up a set of partial reconfiguration regions that may + later be reprogrammed. + + ---------------- ---------------------------------- + | Host CPU | | FPGA | + | | | | + | ----| | ----------- -------- | + | | H | | |==>| Bridge0 |<==>| PRR0 | | + | | W | | | ----------- -------- | + | | | | | | + | | B |<=====>|<==| ----------- -------- | + | | R | | |==>| Bridge1 |<==>| PRR1 | | + | | I | | | ----------- -------- | + | | D | | | | + | | G | | | ----------- -------- | + | | E | | |==>| Bridge2 |<==>| PRR2 | | + | ----| | ----------- -------- | + | | | | + ---------------- ---------------------------------- + +Figure 1: An FPGA set up with a base image that created three regions. Each +region (PRR0-2) gets its own split of the busses that is independently gated by +a soft logic bridge (Bridge0-2) in the FPGA. The contents of each PRR can be +reprogrammed independently while the rest of the system continues to function. + + +Sequence +======== + +When a DT overlay that targets a FPGA Region is applied, the FPGA Region will +do the following: + + 1. Disable appropriate FPGA bridges. + 2. Program the FPGA using the FPGA manager. + 3. Enable the FPGA bridges. + 4. The Device Tree overlay is accepted into the live tree. + 5. Child devices are populated. + +When the overlay is removed, the child nodes will be removed and the FPGA Region +will disable the bridges. + + +FPGA Region +=========== + +FPGA Regions represent FPGA's and FPGA PR regions in the device tree. An FPGA +Region brings together the elements needed to program on a running system and +add the child devices: + + * FPGA Manager + * FPGA Bridges + * image-specific information needed to to the programming. + * child nodes + +The intended use is that a Device Tree overlay (DTO) can be used to reprogram an +FPGA while an operating system is running. + +An FPGA Region that exists in the live Device Tree reflects the current state. +If the live tree shows a "firmware-name" property or child nodes under a FPGA +Region, the FPGA already has been programmed. A DTO that targets a FPGA Region +and adds the "firmware-name" property is taken as a request to reprogram the +FPGA. After reprogramming is successful, the overlay is accepted into the live +tree. + +The base FPGA Region in the device tree represents the FPGA and supports full +reconfiguration. It must include a phandle to an FPGA Manager. The base +FPGA region will be the child of one of the hardware bridges (the bridge that +allows register access) between the cpu and the FPGA. If there are more than +one bridge to control during FPGA programming, the region will also contain a +list of phandles to the additional hardware FPGA Bridges. + +For partial reconfiguration (PR), each PR region will have an FPGA Region. +These FPGA regions are children of FPGA bridges which are then children of the +base FPGA region. The "Full Reconfiguration to add PRR's" example below shows +this. + +If an FPGA Region does not specify a FPGA Manager, it will inherit the FPGA +Manager specified by its ancestor FPGA Region. This supports both the case +where the same FPGA Manager is used for all of a FPGA as well the case where +a different FPGA Manager is used for each region. + +FPGA Regions do not inherit their ancestor FPGA regions' bridges. This prevents +shutting down bridges that are upstream from the other active regions while one +region is getting reconfigured (see Figure 1 above). During PR, the FPGA's +hardware bridges remain enabled. The PR regions' bridges will be FPGA bridges +within the static image of the FPGA. + +Required properties: +- compatible : should contain "fpga-region" +- fpga-mgr : should contain a phandle to an FPGA Manager. Child FPGA Regions + inherit this property from their ancestor regions. A fpga-mgr property + in a region will override any inherited FPGA manager. +- #address-cells, #size-cells, ranges : must be present to handle address space + mapping for child nodes. + +Optional properties: +- firmware-name : should contain the name of an FPGA image file located on the + firmware search path. If this property shows up in a live device tree + it indicates that the FPGA has already been programmed with this image. + If this property is in an overlay targeting a FPGA region, it is a + request to program the FPGA with that image. +- fpga-bridges : should contain a list of phandles to FPGA Bridges that must be + controlled during FPGA programming along with the parent FPGA bridge. + This property is optional if the FPGA Manager handles the bridges. + If the fpga-region is the child of a fpga-bridge, the list should not + contain the parent bridge. +- partial-fpga-config : boolean, set if partial reconfiguration is to be done, + otherwise full reconfiguration is done. +- external-fpga-config : boolean, set if the FPGA has already been configured + prior to OS boot up. +- region-unfreeze-timeout-us : The maximum time in microseconds to wait for + bridges to successfully become enabled after the region has been + programmed. +- region-freeze-timeout-us : The maximum time in microseconds to wait for + bridges to successfully become disabled before the region has been + programmed. +- child nodes : devices in the FPGA after programming. + +In the example below, when an overlay is applied targeting fpga-region0, +fpga_mgr is used to program the FPGA. Two bridges are controlled during +programming: the parent fpga_bridge0 and fpga_bridge1. Because the region is +the child of fpga_bridge0, only fpga_bridge1 needs to be specified in the +fpga-bridges property. During programming, these bridges are disabled, the +firmware specified in the overlay is loaded to the FPGA using the FPGA manager +specified in the region. If FPGA programming succeeds, the bridges are +reenabled and the overlay makes it into the live device tree. The child devices +are then populated. If FPGA programming fails, the bridges are left disabled +and the overlay is rejected. The overlay's ranges property maps the lwhps +bridge's region (0xff200000) and the hps bridge's region (0xc0000000) for use by +the two child devices. + +Example: +Base tree contains: + + fpga_mgr: fpga-mgr@ff706000 { + compatible = "altr,socfpga-fpga-mgr"; + reg = <0xff706000 0x1000 + 0xffb90000 0x20>; + interrupts = <0 175 4>; + }; + + fpga_bridge0: fpga-bridge@ff400000 { + compatible = "altr,socfpga-lwhps2fpga-bridge"; + reg = <0xff400000 0x100000>; + resets = <&rst LWHPS2FPGA_RESET>; + clocks = <&l4_main_clk>; + + #address-cells = <1>; + #size-cells = <1>; + ranges; + + fpga_region0: fpga-region0 { + compatible = "fpga-region"; + fpga-mgr = <&fpga_mgr>; + }; + }; + + fpga_bridge1: fpga-bridge@ff500000 { + compatible = "altr,socfpga-hps2fpga-bridge"; + reg = <0xff500000 0x10000>; + resets = <&rst HPS2FPGA_RESET>; + clocks = <&l4_main_clk>; + }; + +Overlay contains: + +/dts-v1/ /plugin/; +/ { + fragment@0 { + target = <&fpga_region0>; + #address-cells = <1>; + #size-cells = <1>; + __overlay__ { + #address-cells = <1>; + #size-cells = <1>; + + firmware-name = "soc_system.rbf"; + fpga-bridges = <&fpga_bridge1>; + ranges = <0x20000 0xff200000 0x100000>, + <0x0 0xc0000000 0x20000000>; + + gpio@10040 { + compatible = "altr,pio-1.0"; + reg = <0x10040 0x20>; + altr,gpio-bank-width = <4>; + #gpio-cells = <2>; + clocks = <2>; + gpio-controller; + }; + + onchip-memory { + device_type = "memory"; + compatible = "altr,onchipmem-15.1"; + reg = <0x0 0x10000>; + }; + }; + }; +}; + + +Supported Use Models +==================== + +In all cases the live DT must have the FPGA Manager, FPGA Bridges (if any), and +a FPGA Region. The target of the Device Tree Overlay is the FPGA Region. Some +uses are specific to a FPGA device. + + * No FPGA Bridges + In this case, the FPGA Manager which programs the FPGA also handles the + bridges behind the scenes. No FPGA Bridge devices are needed for full + reconfiguration. + + * Full reconfiguration with hardware bridges + In this case, there are hardware bridges between the processor and FPGA that + need to be controlled during full reconfiguration. Before the overlay is + applied, the live DT must include the FPGA Manager, FPGA Bridges, and a + FPGA Region. The FPGA Region is the child of the bridge that allows + register access to the FPGA. Additional bridges may be listed in a + fpga-bridges property in the FPGA region or in the device tree overlay. + + * Partial reconfiguration with bridges in the FPGA + In this case, the FPGA will have one or more PRR's that may be programmed + separately while the rest of the FPGA can remain active. To manage this, + bridges need to exist in the FPGA that can gate the buses going to each FPGA + region while the buses are enabled for other sections. Before any partial + reconfiguration can be done, a base FPGA image must be loaded which includes + PRR's with FPGA bridges. The device tree should have a FPGA region for each + PRR. + +Device Tree Examples +==================== + +The intention of this section is to give some simple examples, focusing on +the placement of the elements detailed above, especially: + * FPGA Manager + * FPGA Bridges + * FPGA Region + * ranges + * target-path or target + +For the purposes of this section, I'm dividing the Device Tree into two parts, +each with its own requirements. The two parts are: + * The live DT prior to the overlay being added + * The DT overlay + +The live Device Tree must contain an FPGA Region, an FPGA Manager, and any FPGA +Bridges. The FPGA Region's "fpga-mgr" property specifies the manager by phandle +to handle programming the FPGA. If the FPGA Region is the child of another FPGA +Region, the parent's FPGA Manager is used. If FPGA Bridges need to be involved, +they are specified in the FPGA Region by the "fpga-bridges" property. During +FPGA programming, the FPGA Region will disable the bridges that are in its +"fpga-bridges" list and will re-enable them after FPGA programming has +succeeded. + +The Device Tree Overlay will contain: + * "target-path" or "target" + The insertion point where the the contents of the overlay will go into the + live tree. target-path is a full path, while target is a phandle. + * "ranges" + The address space mapping from processor to FPGA bus(ses). + * "firmware-name" + Specifies the name of the FPGA image file on the firmware search + path. The search path is described in the firmware class documentation. + * "partial-fpga-config" + This binding is a boolean and should be present if partial reconfiguration + is to be done. + * child nodes corresponding to hardware that will be loaded in this region of + the FPGA. + +Device Tree Example: Full Reconfiguration without Bridges +========================================================= + +Live Device Tree contains: + fpga_mgr0: fpga-mgr@f8007000 { + compatible = "xlnx,zynq-devcfg-1.0"; + reg = <0xf8007000 0x100>; + interrupt-parent = <&intc>; + interrupts = <0 8 4>; + clocks = <&clkc 12>; + clock-names = "ref_clk"; + syscon = <&slcr>; + }; + + fpga_region0: fpga-region0 { + compatible = "fpga-region"; + fpga-mgr = <&fpga_mgr0>; + #address-cells = <0x1>; + #size-cells = <0x1>; + ranges; + }; + +DT Overlay contains: +/dts-v1/ /plugin/; +/ { +fragment@0 { + target = <&fpga_region0>; + #address-cells = <1>; + #size-cells = <1>; + __overlay__ { + #address-cells = <1>; + #size-cells = <1>; + + firmware-name = "zynq-gpio.bin"; + + gpio1: gpio@40000000 { + compatible = "xlnx,xps-gpio-1.00.a"; + reg = <0x40000000 0x10000>; + gpio-controller; + #gpio-cells = <0x2>; + xlnx,gpio-width= <0x6>; + }; + }; +}; + +Device Tree Example: Full Reconfiguration to add PRR's +====================================================== + +The base FPGA Region is specified similar to the first example above. + +This example programs the FPGA to have two regions that can later be partially +configured. Each region has its own bridge in the FPGA fabric. + +DT Overlay contains: +/dts-v1/ /plugin/; +/ { + fragment@0 { + target = <&fpga_region0>; + #address-cells = <1>; + #size-cells = <1>; + __overlay__ { + #address-cells = <1>; + #size-cells = <1>; + + firmware-name = "base.rbf"; + + fpga-bridge@4400 { + compatible = "altr,freeze-bridge"; + reg = <0x4400 0x10>; + + fpga_region1: fpga-region1 { + compatible = "fpga-region"; + #address-cells = <0x1>; + #size-cells = <0x1>; + ranges; + }; + }; + + fpga-bridge@4420 { + compatible = "altr,freeze-bridge"; + reg = <0x4420 0x10>; + + fpga_region2: fpga-region2 { + compatible = "fpga-region"; + #address-cells = <0x1>; + #size-cells = <0x1>; + ranges; + }; + }; + }; + }; +}; + +Device Tree Example: Partial Reconfiguration +============================================ + +This example reprograms one of the PRR's set up in the previous example. + +The sequence that occurs when this overlay is similar to the above, the only +differences are that the FPGA is partially reconfigured due to the +"partial-fpga-config" boolean and the only bridge that is controlled during +programming is the FPGA based bridge of fpga_region1. + +/dts-v1/ /plugin/; +/ { + fragment@0 { + target = <&fpga_region1>; + #address-cells = <1>; + #size-cells = <1>; + __overlay__ { + #address-cells = <1>; + #size-cells = <1>; + + firmware-name = "soc_image2.rbf"; + partial-fpga-config; + + gpio@10040 { + compatible = "altr,pio-1.0"; + reg = <0x10040 0x20>; + clocks = <0x2>; + altr,gpio-bank-width = <0x4>; + resetvalue = <0x0>; + #gpio-cells = <0x2>; + gpio-controller; + }; + }; + }; +}; + +Constraints +=========== + +It is beyond the scope of this document to fully describe all the FPGA design +constraints required to make partial reconfiguration work[1] [2] [3], but a few +deserve quick mention. + +A persona must have boundary connections that line up with those of the partion +or region it is designed to go into. + +During programming, transactions through those connections must be stopped and +the connections must be held at a fixed logic level. This can be achieved by +FPGA Bridges that exist on the FPGA fabric prior to the partial reconfiguration. + +-- +[1] www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/ug/ug_partrecon.pdf +[2] tspace.library.utoronto.ca/bitstream/1807/67932/1/Byma_Stuart_A_201411_MAS_thesis.pdf +[3] http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/ug702.pdf