From 03cd7716294d0b24c8eb91414337adf9357d7225 Mon Sep 17 00:00:00 2001 From: Jack Diver Date: Wed, 8 Feb 2023 15:24:14 +0000 Subject: mali_kbase: platform: Perform partition resize and region migration Implement demand based SLC partition resizing. Implement region migration into the SLC memory group. Bug: 264990406 Test: Boot to home Test: gfx-bench mh3.1 Change-Id: Ibf763652f3db133066c254b66b1316a49803e54f Signed-off-by: Jack Diver --- mali_kbase/platform/pixel/pixel_gpu_slc.c | 33 ++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'mali_kbase') diff --git a/mali_kbase/platform/pixel/pixel_gpu_slc.c b/mali_kbase/platform/pixel/pixel_gpu_slc.c index 48e61c4..ee618be 100644 --- a/mali_kbase/platform/pixel/pixel_gpu_slc.c +++ b/mali_kbase/platform/pixel/pixel_gpu_slc.c @@ -10,6 +10,8 @@ /* UAPI includes */ #include +/* Back-door mali_pixel include */ +#include /* Pixel integration includes */ #include "mali_kbase_config_platform.h" @@ -61,8 +63,7 @@ static void gpu_slc_unlock_as(struct kbase_context *kctx) */ static bool gpu_slc_in_group(struct kbase_va_region* reg) { - /* TODO */ - return false; + return reg->gpu_alloc->group_id == MGM_SLC_GROUP_ID; } /** @@ -105,9 +106,21 @@ invalid: */ static void gpu_slc_migrate_region(struct kbase_context *kctx, struct kbase_va_region* reg) { - /* TODO */ - (void)kctx; - (void)reg; + int err; + + KBASE_DEBUG_ASSERT(kctx); + KBASE_DEBUG_ASSERT(reg); + + err = kbase_mmu_update_pages(kctx, reg->start_pfn, + kbase_get_gpu_phy_pages(reg), + kbase_reg_current_backed_size(reg), + reg->flags, + MGM_SLC_GROUP_ID); + if (err) + dev_warn(kctx->kbdev->dev, "pixel: failed to move region to SLC: %d", err); + else + /* If everything is good, then set the new group on the region. */ + reg->gpu_alloc->group_id = MGM_SLC_GROUP_ID; } /** @@ -118,9 +131,15 @@ static void gpu_slc_migrate_region(struct kbase_context *kctx, struct kbase_va_r static void gpu_slc_resize_partition(struct kbase_device* kbdev) { struct pixel_context *pc = kbdev->platform_context; - dev_dbg(kbdev->dev, "pixel: resizing GPU SLC partition to meet demand: %llu", pc->slc.demand); - /* TODO */ + /* Request that the mgm select an SLC partition that fits our demand */ + pc->slc.partition_size = + pixel_mgm_resize_group_to_fit(kbdev->mgm_dev, MGM_SLC_GROUP_ID, pc->slc.demand); + + dev_dbg(kbdev->dev, + "pixel: resized GPU SLC partition to: %llu, to meet demand: %llu", + pc->slc.partition_size, + pc->slc.demand); } /** -- cgit v1.2.3