From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey.Brodkin@synopsys.com (Alexey Brodkin) Date: Wed, 15 Nov 2017 17:36:36 +0000 Subject: etnaviv: PHYS_OFFSET usage In-Reply-To: <1510764243.2835.13.camel@pengutronix.de> References: <1510763053.29843.64.camel@synopsys.com> <1510764243.2835.13.camel@pengutronix.de> List-ID: Message-ID: <1510767395.29843.83.camel@synopsys.com> To: linux-snps-arc@lists.infradead.org Hi Lucas, On Wed, 2017-11-15@17:44 +0100, Lucas Stach wrote: > Hi Alexey, > > Am Mittwoch, den 15.11.2017, 16:24 +0000 schrieb Alexey Brodkin: > > > > Hi Lucas, > > > > As we discussed on ELCE last month in Prague we have Vivante GPU > > built-in our new ARC HSDK development board. > > > > And even though [thanks to your suggestions] I got Etnaviv driver > > working perfectly fine on our board I faced one quite a tricky > > situation [which I dirty worked-around for now]. > > > > Etnaviv driver uses some PHYS_OFFSET define which is not very > > usual across all architectures and platforms supported by Linux kernel. > > > > In fact for ARC we don't have?PHYS_OFFSET defined [yet]. > > And I'm wondering how to get this resolved. > > > > Essentially we have 2 options: > > ?1. Define?PHYS_OFFSET for ARC (and later for other arches once needed) > > ?2. Replace?PHYS_OFFSET with something else in etnaviv sources. > > > > Even though (1) seems to be the simplest solution is doesn't look very nice > > because it seems to be quite ARM-specific but not something really generic > > and portable. > > > > As for (2) frankly I din't quite understand why do we really care about > > DDR start offset in the GPU driver. If some more light could be shed on this > > topic probably we'll figure out what would be more elegant solution. > > Basically the GPU has a linear address window which is 2GB in size and > all GPU command buffers must be mapped through this window. The window > has a base offset, so we can move it to point to different locations in > the physical address space of the system. Wow, what a design decision :) > Etnaviv uses the PHYS_OFFSET to find out where in the physical address > space the RAM starts. If the start of RAM is above the 2GB mark we > _must_ use the linear window in order to make the command buffers > available to the GPU. Well that looks not super safe and versatile solution to me. What if used RAM is much more than 2Gb? I guess in that case it's possible to to set PHYS_OFFSET to say 0 and then kernel might allocate command buffer above 2Gb which will make that buffer not visible for GPU I guess. > I'm not aware of any other kernel API that would allow us to find the > start of RAM. If there is I would be happy to replace the PHYS_OFFSET > stuff. If you don't like to copy the PHYS_OFFSET stuff to ARC, you > would need to introduce some new API, which allows us to retrieve this > information. I'd say we may use so-called "reserved memory" here as a nice an elegant solution. In device tree we describe this memory area like this: ------------------------------>8--------------------------- gpu_3d: gpu at 90000 { compatible = "vivante,gc"; reg = <0x90000 0x4000>; interrupts = <28>; memory-region = <&gpu_memory>; }; reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; gpu_memory:?gpu_memory at be000000 { compatible = "shared-dma-pool"; reg = <0xbe000000 0x2000000>; no-map; }; }; ------------------------------>8--------------------------- And then in the driver code we just need to do 2 things: ?1) Start using this memory for allocations in the driver ? ? with help of?of_reserved_mem_device_init() ?2) Get the region start. Not sure what's the best way to do it ? ? but I guess we'll be able to get "reg" property of the "gpu_memory" ? ? node in the worst case. And then use that base instead of PHYS_OFFSET. If of any interest I'll be willing to send you an RFC shortly so you may see real implementation in details. -Alexey From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey Brodkin Subject: Re: etnaviv: PHYS_OFFSET usage Date: Wed, 15 Nov 2017 17:36:36 +0000 Message-ID: <1510767395.29843.83.camel@synopsys.com> References: <1510763053.29843.64.camel@synopsys.com> <1510764243.2835.13.camel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1510764243.2835.13.camel@pengutronix.de> Content-Language: en-US Content-ID: <1A1600C89644B746B204EA08758BFE04@internal.synopsys.com> Sender: linux-kernel-owner@vger.kernel.org To: "l.stach@pengutronix.de" Cc: "dri-devel@lists.freedesktop.org" , "christian.gmeiner@gmail.com" , "linux-kernel@vger.kernel.org" , "Vineet.Gupta1@synopsys.com" , "linux-snps-arc@lists.infradead.org" List-Id: dri-devel@lists.freedesktop.org SGkgTHVjYXMsDQoNCk9uIFdlZCwgMjAxNy0xMS0xNSBhdCAxNzo0NCArMDEwMCwgTHVjYXMgU3Rh Y2ggd3JvdGU6DQo+IEhpIEFsZXhleSwNCj4gDQo+IEFtIE1pdHR3b2NoLCBkZW4gMTUuMTEuMjAx NywgMTY6MjQgKzAwMDAgc2NocmllYiBBbGV4ZXkgQnJvZGtpbjoNCj4gPiANCj4gPiBIaSBMdWNh cywNCj4gPiANCj4gPiBBcyB3ZSBkaXNjdXNzZWQgb24gRUxDRSBsYXN0IG1vbnRoIGluIFByYWd1 ZSB3ZSBoYXZlIFZpdmFudGUgR1BVDQo+ID4gYnVpbHQtaW4gb3VyIG5ldyBBUkMgSFNESyBkZXZl bG9wbWVudCBib2FyZC4NCj4gPiANCj4gPiBBbmQgZXZlbiB0aG91Z2ggW3RoYW5rcyB0byB5b3Vy IHN1Z2dlc3Rpb25zXSBJIGdvdCBFdG5hdml2IGRyaXZlcg0KPiA+IHdvcmtpbmcgcGVyZmVjdGx5 IGZpbmUgb24gb3VyIGJvYXJkIEkgZmFjZWQgb25lIHF1aXRlIGEgdHJpY2t5DQo+ID4gc2l0dWF0 aW9uIFt3aGljaCBJIGRpcnR5IHdvcmtlZC1hcm91bmQgZm9yIG5vd10uDQo+ID4gDQo+ID4gRXRu YXZpdiBkcml2ZXIgdXNlcyBzb21lIFBIWVNfT0ZGU0VUIGRlZmluZSB3aGljaCBpcyBub3QgdmVy eQ0KPiA+IHVzdWFsIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBhbmQgcGxhdGZvcm1zIHN1cHBv cnRlZCBieSBMaW51eCBrZXJuZWwuDQo+ID4gDQo+ID4gSW4gZmFjdCBmb3IgQVJDIHdlIGRvbid0 IGhhdmXCoFBIWVNfT0ZGU0VUIGRlZmluZWQgW3lldF0uDQo+ID4gQW5kIEknbSB3b25kZXJpbmcg aG93IHRvIGdldCB0aGlzIHJlc29sdmVkLg0KPiA+IA0KPiA+IEVzc2VudGlhbGx5IHdlIGhhdmUg MiBvcHRpb25zOg0KPiA+IMKgMS4gRGVmaW5lwqBQSFlTX09GRlNFVCBmb3IgQVJDIChhbmQgbGF0 ZXIgZm9yIG90aGVyIGFyY2hlcyBvbmNlIG5lZWRlZCkNCj4gPiDCoDIuIFJlcGxhY2XCoFBIWVNf T0ZGU0VUIHdpdGggc29tZXRoaW5nIGVsc2UgaW4gZXRuYXZpdiBzb3VyY2VzLg0KPiA+IA0KPiA+ IEV2ZW4gdGhvdWdoICgxKSBzZWVtcyB0byBiZSB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgZG9l c24ndCBsb29rIHZlcnkgbmljZQ0KPiA+IGJlY2F1c2UgaXQgc2VlbXMgdG8gYmUgcXVpdGUgQVJN LXNwZWNpZmljIGJ1dCBub3Qgc29tZXRoaW5nIHJlYWxseSBnZW5lcmljDQo+ID4gYW5kIHBvcnRh YmxlLg0KPiA+IA0KPiA+IEFzIGZvciAoMikgZnJhbmtseSBJIGRpbid0IHF1aXRlIHVuZGVyc3Rh bmQgd2h5IGRvIHdlIHJlYWxseSBjYXJlIGFib3V0DQo+ID4gRERSIHN0YXJ0IG9mZnNldCBpbiB0 aGUgR1BVIGRyaXZlci4gSWYgc29tZSBtb3JlIGxpZ2h0IGNvdWxkIGJlIHNoZWQgb24gdGhpcw0K PiA+IHRvcGljIHByb2JhYmx5IHdlJ2xsIGZpZ3VyZSBvdXQgd2hhdCB3b3VsZCBiZSBtb3JlIGVs ZWdhbnQgc29sdXRpb24uDQo+IA0KPiBCYXNpY2FsbHkgdGhlIEdQVSBoYXMgYSBsaW5lYXIgYWRk cmVzcyB3aW5kb3cgd2hpY2ggaXMgMkdCIGluIHNpemUgYW5kDQo+IGFsbCBHUFUgY29tbWFuZCBi dWZmZXJzIG11c3QgYmUgbWFwcGVkIHRocm91Z2ggdGhpcyB3aW5kb3cuIFRoZSB3aW5kb3cNCj4g aGFzIGEgYmFzZSBvZmZzZXQsIHNvIHdlIGNhbiBtb3ZlIGl0IHRvIHBvaW50IHRvIGRpZmZlcmVu dCBsb2NhdGlvbnMgaW4NCj4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIHN5c3Rl bS4NCg0KV293LCB3aGF0IGEgZGVzaWduIGRlY2lzaW9uIDopDQoNCj4gRXRuYXZpdiB1c2VzIHRo ZSBQSFlTX09GRlNFVCB0byBmaW5kIG91dCB3aGVyZSBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcw0K PiBzcGFjZSB0aGUgUkFNIHN0YXJ0cy4gSWYgdGhlIHN0YXJ0IG9mIFJBTSBpcyBhYm92ZSB0aGUg MkdCIG1hcmsgd2UNCj4gX211c3RfIHVzZSB0aGUgbGluZWFyIHdpbmRvdyBpbiBvcmRlciB0byBt YWtlIHRoZSBjb21tYW5kIGJ1ZmZlcnMNCj4gYXZhaWxhYmxlIHRvIHRoZSBHUFUuDQoNCldlbGwg dGhhdCBsb29rcyBub3Qgc3VwZXIgc2FmZSBhbmQgdmVyc2F0aWxlIHNvbHV0aW9uIHRvIG1lLg0K V2hhdCBpZiB1c2VkIFJBTSBpcyBtdWNoIG1vcmUgdGhhbiAyR2I/IEkgZ3Vlc3MgaW4gdGhhdCBj YXNlIGl0J3MNCnBvc3NpYmxlIHRvIHRvIHNldCBQSFlTX09GRlNFVCB0byBzYXkgMCBhbmQgdGhl biBrZXJuZWwgbWlnaHQgYWxsb2NhdGUNCmNvbW1hbmQgYnVmZmVyIGFib3ZlIDJHYiB3aGljaCB3 aWxsIG1ha2UgdGhhdCBidWZmZXIgbm90IHZpc2libGUgZm9yDQpHUFUgSSBndWVzcy4NCg0KPiBJ J20gbm90IGF3YXJlIG9mIGFueSBvdGhlciBrZXJuZWwgQVBJIHRoYXQgd291bGQgYWxsb3cgdXMg dG8gZmluZCB0aGUNCj4gc3RhcnQgb2YgUkFNLiBJZiB0aGVyZSBpcyBJIHdvdWxkIGJlIGhhcHB5 IHRvIHJlcGxhY2UgdGhlIFBIWVNfT0ZGU0VUDQo+IHN0dWZmLiBJZiB5b3UgZG9uJ3QgbGlrZSB0 byBjb3B5IHRoZSBQSFlTX09GRlNFVCBzdHVmZiB0byBBUkMsIHlvdQ0KPiB3b3VsZCBuZWVkIHRv IGludHJvZHVjZSBzb21lIG5ldyBBUEksIHdoaWNoIGFsbG93cyB1cyB0byByZXRyaWV2ZSB0aGlz DQo+IGluZm9ybWF0aW9uLg0KDQpJJ2Qgc2F5IHdlIG1heSB1c2Ugc28tY2FsbGVkICJyZXNlcnZl ZCBtZW1vcnkiIGhlcmUgYXMgYSBuaWNlIGFuIGVsZWdhbnQgc29sdXRpb24uDQpJbiBkZXZpY2Ug dHJlZSB3ZSBkZXNjcmliZSB0aGlzIG1lbW9yeSBhcmVhIGxpa2UgdGhpczoNCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLT44LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJZ3B1XzNk OiBncHVAOTAwMDAgew0KCQljb21wYXRpYmxlID0gInZpdmFudGUsZ2MiOw0KCQlyZWcgPSA8MHg5 MDAwMCAweDQwMDA+Ow0KCQlpbnRlcnJ1cHRzID0gPDI4PjsNCgkJbWVtb3J5LXJlZ2lvbiA9IDwm Z3B1X21lbW9yeT47DQoJfTsNCg0KCXJlc2VydmVkLW1lbW9yeSB7DQoJCSNhZGRyZXNzLWNlbGxz ID0gPDI+Ow0KCQkjc2l6ZS1jZWxscyA9IDwyPjsNCgkJcmFuZ2VzOw0KCQlncHVfbWVtb3J5OsKg Z3B1X21lbW9yeUBiZTAwMDAwMCB7DQoJCQljb21wYXRpYmxlID0gInNoYXJlZC1kbWEtcG9vbCI7 DQoJCQlyZWcgPSA8MHhiZTAwMDAwMCAweDIwMDAwMDA+Ow0KCQkJbm8tbWFwOw0KCQl9Ow0KCX07 DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+OC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KDQpBbmQgdGhlbiBpbiB0aGUgZHJpdmVyIGNvZGUgd2UganVzdCBuZWVkIHRvIGRvIDIg dGhpbmdzOg0KwqAxKSBTdGFydCB1c2luZyB0aGlzIG1lbW9yeSBmb3IgYWxsb2NhdGlvbnMgaW4g dGhlIGRyaXZlcg0KwqAgwqAgd2l0aCBoZWxwIG9mwqBvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX2lu aXQoKQ0KwqAyKSBHZXQgdGhlIHJlZ2lvbiBzdGFydC4gTm90IHN1cmUgd2hhdCdzIHRoZSBiZXN0 IHdheSB0byBkbyBpdA0KwqAgwqAgYnV0IEkgZ3Vlc3Mgd2UnbGwgYmUgYWJsZSB0byBnZXQgInJl ZyIgcHJvcGVydHkgb2YgdGhlICJncHVfbWVtb3J5Ig0KwqAgwqAgbm9kZSBpbiB0aGUgd29yc3Qg Y2FzZS4gQW5kIHRoZW4gdXNlIHRoYXQgYmFzZSBpbnN0ZWFkIG9mIFBIWVNfT0ZGU0VULg0KDQpJ ZiBvZiBhbnkgaW50ZXJlc3QgSSdsbCBiZSB3aWxsaW5nIHRvIHNlbmQgeW91IGFuIFJGQyBzaG9y dGx5IHNvIHlvdQ0KbWF5IHNlZSByZWFsIGltcGxlbWVudGF0aW9uIGluIGRldGFpbHMuDQoNCi1B bGV4ZXkNCg==