From 77e97abf129c5028385dd72587eabab68db0d954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Thu, 28 May 2020 19:08:55 +0200 Subject: bcm27xx: update to latest patches from RPi foundation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also removes random module and switches to new bcm2711 thermal driver. Boot tested on RPi 4B v1.1 4G. Signed-off-by: Álvaro Fernández Rojas --- ...buf-heaps-Add-system-heap-to-dmabuf-heaps.patch | 200 +++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 target/linux/bcm27xx/patches-5.4/950-0732-dma-buf-heaps-Add-system-heap-to-dmabuf-heaps.patch (limited to 'target/linux/bcm27xx/patches-5.4/950-0732-dma-buf-heaps-Add-system-heap-to-dmabuf-heaps.patch') diff --git a/target/linux/bcm27xx/patches-5.4/950-0732-dma-buf-heaps-Add-system-heap-to-dmabuf-heaps.patch b/target/linux/bcm27xx/patches-5.4/950-0732-dma-buf-heaps-Add-system-heap-to-dmabuf-heaps.patch new file mode 100644 index 0000000000..55c2450821 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0732-dma-buf-heaps-Add-system-heap-to-dmabuf-heaps.patch @@ -0,0 +1,200 @@ +From 8392cd87592f31737286ea16f11781a234de3564 Mon Sep 17 00:00:00 2001 +From: John Stultz +Date: Tue, 3 Dec 2019 17:26:39 +0000 +Subject: [PATCH] dma-buf: heaps: Add system heap to dmabuf heaps + +Commit efa04fefebbd724ffda7f49e42d057a7217c45b0 upstream. + +This patch adds system heap to the dma-buf heaps framework. + +This allows applications to get a page-allocator backed dma-buf +for non-contiguous memory. + +This code is an evolution of the Android ION implementation, so +thanks to its original authors and maintainters: + Rebecca Schultz Zavin, Colin Cross, Laura Abbott, and others! + +Cc: Laura Abbott +Cc: Benjamin Gaignard +Cc: Sumit Semwal +Cc: Liam Mark +Cc: Pratik Patel +Cc: Brian Starkey +Cc: Vincent Donnefort +Cc: Sudipto Paul +Cc: Andrew F. Davis +Cc: Christoph Hellwig +Cc: Chenbo Feng +Cc: Alistair Strachan +Cc: Hridya Valsaraju +Cc: Sandeep Patil +Cc: Hillf Danton +Cc: Dave Airlie +Cc: dri-devel@lists.freedesktop.org +Reviewed-by: Benjamin Gaignard +Reviewed-by: Brian Starkey +Acked-by: Sandeep Patil +Acked-by: Laura Abbott +Tested-by: Ayan Kumar Halder +Signed-off-by: John Stultz +Signed-off-by: Sumit Semwal +Link: https://patchwork.freedesktop.org/patch/msgid/20191203172641.66642-4-john.stultz@linaro.org +--- + drivers/dma-buf/Kconfig | 2 + + drivers/dma-buf/heaps/Kconfig | 6 ++ + drivers/dma-buf/heaps/Makefile | 1 + + drivers/dma-buf/heaps/system_heap.c | 123 ++++++++++++++++++++++++++++ + 4 files changed, 132 insertions(+) + create mode 100644 drivers/dma-buf/heaps/Kconfig + create mode 100644 drivers/dma-buf/heaps/system_heap.c + +--- a/drivers/dma-buf/Kconfig ++++ b/drivers/dma-buf/Kconfig +@@ -53,4 +53,6 @@ menuconfig DMABUF_HEAPS + allows userspace to allocate dma-bufs that can be shared + between drivers. + ++source "drivers/dma-buf/heaps/Kconfig" ++ + endmenu +--- /dev/null ++++ b/drivers/dma-buf/heaps/Kconfig +@@ -0,0 +1,6 @@ ++config DMABUF_HEAPS_SYSTEM ++ bool "DMA-BUF System Heap" ++ depends on DMABUF_HEAPS ++ help ++ Choose this option to enable the system dmabuf heap. The system heap ++ is backed by pages from the buddy allocator. If in doubt, say Y. +--- a/drivers/dma-buf/heaps/Makefile ++++ b/drivers/dma-buf/heaps/Makefile +@@ -1,2 +1,3 @@ + # SPDX-License-Identifier: GPL-2.0 + obj-y += heap-helpers.o ++obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o +--- /dev/null ++++ b/drivers/dma-buf/heaps/system_heap.c +@@ -0,0 +1,123 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * DMABUF System heap exporter ++ * ++ * Copyright (C) 2011 Google, Inc. ++ * Copyright (C) 2019 Linaro Ltd. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "heap-helpers.h" ++ ++struct dma_heap *sys_heap; ++ ++static void system_heap_free(struct heap_helper_buffer *buffer) ++{ ++ pgoff_t pg; ++ ++ for (pg = 0; pg < buffer->pagecount; pg++) ++ __free_page(buffer->pages[pg]); ++ kfree(buffer->pages); ++ kfree(buffer); ++} ++ ++static int system_heap_allocate(struct dma_heap *heap, ++ unsigned long len, ++ unsigned long fd_flags, ++ unsigned long heap_flags) ++{ ++ struct heap_helper_buffer *helper_buffer; ++ struct dma_buf *dmabuf; ++ int ret = -ENOMEM; ++ pgoff_t pg; ++ ++ helper_buffer = kzalloc(sizeof(*helper_buffer), GFP_KERNEL); ++ if (!helper_buffer) ++ return -ENOMEM; ++ ++ init_heap_helper_buffer(helper_buffer, system_heap_free); ++ helper_buffer->heap = heap; ++ helper_buffer->size = len; ++ ++ helper_buffer->pagecount = len / PAGE_SIZE; ++ helper_buffer->pages = kmalloc_array(helper_buffer->pagecount, ++ sizeof(*helper_buffer->pages), ++ GFP_KERNEL); ++ if (!helper_buffer->pages) { ++ ret = -ENOMEM; ++ goto err0; ++ } ++ ++ for (pg = 0; pg < helper_buffer->pagecount; pg++) { ++ /* ++ * Avoid trying to allocate memory if the process ++ * has been killed by by SIGKILL ++ */ ++ if (fatal_signal_pending(current)) ++ goto err1; ++ ++ helper_buffer->pages[pg] = alloc_page(GFP_KERNEL | __GFP_ZERO); ++ if (!helper_buffer->pages[pg]) ++ goto err1; ++ } ++ ++ /* create the dmabuf */ ++ dmabuf = heap_helper_export_dmabuf(helper_buffer, fd_flags); ++ if (IS_ERR(dmabuf)) { ++ ret = PTR_ERR(dmabuf); ++ goto err1; ++ } ++ ++ helper_buffer->dmabuf = dmabuf; ++ ++ ret = dma_buf_fd(dmabuf, fd_flags); ++ if (ret < 0) { ++ dma_buf_put(dmabuf); ++ /* just return, as put will call release and that will free */ ++ return ret; ++ } ++ ++ return ret; ++ ++err1: ++ while (pg > 0) ++ __free_page(helper_buffer->pages[--pg]); ++ kfree(helper_buffer->pages); ++err0: ++ kfree(helper_buffer); ++ ++ return ret; ++} ++ ++static const struct dma_heap_ops system_heap_ops = { ++ .allocate = system_heap_allocate, ++}; ++ ++static int system_heap_create(void) ++{ ++ struct dma_heap_export_info exp_info; ++ int ret = 0; ++ ++ exp_info.name = "system_heap"; ++ exp_info.ops = &system_heap_ops; ++ exp_info.priv = NULL; ++ ++ sys_heap = dma_heap_add(&exp_info); ++ if (IS_ERR(sys_heap)) ++ ret = PTR_ERR(sys_heap); ++ ++ return ret; ++} ++module_init(system_heap_create); ++MODULE_LICENSE("GPL v2"); -- cgit v1.2.3