From mboxrd@z Thu Jan 1 00:00:00 1970 From: mike.looijmans@topic.nl (Mike Looijmans) Date: Mon, 12 Oct 2015 14:22:36 +0200 Subject: [PATCH 3/3] fpga manager: Adding FPGA Manager support for Xilinx Zynq 7000 In-Reply-To: <561B9687.1070103@xilinx.com> References: <1444344307-22509-1-git-send-email-moritz.fischer@ettus.com> <1444344307-22509-4-git-send-email-moritz.fischer@ettus.com> <20151009163336.GM10631@jcartwri.amer.corp.natinst.com> <561B9687.1070103@xilinx.com> Message-ID: <561BA60C.6010106@topic.nl> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org ?On 12-10-15 13:16, Michal Simek wrote: > >>>> +static int zynq_fpga_ops_write(struct fpga_manager *mgr, >>>> + const char *buf, size_t count) >>>> +{ >>>> + struct zynq_fpga_priv *priv; >>>> + int err; >>>> + char *kbuf; >>>> + size_t i, in_count; >>>> + dma_addr_t dma_addr; >>>> + u32 transfer_length = 0; >>>> + bool endian_swap = false; >>>> + >>>> + in_count = count; >>>> + priv = mgr->priv; >>>> + >>>> + kbuf = dma_alloc_coherent(priv->dev, count, &dma_addr, GFP_KERNEL); >>>> + if (!kbuf) >>>> + return -ENOMEM; >>>> + >>>> + memcpy(kbuf, buf, count); >>>> + >>>> + /* look for the sync word */ >>>> + for (i = 0; i < count - 4; i++) { >>>> + if (memcmp(kbuf + i, "\x66\x55\x99\xAA", 4) == 0) { >>>> + dev_dbg(priv->dev, "Found normal sync word\n"); >>>> + endian_swap = false; >>>> + break; >>>> + } > > This is bin format > >>>> + if (memcmp(kbuf + i, "\xAA\x99\x55\x66", 4) == 0) { >>>> + dev_dbg(priv->dev, "Found swapped sync word\n"); >>>> + endian_swap = true; >>>> + break; >>>> + } > > This is bit format from header > >>>> + } >>> >>> How much control do we have over mandating the format of firmware at >>> this point? It'd be swell if we could just mandate a specific >>> endianness, and leave this munging to usermode. >> >> That's a good question. Personally I do only care about one of both, >> but that's just because I get to decide for my targets... >> Opinions from the Xilinx guys? > > Don't know full history about this but in past bitstream in BIT format > was used. Which is header (partially decoding in u-boot for example) > with data. > On zynq native format is BIN which is format without header and data is > swapped. > This code just detects which format is used. If BIT, header is skipped > and data is swapped to BIN format. > > Back to origin question if this is something what can be handled from > user space. And answer is - yes it can be handled there. > But based on my experience it is very useful to be able to handle BIT > because it is built by tools by default. > Also with BIN format you are loosing record what this data bitstream > targets. Header in BIT gives you at least some ideas. People should stop using "cat" to program the FPGA and use a userspace tool instead. I've already released such tools under GPL, so anyone can pick up on it and extend it as required. The header for the "bit" format is completely ignored (you can't even use it to determine if the bitstream is compatible with the current device) so there's no point in carrying it around. On the zynq, doing the "swap" in userspace was measurably faster than having the driver handle it, and that was even without using NEON instructions for byte swapping. I admit that being able to do "cat static.bit > /dev/xdevcfg" has had its uses. But it's not something that belongs in mainline Linux. Probably one of the key reasons that the "bit" format is still popular is that getting the Vivado tools to create a proper "bin" that will actually work on the Zynq is about as easy as nailing jelly to a tree. We've been using a simple Python script to do the bit->bin conversion for that reason. Using the "bin" format in the driver keeps it simple and singular. Userspace tools can add whatever wrappers and headers they feel appropriate to it, these checks don't belong in the driver since they will be application specific. For example, some users would want to verify that a partial bitstream actually matches the static part that's currently in the FPGA. Mike. Kind regards, Mike Looijmans System Expert TOPIC Embedded Products Eindhovenseweg 32-C, NL-5683 KH Best Postbus 440, NL-5680 AK Best Telefoon: +31 (0) 499 33 69 79 Telefax: +31 (0) 499 33 69 70 E-mail: mike.looijmans at topicproducts.com Website: www.topicproducts.com Please consider the environment before printing this e-mail From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Looijmans Subject: Re: [PATCH 3/3] fpga manager: Adding FPGA Manager support for Xilinx Zynq 7000 Date: Mon, 12 Oct 2015 14:22:36 +0200 Message-ID: <561BA60C.6010106@topic.nl> References: <1444344307-22509-1-git-send-email-moritz.fischer@ettus.com> <1444344307-22509-4-git-send-email-moritz.fischer@ettus.com> <20151009163336.GM10631@jcartwri.amer.corp.natinst.com> <561B9687.1070103@xilinx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <561B9687.1070103@xilinx.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Michal Simek , Moritz Fischer , Josh Cartwright Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, Russell King , "pawel.moll@arm.com" , ijc+devicetree@hellion.org.uk, Alan Tull , Greg KH , linux-kernel@vger.kernel.org, robh+dt@kernel.org, =?UTF-8?Q?S=c3=b6ren_Brinkmann?= , Kumar Gala , "dinguyen@opensource.altera.com" , linux-arm-kernel List-Id: devicetree@vger.kernel.org 77u/T24gMTItMTAtMTUgMTM6MTYsIE1pY2hhbCBTaW1layB3cm90ZToKPgo+Pj4+ICtzdGF0aWMg aW50IHp5bnFfZnBnYV9vcHNfd3JpdGUoc3RydWN0IGZwZ2FfbWFuYWdlciAqbWdyLAo+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQp Cj4+Pj4gK3sKPj4+PiArICAgICBzdHJ1Y3QgenlucV9mcGdhX3ByaXYgKnByaXY7Cj4+Pj4gKyAg ICAgaW50IGVycjsKPj4+PiArICAgICBjaGFyICprYnVmOwo+Pj4+ICsgICAgIHNpemVfdCBpLCBp bl9jb3VudDsKPj4+PiArICAgICBkbWFfYWRkcl90IGRtYV9hZGRyOwo+Pj4+ICsgICAgIHUzMiB0 cmFuc2Zlcl9sZW5ndGggPSAwOwo+Pj4+ICsgICAgIGJvb2wgZW5kaWFuX3N3YXAgPSBmYWxzZTsK Pj4+PiArCj4+Pj4gKyAgICAgaW5fY291bnQgPSBjb3VudDsKPj4+PiArICAgICBwcml2ID0gbWdy LT5wcml2Owo+Pj4+ICsKPj4+PiArICAgICBrYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KHByaXYt PmRldiwgY291bnQsICZkbWFfYWRkciwgR0ZQX0tFUk5FTCk7Cj4+Pj4gKyAgICAgaWYgKCFrYnVm KQo+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4gKwo+Pj4+ICsgICAgIG1l bWNweShrYnVmLCBidWYsIGNvdW50KTsKPj4+PiArCj4+Pj4gKyAgICAgLyogbG9vayBmb3IgdGhl IHN5bmMgd29yZCAqLwo+Pj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudCAtIDQ7IGkrKykg ewo+Pj4+ICsgICAgICAgICAgICAgaWYgKG1lbWNtcChrYnVmICsgaSwgIlx4NjZceDU1XHg5OVx4 QUEiLCA0KSA9PSAwKSB7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9kYmcocHJpdi0+ ZGV2LCAiRm91bmQgbm9ybWFsIHN5bmMgd29yZFxuIik7Cj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIGVuZGlhbl9zd2FwID0gZmFsc2U7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFr Owo+Pj4+ICsgICAgICAgICAgICAgfQo+Cj4gVGhpcyBpcyBiaW4gZm9ybWF0Cj4KPj4+PiArICAg ICAgICAgICAgIGlmIChtZW1jbXAoa2J1ZiArIGksICJceEFBXHg5OVx4NTVceDY2IiwgNCkgPT0g MCkgewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZGJnKHByaXYtPmRldiwgIkZvdW5k IHN3YXBwZWQgc3luYyB3b3JkXG4iKTsKPj4+PiArICAgICAgICAgICAgICAgICAgICAgZW5kaWFu X3N3YXAgPSB0cnVlOwo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+PiArICAg ICAgICAgICAgIH0KPgo+IFRoaXMgaXMgYml0IGZvcm1hdCBmcm9tIGhlYWRlcgo+Cj4+Pj4gKyAg ICAgfQo+Pj4KPj4+IEhvdyBtdWNoIGNvbnRyb2wgZG8gd2UgaGF2ZSBvdmVyIG1hbmRhdGluZyB0 aGUgZm9ybWF0IG9mIGZpcm13YXJlIGF0Cj4+PiB0aGlzIHBvaW50PyAgSXQnZCBiZSBzd2VsbCBp ZiB3ZSBjb3VsZCBqdXN0IG1hbmRhdGUgYSBzcGVjaWZpYwo+Pj4gZW5kaWFubmVzcywgYW5kIGxl YXZlIHRoaXMgbXVuZ2luZyB0byB1c2VybW9kZS4KPj4KPj4gVGhhdCdzIGEgZ29vZCBxdWVzdGlv bi4gUGVyc29uYWxseSBJIGRvIG9ubHkgY2FyZSBhYm91dCBvbmUgb2YgYm90aCwKPj4gYnV0IHRo YXQncyBqdXN0IGJlY2F1c2UgSSBnZXQgdG8gZGVjaWRlIGZvciBteSB0YXJnZXRzLi4uCj4+IE9w aW5pb25zIGZyb20gdGhlIFhpbGlueCBndXlzPwo+Cj4gRG9uJ3Qga25vdyBmdWxsIGhpc3Rvcnkg YWJvdXQgdGhpcyBidXQgaW4gcGFzdCBiaXRzdHJlYW0gaW4gQklUIGZvcm1hdAo+IHdhcyB1c2Vk LiBXaGljaCBpcyBoZWFkZXIgKHBhcnRpYWxseSBkZWNvZGluZyBpbiB1LWJvb3QgZm9yIGV4YW1w bGUpCj4gd2l0aCBkYXRhLgo+IE9uIHp5bnEgbmF0aXZlIGZvcm1hdCBpcyBCSU4gd2hpY2ggaXMg Zm9ybWF0IHdpdGhvdXQgaGVhZGVyIGFuZCBkYXRhIGlzCj4gc3dhcHBlZC4KPiBUaGlzIGNvZGUg anVzdCBkZXRlY3RzIHdoaWNoIGZvcm1hdCBpcyB1c2VkLiBJZiBCSVQsIGhlYWRlciBpcyBza2lw cGVkCj4gYW5kIGRhdGEgaXMgc3dhcHBlZCB0byBCSU4gZm9ybWF0Lgo+Cj4gQmFjayB0byBvcmln aW4gcXVlc3Rpb24gaWYgdGhpcyBpcyBzb21ldGhpbmcgd2hhdCBjYW4gYmUgaGFuZGxlZCBmcm9t Cj4gdXNlciBzcGFjZS4gQW5kIGFuc3dlciBpcyAtIHllcyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVy ZS4KPiBCdXQgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSBpdCBpcyB2ZXJ5IHVzZWZ1bCB0byBiZSBh YmxlIHRvIGhhbmRsZSBCSVQKPiBiZWNhdXNlIGl0IGlzIGJ1aWx0IGJ5IHRvb2xzIGJ5IGRlZmF1 bHQuCj4gQWxzbyB3aXRoIEJJTiBmb3JtYXQgeW91IGFyZSBsb29zaW5nIHJlY29yZCB3aGF0IHRo aXMgZGF0YSBiaXRzdHJlYW0KPiB0YXJnZXRzLiBIZWFkZXIgaW4gQklUIGdpdmVzIHlvdSBhdCBs ZWFzdCBzb21lIGlkZWFzLgoKUGVvcGxlIHNob3VsZCBzdG9wIHVzaW5nICJjYXQiIHRvIHByb2dy YW0gdGhlIEZQR0EgYW5kIHVzZSBhIHVzZXJzcGFjZSB0b29sIAppbnN0ZWFkLiBJJ3ZlIGFscmVh ZHkgcmVsZWFzZWQgc3VjaCB0b29scyB1bmRlciBHUEwsIHNvIGFueW9uZSBjYW4gcGljayB1cCBv biAKaXQgYW5kIGV4dGVuZCBpdCBhcyByZXF1aXJlZC4KClRoZSBoZWFkZXIgZm9yIHRoZSAiYml0 IiBmb3JtYXQgaXMgY29tcGxldGVseSBpZ25vcmVkICh5b3UgY2FuJ3QgZXZlbiB1c2UgaXQgCnRv IGRldGVybWluZSBpZiB0aGUgYml0c3RyZWFtIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVu dCBkZXZpY2UpIHNvIAp0aGVyZSdzIG5vIHBvaW50IGluIGNhcnJ5aW5nIGl0IGFyb3VuZC4gT24g dGhlIHp5bnEsIGRvaW5nIHRoZSAic3dhcCIgaW4gCnVzZXJzcGFjZSB3YXMgbWVhc3VyYWJseSBm YXN0ZXIgdGhhbiBoYXZpbmcgdGhlIGRyaXZlciBoYW5kbGUgaXQsIGFuZCB0aGF0IHdhcyAKZXZl biB3aXRob3V0IHVzaW5nIE5FT04gaW5zdHJ1Y3Rpb25zIGZvciBieXRlIHN3YXBwaW5nLgoKSSBh ZG1pdCB0aGF0IGJlaW5nIGFibGUgdG8gZG8gImNhdCBzdGF0aWMuYml0ID4gL2Rldi94ZGV2Y2Zn IiBoYXMgaGFkIGl0cyAKdXNlcy4gQnV0IGl0J3Mgbm90IHNvbWV0aGluZyB0aGF0IGJlbG9uZ3Mg aW4gbWFpbmxpbmUgTGludXguCgpQcm9iYWJseSBvbmUgb2YgdGhlIGtleSByZWFzb25zIHRoYXQg dGhlICJiaXQiIGZvcm1hdCBpcyBzdGlsbCBwb3B1bGFyIGlzIHRoYXQgCmdldHRpbmcgdGhlIFZp dmFkbyB0b29scyB0byBjcmVhdGUgYSBwcm9wZXIgImJpbiIgdGhhdCB3aWxsIGFjdHVhbGx5IHdv cmsgb24gCnRoZSBaeW5xIGlzIGFib3V0IGFzIGVhc3kgYXMgbmFpbGluZyBqZWxseSB0byBhIHRy ZWUuIFdlJ3ZlIGJlZW4gdXNpbmcgYSAKc2ltcGxlIFB5dGhvbiBzY3JpcHQgdG8gZG8gdGhlIGJp dC0+YmluIGNvbnZlcnNpb24gZm9yIHRoYXQgcmVhc29uLgoKVXNpbmcgdGhlICJiaW4iIGZvcm1h dCBpbiB0aGUgZHJpdmVyIGtlZXBzIGl0IHNpbXBsZSBhbmQgc2luZ3VsYXIuIFVzZXJzcGFjZSAK dG9vbHMgY2FuIGFkZCB3aGF0ZXZlciB3cmFwcGVycyBhbmQgaGVhZGVycyB0aGV5IGZlZWwgYXBw cm9wcmlhdGUgdG8gaXQsIHRoZXNlIApjaGVja3MgZG9uJ3QgYmVsb25nIGluIHRoZSBkcml2ZXIg c2luY2UgdGhleSB3aWxsIGJlIGFwcGxpY2F0aW9uIHNwZWNpZmljLiBGb3IgCmV4YW1wbGUsIHNv bWUgdXNlcnMgd291bGQgd2FudCB0byB2ZXJpZnkgdGhhdCBhIHBhcnRpYWwgYml0c3RyZWFtIGFj dHVhbGx5IAptYXRjaGVzIHRoZSBzdGF0aWMgcGFydCB0aGF0J3MgY3VycmVudGx5IGluIHRoZSBG UEdBLgoKTWlrZS4KCgpLaW5kIHJlZ2FyZHMsCgpNaWtlIExvb2lqbWFucwpTeXN0ZW0gRXhwZXJ0 CgpUT1BJQyBFbWJlZGRlZCBQcm9kdWN0cwpFaW5kaG92ZW5zZXdlZyAzMi1DLCBOTC01NjgzIEtI IEJlc3QKUG9zdGJ1cyA0NDAsIE5MLTU2ODAgQUsgQmVzdApUZWxlZm9vbjogKzMxICgwKSA0OTkg MzMgNjkgNzkKVGVsZWZheDogKzMxICgwKSA0OTkgMzMgNjkgNzAKRS1tYWlsOiBtaWtlLmxvb2lq bWFuc0B0b3BpY3Byb2R1Y3RzLmNvbQpXZWJzaXRlOiB3d3cudG9waWNwcm9kdWN0cy5jb20KClBs ZWFzZSBjb25zaWRlciB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIHByaW50aW5nIHRoaXMgZS1tYWls CgoKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752127AbbJLSAm (ORCPT ); Mon, 12 Oct 2015 14:00:42 -0400 Received: from mx6-11.smtp.antispamcloud.com ([95.211.2.202]:38040 "EHLO mx6-11.smtp.antispamcloud.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751585AbbJLSAk convert rfc822-to-8bit (ORCPT ); Mon, 12 Oct 2015 14:00:40 -0400 X-Greylist: delayed 20243 seconds by postgrey-1.27 at vger.kernel.org; Mon, 12 Oct 2015 14:00:39 EDT Subject: Re: [PATCH 3/3] fpga manager: Adding FPGA Manager support for Xilinx Zynq 7000 To: Michal Simek , Moritz Fischer , Josh Cartwright References: <1444344307-22509-1-git-send-email-moritz.fischer@ettus.com> <1444344307-22509-4-git-send-email-moritz.fischer@ettus.com> <20151009163336.GM10631@jcartwri.amer.corp.natinst.com> <561B9687.1070103@xilinx.com> CC: , , Russell King , "pawel.moll@arm.com" , , Alan Tull , Greg KH , , , linux-arm-kernel , Kumar Gala , "dinguyen@opensource.altera.com" , =?UTF-8?Q?S=c3=b6ren_Brinkmann?= From: Mike Looijmans Organization: TOPIC Message-ID: <561BA60C.6010106@topic.nl> Date: Mon, 12 Oct 2015 14:22:36 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <561B9687.1070103@xilinx.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8BIT X-Originating-IP: [192.168.80.121] X-EXCLAIMER-MD-CONFIG: 9833cda7-5b21-4d34-9a38-8d025ddc3664 X-EXCLAIMER-MD-BIFURCATION-INSTANCE: 0 X-Filter-ID: s0sct1PQhAABKnZB5plbIbbvfIHzQjPVmPLZeVYSu3xU9luQrU+8/8qthi+0Jd/W6KAUC/fjyuDn NXFr4uarw6ZD8veLNImDrLDLUiI0AsfAxQbzAqS/RrKKBO4XjlCmeiXIHO35MjHi+eMUCJO2TIYS KBStr7O7vhgxWoFv+epHsjAzwFm2j3sTkEoNu4MFB2XwnnukAbufhj1XYHptaOBfOzFu1iolzW0d Y33uxGtdxolPvBTHlpbbkINvd6Bk6kKV7RLNv7BG4By/UppOuua3jN9Ol113WVdbZbJ4n5SZL3ZK wOcZxaNA3uilioqXHcgm/PYDrgNMeTyYrm6w0A4y43vx9CMfMwdzHKPokH4t76uq2Ikiy7EGEqrS bHxU+P6wwL/Ww4aRJJTYokACQkfkeB1ZozLmEzIAIV2u3PV5DC1pPwtLyzZS88a5qsmrV9H3b3ui +WTkUNrPUTJq27t8OmX1QQGT6C+RTkXg4eT3mGwqeVvV/aoJ9vMsXgu3CSITgN0ugmTS4qKyldkj gGuolx+n8+nrio+Py/D/FV+6lXUJF8c7DPYmIHr06w4X6DLR8Bobhy37nGTUDYXtQigFalNTNgHB 4p0JraSIHbuWQAst2UnlyAFeCH1nr+hjJtn64OSEWF6VcqmDPMWxhzZQ6OtBjX2dhf8r1xeX6dF8 69ddH5pVD4vk5Nhn8kevTec4ARO/9+ZXzwpBF2qmFrnE3ugZYR5DLT24smR4NCyXPhysS+YhnW4D BIPNRNUYwYF8bJUIQ+7PgNh70G7e3dsVLmYwaaTRpYEGBzS2lSZu1/TOKAdM9bXEcN/54aPl31/E 3ahF5MMcDI7KdpjQKfBca56p9rSaMLHvrFJ/WXoVQQwJ+hLFkhiU5Z37xpMwJsxPsHZhqPAsfqcG efkyHPGq+LDvZGJq+/55nIT0fRv2Kv2ll81eEp+cNoocKNYZp81e65KEKhwtHEfZhshBX4LXS7oI SxfhqpHGPSL93xmPOfJmdPm/r8qHL+iIE/rPxW1Tvts9rK7u4IJwgRglzGvDK3PKrieG7T6bf9hS 7hSGyAxXU04XUx7LlovNt/SF7WoFt+fybNHE73/Q19FC8dDnSshojicvqBOxdT4qb4TKPKNc/9EK k+Iucvkd5yExtwERZXSSDZL7eS4eAbBXy/vg7iEFLP+SSY+Av5+AiC6S8zl/0JhAGke7HcTEOqrN t8yQSY91ej+3l22kaKaAd5G3PXMXHe6ZnIuz965J30VJB8/nIGBWH8lcX3VTtwgb X-Report-Abuse-To: spam@mx99.antispamcloud.com X-Filter-Fingerprint: IFrWXGses7OKB5S5G8/dJXhXyDRoOQM5J3kcUr0HrMvJUWjZ8+qhjyB23tbDuyLOYL8Ff78gYsez 4Rl08xudmXi4esCQ0R1MchVjt7wblGlvhFgW0MjUMRkF5sMCDfftTXNFDzN17hnrWeZYOJvLq0Ic WjZ+XcEjj/7Pkld0zkmvziDInX9WdMov2kn2yXjdwv61T+KDYyYtREgszdyFwv8IxCB3p/oCKvxr eyISh3JGb7OS5oVgiO+kDxZrVPLz3MmEGC2PrUKqLq5WmHK+Nw== X-Originating-IP: 88.159.208.100 X-Spampanel-Domain: topic.nl X-Spampanel-Username: 88.159.208.100 Authentication-Results: antispamcloud.com; auth=pass smtp.auth=88.159.208.100@topic.nl X-Spampanel-Outgoing-Class: ham X-Spampanel-Outgoing-Evidence: Combined (0.00) X-Recommended-Action: accept Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12-10-15 13:16, Michal Simek wrote: > >>>> +static int zynq_fpga_ops_write(struct fpga_manager *mgr, >>>> + const char *buf, size_t count) >>>> +{ >>>> + struct zynq_fpga_priv *priv; >>>> + int err; >>>> + char *kbuf; >>>> + size_t i, in_count; >>>> + dma_addr_t dma_addr; >>>> + u32 transfer_length = 0; >>>> + bool endian_swap = false; >>>> + >>>> + in_count = count; >>>> + priv = mgr->priv; >>>> + >>>> + kbuf = dma_alloc_coherent(priv->dev, count, &dma_addr, GFP_KERNEL); >>>> + if (!kbuf) >>>> + return -ENOMEM; >>>> + >>>> + memcpy(kbuf, buf, count); >>>> + >>>> + /* look for the sync word */ >>>> + for (i = 0; i < count - 4; i++) { >>>> + if (memcmp(kbuf + i, "\x66\x55\x99\xAA", 4) == 0) { >>>> + dev_dbg(priv->dev, "Found normal sync word\n"); >>>> + endian_swap = false; >>>> + break; >>>> + } > > This is bin format > >>>> + if (memcmp(kbuf + i, "\xAA\x99\x55\x66", 4) == 0) { >>>> + dev_dbg(priv->dev, "Found swapped sync word\n"); >>>> + endian_swap = true; >>>> + break; >>>> + } > > This is bit format from header > >>>> + } >>> >>> How much control do we have over mandating the format of firmware at >>> this point? It'd be swell if we could just mandate a specific >>> endianness, and leave this munging to usermode. >> >> That's a good question. Personally I do only care about one of both, >> but that's just because I get to decide for my targets... >> Opinions from the Xilinx guys? > > Don't know full history about this but in past bitstream in BIT format > was used. Which is header (partially decoding in u-boot for example) > with data. > On zynq native format is BIN which is format without header and data is > swapped. > This code just detects which format is used. If BIT, header is skipped > and data is swapped to BIN format. > > Back to origin question if this is something what can be handled from > user space. And answer is - yes it can be handled there. > But based on my experience it is very useful to be able to handle BIT > because it is built by tools by default. > Also with BIN format you are loosing record what this data bitstream > targets. Header in BIT gives you at least some ideas. People should stop using "cat" to program the FPGA and use a userspace tool instead. I've already released such tools under GPL, so anyone can pick up on it and extend it as required. The header for the "bit" format is completely ignored (you can't even use it to determine if the bitstream is compatible with the current device) so there's no point in carrying it around. On the zynq, doing the "swap" in userspace was measurably faster than having the driver handle it, and that was even without using NEON instructions for byte swapping. I admit that being able to do "cat static.bit > /dev/xdevcfg" has had its uses. But it's not something that belongs in mainline Linux. Probably one of the key reasons that the "bit" format is still popular is that getting the Vivado tools to create a proper "bin" that will actually work on the Zynq is about as easy as nailing jelly to a tree. We've been using a simple Python script to do the bit->bin conversion for that reason. Using the "bin" format in the driver keeps it simple and singular. Userspace tools can add whatever wrappers and headers they feel appropriate to it, these checks don't belong in the driver since they will be application specific. For example, some users would want to verify that a partial bitstream actually matches the static part that's currently in the FPGA. Mike. Kind regards, Mike Looijmans System Expert TOPIC Embedded Products Eindhovenseweg 32-C, NL-5683 KH Best Postbus 440, NL-5680 AK Best Telefoon: +31 (0) 499 33 69 79 Telefax: +31 (0) 499 33 69 70 E-mail: mike.looijmans@topicproducts.com Website: www.topicproducts.com Please consider the environment before printing this e-mail