MALI: utgard: adapter 4.19 timmer and memory interface

Change-Id: Ic5dc26292ee350aaa138409447bf5501ad0e316d
Signed-off-by: Zhixiong Lin <zhixiong.lin@rock-chips.com>
This commit is contained in:
Zhixiong Lin
2019-06-18 17:16:53 +08:00
parent 97fcbe7e97
commit 3b4356fdb4
12 changed files with 24 additions and 29 deletions

View File

@@ -76,7 +76,7 @@ _mali_osk_errcode_t mali_control_timer_init(void)
}
}
mali_control_timer = _mali_osk_timer_init();
mali_control_timer = _mali_osk_timer_init(mali_control_timer_callback);
if (NULL == mali_control_timer) {
return _MALI_OSK_ERR_FAULT;
}

View File

@@ -65,7 +65,7 @@ struct mali_group *mali_group_create(struct mali_l2_cache_core *core,
group = _mali_osk_calloc(1, sizeof(struct mali_group));
if (NULL != group) {
group->timeout_timer = _mali_osk_timer_init();
group->timeout_timer = _mali_osk_timer_init(mali_group_timeout);
if (NULL != group->timeout_timer) {
_mali_osk_timer_setcallback(group->timeout_timer, mali_group_timeout, (void *)group);

View File

@@ -955,7 +955,7 @@ _mali_osk_errcode_t _mali_osk_notification_queue_dequeue(_mali_osk_notification_
*
* @return a pointer to the allocated timer object, or NULL on failure.
*/
_mali_osk_timer_t *_mali_osk_timer_init(void);
_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback);
/** @brief Start a timer
*

View File

@@ -18,7 +18,6 @@
#undef TRACE_SYSTEM
#define TRACE_SYSTEM mali
#define TRACE_SYSTEM_STRING __stringfy(TRACE_SYSTEM)
#define TRACE_INCLUDE_PATH .
#define TRACE_INCLUDE_FILE mali_linux_trace

View File

@@ -57,14 +57,15 @@ static void mali_mem_vma_close(struct vm_area_struct *vma)
vma->vm_private_data = NULL;
}
static int mali_mem_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
static int mali_mem_vma_fault(struct vm_fault *vmf)
{
struct vm_area_struct *vma = vmf->vma;
mali_mem_allocation *alloc = (mali_mem_allocation *)vma->vm_private_data;
mali_mem_backend *mem_bkend = NULL;
int ret;
int prefetch_num = MALI_VM_NUM_FAULT_PREFETCH;
unsigned long address = (unsigned long)vmf->virtual_address;
unsigned long address = (unsigned long)vmf->address;
MALI_DEBUG_ASSERT(alloc->backend_handle);
MALI_DEBUG_ASSERT((unsigned long)alloc->cpu_mapping.addr <= address);

View File

@@ -28,11 +28,6 @@
#define MALI_OS_MEMORY_KERNEL_BUFFER_SIZE_IN_PAGES (MALI_OS_MEMORY_KERNEL_BUFFER_SIZE_IN_MB * 256)
#define MALI_OS_MEMORY_POOL_TRIM_JIFFIES (10 * CONFIG_HZ) /* Default to 10s */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
/* Write combine dma_attrs */
static DEFINE_DMA_ATTRS(dma_attrs_wc);
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 0, 0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 35)
static int mali_mem_os_shrink(int nr_to_scan, gfp_t gfp_mask);
@@ -520,7 +515,7 @@ _mali_osk_errcode_t mali_mem_os_get_table_page(mali_dma_addr *phys, mali_io_addr
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
*mapping = dma_alloc_attrs(&mali_platform_device->dev,
_MALI_OSK_MALI_PAGE_SIZE, &tmp_phys,
GFP_KERNEL, &dma_attrs_wc);
GFP_KERNEL, DMA_ATTR_WRITE_COMBINE);
#else
*mapping = dma_alloc_writecombine(&mali_platform_device->dev,
_MALI_OSK_MALI_PAGE_SIZE, &tmp_phys, GFP_KERNEL);
@@ -559,7 +554,7 @@ void mali_mem_os_release_table_page(mali_dma_addr phys, void *virt)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
dma_free_attrs(&mali_platform_device->dev,
_MALI_OSK_MALI_PAGE_SIZE, virt, phys,
&dma_attrs_wc);
DMA_ATTR_WRITE_COMBINE);
#else
dma_free_writecombine(&mali_platform_device->dev,
_MALI_OSK_MALI_PAGE_SIZE, virt, phys);
@@ -614,7 +609,8 @@ static void mali_mem_os_page_table_pool_free(size_t nr_to_free)
for (i = 0; i < nr_to_free; i++) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
dma_free_attrs(&mali_platform_device->dev, _MALI_OSK_MALI_PAGE_SIZE,
virt_arr[i], (dma_addr_t)phys_arr[i], &dma_attrs_wc);
virt_arr[i], (dma_addr_t)phys_arr[i],
DMA_ATTR_WRITE_COMBINE);
#else
dma_free_writecombine(&mali_platform_device->dev,
_MALI_OSK_MALI_PAGE_SIZE,
@@ -763,10 +759,6 @@ _mali_osk_errcode_t mali_mem_os_init(void)
return _MALI_OSK_ERR_NOMEM;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
dma_set_attr(DMA_ATTR_WRITE_COMBINE, &dma_attrs_wc);
#endif
register_shrinker(&mali_mem_os_allocator.shrinker);
return _MALI_OSK_ERR_OK;

View File

@@ -15,6 +15,7 @@
#include <linux/mutex.h>
#include <linux/dma-mapping.h>
#include <linux/dma-buf.h>
#include <linux/dma-direct.h>
_mali_osk_errcode_t mali_mem_secure_attach_dma_buf(mali_mem_secure *secure_mem, u32 size, int mem_fd)
{

View File

@@ -52,7 +52,8 @@ extern struct mali_mem_os_allocator mali_mem_os_allocator;
#define MALI_SWAP_LOW_MEM_DEFAULT_VALUE (60*1024*1024)
#define MALI_SWAP_INVALIDATE_MALI_ADDRESS (0) /* Used to mark the given memory cookie is invalidate. */
#define MALI_SWAP_GLOBAL_SWAP_FILE_SIZE (0xFFFFFFFF)
#define MALI_SWAP_GLOBAL_SWAP_FILE_INDEX ((MALI_SWAP_GLOBAL_SWAP_FILE_SIZE) >> PAGE_CACHE_SHIFT)
#define MALI_SWAP_GLOBAL_SWAP_FILE_INDEX \
((MALI_SWAP_GLOBAL_SWAP_FILE_SIZE) >> PAGE_SHIFT)
#define MALI_SWAP_GLOBAL_SWAP_FILE_INDEX_RESERVE (1 << 15) /* Reserved for CoW nonlinear swap backend memory, the space size is 128MB. */
unsigned int mali_mem_swap_out_threshold_value = MALI_SWAP_LOW_MEM_DEFAULT_VALUE;
@@ -183,7 +184,7 @@ static void mali_mem_swap_out_page_node(mali_page_node *page_node)
dma_unmap_page(&mali_platform_device->dev, page_node->swap_it->dma_addr,
_MALI_OSK_MALI_PAGE_SIZE, DMA_TO_DEVICE);
set_page_dirty(page_node->swap_it->page);
page_cache_release(page_node->swap_it->page);
put_page(page_node->swap_it->page);
}
void mali_mem_swap_unlock_single_mem_backend(mali_mem_backend *mem_bkend)
@@ -248,7 +249,7 @@ static void mali_mem_swap_swapped_bkend_pool_shrink(_mali_mem_swap_pool_shrink_t
}
/* Get system free pages number. */
system_free_size = global_page_state(NR_FREE_PAGES) * PAGE_SIZE;
system_free_size = global_zone_page_state(NR_FREE_PAGES) * PAGE_SIZE;
last_gpu_utilization = _mali_ukk_utilization_gp_pp();
if ((last_gpu_utilization < gpu_utilization_threshold_value)
@@ -576,7 +577,7 @@ int mali_mem_swap_alloc_pages(mali_mem_swap *swap_mem, u32 size, u32 *bkend_idx)
list_add_tail(&m_page->list, &swap_mem->pages);
}
system_free_size = global_page_state(NR_FREE_PAGES) * PAGE_SIZE;
system_free_size = global_zone_page_state(NR_FREE_PAGES) * PAGE_SIZE;
if ((system_free_size < mali_mem_swap_out_threshold_value)
&& (mem_backend_swapped_pool_size > (mali_mem_swap_out_threshold_value >> 2))

View File

@@ -57,7 +57,7 @@ _mali_osk_notification_t *_mali_osk_notification_create(u32 type, u32 size)
_mali_osk_notification_wrapper_t *notification;
notification = (_mali_osk_notification_wrapper_t *)kmalloc(sizeof(_mali_osk_notification_wrapper_t) + size,
GFP_KERNEL | __GFP_HIGH | __GFP_REPEAT);
GFP_KERNEL | __GFP_HIGH | __GFP_RETRY_MAYFAIL);
if (NULL == notification) {
MALI_DEBUG_PRINT(1, ("Failed to create a notification object\n"));
return NULL;

View File

@@ -21,6 +21,7 @@
#include <linux/platform_device.h>
#include <linux/gfp.h>
#include <linux/hardirq.h>
#include <linux/uaccess.h>
#include "mali_osk_types.h"

View File

@@ -24,10 +24,12 @@ struct _mali_osk_timer_t_struct {
typedef void (*timer_timeout_function_t)(unsigned long);
_mali_osk_timer_t *_mali_osk_timer_init(void)
_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback)
{
_mali_osk_timer_t *t = (_mali_osk_timer_t *)kmalloc(sizeof(_mali_osk_timer_t), GFP_KERNEL);
if (NULL != t) init_timer(&t->timer);
if (NULL != t)
timer_setup(&t->timer,
(void (*)(struct timer_list *))callback, 0);
return t;
}
@@ -65,8 +67,6 @@ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim)
void _mali_osk_timer_setcallback(_mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data)
{
MALI_DEBUG_ASSERT_POINTER(tim);
tim->timer.data = (unsigned long)data;
tim->timer.function = (timer_timeout_function_t)callback;
}
void _mali_osk_timer_term(_mali_osk_timer_t *tim)

View File

@@ -202,8 +202,8 @@ int mem_write_safe_wrapper(struct mali_session_data *session_data, _mali_uk_mem_
kargs.ctx = (uintptr_t)session_data;
/* Check if we can access the buffers */
if (!access_ok(VERIFY_WRITE, kargs.dest, kargs.size)
|| !access_ok(VERIFY_READ, kargs.src, kargs.size)) {
if (!access_ok(VERIFY_WRITE, (const void *)kargs.dest, kargs.size) ||
!access_ok(VERIFY_READ, (const void *)kargs.src, kargs.size)) {
return -EINVAL;
}