replace common qcom sources with samsung ones

This commit is contained in:
SaschaNes
2025-08-12 22:13:00 +02:00
parent ba24dcded9
commit 6f7753de11
5682 changed files with 2450203 additions and 103634 deletions

View File

@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2008-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2025, Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <uapi/linux/sched/types.h>
@@ -26,6 +26,8 @@
#include <linux/string_helpers.h>
#include <soc/qcom/of_common.h>
#include <soc/qcom/secure_buffer.h>
#include <linux/sec_mm.h>
#include <trace/hooks/mm.h>
#include "kgsl_compat.h"
#include "kgsl_debugfs.h"
@@ -5205,6 +5207,81 @@ int kgsl_of_property_read_ddrtype(struct device_node *node, const char *base,
return of_property_read_u32(node, base, ptr);
}
static atomic_long_t kgsl_nr_shmem = ATOMIC_LONG_INIT(0);
static atomic_long_t kgsl_nr_swapped = ATOMIC_LONG_INIT(0);
static inline bool is_gpu_mapping(struct address_space *mapping)
{
return (mapping && !((unsigned long)mapping & PAGE_MAPPING_ANON)
&& (mapping->private_data == (void *)GPU_PAGE_MAGIC));
}
static void kgsl_count_shmem(void *data, struct address_space *mapping, long nr_pages)
{
if (is_gpu_mapping(mapping))
atomic_long_add(nr_pages, &kgsl_nr_shmem);
}
static void kgsl_count_swapped(void *data, struct address_space *mapping, long nr_pages)
{
if (is_gpu_mapping(mapping))
atomic_long_add(nr_pages, &kgsl_nr_swapped);
}
static void kgsl_show_mem(void *data, unsigned int filter, nodemask_t *nodemask)
{
long total_kbytes = atomic_long_read(&kgsl_driver.stats.page_alloc) >> 10;
long shmem_kbytes = K(atomic_long_read(&kgsl_nr_shmem));
long swapped_kbytes = K(atomic_long_read(&kgsl_nr_swapped));
if (shmem_kbytes < 0)
shmem_kbytes = 0;
if (swapped_kbytes < 0)
swapped_kbytes = 0;
pr_info("%s: %ld kB\n", "GpuTotal", total_kbytes);
pr_info("%s: %lu kB\n", "KgslShmemUsage", shmem_kbytes);
pr_info("%s: %lu kB\n", "GpuSwap", swapped_kbytes);
}
static void kgsl_meminfo(void *data, struct seq_file *m)
{
long total_kbytes = atomic_long_read(&kgsl_driver.stats.page_alloc) >> 10;
long shmem_kbytes = K(atomic_long_read(&kgsl_nr_shmem));
long swapped_kbytes = K(atomic_long_read(&kgsl_nr_swapped));
if (shmem_kbytes < 0)
shmem_kbytes = 0;
if (swapped_kbytes < 0)
swapped_kbytes = 0;
show_val_meminfo(m, "GpuTotal", total_kbytes);
show_val_meminfo(m, "KgslShmemUsage", shmem_kbytes);
show_val_meminfo(m, "GpuSwap", swapped_kbytes);
}
static void kgsl_cache_adjust(void *data, unsigned long *cached)
{
long nr_shmem_pages = atomic_long_read(&kgsl_nr_shmem);
if (nr_shmem_pages < 0)
nr_shmem_pages = 0;
*cached -= (unsigned long)nr_shmem_pages;
}
static void kgsl_meminfo_adjust_shmem(void *data, unsigned long *sharedram)
{
long nr_shmem_pages = atomic_long_read(&kgsl_nr_shmem);
if (nr_shmem_pages < 0)
nr_shmem_pages = 0;
if (*sharedram >= (unsigned long)nr_shmem_pages)
*sharedram -= nr_shmem_pages;
else
*sharedram = 0;
}
int kgsl_device_platform_probe(struct kgsl_device *device)
{
struct platform_device *pdev = device->pdev;
@@ -5246,6 +5323,13 @@ int kgsl_device_platform_probe(struct kgsl_device *device)
/* Set up the GPU events for the device */
kgsl_device_events_probe(device);
register_trace_android_vh_shmem_mod_shmem(kgsl_count_shmem, NULL);
register_trace_android_vh_shmem_mod_swapped(kgsl_count_swapped, NULL);
register_trace_android_vh_show_mem(kgsl_show_mem, NULL);
register_trace_android_vh_meminfo_proc_show(kgsl_meminfo, NULL);
register_trace_android_vh_meminfo_cache_adjust(kgsl_cache_adjust, NULL);
register_trace_android_vh_si_meminfo_adjust_shmem(kgsl_meminfo_adjust_shmem, NULL);
/* Initialize common sysfs entries */
kgsl_pwrctrl_init_sysfs(device);
kgsl_mmu_sysfs_init(&device->mmu);
@@ -5268,6 +5352,13 @@ error:
void kgsl_device_platform_remove(struct kgsl_device *device)
{
unregister_trace_android_vh_shmem_mod_shmem(kgsl_count_shmem, NULL);
unregister_trace_android_vh_shmem_mod_swapped(kgsl_count_swapped, NULL);
unregister_trace_android_vh_show_mem(kgsl_show_mem, NULL);
unregister_trace_android_vh_meminfo_proc_show(kgsl_meminfo, NULL);
unregister_trace_android_vh_meminfo_cache_adjust(kgsl_cache_adjust, NULL);
unregister_trace_android_vh_si_meminfo_adjust_shmem(kgsl_meminfo_adjust_shmem, NULL);
del_timer(&device->work_period_timer);
kthread_destroy_worker(device->events_worker);
@@ -5292,6 +5383,16 @@ void kgsl_core_exit(void)
kgsl_exit_page_pools();
kgsl_eventlog_exit();
if (kgsl_driver.highprio_workqueue) {
destroy_workqueue(kgsl_driver.highprio_workqueue);
kgsl_driver.highprio_workqueue = NULL;
}
if (kgsl_driver.normprio_workqueue) {
destroy_workqueue(kgsl_driver.normprio_workqueue);
kgsl_driver.normprio_workqueue = NULL;
}
if (kgsl_driver.workqueue) {
destroy_workqueue(kgsl_driver.workqueue);
kgsl_driver.workqueue = NULL;
@@ -5332,11 +5433,33 @@ void kgsl_core_exit(void)
sysstats_unregister_kgsl_stats_cb();
}
#define RECLAIM_CPUMASK 0x3Fu
static int kgsl_workqueue_setup_cpumask(struct workqueue_struct *wq,
unsigned int setcpu)
{
struct workqueue_attrs *attrs;
int i, err;
attrs = alloc_workqueue_attrs();
if (!attrs)
return -ENOMEM;
cpumask_clear(attrs->cpumask);
for (i = 0; i < nr_cpu_ids; i++)
if (setcpu & (1 << i))
cpumask_set_cpu(i, attrs->cpumask);
err = apply_workqueue_attrs(wq, attrs);
free_workqueue_attrs(attrs);
return err;
}
int __init kgsl_core_init(void)
{
static u64 dma_mask = (u64)DMA_BIT_MASK(64);
static struct device_dma_parameters dma_parms;
int result = 0;
int ret;
KGSL_BOOT_MARKER("KGSL Init");
@@ -5386,13 +5509,6 @@ int __init kgsl_core_init(void)
goto err;
}
kgsl_driver.virtdev.dma_mask = &dma_mask;
kgsl_driver.virtdev.dma_parms = &dma_parms;
dma_set_max_seg_size(&kgsl_driver.virtdev, (u32)DMA_BIT_MASK(32));
set_dma_ops(&kgsl_driver.virtdev, NULL);
/* Make kobjects in the virtual device for storing statistics */
kgsl_driver.ptkobj =
@@ -5418,6 +5534,38 @@ int __init kgsl_core_init(void)
INIT_LIST_HEAD(&kgsl_driver.wp_list);
kgsl_driver.highprio_workqueue = alloc_workqueue("kgsl-highprio-workqueue",
WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS | WQ_HIGHPRI, 0);
if (!kgsl_driver.highprio_workqueue) {
pr_err("kgsl: Failed to allocate kgsl highprio workqueue\n");
result = -ENOMEM;
goto err;
}
ret = kgsl_workqueue_setup_cpumask(kgsl_driver.highprio_workqueue,
RECLAIM_CPUMASK);
if (ret) {
pr_err("kgsl: Failed to setup highprio cpumasks ret %d\n", ret);
goto err;
}
kgsl_driver.normprio_workqueue = alloc_workqueue("kgsl-normprio-workqueue",
WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS, 0);
if (!kgsl_driver.normprio_workqueue) {
pr_err("kgsl: Failed to allocate kgsl normprio workqueue\n");
result = -ENOMEM;
goto err;
}
ret = kgsl_workqueue_setup_cpumask(kgsl_driver.normprio_workqueue,
RECLAIM_CPUMASK);
if (ret) {
pr_err("kgsl: Failed to setup normprio cpumasks ret %d\n", ret);
goto err;
}
kgsl_driver.workqueue = alloc_workqueue("kgsl-workqueue",
WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS, 0);