This patchset can also be found here, for easier browsing: http://cgit.freedesktop.org/~robclark/linux/log/?h=drm-next git://people.freedesktop.org/~robclark/linux drm-next Compared to the previous patchset (RFCv2), there are a number of fixes (leaks, etc), fixed handling of some clocks (ie. don't disable PLL that feeds a clk before disabling the clk, etc), cleaned up the handling for device specific config (with placeholders for DT bindings), etc. At this point, I have gnome-shell, wayland (weston drm compositor), etc working pretty well. In userspace, I've a libdrm branch with libdrm_freedreno updated to work on top of either this driver or the downstream android kgsl+fbdev drivers: https://github.com/freedreno/libdrm/commits/msm-drm And the DDX has been updated to either use kms with this driver, or the downstream android drivers. Note that page flipping requires kms: https://github.com/freedreno/xf86-video-freedreno/commits/msm-drm And finally mesa/gallium with a few minor tweaks, mostly updates to the loader to load on either "msm" or legacy/downstream "kgsl": https://github.com/freedreno/mesa/commits/msm-drm At this point I consider the first four patches as ready to merge. The last two add debugfs files for logging cmdstream (which is hugely useful for debugging gpu lockups), and for some basic performance monitoring. They are just RFC at this point, as there are some hacks to work around the fact that drv->load() is called *after* the debugfs initialization (so I can't grab dev->dev_private). But I'm including those two to see if anyone has any comments/suggestions. NOTES from the previous RFCs: In the current snapdragon SoC's, we have (at least) 3 different display controller blocks at play: + MDP3 - ?? seems to be what is on geeksphone peak device + MDP4 - S3 (APQ8060, touchpad), S4-pro (APQ8064, nexus4 & ifc6410) + MDSS - snapdragon 800 (I don't have a completely clear picture on which display controller maps to which part #) Plus a handful of blocks around them for HDMI/DSI/etc output. And on gpu side of things: + zero, one, or two 2d cores (z180) + and either a2xx or a3xx 3d core. But, HDMI/DSI/etc blocks seem like they can be shared across multiple display controller blocks. And I for sure don't want to have to deal with N different kms devices from xf86-video-freedreno. Plus, it seems like we can do some clever tricks like use GPU to trigger pageflip after rendering completes (ie. have the kms/crtc code build up gpu cmdstream to update scanout and write FLUSH register after). So, the approach is one drm driver, with some modularity. Different 'struct msm_kms' implementations, depending on display controller. And one or more 'struct msm_gpu' for the various different gpu sub- modules. The kms module provides the plane, crtc, and encoder objects, and loads whatever connectors are appropriate. For MDP4, the mapping is: plane -> PIPE{RGBn,VGn} \ crtc -> OVLP{n} + DMA{P,S,E} (??) |-> MDP "device" encoder -> DTV/LCDC/DSI (within MDP4) / connector -> HDMI/DSI/etc --> other device(s) Since the irq's that drm core mostly cares about are vblank/framedone, we'll let msm_mdp4_kms provide the irq install/uninstall/etc functions and treat the MDP4 block's irq as "the" irq. Even though the connectors may have their own irqs which they install themselves. For this reason the display controller is the "master" device. Each connector probably ends up being a separate device, just for the logistics of finding/mapping io region, irq, etc. Idealy we would have a better way than just stashing the platform device in a global (ie. like DT super-node.. but I don't have any snapdragon hw yet that is using DT). Note that so far I've not been able to get any docs on the hw, and it seems that access to such docs would prevent me from working on the freedreno gallium driver. So there may be some mistakes in register names (I had to invent a few, since no sufficient hint was given in the downstream android fbdev driver), bitfield sizes, etc. My current state of understanding the registers is given in the envytools rnndb files at: https://github.com/freedreno/envytools/tree/master/rnndb These files are used both for a parser tool (in the same tree) to parse logged register reads/writes (both from downstream android fbdev driver, and this driver with register logging enabled), as well as to generate the register level headers. Rob Clark (6): drm/msm: add register definitions drm/msm: basic KMS driver for snapdragon drm/msm: add register definitions for gpu drm/msm: add a3xx gpu support RFC: drm/msm: add rd logging debugfs RFC: drm/msm: add perf logging debugfs drivers/gpu/drm/Kconfig | 2 + drivers/gpu/drm/Makefile | 1 + drivers/gpu/drm/msm/Kconfig | 34 + drivers/gpu/drm/msm/Makefile | 32 + drivers/gpu/drm/msm/NOTES | 69 + drivers/gpu/drm/msm/adreno/a2xx.xml.h | 1438 ++++++++++++++++ drivers/gpu/drm/msm/adreno/a3xx.xml.h | 2193 ++++++++++++++++++++++++ drivers/gpu/drm/msm/adreno/a3xx_gpu.c | 511 ++++++ drivers/gpu/drm/msm/adreno/a3xx_gpu.h | 30 + drivers/gpu/drm/msm/adreno/adreno_common.xml.h | 432 +++++ drivers/gpu/drm/msm/adreno/adreno_gpu.c | 348 ++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 140 ++ drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h | 254 +++ drivers/gpu/drm/msm/dsi/dsi.xml.h | 262 +++ drivers/gpu/drm/msm/dsi/mmss_cc.xml.h | 156 ++ drivers/gpu/drm/msm/dsi/sfpb.xml.h | 46 + drivers/gpu/drm/msm/hdmi/hdmi.c | 246 +++ drivers/gpu/drm/msm/hdmi/hdmi.h | 112 ++ drivers/gpu/drm/msm/hdmi/hdmi.xml.h | 508 ++++++ drivers/gpu/drm/msm/hdmi/hdmi_connector.c | 461 +++++ drivers/gpu/drm/msm/hdmi/hdmi_i2c.c | 281 +++ drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c | 141 ++ drivers/gpu/drm/msm/hdmi/hdmi_phy_8x60.c | 214 +++ drivers/gpu/drm/msm/hdmi/qfprom.xml.h | 50 + drivers/gpu/drm/msm/mdp4/mdp4.xml.h | 1053 ++++++++++++ drivers/gpu/drm/msm/mdp4/mdp4_crtc.c | 638 +++++++ drivers/gpu/drm/msm/mdp4/mdp4_dtv_encoder.c | 312 ++++ drivers/gpu/drm/msm/mdp4/mdp4_format.c | 56 + drivers/gpu/drm/msm/mdp4/mdp4_irq.c | 203 +++ drivers/gpu/drm/msm/mdp4/mdp4_kms.c | 374 ++++ drivers/gpu/drm/msm/mdp4/mdp4_kms.h | 193 +++ drivers/gpu/drm/msm/mdp4/mdp4_plane.c | 243 +++ drivers/gpu/drm/msm/msm_connector.c | 34 + drivers/gpu/drm/msm/msm_connector.h | 68 + drivers/gpu/drm/msm/msm_drv.c | 775 +++++++++ drivers/gpu/drm/msm/msm_drv.h | 224 +++ drivers/gpu/drm/msm/msm_fb.c | 202 +++ drivers/gpu/drm/msm/msm_fbdev.c | 258 +++ drivers/gpu/drm/msm/msm_gem.c | 597 +++++++ drivers/gpu/drm/msm/msm_gem.h | 100 ++ drivers/gpu/drm/msm/msm_gem_submit.c | 413 +++++ drivers/gpu/drm/msm/msm_gpu.c | 531 ++++++ drivers/gpu/drm/msm/msm_gpu.h | 147 ++ drivers/gpu/drm/msm/msm_perf.c | 270 +++ drivers/gpu/drm/msm/msm_rd.c | 334 ++++ drivers/gpu/drm/msm/msm_ringbuffer.c | 61 + drivers/gpu/drm/msm/msm_ringbuffer.h | 43 + include/uapi/drm/Kbuild | 1 + include/uapi/drm/msm_drm.h | 198 +++ 49 files changed, 15289 insertions(+) create mode 100644 drivers/gpu/drm/msm/Kconfig create mode 100644 drivers/gpu/drm/msm/Makefile create mode 100644 drivers/gpu/drm/msm/NOTES create mode 100644 drivers/gpu/drm/msm/adreno/a2xx.xml.h create mode 100644 drivers/gpu/drm/msm/adreno/a3xx.xml.h create mode 100644 drivers/gpu/drm/msm/adreno/a3xx_gpu.c create mode 100644 drivers/gpu/drm/msm/adreno/a3xx_gpu.h create mode 100644 drivers/gpu/drm/msm/adreno/adreno_common.xml.h create mode 100644 drivers/gpu/drm/msm/adreno/adreno_gpu.c create mode 100644 drivers/gpu/drm/msm/adreno/adreno_gpu.h create mode 100644 drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h create mode 100644 drivers/gpu/drm/msm/dsi/dsi.xml.h create mode 100644 drivers/gpu/drm/msm/dsi/mmss_cc.xml.h create mode 100644 drivers/gpu/drm/msm/dsi/sfpb.xml.h create mode 100644 drivers/gpu/drm/msm/hdmi/hdmi.c create mode 100644 drivers/gpu/drm/msm/hdmi/hdmi.h create mode 100644 drivers/gpu/drm/msm/hdmi/hdmi.xml.h create mode 100644 drivers/gpu/drm/msm/hdmi/hdmi_connector.c create mode 100644 drivers/gpu/drm/msm/hdmi/hdmi_i2c.c create mode 100644 drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c create mode 100644 drivers/gpu/drm/msm/hdmi/hdmi_phy_8x60.c create mode 100644 drivers/gpu/drm/msm/hdmi/qfprom.xml.h create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4.xml.h create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4_crtc.c create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4_dtv_encoder.c create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4_format.c create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4_irq.c create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4_kms.c create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4_kms.h create mode 100644 drivers/gpu/drm/msm/mdp4/mdp4_plane.c create mode 100644 drivers/gpu/drm/msm/msm_connector.c create mode 100644 drivers/gpu/drm/msm/msm_connector.h create mode 100644 drivers/gpu/drm/msm/msm_drv.c create mode 100644 drivers/gpu/drm/msm/msm_drv.h create mode 100644 drivers/gpu/drm/msm/msm_fb.c create mode 100644 drivers/gpu/drm/msm/msm_fbdev.c create mode 100644 drivers/gpu/drm/msm/msm_gem.c create mode 100644 drivers/gpu/drm/msm/msm_gem.h create mode 100644 drivers/gpu/drm/msm/msm_gem_submit.c create mode 100644 drivers/gpu/drm/msm/msm_gpu.c create mode 100644 drivers/gpu/drm/msm/msm_gpu.h create mode 100644 drivers/gpu/drm/msm/msm_perf.c create mode 100644 drivers/gpu/drm/msm/msm_rd.c create mode 100644 drivers/gpu/drm/msm/msm_ringbuffer.c create mode 100644 drivers/gpu/drm/msm/msm_ringbuffer.h create mode 100644 include/uapi/drm/msm_drm.h -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html