[RFC v2 0/8] Support for Tegra 2D hardware

This set of patches adds support for Tegra20 and Tegra30 host1x and 2D. It is based on Thierry Reding's tegra/next branch. We still have unresolved issues, so I don't expect these patches to be merged, but act as a way to get the code out for public review. The first version was sent only to linux-tegra at vger.kernel.org. The second version has the following changes: * nvhost split into smaller pieces * "graphics host" and "grhost" renamed to host1x * patch to tegradrm exit is removed * nvhost mem_mgr usage dropped * public power management API prefix changed to host1x * fixed some other code style issues nvhost is the driver that controls host1x hardware. It supports host1x command channels, synchronization, run-time power management and memory management. It is sectioned into logical driver under drivers/video/tegra/host and physical driver under drivers/video/tegra/host/host1x. The physical driver is compiled with the hardware headers of the particular host1x version. The hardware units are described (briefly) in the Tegra2 TRM. The patch set removes responsibility of host1x from tegradrm. At the same time, it moves all drm related infrastructure in drivers/gpu/drm/tegra/host1x.c to other files. The patch set adds 2D driver to tegradrm, which uses nvhost for communicating with host1x to access sync points and channels. We expect to use the same infrastructure for other host1x clients, so we have kept nvhost and tegradrm separate. The patch set also adds user space API to tegradrm for accessing host1d and 2D. We are preparing also patches to libdrm, but they are not yet in condition that they could be sent out. TODO: * tegradrm IOMMU support has been disabled * Prime support is still tegradrm specific - to be generalized when we find a way for dma mapping API to handle double mapping * Find a home for the data in auxdata if they are troublesome * nvhost is still called nvhost - there's a request to rename to host1x to reflect the hardware name * Write an article about host1x and how we use it * Send out 2D user space code * Rebase on linux-next Arto Merilainen (2): gpu: drm: tegra: Remove redundant host1x gpu: drm: tegra: Prime support Terje Bergstrom (6): video: tegra: Add nvhost driver video: tegra: Add syncpoint wait and interrupts video: tegra: host: Add channel and client support video: tegra: Add debug support ARM: tegra: Add auxiliary data for nvhost drm: tegra: Add gr2d device arch/arm/mach-tegra/board-dt-tegra20.c | 38 +- arch/arm/mach-tegra/board-dt-tegra30.c | 38 +- arch/arm/mach-tegra/tegra20_clocks_data.c | 8 +- arch/arm/mach-tegra/tegra30_clocks_data.c | 2 + drivers/gpu/drm/tegra/Kconfig | 8 +- drivers/gpu/drm/tegra/Makefile | 4 +- drivers/gpu/drm/tegra/dc.c | 22 +- drivers/gpu/drm/tegra/dmabuf.c | 150 ++++++ drivers/gpu/drm/tegra/drm.c | 445 ++++++++++++++++-- drivers/gpu/drm/tegra/drm.h | 89 ++-- drivers/gpu/drm/tegra/dsi.c | 24 +- drivers/gpu/drm/tegra/fb.c | 26 +- drivers/gpu/drm/tegra/gr2d.c | 224 +++++++++ drivers/gpu/drm/tegra/hdmi.c | 24 +- drivers/gpu/drm/tegra/host1x.c | 343 -------------- drivers/gpu/drm/tegra/tvo.c | 33 +- drivers/video/Kconfig | 2 + drivers/video/Makefile | 2 + drivers/video/tegra/host/Kconfig | 5 + drivers/video/tegra/host/Makefile | 18 + drivers/video/tegra/host/bus_client.c | 97 ++++ drivers/video/tegra/host/chip_support.c | 48 ++ drivers/video/tegra/host/chip_support.h | 149 ++++++ drivers/video/tegra/host/debug.c | 252 ++++++++++ drivers/video/tegra/host/debug.h | 50 ++ drivers/video/tegra/host/dev.c | 170 +++++++ drivers/video/tegra/host/dev.h | 33 ++ drivers/video/tegra/host/dmabuf.c | 151 ++++++ drivers/video/tegra/host/dmabuf.h | 45 ++ drivers/video/tegra/host/host1x/Makefile | 7 + drivers/video/tegra/host/host1x/host1x.c | 257 +++++++++++ drivers/video/tegra/host/host1x/host1x.h | 86 ++++ drivers/video/tegra/host/host1x/host1x01.c | 70 +++ drivers/video/tegra/host/host1x/host1x01.h | 29 ++ .../video/tegra/host/host1x/host1x01_hardware.h | 157 +++++++ drivers/video/tegra/host/host1x/host1x_cdma.c | 486 ++++++++++++++++++++ drivers/video/tegra/host/host1x/host1x_cdma.h | 39 ++ drivers/video/tegra/host/host1x/host1x_channel.c | 150 ++++++ drivers/video/tegra/host/host1x/host1x_debug.c | 405 ++++++++++++++++ drivers/video/tegra/host/host1x/host1x_intr.c | 263 +++++++++++ drivers/video/tegra/host/host1x/host1x_syncpt.c | 168 +++++++ .../video/tegra/host/host1x/hw_host1x01_channel.h | 182 ++++++++ drivers/video/tegra/host/host1x/hw_host1x01_sync.h | 398 ++++++++++++++++ .../video/tegra/host/host1x/hw_host1x01_uclass.h | 474 +++++++++++++++++++ drivers/video/tegra/host/nvhost_acm.c | 481 +++++++++++++++++++ drivers/video/tegra/host/nvhost_acm.h | 45 ++ drivers/video/tegra/host/nvhost_cdma.c | 430 +++++++++++++++++ drivers/video/tegra/host/nvhost_cdma.h | 109 +++++ drivers/video/tegra/host/nvhost_channel.c | 126 +++++ drivers/video/tegra/host/nvhost_channel.h | 65 +++ drivers/video/tegra/host/nvhost_intr.c | 384 ++++++++++++++++ drivers/video/tegra/host/nvhost_intr.h | 110 +++++ drivers/video/tegra/host/nvhost_job.c | 390 ++++++++++++++++ drivers/video/tegra/host/nvhost_memmgr.c | 160 +++++++ drivers/video/tegra/host/nvhost_memmgr.h | 65 +++ drivers/video/tegra/host/nvhost_syncpt.c | 452 ++++++++++++++++++ drivers/video/tegra/host/nvhost_syncpt.h | 148 ++++++ include/drm/tegra_drm.h | 129 ++++++ include/linux/nvhost.h | 294 ++++++++++++ 59 files changed, 8549 insertions(+), 510 deletions(-) create mode 100644 drivers/gpu/drm/tegra/dmabuf.c create mode 100644 drivers/gpu/drm/tegra/gr2d.c delete mode 100644 drivers/gpu/drm/tegra/host1x.c create mode 100644 drivers/video/tegra/host/Kconfig create mode 100644 drivers/video/tegra/host/Makefile create mode 100644 drivers/video/tegra/host/bus_client.c create mode 100644 drivers/video/tegra/host/chip_support.c create mode 100644 drivers/video/tegra/host/chip_support.h create mode 100644 drivers/video/tegra/host/debug.c create mode 100644 drivers/video/tegra/host/debug.h create mode 100644 drivers/video/tegra/host/dev.c create mode 100644 drivers/video/tegra/host/dev.h create mode 100644 drivers/video/tegra/host/dmabuf.c create mode 100644 drivers/video/tegra/host/dmabuf.h create mode 100644 drivers/video/tegra/host/host1x/Makefile create mode 100644 drivers/video/tegra/host/host1x/host1x.c create mode 100644 drivers/video/tegra/host/host1x/host1x.h create mode 100644 drivers/video/tegra/host/host1x/host1x01.c create mode 100644 drivers/video/tegra/host/host1x/host1x01.h create mode 100644 drivers/video/tegra/host/host1x/host1x01_hardware.h create mode 100644 drivers/video/tegra/host/host1x/host1x_cdma.c create mode 100644 drivers/video/tegra/host/host1x/host1x_cdma.h create mode 100644 drivers/video/tegra/host/host1x/host1x_channel.c create mode 100644 drivers/video/tegra/host/host1x/host1x_debug.c create mode 100644 drivers/video/tegra/host/host1x/host1x_intr.c create mode 100644 drivers/video/tegra/host/host1x/host1x_syncpt.c create mode 100644 drivers/video/tegra/host/host1x/hw_host1x01_channel.h create mode 100644 drivers/video/tegra/host/host1x/hw_host1x01_sync.h create mode 100644 drivers/video/tegra/host/host1x/hw_host1x01_uclass.h create mode 100644 drivers/video/tegra/host/nvhost_acm.c create mode 100644 drivers/video/tegra/host/nvhost_acm.h create mode 100644 drivers/video/tegra/host/nvhost_cdma.c create mode 100644 drivers/video/tegra/host/nvhost_cdma.h create mode 100644 drivers/video/tegra/host/nvhost_channel.c create mode 100644 drivers/video/tegra/host/nvhost_channel.h create mode 100644 drivers/video/tegra/host/nvhost_intr.c create mode 100644 drivers/video/tegra/host/nvhost_intr.h create mode 100644 drivers/video/tegra/host/nvhost_job.c create mode 100644 drivers/video/tegra/host/nvhost_memmgr.c create mode 100644 drivers/video/tegra/host/nvhost_memmgr.h create mode 100644 drivers/video/tegra/host/nvhost_syncpt.c create mode 100644 drivers/video/tegra/host/nvhost_syncpt.h create mode 100644 include/drm/tegra_drm.h create mode 100644 include/linux/nvhost.h -- 1.7.9.5