From: Thierry Reding <[email protected]>

Hi,

This series adds support for the video protection region (VPR) used on
Tegra SoC devices. It's a special region of memory that is protected
from accesses by the CPU and used to store DRM protected content (both
decrypted stream data as well as decoded video frames).

Patches 1 and 2 add DT binding documentation for the VPR and add the VPR
to the list of memory-region items for display and host1x.

Patch 3 adds bitmap_allocate(), which is like bitmap_allocate_region()
but works on sizes that are not a power of two.

Patch 4 introduces new APIs needed by the Tegra VPR implementation that
allow CMA areas to be dynamically created at runtime rather than using
the fixed, system-wide list. This is used in this driver specifically
because it can use an arbitrary number of these areas (though they are
currently limited to 4).

Patch 5 adds some infrastructure for DMA heap implementations to provide
information through debugfs.

The Tegra VPR implementation is added in patch 6. See its commit message
for more details about the specifics of this implementation.

Finally, patches 7-10 add the VPR placeholder node on Tegra234 and hook
it up to the host1x and GPU nodes so that they can make use of this
region.

Changes in v2:
- Tegra VPR implementation is now more optimized to reduce the number of
  (very slow) resize operations, and allows cross-chunk allocations
- dynamic CMA areas are now trackd separately from static ones, but the
  global number of CMA pages accounts for all areas

Thierry

Thierry Reding (10):
  dt-bindings: reserved-memory: Document Tegra VPR
  dt-bindings: display: tegra: Document memory regions
  bitmap: Add bitmap_allocate() function
  mm/cma: Allow dynamically creating CMA areas
  dma-buf: heaps: Add debugfs support
  dma-buf: heaps: Add support for Tegra VPR
  arm64: tegra: Add VPR placeholder node on Tegra234
  arm64: tegra: Add GPU node on Tegra234
  arm64: tegra: Hook up VPR to host1x
  arm64: tegra: Hook up VPR to the GPU

 .../display/tegra/nvidia,tegra186-dc.yaml     |   10 +
 .../display/tegra/nvidia,tegra20-dc.yaml      |   10 +-
 .../display/tegra/nvidia,tegra20-host1x.yaml  |    7 +
 .../nvidia,tegra-video-protection-region.yaml |   55 +
 arch/arm/mm/dma-mapping.c                     |    2 +-
 arch/arm64/boot/dts/nvidia/tegra234.dtsi      |   60 +
 arch/s390/mm/init.c                           |    2 +-
 drivers/dma-buf/dma-heap.c                    |   56 +
 drivers/dma-buf/heaps/Kconfig                 |    7 +
 drivers/dma-buf/heaps/Makefile                |    1 +
 drivers/dma-buf/heaps/cma_heap.c              |    2 +-
 drivers/dma-buf/heaps/tegra-vpr.c             | 1265 +++++++++++++++++
 include/linux/bitmap.h                        |   25 +-
 include/linux/cma.h                           |    7 +-
 include/linux/dma-heap.h                      |    2 +
 include/trace/events/tegra_vpr.h              |   57 +
 mm/cma.c                                      |  187 ++-
 mm/cma.h                                      |    5 +-
 18 files changed, 1713 insertions(+), 47 deletions(-)
 create mode 100644 
Documentation/devicetree/bindings/reserved-memory/nvidia,tegra-video-protection-region.yaml
 create mode 100644 drivers/dma-buf/heaps/tegra-vpr.c
 create mode 100644 include/trace/events/tegra_vpr.h

-- 
2.52.0

Reply via email to