drm/i915: CONFIG_DRM_I915_UMS
On Fri, Jul 25, 2014 at 2:14 PM, Paul Bolle wrote: > Your commit 2225a28fd916 ("drm/i915: Ditch UMS config option") is > included in today's linux-next (ie, next-20140725). It removes the > Kconfig symbol DRM_I915_UMS. > > It didn't remove the two (negative) checks for CONFIG_DRM_I915_UMS. > These checks are superfluous as they now will always evaluate to true. > Is the trivial cleanup to remove them already queued somewhere? No, and intentionally. Actually removing the code for user-mode-setting isn't just removing these two blocks, but requires the gutting of roughly 10k lines splattered all over the driver. Essentially all the code that checks for !drm_core_check_feature(DRIVER_MODESET) needs to go. That's not quite as trivial, and before I do that I want to make really sure that really no one misses this option. So probably after 3.17 is out the door for a bit. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch
[PATCH] drm/radeon: use packet2 for nop on hawaii with old firmware
Am 25.07.2014 um 23:44 schrieb Alex Deucher: > Older firmware didn't support the new nop packet. > > Signed-off-by: Alex Deucher Reviewed-by: Christian K?nig > --- > drivers/gpu/drm/radeon/cik.c | 16 +--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c > index 44d25da..80a7ce0 100644 > --- a/drivers/gpu/drm/radeon/cik.c > +++ b/drivers/gpu/drm/radeon/cik.c > @@ -8259,6 +8259,7 @@ restart_ih: > static int cik_startup(struct radeon_device *rdev) > { > struct radeon_ring *ring; > + u32 nop; > int r; > > /* enable pcie gen2/3 link */ > @@ -8392,9 +8393,18 @@ static int cik_startup(struct radeon_device *rdev) > } > cik_irq_set(rdev); > > + if (rdev->family == CHIP_HAWAII) { > + if (rdev->new_fw) > + nop = PACKET3(PACKET3_NOP, 0x3FFF); > + else > + nop = RADEON_CP_PACKET2; > + } else { > + nop = PACKET3(PACKET3_NOP, 0x3FFF); > + } > + > ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; > r = radeon_ring_init(rdev, ring, ring->ring_size, > RADEON_WB_CP_RPTR_OFFSET, > - PACKET3(PACKET3_NOP, 0x3FFF)); > + nop); > if (r) > return r; > > @@ -8402,7 +8412,7 @@ static int cik_startup(struct radeon_device *rdev) > /* type-2 packets are deprecated on MEC, use type-3 instead */ > ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX]; > r = radeon_ring_init(rdev, ring, ring->ring_size, > RADEON_WB_CP1_RPTR_OFFSET, > - PACKET3(PACKET3_NOP, 0x3FFF)); > + nop); > if (r) > return r; > ring->me = 1; /* first MEC */ > @@ -8413,7 +8423,7 @@ static int cik_startup(struct radeon_device *rdev) > /* type-2 packets are deprecated on MEC, use type-3 instead */ > ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]; > r = radeon_ring_init(rdev, ring, ring->ring_size, > RADEON_WB_CP2_RPTR_OFFSET, > - PACKET3(PACKET3_NOP, 0x3FFF)); > + nop); > if (r) > return r; > /* dGPU only have 1 MEC */
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #91 from Luzipher --- Thanks Kai, for your answers. I got it working now as well - in fact I'm typing from an accelerated xorg that's running for over an hour now. I used: - agd5f's kernel (drm-next-3.17-wip), including the "handle ASIC_ProfilingInfo v3.1" patch - ucode from comment #81 copied to "/lib/firmware/updates/$(uname -r)/radeon" - xf86-video-ati with agd5f's patch from comment #81 - mesa git with glisse's patch from comment #86 - llvm git - xorg-server 1.16 - glamor 0.6.0 (is that still necessary with xorg 1.16 ?) - kernel command line parameters: radeon.dpm=0 drm.rnodes=1 I do not use any kind of login manager (gdm, kdm) for login, but plain old text-mode, then typing startx. Both xfce4 and cinnamon start up and work, but at least in cinnamon I get massive flickering on mouse-overs or animated cursors (terminology). For example the background image occupies the whole text-area where I type this comment, whenever I move the mouse in or out (firefox). The same happens when I type, but obly for 2-3 lines of the surrounding text.using the mouse-wheel to scroll helps and corrects the display. I am able to run glxgears. And I even tried World of Warcraft via wine, where I could get to the character selection screen (3D character is displayed), but upon entering the world, the machine crashed and I got the screen full of noise as output (similar to what happened before the fix on crashes). -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/d3e601ca/attachment.html>
[PATCH libdrm] drm: Implement drmCheckModesettingSupported() for DragonFly
For the sake of simplicity, KMS support can always be considered present on DragonFly. If some particular version doesn't support KMS yet, appropriate checks are already done in Dports's x11-drivers/ Makefiles and KMS-enabled driver packages don't get built. Signed-off-by: Fran?ois Tigeot --- xf86drmMode.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xf86drmMode.c b/xf86drmMode.c index 7ca89b3..60ce369 100644 --- a/xf86drmMode.c +++ b/xf86drmMode.c @@ -806,6 +806,8 @@ int drmCheckModesettingSupported(const char *busid) return -EINVAL; return (modesetting ? 0 : -ENOSYS); } +#elif defined(__DragonFly__) + return 0; #endif return -ENOSYS; -- 2.0.0
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #92 from Kai --- (In reply to comment #91) > Thanks Kai, for your answers. I got it working now as well - in fact I'm > typing from an accelerated xorg that's running for over an hour now. yw; happy I could help. > - glamor 0.6.0 (is that still necessary with xorg 1.16 ?) No (as I've indicated in comment #85); my understanding is, that only the integrated version is maintained at this point. You might even have overwritten the integrated libglamoregl.so with the externel version? You can check which one you loaded by looking in your Xorg.0.log for the following lines: > (II) Loading sub module "glamoregl" > (II) LoadModule: "glamoregl" > (II) Loading /usr/lib/xorg/modules/libglamoregl.so > (II) Module glamoregl: vendor="X.Org Foundation" > compiled for 1.16.0, module version = 1.0.0 > ABI class: X.Org ANSI C Emulation, version 0.4 and check what version you see. The integrated version is 1.0.0 and as you can see from attachment 103450, my X started correctly with that. I just get a GPU stall when the desktop should be drawn/shown the frist time. The last image I see is the KDE loading screen with all icons. > - kernel command line parameters: radeon.dpm=0 drm.rnodes=1 Oh, I didn't try those so far. I'll look into that and see if I can KDE loading with those. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/c4a7ac65/attachment.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #93 from Luzipher --- Created attachment 103497 --> https://bugs.freedesktop.org/attachment.cgi?id=103497&action=edit dmesg with working acceleration: GPU faults I just looked at my dmesg (with the same running system as described in comment #91) and noticed quite a few "GPU faults" logged there (see attachement). My Xorg.0.log looks clean though (only the EDID information of one of my monitors was printed out waaay after I started X, at timestamps 1705 and 3420. But I believe that was when powersaving switched off the screens). -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/6ea3a18a/attachment-0001.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #94 from Marek Ol??k --- (In reply to comment #86) > Created attachment 103474 [details] [review] > Hack to temporarily fix accel > > If you want working desktop you can use this patch to disable the packet > that is the issue. With that mesa patch i have stable acceleration and > desktop. I don't recommend this patch. It disables updates to resource descriptors in some cases, which means you'll get resource bindings from old draw packets or even old IBs, which will cause VM faults or even hangs. I think it also breaks MSAA and might cause hangs there too (CMASK must be cleared). Hawaii works without the patch very well here. I'm only using Alex's stuff from comment 81 and my Mesa fixes. Nothing else. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/49d64f78/attachment.html>
[Bug 66281] DRI_PRIME=1 glxinfo crashes and causes session to restart
https://bugzilla.kernel.org/show_bug.cgi?id=66281 sven changed: What|Removed |Added CC||sven.pilz+linux at gmail.com --- Comment #8 from sven --- I guess I have the same problem on a T420, see "https://bugs.freedesktop.org/show_bug.cgi?id=80769";. Can you boot your system with setting the display to discrete (instead of Optimus) in the BIOS? https://bugzilla.kernel.org/show_bug.cgi?id=80321 -- You are receiving this mail because: You are watching the assignee of the bug.
[PATCH] drm/radeon: adjust default radeon_vm_block_size v2
Hey Alex, can you use this version instead of the one you already have in drm-next-3.17-wip? It depends on a change from drm-fixes-3.16, so you need to merge (or rebase) your -next branch to apply it. Apart from that I also have a couple of more VM changes for 3.17, but those need a merge with the latest 3.16 fixes as well. Thanks, Christian. Am 19.07.2014 um 13:55 schrieb Christian K?nig: > From: Christian K?nig > > v2: rebase on vm_size scale change. Adjust vm_size default to 8, > Better handle the default and smaller values. > > Signed-off-by: Christian K?nig > --- > drivers/gpu/drm/radeon/radeon_device.c | 14 +- > drivers/gpu/drm/radeon/radeon_drv.c| 6 +++--- > 2 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_device.c > b/drivers/gpu/drm/radeon/radeon_device.c > index a8537d7..38e13b0 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -1077,7 +1077,19 @@ static void radeon_check_arguments(struct > radeon_device *rdev) > /* defines number of bits in page table versus page directory, >* a page is 4KB so we have 12 bits offset, minimum 9 bits in the >* page table and the remaining bits are in the page directory */ > - if (radeon_vm_block_size < 9) { > + if (radeon_vm_block_size == -1) { > + > + /* Total bits covered by PD + PTs */ > + unsigned bits = ilog2(radeon_vm_size) + 17; > + > + /* Make sure the PD is 4K in size up to 8GB address space. > +Above that split equal between PD and PTs */ > + if (radeon_vm_size <= 8) > + radeon_vm_block_size = bits - 9; > + else > + radeon_vm_block_size = (bits + 3) / 2; > + > + } else if (radeon_vm_block_size < 9) { > dev_warn(rdev->dev, "VM page table size (%d) to small\n", >radeon_vm_block_size); > radeon_vm_block_size = 9; > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c > b/drivers/gpu/drm/radeon/radeon_drv.c > index e9e3610..59b74d2 100644 > --- a/drivers/gpu/drm/radeon/radeon_drv.c > +++ b/drivers/gpu/drm/radeon/radeon_drv.c > @@ -173,8 +173,8 @@ int radeon_dpm = -1; > int radeon_aspm = -1; > int radeon_runtime_pm = -1; > int radeon_hard_reset = 0; > -int radeon_vm_size = 4; > -int radeon_vm_block_size = 9; > +int radeon_vm_size = 8; > +int radeon_vm_block_size = -1; > int radeon_deep_color = 0; > > MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); > @@ -246,7 +246,7 @@ module_param_named(hard_reset, radeon_hard_reset, int, > 0444); > MODULE_PARM_DESC(vm_size, "VM address space size in gigabytes (default > 4GB)"); > module_param_named(vm_size, radeon_vm_size, int, 0444); > > -MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default 9)"); > +MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default > depending on vm_size)"); > module_param_named(vm_block_size, radeon_vm_block_size, int, 0444); > > MODULE_PARM_DESC(deep_color, "Deep Color support (1 = enable, 0 = disable > (default))");
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #95 from Luzipher --- Thank again, Kai, indeed my xorg-server used glamor 0.6.0. Ok, so it's not really trivial to get xorg-server-1.16 working right with the built-in glamor 1.0.0 on gentoo. The ebuilds for xorg-server-1.16, xorg-drivers-1.16 and xf86-video-ati are borked. I'll file a bugreport on their bugtracker later. If anyone here is interested, I could attach the ebuilds I altered here. But back on topic, I finally got it all working with the built in glamor - and with that I'm seeing exactly what Kai described in comment #82. (In reply to comment #94) > Hawaii works without the patch very well here. I'm only using Alex's stuff > from comment 81 and my Mesa fixes. Nothing else. Next I'll try your patches, Marek - I guess you mean the ones on the mailing list ? Is there a git-repo where you have them ? I checked your stuff for mesa on freedesktop, but couldn't see anything there. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/dc95f2c0/attachment.html>
[Bug 78788] [Radeon\VCE] Performance regression after using VCE
https://bugs.freedesktop.org/show_bug.cgi?id=78788 --- Comment #4 from Iaroslav Andrusyak --- Mesa-git git-54a84d9 http://cgit.freedesktop.org/~agd5f/linux/log/?h=drm-next-3.17-wip New firmware Same problem, slow 3d after using VCE -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/ae3d739b/attachment.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #96 from Kai --- (In reply to comment #94) > (In reply to comment #86) > > Created attachment 103474 [details] [review] [review] > > Hack to temporarily fix accel > > > > If you want working desktop you can use this patch to disable the packet > > that is the issue. With that mesa patch i have stable acceleration and > > desktop. > > I don't recommend this patch. It disables updates to resource descriptors in > some cases, which means you'll get resource bindings from old draw packets > or even old IBs, which will cause VM faults or even hangs. I think it also > breaks MSAA and might cause hangs there too (CMASK must be cleared). > > Hawaii works without the patch very well here. I'm only using Alex's stuff > from comment 81 and my Mesa fixes. Nothing else. IT WORKS! Thanks to Alex, Marek, J?r?me and all the others involved! The stack I used was (base is Debian Testing): GPU: Hawaii PRO [Radeon R9 290] (ChipID = 0x67b1) Linux: ~agdf5/linux:drm-next-3.17-wip (calls itself 3.16-rc4?) libdrm: 2.4.54-1 LLVM: 3.5 RC1 libclc: Git:master/0ec7437d9c Mesa: Git:master/74e100affc + the three patches Marek named ("radeonsi: fix CMASK and HTILE calculations for Hawaii"; "gallium/util: add a helper for calculating primitive count from vertex count"; "radeonsi: fix a hang with instancing on Hawaii") and can be found on mesa-dev. DDX: 1:7.4.0-2 + Patch from http://people.freedesktop.org/~agd5f/0001-radeon-enable-hawaii-accel-conditionally.patch X: 2:1.16.0-1 (1.16.0) -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/fed007b1/attachment-0001.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #97 from Luzipher --- Created attachment 103500 --> https://bugs.freedesktop.org/attachment.cgi?id=103500&action=edit dmesg with working acceleration (Marek's patches): WoW GPU reset Yay, with your seven patches, Marek, it works with the built-in glamor-1.0.0 ! Thanks a lot ! The following patches were applied: [Mesa-dev] [PATCH 1/2] r600g, radeonsi: add debug flags which disable tiling http://lists.freedesktop.org/archives/mesa-dev/2014-July/064127.html [Mesa-dev] [PATCH 2/2] radeonsi: fix CMASK and HTILE calculations for Hawaii http://lists.freedesktop.org/archives/mesa-dev/2014-July/064128.html [Mesa-dev] [PATCH 1/3] gallium/util: add a helper for calculating primitive count from vertex count http://lists.freedesktop.org/archives/mesa-dev/2014-July/064129.html [Mesa-dev] [PATCH 2/3] radeonsi: fix a hang with instancing on Hawaii http://lists.freedesktop.org/archives/mesa-dev/2014-July/064130.html [Mesa-dev] [PATCH 3/3] radeonsi: fix a hang with streamout on Hawaii http://lists.freedesktop.org/archives/mesa-dev/2014-July/064131.html [Mesa-dev] [PATCH] winsys/radeon: fix vram_size overflow with Hawaii http://lists.freedesktop.org/archives/mesa-dev/2014-July/064137.html [Mesa-dev] [PATCH] radeonsi: fix occlusion queries on Hawaii http://lists.freedesktop.org/archives/mesa-dev/2014-July/064138.html With those the transparency and flickery effects I described in comment #91 are gone ! World of Warcraft still crashes when entering the world, but not fatally anymore (there is a GPU reset and black screens for a while, but it recovers and only the game crashes). I attached the dmesg of the crash, Xorg.0.log doesn't show anything. I'm not sure if the GPU faults / VM faults visible in the log are related to the game, but they probably occured while I logged in and selected a character. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/31e8b5c3/attachment.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #98 from Kai --- After some playing around, I do see some (minor) visual issues. See https://imgur.com/a/uswfc for some screenshots and descriptions. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/97b7ea43/attachment.html>
[Bug 81644] Random crashes on RadeonSI with Chromium.
https://bugs.freedesktop.org/show_bug.cgi?id=81644 --- Comment #7 from Aaron B --- Created attachment 103504 --> https://bugs.freedesktop.org/attachment.cgi?id=103504&action=edit Crash+recover -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/7e3500a7/attachment.html>
[Bug 81644] Random crashes on RadeonSI with Chromium.
https://bugs.freedesktop.org/show_bug.cgi?id=81644 --- Comment #8 from Aaron B --- Created attachment 103505 --> https://bugs.freedesktop.org/attachment.cgi?id=103505&action=edit DMesg of crash+recover. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/a5c753db/attachment.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #99 from Marek Ol??k --- BTW, MSAA may be broken and I recommend turning it off for now. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/19efe935/attachment.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #100 from Kai --- (In reply to comment #99) > BTW, MSAA may be broken and I recommend turning it off for now. Ok, how do I do that? I'm only aware of the debug flag "msaa". My radeon(4) man page didn't yield anything for MSAA either and a quick grep over the Mesa code pointed only to code actually handling MSAA (or dealing with the debug flag). -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/7e3c18c4/attachment.html>
[PATCH] radeon: fix typo in sample split / fixes MSAA on Hawaii
From: Marek Ol??k --- radeon/radeon_surface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radeon/radeon_surface.c b/radeon/radeon_surface.c index 9c3a192..8a1fe7d 100644 --- a/radeon/radeon_surface.c +++ b/radeon/radeon_surface.c @@ -1914,7 +1914,7 @@ static void cik_get_2d_params(struct radeon_surface_manager *surf_man, sample_split = 1; break; case CIK__SAMPLE_SPLIT__2: -sample_split = 1; +sample_split = 2; break; case CIK__SAMPLE_SPLIT__4: sample_split = 4; -- 1.9.1
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #101 from Marek Ol??k --- You can either disable MSAA in your apps (graphics settings in games, etc.) or you can apply this libdrm patch ;) http://lists.freedesktop.org/archives/dri-devel/2014-July/064743.html -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/4bde7d1e/attachment.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #102 from Kai --- (In reply to comment #101) > You can either disable MSAA in your apps (graphics settings in games, etc.) > or you can apply this libdrm patch ;) > http://lists.freedesktop.org/archives/dri-devel/2014-July/064743.html Ah, ok. I thought there was some DRI option I was unaware of. I build libdrm with the patch, seems the better solution to me. Thanks again! -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/b00443ba/attachment.html>
[Bug 81644] Random crashes on RadeonSI with Chromium.
https://bugs.freedesktop.org/show_bug.cgi?id=81644 Aaron B changed: What|Removed |Added Attachment #103504|0 |1 is obsolete|| --- Comment #9 from Aaron B --- Created attachment 103522 --> https://bugs.freedesktop.org/attachment.cgi?id=103522&action=edit Two crashes+recovers. Xorg. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/e4378608/attachment.html>
[Bug 81644] Random crashes on RadeonSI with Chromium.
https://bugs.freedesktop.org/show_bug.cgi?id=81644 Aaron B changed: What|Removed |Added Attachment #103505|0 |1 is obsolete|| --- Comment #10 from Aaron B --- Created attachment 103523 --> https://bugs.freedesktop.org/attachment.cgi?id=103523&action=edit Two crashes+recovers. Dmesg. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/b278b489/attachment.html>
[Bug 78453] [HAWAII] Get acceleration working
https://bugs.freedesktop.org/show_bug.cgi?id=78453 --- Comment #103 from Serkan Hosca --- Created attachment 103527 --> https://bugs.freedesktop.org/attachment.cgi?id=103527&action=edit dmesg with drm-next-3.17-wip Not working for me. I've updated the firmware files and using agd5f's drm-next-3.17-wip branch. I can't switch to other vt's, it gets stuck with the boot messages on vt1. Haven't tried starting X yet. -- You are receiving this mail because: You are the assignee for the bug. -- next part -- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140726/a9a8e734/attachment.html>
[PATCH V6 4/8] drm/exynos: Move DP setup into commit()
This patch moves the DP training and video enable from the hotplug handler into commit(). Signed-off-by: Sean Paul Signed-off-by: Ajay Kumar --- drivers/gpu/drm/exynos/exynos_dp_core.c | 24 +++- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c index 845d766..4b6ad95 100644 --- a/drivers/gpu/drm/exynos/exynos_dp_core.c +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c @@ -875,10 +875,18 @@ static irqreturn_t exynos_dp_irq_handler(int irq, void *arg) static void exynos_dp_hotplug(struct work_struct *work) { struct exynos_dp_device *dp; - int ret; dp = container_of(work, struct exynos_dp_device, hotplug_work); + if (dp->drm_dev) + drm_helper_hpd_irq_event(dp->drm_dev); +} + +static void exynos_dp_commit(struct exynos_drm_display *display) +{ + struct exynos_dp_device *dp = display->ctx; + int ret; + ret = exynos_dp_detect_hpd(dp); if (ret) { /* Cable has been disconnected, we're done */ @@ -1050,8 +1058,10 @@ static void exynos_dp_phy_exit(struct exynos_dp_device *dp) } } -static void exynos_dp_poweron(struct exynos_dp_device *dp) +static void exynos_dp_poweron(struct exynos_drm_display *display) { + struct exynos_dp_device *dp = display->ctx; + if (dp->dpms_mode == DRM_MODE_DPMS_ON) return; @@ -1059,10 +1069,13 @@ static void exynos_dp_poweron(struct exynos_dp_device *dp) exynos_dp_phy_init(dp); exynos_dp_init_dp(dp); enable_irq(dp->irq); + exynos_dp_commit(display); } -static void exynos_dp_poweroff(struct exynos_dp_device *dp) +static void exynos_dp_poweroff(struct exynos_drm_display *display) { + struct exynos_dp_device *dp = display->ctx; + if (dp->dpms_mode != DRM_MODE_DPMS_ON) return; @@ -1078,12 +1091,12 @@ static void exynos_dp_dpms(struct exynos_drm_display *display, int mode) switch (mode) { case DRM_MODE_DPMS_ON: - exynos_dp_poweron(dp); + exynos_dp_poweron(display); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: - exynos_dp_poweroff(dp); + exynos_dp_poweroff(display); break; default: break; @@ -1094,6 +1107,7 @@ static void exynos_dp_dpms(struct exynos_drm_display *display, int mode) static struct exynos_drm_display_ops exynos_dp_display_ops = { .create_connector = exynos_dp_create_connector, .dpms = exynos_dp_dpms, + .commit = exynos_dp_commit, }; static struct exynos_drm_display exynos_dp_display = { -- 1.7.9.5
[PATCH V6 1/8] drm/panel: Add prepare, unprepare and get_modes routines
Most of the panels need an init sequence as mentioned below: -- poweron LCD unit/LCD_EN -- start video data -- poweron LED unit/BACKLIGHT_EN And, a de-init sequence as mentioned below: -- poweroff LED unit/BACKLIGHT_EN -- stop video data -- poweroff LCD unit/LCD_EN With existing callbacks for drm panel, we cannot accomodate such panels, since only two callbacks, i.e "panel_enable" and panel_disable are supported. This patch adds: -- "prepare" callback which can be called before the actual video data is on, and then call the "enable" callback after the video data is available. -- "unprepare" callback which can be called after the video data is off, and use "disable" callback to do something before switching off the video data. Now, we can easily map the above scenario as shown below: poweron LCD unit/LCD_EN = "prepare" callback poweron LED unit/BACKLIGHT_EN = "enable" callback poweroff LED unit/BACKLIGHT_EN = "disable" callback poweroff LCD unit/LCD_EN = "unprepare" callback Also, a helper function for get_modes is added. Signed-off-by: Ajay Kumar --- include/drm/drm_panel.h | 26 ++ 1 file changed, 26 insertions(+) diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index c2ab77a..efc63cc 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -31,7 +31,9 @@ struct drm_device; struct drm_panel; struct drm_panel_funcs { + int (*unprepare)(struct drm_panel *panel); int (*disable)(struct drm_panel *panel); + int (*prepare)(struct drm_panel *panel); int (*enable)(struct drm_panel *panel); int (*get_modes)(struct drm_panel *panel); }; @@ -46,6 +48,14 @@ struct drm_panel { struct list_head list; }; +static inline int drm_panel_unprepare(struct drm_panel *panel) +{ + if (panel && panel->funcs && panel->funcs->unprepare) + return panel->funcs->unprepare(panel); + + return panel ? -ENOSYS : -EINVAL; +} + static inline int drm_panel_disable(struct drm_panel *panel) { if (panel && panel->funcs && panel->funcs->disable) @@ -54,6 +64,14 @@ static inline int drm_panel_disable(struct drm_panel *panel) return panel ? -ENOSYS : -EINVAL; } +static inline int drm_panel_prepare(struct drm_panel *panel) +{ + if (panel && panel->funcs && panel->funcs->prepare) + return panel->funcs->prepare(panel); + + return panel ? -ENOSYS : -EINVAL; +} + static inline int drm_panel_enable(struct drm_panel *panel) { if (panel && panel->funcs && panel->funcs->enable) @@ -62,6 +80,14 @@ static inline int drm_panel_enable(struct drm_panel *panel) return panel ? -ENOSYS : -EINVAL; } +static inline int drm_panel_get_modes(struct drm_panel *panel) +{ + if (panel && panel->funcs && panel->funcs->get_modes) + return panel->funcs->get_modes(panel); + + return 0; +} + void drm_panel_init(struct drm_panel *panel); int drm_panel_add(struct drm_panel *panel); -- 1.7.9.5
[PATCH V6 5/8] drm/exynos: dp: Modify driver to support drm_panel
Add drm_panel controls to support powerup/down of the eDP panel, if one is present at the sink side. Signed-off-by: Ajay Kumar --- drivers/gpu/drm/exynos/Kconfig |1 + drivers/gpu/drm/exynos/exynos_dp_core.c | 88 --- drivers/gpu/drm/exynos/exynos_dp_core.h |3 +- 3 files changed, 71 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig index 9ba1aae..7f9f6f9 100644 --- a/drivers/gpu/drm/exynos/Kconfig +++ b/drivers/gpu/drm/exynos/Kconfig @@ -53,6 +53,7 @@ config DRM_EXYNOS_DP bool "EXYNOS DRM DP driver support" depends on DRM_EXYNOS_FIMD && ARCH_EXYNOS && (DRM_PTN3460=n || DRM_PTN3460=y || DRM_PTN3460=DRM_EXYNOS) default DRM_EXYNOS + select DRM_PANEL help This enables support for DP device. diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c index 4b6ad95..49356cc 100644 --- a/drivers/gpu/drm/exynos/exynos_dp_core.c +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -28,6 +27,7 @@ #include #include #include +#include #include #include "exynos_drm_drv.h" @@ -41,7 +41,7 @@ struct bridge_init { struct device_node *node; }; -static int exynos_dp_init_dp(struct exynos_dp_device *dp) +static void exynos_dp_init_dp(struct exynos_dp_device *dp) { exynos_dp_reset(dp); @@ -58,8 +58,6 @@ static int exynos_dp_init_dp(struct exynos_dp_device *dp) exynos_dp_init_hpd(dp); exynos_dp_init_aux(dp); - - return 0; } static int exynos_dp_detect_hpd(struct exynos_dp_device *dp) @@ -887,6 +885,12 @@ static void exynos_dp_commit(struct exynos_drm_display *display) struct exynos_dp_device *dp = display->ctx; int ret; + /* Keep backlight disabled while we configure video */ + if (dp->panel) { + if (drm_panel_disable(dp->panel)) + DRM_ERROR("failed to disable panel backlight\n"); + } + ret = exynos_dp_detect_hpd(dp); if (ret) { /* Cable has been disconnected, we're done */ @@ -917,6 +921,12 @@ static void exynos_dp_commit(struct exynos_drm_display *display) ret = exynos_dp_config_video(dp); if (ret) dev_err(dp->dev, "unable to config video\n"); + + /* Safe to turn on backlight now */ + if (dp->panel) { + if (drm_panel_enable(dp->panel)) + DRM_ERROR("failed to enable panel backlight\n"); + } } static enum drm_connector_status exynos_dp_detect( @@ -941,15 +951,18 @@ static int exynos_dp_get_modes(struct drm_connector *connector) struct exynos_dp_device *dp = ctx_from_connector(connector); struct drm_display_mode *mode; + if (dp->panel) + return drm_panel_get_modes(dp->panel); + mode = drm_mode_create(connector->dev); if (!mode) { DRM_ERROR("failed to create a new display mode.\n"); return 0; } - drm_display_mode_from_videomode(&dp->panel.vm, mode); - mode->width_mm = dp->panel.width_mm; - mode->height_mm = dp->panel.height_mm; + drm_display_mode_from_videomode(&dp->priv.vm, mode); + mode->width_mm = dp->priv.width_mm; + mode->height_mm = dp->priv.height_mm; connector->display_info.width_mm = mode->width_mm; connector->display_info.height_mm = mode->height_mm; @@ -1029,7 +1042,10 @@ static int exynos_dp_create_connector(struct exynos_drm_display *display, drm_connector_register(connector); drm_mode_connector_attach_encoder(connector, encoder); - return 0; + if (dp->panel) + ret = drm_panel_attach(dp->panel, &dp->connector); + + return ret; } static void exynos_dp_phy_init(struct exynos_dp_device *dp) @@ -1065,6 +1081,13 @@ static void exynos_dp_poweron(struct exynos_drm_display *display) if (dp->dpms_mode == DRM_MODE_DPMS_ON) return; + if (dp->panel) { + if (drm_panel_prepare(dp->panel)) { + DRM_ERROR("failed to powerup the panel\n"); + return; + } + } + clk_prepare_enable(dp->clock); exynos_dp_phy_init(dp); exynos_dp_init_dp(dp); @@ -1079,10 +1102,22 @@ static void exynos_dp_poweroff(struct exynos_drm_display *display) if (dp->dpms_mode != DRM_MODE_DPMS_ON) return; + if (dp->panel) { + if (drm_panel_disable(dp->panel)) { + DRM_ERROR("failed to disable panel backlight\n"); + return; + } + } + disable_irq(dp->irq); flush_work(&dp->hotplug_work); exynos_dp_phy_exit(dp); clk_disable_unprepare(dp->clock); + + if (dp->panel) { +
[PATCH V6 6/8] drm/bridge: Modify drm_bridge core to support driver model
This patch tries to seperate drm_bridge implementation into 2 parts, a drm part and a non_drm part. A set of helper functions are defined in this patch to make bridge driver probe independent of the drm flow. The bridge devices register themselves on a lookup table when they get probed by calling "drm_bridge_add_for_lookup". The parent encoder driver waits till the bridge is available in the lookup table(by calling "of_drm_find_bridge") and then continues with its initialization. The encoder driver should call "drm_bridge_attach_encoder" to pass on the drm_device and the encoder pointers to the bridge object. Now that the drm_device pointer is available, the encoder then calls "bridge->funcs->post_encoder_init" to allow the bridge to continue registering itself with the drm core. Also, non driver model based ptn3460 driver is removed in this patch. Signed-off-by: Ajay Kumar --- .../devicetree/bindings/drm/bridge/ptn3460.txt | 27 -- drivers/gpu/drm/Makefile |1 + drivers/gpu/drm/bridge/Kconfig | 12 +- drivers/gpu/drm/bridge/Makefile|2 - drivers/gpu/drm/bridge/ptn3460.c | 343 drivers/gpu/drm/drm_bridge.c | 89 + drivers/gpu/drm/drm_crtc.c |9 +- drivers/gpu/drm/exynos/Kconfig |3 +- drivers/gpu/drm/exynos/exynos_dp_core.c| 57 ++-- drivers/gpu/drm/exynos/exynos_dp_core.h|1 + drivers/gpu/drm/msm/hdmi/hdmi_bridge.c |3 +- include/drm/bridge/ptn3460.h | 37 --- include/drm/drm_crtc.h | 16 +- 13 files changed, 147 insertions(+), 453 deletions(-) delete mode 100644 Documentation/devicetree/bindings/drm/bridge/ptn3460.txt delete mode 100644 drivers/gpu/drm/bridge/ptn3460.c create mode 100644 drivers/gpu/drm/drm_bridge.c delete mode 100644 include/drm/bridge/ptn3460.h diff --git a/Documentation/devicetree/bindings/drm/bridge/ptn3460.txt b/Documentation/devicetree/bindings/drm/bridge/ptn3460.txt deleted file mode 100644 index 52b93b2..000 --- a/Documentation/devicetree/bindings/drm/bridge/ptn3460.txt +++ /dev/null @@ -1,27 +0,0 @@ -ptn3460 bridge bindings - -Required properties: - - compatible: "nxp,ptn3460" - - reg: i2c address of the bridge - - powerdown-gpio: OF device-tree gpio specification - - reset-gpio: OF device-tree gpio specification - - edid-emulation: The EDID emulation entry to use - +---++--+ - | Value | Resolution | Description | - | 0 | 1024x768 | NXP Generic | - | 1 | 1920x1080 | NXP Generic | - | 2 | 1920x1080 | NXP Generic | - | 3 | 1600x900 | Samsung LTM200KT | - | 4 | 1920x1080 | Samsung LTM230HT | - | 5 | 1366x768 | NXP Generic | - | 6 | 1600x900 | ChiMei M215HGE | - +---++--+ - -Example: - lvds-bridge at 20 { - compatible = "nxp,ptn3460"; - reg = <0x20>; - powerdown-gpio = <&gpy2 5 1 0 0>; - reset-gpio = <&gpx1 5 1 0 0>; - edid-emulation = <5>; - }; diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index af9a609..14a8b45 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -20,6 +20,7 @@ drm-$(CONFIG_COMPAT) += drm_ioc32.o drm-$(CONFIG_DRM_GEM_CMA_HELPER) += drm_gem_cma_helper.o drm-$(CONFIG_PCI) += ati_pcigart.o drm-$(CONFIG_DRM_PANEL) += drm_panel.o +drm-$(CONFIG_DRM_BRIDGE) += drm_bridge.o drm-usb-y := drm_usb.o diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 884923f..1e2f96c 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -1,5 +1,9 @@ -config DRM_PTN3460 - tristate "PTN3460 DP/LVDS bridge" +config DRM_BRIDGE + tristate depends on DRM - select DRM_KMS_HELPER - ---help--- + help + Bridge registration and lookup framework. + +menu "bridge chips" + depends on DRM_BRIDGE +endmenu diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile index b4733e1..be16eca 100644 --- a/drivers/gpu/drm/bridge/Makefile +++ b/drivers/gpu/drm/bridge/Makefile @@ -1,3 +1 @@ ccflags-y := -Iinclude/drm - -obj-$(CONFIG_DRM_PTN3460) += ptn3460.o diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c deleted file mode 100644 index d466696..000 --- a/drivers/gpu/drm/bridge/ptn3460.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - * NXP PTN3460 DP/LVDS bridge driver - * - * Copyright (C) 2013 Google, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the
[PATCH V6 8/8] drm/bridge: Add i2c based driver for ps8622/ps8625 bridge
From: Vincent Palatin This patch adds drm_bridge driver for parade DisplayPort to LVDS bridge chip. Signed-off-by: Vincent Palatin Signed-off-by: Andrew Bresticker Signed-off-by: Sean Paul Signed-off-by: Rahul Sharma Signed-off-by: Ajay Kumar --- .../devicetree/bindings/vendor-prefixes.txt|1 + .../devicetree/bindings/video/bridge/ps8622.txt| 19 + drivers/gpu/drm/bridge/Kconfig | 10 + drivers/gpu/drm/bridge/Makefile|1 + drivers/gpu/drm/bridge/ps8622.c| 602 5 files changed, 633 insertions(+) create mode 100644 Documentation/devicetree/bindings/video/bridge/ps8622.txt create mode 100644 drivers/gpu/drm/bridge/ps8622.c diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index 46a311e..b4a99cc 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt @@ -96,6 +96,7 @@ nxp NXP Semiconductors onnn ON Semiconductor Corp. opencores OpenCores.org panasonic Panasonic Corporation +parade Parade Technologies Inc. phytec PHYTEC Messtechnik GmbH picochip Picochip Ltd plathome Plat'Home Co., Ltd. diff --git a/Documentation/devicetree/bindings/video/bridge/ps8622.txt b/Documentation/devicetree/bindings/video/bridge/ps8622.txt new file mode 100644 index 000..fdeafb2 --- /dev/null +++ b/Documentation/devicetree/bindings/video/bridge/ps8622.txt @@ -0,0 +1,19 @@ +ps8622-bridge bindings + +Required properties: + - compatible: "parade,ps8622" or "parade,ps8625" + - reg: first i2c address of the bridge + - sleep-gpios: OF device-tree gpio specification + - reset-gpios: OF device-tree gpio specification + +Optional properties: + - lane-count: number of DP lanes to use + +Example: + ps8622-bridge at 48 { + compatible = "parade,ps8622"; + reg = <0x48>; + sleep-gpios = <&gpc3 6 1 0 0>; + reset-gpios = <&gpc3 1 1 0 0>; + lane-count = <1> + }; diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 0b12d16..d73e474 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -16,4 +16,14 @@ config DRM_PTN3460 help ptn3460 eDP-LVDS bridge chip driver. +config DRM_PS8622 + tristate "Parade eDP/LVDS bridge" + depends on DRM && DRM_BRIDGE + depends on OF + depends on I2C + select DRM_PANEL + select BACKLIGHT_LCD_SUPPORT + select BACKLIGHT_CLASS_DEVICE + help + parade eDP-LVDS bridge chip driver. endmenu diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile index b4733e1..d1b5daa 100644 --- a/drivers/gpu/drm/bridge/Makefile +++ b/drivers/gpu/drm/bridge/Makefile @@ -1,3 +1,4 @@ ccflags-y := -Iinclude/drm obj-$(CONFIG_DRM_PTN3460) += ptn3460.o +obj-$(CONFIG_DRM_PS8622) += ps8622.o diff --git a/drivers/gpu/drm/bridge/ps8622.c b/drivers/gpu/drm/bridge/ps8622.c new file mode 100644 index 000..ec60fcf --- /dev/null +++ b/drivers/gpu/drm/bridge/ps8622.c @@ -0,0 +1,602 @@ +/* + * Parade PS8622 eDP/LVDS bridge driver + * + * Copyright (C) 2014 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "drmP.h" +#include "drm_crtc.h" +#include "drm_crtc_helper.h" + +struct ps8622_bridge { + struct drm_connector connector; + struct i2c_client *client; + struct drm_bridge *bridge; + struct drm_panel *panel; + struct regulator *v12; + struct backlight_device *bl; + struct mutex enable_mutex; + + struct gpio_desc *gpio_slp_n; + struct gpio_desc *gpio_rst_n; + + u8 max_lane_count; + u8 lane_count; + + bool enabled; +}; + +struct ps8622_device_data { + u8 max_lane_count; +}; + +static const struct ps8622_device_data ps8622_data = { + .max_lane_count = 1, +}; + +static const struct ps8622_device_data ps8625_data = { + .max_lane_count = 2, +}; + +/* Brightness scale on the Parade chip */ +#define PS8622_MAX_BRIGHTNESS 0xff + +/* Timings taken from the version 1.7 datasheet for the PS8622/PS8625 */ +#define PS8622_POWER_RISE_T1_MIN_US 10 +#define PS8622_POWER_RISE_T1_MAX_US 1 +#define PS8622_RST_HIGH_T2_MIN_US 3000 +#define PS8622_RST_HIGH_T2_M
[PATCH V6 2/8] drm/panel: Add support for prepare and unprepare routines
Now that we have 2 new callbacks(prepare and unprepare) for drm_panel, make changes in all the drm drivers which use the drm_panel framework to support the new callbacks. Signed-off-by: Ajay Kumar --- drivers/gpu/drm/exynos/exynos_drm_dpi.c |8 +++-- drivers/gpu/drm/exynos/exynos_drm_dsi.c |7 + drivers/gpu/drm/panel/panel-ld9040.c| 18 +-- drivers/gpu/drm/panel/panel-s6e8aa0.c | 18 +-- drivers/gpu/drm/panel/panel-simple.c| 51 --- drivers/gpu/drm/tegra/output.c |2 ++ 6 files changed, 85 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c index 3aa1c7e..fa08f05 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c @@ -125,14 +125,18 @@ static int exynos_dpi_create_connector(struct exynos_drm_display *display, static void exynos_dpi_poweron(struct exynos_dpi *ctx) { - if (ctx->panel) + if (ctx->panel) { + drm_panel_prepare(ctx->panel); drm_panel_enable(ctx->panel); + } } static void exynos_dpi_poweroff(struct exynos_dpi *ctx) { - if (ctx->panel) + if (ctx->panel) { drm_panel_disable(ctx->panel); + drm_panel_unprepare(ctx->panel); + } } static void exynos_dpi_dpms(struct exynos_drm_display *display, int mode) diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c index 5e78d45..2f58e45 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c @@ -1333,6 +1333,12 @@ static int exynos_dsi_enable(struct exynos_dsi *dsi) if (ret < 0) return ret; + ret = drm_panel_prepare(dsi->panel); + if (ret < 0) { + exynos_dsi_poweroff(dsi); + return ret; + } + ret = drm_panel_enable(dsi->panel); if (ret < 0) { exynos_dsi_poweroff(dsi); @@ -1354,6 +1360,7 @@ static void exynos_dsi_disable(struct exynos_dsi *dsi) exynos_dsi_set_display_enable(dsi, false); drm_panel_disable(dsi->panel); + drm_panel_unprepare(dsi->panel); exynos_dsi_poweroff(dsi); dsi->state &= ~DSIM_STATE_ENABLED; diff --git a/drivers/gpu/drm/panel/panel-ld9040.c b/drivers/gpu/drm/panel/panel-ld9040.c index db1601f..046d9fe 100644 --- a/drivers/gpu/drm/panel/panel-ld9040.c +++ b/drivers/gpu/drm/panel/panel-ld9040.c @@ -214,7 +214,7 @@ static int ld9040_power_off(struct ld9040 *ctx) return regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); } -static int ld9040_disable(struct drm_panel *panel) +static int ld9040_unprepare(struct drm_panel *panel) { struct ld9040 *ctx = panel_to_ld9040(panel); @@ -228,7 +228,12 @@ static int ld9040_disable(struct drm_panel *panel) return ld9040_power_off(ctx); } -static int ld9040_enable(struct drm_panel *panel) +static int ld9040_disable(struct drm_panel *panel) +{ + return 0; +} + +static int ld9040_prepare(struct drm_panel *panel) { struct ld9040 *ctx = panel_to_ld9040(panel); int ret; @@ -242,11 +247,16 @@ static int ld9040_enable(struct drm_panel *panel) ret = ld9040_clear_error(ctx); if (ret < 0) - ld9040_disable(panel); + ld9040_unprepare(panel); return ret; } +static int ld9040_enable(struct drm_panel *panel) +{ + return 0; +} + static int ld9040_get_modes(struct drm_panel *panel) { struct drm_connector *connector = panel->connector; @@ -272,7 +282,9 @@ static int ld9040_get_modes(struct drm_panel *panel) } static const struct drm_panel_funcs ld9040_drm_funcs = { + .unprepare = ld9040_unprepare, .disable = ld9040_disable, + .prepare = ld9040_prepare, .enable = ld9040_enable, .get_modes = ld9040_get_modes, }; diff --git a/drivers/gpu/drm/panel/panel-s6e8aa0.c b/drivers/gpu/drm/panel/panel-s6e8aa0.c index 06e57a2..51c657a 100644 --- a/drivers/gpu/drm/panel/panel-s6e8aa0.c +++ b/drivers/gpu/drm/panel/panel-s6e8aa0.c @@ -887,7 +887,7 @@ static int s6e8aa0_power_off(struct s6e8aa0 *ctx) return regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); } -static int s6e8aa0_disable(struct drm_panel *panel) +static int s6e8aa0_unprepare(struct drm_panel *panel) { struct s6e8aa0 *ctx = panel_to_s6e8aa0(panel); @@ -900,7 +900,12 @@ static int s6e8aa0_disable(struct drm_panel *panel) return s6e8aa0_power_off(ctx); } -static int s6e8aa0_enable(struct drm_panel *panel) +static int s6e8aa0_disable(struct drm_panel *panel) +{ + return 0; +} + +static int s6e8aa0_prepare(struct drm_panel *panel) { struct s6e8aa0 *ctx = panel_to_s6e8aa0(panel); int ret; @@ -913,11 +918,16 @@ static int s6e8aa0_enable(struct drm_panel *panel) ret = ctx->error; if (ret <
[PATCH V6 3/8] drm/panel: simple: Add support for auo_b133htn01 panel
Add panel_desc structure for auo_b133htn01 eDP panel. Also, modify the panel_simple routines to support timing_parameter delays if mentioned in the panel_desc structure. Signed-off-by: Ajay Kumar --- .../devicetree/bindings/panel/auo,b133htn01.txt|7 +++ drivers/gpu/drm/panel/panel-simple.c | 47 2 files changed, 54 insertions(+) create mode 100644 Documentation/devicetree/bindings/panel/auo,b133htn01.txt diff --git a/Documentation/devicetree/bindings/panel/auo,b133htn01.txt b/Documentation/devicetree/bindings/panel/auo,b133htn01.txt new file mode 100644 index 000..302226b --- /dev/null +++ b/Documentation/devicetree/bindings/panel/auo,b133htn01.txt @@ -0,0 +1,7 @@ +AU Optronics Corporation 13.3" FHD (1920x1080) color TFT-LCD panel + +Required properties: +- compatible: should be "auo,b133htn01" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index fb0cfe2..cbbb1b8 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -41,6 +41,13 @@ struct panel_desc { unsigned int width; unsigned int height; } size; + + struct { + unsigned int prepare_stage_delay; + unsigned int enable_stage_delay; + unsigned int disable_stage_delay; + unsigned int unprepare_stage_delay; + } timing_parameter; }; struct panel_simple { @@ -105,6 +112,8 @@ static int panel_simple_unprepare(struct drm_panel *panel) gpiod_set_value_cansleep(p->enable_gpio, 0); regulator_disable(p->supply); + if (p->desc) + msleep(p->desc->timing_parameter.unprepare_stage_delay); p->panel_enabled = false; @@ -123,6 +132,9 @@ static int panel_simple_disable(struct drm_panel *panel) backlight_update_status(p->backlight); } + if (p->desc) + msleep(p->desc->timing_parameter.disable_stage_delay); + p->backlight_enabled = false; return 0; @@ -142,6 +154,9 @@ static int panel_simple_prepare(struct drm_panel *panel) return err; } + if (p->desc) + msleep(p->desc->timing_parameter.prepare_stage_delay); + if (p->enable_gpio) gpiod_set_value_cansleep(p->enable_gpio, 1); @@ -157,6 +172,8 @@ static int panel_simple_enable(struct drm_panel *panel) if (p->backlight_enabled) return 0; + if (p->desc) + msleep(p->desc->timing_parameter.enable_stage_delay); if (p->backlight) { p->backlight->props.power = FB_BLANK_UNBLANK; backlight_update_status(p->backlight); @@ -342,6 +359,33 @@ static const struct panel_desc auo_b133xtn01 = { }, }; +static const struct drm_display_mode auo_b133htn01_mode = { + .clock = 150660, + .hdisplay = 1920, + .hsync_start = 1920 + 172, + .hsync_end = 1920 + 172 + 80, + .htotal = 1920 + 172 + 80 + 60, + .vdisplay = 1080, + .vsync_start = 1080 + 25, + .vsync_end = 1080 + 25 + 10, + .vtotal = 1080 + 25 + 10 + 10, + .vrefresh = 60, +}; + +static const struct panel_desc auo_b133htn01 = { + .modes = &auo_b133htn01_mode, + .num_modes = 1, + .size = { + .width = 293, + .height = 165, + }, + .timing_parameter = { + .prepare_stage_delay = 105, + .enable_stage_delay = 20, + .prepare_stage_delay = 50, + }, +}; + static const struct drm_display_mode chunghwa_claa101wa01a_mode = { .clock = 72070, .hdisplay = 1366, @@ -481,6 +525,9 @@ static const struct of_device_id platform_of_match[] = { .compatible = "auo,b101aw03", .data = &auo_b101aw03, }, { + .compatible = "auo,b133htn01", + .data = &auo_b133htn01, + }, { .compatible = "auo,b133xtn01", .data = &auo_b133xtn01, }, { -- 1.7.9.5
[PATCH V2 7/8] drm/bridge: Add i2c based driver for ptn3460 bridge
From: Sean Paul This patch adds ptn3460 as module_i2c_driver. Signed-off-by: Sean Paul Signed-off-by: Ajay Kumar --- .../devicetree/bindings/video/bridge/ptn3460.txt | 27 ++ drivers/gpu/drm/bridge/Kconfig | 10 + drivers/gpu/drm/bridge/Makefile|2 + drivers/gpu/drm/bridge/ptn3460.c | 405 4 files changed, 444 insertions(+) create mode 100644 Documentation/devicetree/bindings/video/bridge/ptn3460.txt create mode 100644 drivers/gpu/drm/bridge/ptn3460.c diff --git a/Documentation/devicetree/bindings/video/bridge/ptn3460.txt b/Documentation/devicetree/bindings/video/bridge/ptn3460.txt new file mode 100644 index 000..03366c4 --- /dev/null +++ b/Documentation/devicetree/bindings/video/bridge/ptn3460.txt @@ -0,0 +1,27 @@ +ptn3460 bridge bindings + +Required properties: + - compatible: "nxp,ptn3460" + - reg: i2c address of the bridge + - powerdown-gpios: OF device-tree gpio specification + - reset-gpios: OF device-tree gpio specification + - edid-emulation: The EDID emulation entry to use + +---++--+ + | Value | Resolution | Description | + | 0 | 1024x768 | NXP Generic | + | 1 | 1920x1080 | NXP Generic | + | 2 | 1920x1080 | NXP Generic | + | 3 | 1600x900 | Samsung LTM200KT | + | 4 | 1920x1080 | Samsung LTM230HT | + | 5 | 1366x768 | NXP Generic | + | 6 | 1600x900 | ChiMei M215HGE | + +---++--+ + +Example: + lvds-bridge at 20 { + compatible = "nxp,ptn3460"; + reg = <0x20>; + powerdown-gpios = <&gpy2 5 1 0 0>; + reset-gpios = <&gpx1 5 1 0 0>; + edid-emulation = <5>; + }; diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 1e2f96c..0b12d16 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -6,4 +6,14 @@ config DRM_BRIDGE menu "bridge chips" depends on DRM_BRIDGE + +config DRM_PTN3460 + tristate "NXP ptn3460 eDP/LVDS bridge" + depends on DRM && DRM_BRIDGE + depends on OF + depends on I2C + select DRM_PANEL + help + ptn3460 eDP-LVDS bridge chip driver. + endmenu diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile index be16eca..b4733e1 100644 --- a/drivers/gpu/drm/bridge/Makefile +++ b/drivers/gpu/drm/bridge/Makefile @@ -1 +1,3 @@ ccflags-y := -Iinclude/drm + +obj-$(CONFIG_DRM_PTN3460) += ptn3460.o diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c new file mode 100644 index 000..f41302a --- /dev/null +++ b/drivers/gpu/drm/bridge/ptn3460.c @@ -0,0 +1,405 @@ +/* + * NXP PTN3460 DP/LVDS bridge driver + * + * Copyright (C) 2013 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "drmP.h" +#include "drm_edid.h" +#include "drm_crtc.h" +#include "drm_crtc_helper.h" + +#define PTN3460_EDID_ADDR 0x0 +#define PTN3460_EDID_EMULATION_ADDR0x84 +#define PTN3460_EDID_ENABLE_EMULATION 0 +#define PTN3460_EDID_EMULATION_SELECTION 1 +#define PTN3460_EDID_SRAM_LOAD_ADDR0x85 + +struct ptn3460_bridge { + struct drm_connector connector; + struct i2c_client *client; + struct drm_bridge *bridge; + struct drm_panel *panel; + struct edid *edid; + struct gpio_desc *gpio_pd_n; + struct gpio_desc *gpio_rst_n; + u32 edid_emulation; + bool enabled; +}; + +static int ptn3460_read_bytes(struct ptn3460_bridge *ptn_bridge, char addr, + u8 *buf, int len) +{ + int ret; + + ret = i2c_master_send(ptn_bridge->client, &addr, 1); + if (ret <= 0) { + DRM_ERROR("Failed to send i2c command, ret=%d\n", ret); + return ret; + } + + ret = i2c_master_recv(ptn_bridge->client, buf, len); + if (ret <= 0) { + DRM_ERROR("Failed to recv i2c data, ret=%d\n", ret); + return ret; + } + + return 0; +} + +static int ptn3460_write_byte(struct ptn3460_bridge *ptn_bridge, char addr, + char val) +{ + int ret; + char buf[2]; + + buf[0] = addr; + buf[1
[PATCH V6 0/8] drm/exynos: few patches to enhance bridge chip support
This series is based on exynos-drm-next branch of Inki Dae's tree at: git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git I have tested this after adding few DT changes for exynos5250-snow, exynos5420-peach-pit and exynos5800-peach-pi boards. The V4 series of this particular patchset was also tested by: Rahul Sharma Javier Martinez Canillas Changes since V2: -- Address comments from Jingoo Han for ps8622 driver -- Address comments from Daniel, Rob and Thierry regarding bridge chaining -- Address comments from Thierry regarding the names for new drm_panel functions Changes since V3: -- Remove hotplug based initialization of exynos_dp -- Make exynos_dp work directly with drm_panel, remove dependency on panel_binder -- Minor cleanups in panel_binder and panel_lvds driver Changes since V4: -- Use gpiod interface for panel-lvds and ps8622 drivers. -- Address comments from Javier. -- Fix compilation issues when PANEL_BINDER is selected as module. -- Split Documentation patches from driver patches. -- Rebase on top of the tree. Changes since V5: -- Modify bridge drivers to support driver model. -- Drop the concept of bridge chain(sincle there are no 2 real bridges) Hence drop bridge-panel_binder layer. -- Drop panel-lvds driver and accomodate the required changes in panel-simple driver. -- Use gpiod interface in ptn3460 driver. -- Address all comments by Thierry Reding for V5 series. -- Address comments from Sean Paul for exynos_dp_commit issue. Ajay Kumar (6): [PATCH V6 1/8] drm/panel: Add prepare, unprepare and get_modes routines [PATCH V6 2/8] drm/panel: Add support for prepare and unprepare routines [PATCH V6 3/8] drm/panel: simple: Add support for auo_b133htn01 panel [PATCH V6 4/8] drm/exynos: Move DP setup into commit() [PATCH V6 5/8] drm/exynos: dp: Modify driver to support drm_panel [PATCH V6 6/8] drm/bridge: Modify drm_bridge core to support driver model Sean Paul (1): [PATCH V6 7/8] drm/bridge: Add i2c based driver for ptn3460 bridge Vincent Palatin (1): [PATCH V6 8/8] drm/bridge: Add i2c based driver for ps8622/ps8625 bridge .../devicetree/bindings/drm/bridge/ptn3460.txt | 27 - .../devicetree/bindings/panel/auo,b133htn01.txt|7 + .../devicetree/bindings/vendor-prefixes.txt|1 + .../devicetree/bindings/video/bridge/ps8622.txt| 19 + .../devicetree/bindings/video/bridge/ptn3460.txt | 27 + drivers/gpu/drm/Makefile |1 + drivers/gpu/drm/bridge/Kconfig | 32 +- drivers/gpu/drm/bridge/Makefile|1 + drivers/gpu/drm/bridge/ps8622.c| 602 drivers/gpu/drm/bridge/ptn3460.c | 212 --- drivers/gpu/drm/drm_bridge.c | 89 +++ drivers/gpu/drm/drm_crtc.c |9 +- drivers/gpu/drm/exynos/Kconfig |4 +- drivers/gpu/drm/exynos/exynos_dp_core.c| 165 -- drivers/gpu/drm/exynos/exynos_dp_core.h|4 +- drivers/gpu/drm/exynos/exynos_drm_dpi.c|8 +- drivers/gpu/drm/exynos/exynos_drm_dsi.c|7 + drivers/gpu/drm/msm/hdmi/hdmi_bridge.c |3 +- drivers/gpu/drm/panel/panel-ld9040.c | 18 +- drivers/gpu/drm/panel/panel-s6e8aa0.c | 18 +- drivers/gpu/drm/panel/panel-simple.c | 96 +++- drivers/gpu/drm/tegra/output.c |2 + include/drm/bridge/ptn3460.h | 37 -- include/drm/drm_crtc.h | 16 +- include/drm/drm_panel.h| 26 + 25 files changed, 1206 insertions(+), 225 deletions(-) delete mode 100644 Documentation/devicetree/bindings/drm/bridge/ptn3460.txt create mode 100644 Documentation/devicetree/bindings/panel/auo,b133htn01.txt create mode 100644 Documentation/devicetree/bindings/video/bridge/ps8622.txt create mode 100644 Documentation/devicetree/bindings/video/bridge/ptn3460.txt create mode 100644 drivers/gpu/drm/bridge/ps8622.c create mode 100644 drivers/gpu/drm/drm_bridge.c delete mode 100644 include/drm/bridge/ptn3460.h -- 1.7.9.5