From 1543e317f1da31b75942316931e8f491a8920811 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Thu, 04 Jan 2024 10:08:02 +0000
Subject: [PATCH] disable FB
---
kernel/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c | 76 ++++++++++++++++++++++++++++---------
1 files changed, 57 insertions(+), 19 deletions(-)
diff --git a/kernel/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c b/kernel/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c
index 16b928d..f2c6274 100644
--- a/kernel/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c
+++ b/kernel/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
/*
*
- * (C) COPYRIGHT 2010-2014, 2016-2021 ARM Limited. All rights reserved.
+ * (C) COPYRIGHT 2010-2014, 2016-2022 ARM Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the
* GNU General Public License version 2 as published by the Free Software
@@ -35,12 +35,13 @@
#define ENTRY_IS_INVAL 2ULL
#define ENTRY_IS_PTE 3ULL
-#define ENTRY_ATTR_BITS (7ULL << 2) /* bits 4:2 */
#define ENTRY_ACCESS_RW (1ULL << 6) /* bits 6:7 */
#define ENTRY_ACCESS_RO (3ULL << 6)
-#define ENTRY_SHARE_BITS (3ULL << 8) /* bits 9:8 */
#define ENTRY_ACCESS_BIT (1ULL << 10)
#define ENTRY_NX_BIT (1ULL << 54)
+
+#define UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR (55)
+#define VALID_ENTRY_MASK ((u64)0xF << UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR)
/* Helper Function to perform assignment of page table entries, to
* ensure the use of strd, which is required on LPAE systems.
@@ -85,6 +86,7 @@
if (!(entry & 1))
return 0;
+ entry &= ~VALID_ENTRY_MASK;
return entry & ~0xFFF;
}
@@ -151,29 +153,65 @@
ENTRY_ACCESS_BIT | ENTRY_IS_ATE_L02);
}
+static unsigned int get_num_valid_entries(u64 *pgd)
+{
+ register unsigned int num_of_valid_entries;
+
+ num_of_valid_entries =
+ (unsigned int)((pgd[2] & VALID_ENTRY_MASK) >>
+ (UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR - 8));
+ num_of_valid_entries |=
+ (unsigned int)((pgd[1] & VALID_ENTRY_MASK) >>
+ (UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR - 4));
+ num_of_valid_entries |=
+ (unsigned int)((pgd[0] & VALID_ENTRY_MASK) >>
+ (UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR));
+
+ return num_of_valid_entries;
+}
+
+static void set_num_valid_entries(u64 *pgd, unsigned int num_of_valid_entries)
+{
+ WARN_ON_ONCE(num_of_valid_entries > KBASE_MMU_PAGE_ENTRIES);
+
+ pgd[0] &= ~VALID_ENTRY_MASK;
+ pgd[0] |= ((u64)(num_of_valid_entries & 0xF)
+ << UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR);
+
+ pgd[1] &= ~VALID_ENTRY_MASK;
+ pgd[1] |= ((u64)((num_of_valid_entries >> 4) & 0xF)
+ << UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR);
+
+ pgd[2] &= ~VALID_ENTRY_MASK;
+ pgd[2] |= ((u64)((num_of_valid_entries >> 8) & 0xF)
+ << UNUSED_BIT_POSITION_IN_PAGE_DESCRIPTOR);
+}
+
static void entry_set_pte(u64 *entry, phys_addr_t phy)
{
- page_table_entry_set(entry, (phy & PAGE_MASK) |
- ENTRY_ACCESS_BIT | ENTRY_IS_PTE);
+ page_table_entry_set(entry, (phy & PAGE_MASK) | ENTRY_ACCESS_BIT | ENTRY_IS_PTE);
}
-static void entry_invalidate(u64 *entry)
+static void entries_invalidate(u64 *entry, u32 count)
{
- page_table_entry_set(entry, ENTRY_IS_INVAL);
+ u32 i;
+
+ for (i = 0; i < count; i++)
+ page_table_entry_set(entry + i, ENTRY_IS_INVAL);
}
-static struct kbase_mmu_mode const aarch64_mode = {
- .update = mmu_update,
- .get_as_setup = kbase_mmu_get_as_setup,
- .disable_as = mmu_disable_as,
- .pte_to_phy_addr = pte_to_phy_addr,
- .ate_is_valid = ate_is_valid,
- .pte_is_valid = pte_is_valid,
- .entry_set_ate = entry_set_ate,
- .entry_set_pte = entry_set_pte,
- .entry_invalidate = entry_invalidate,
- .flags = KBASE_MMU_MODE_HAS_NON_CACHEABLE
-};
+static const struct kbase_mmu_mode aarch64_mode = { .update = mmu_update,
+ .get_as_setup = kbase_mmu_get_as_setup,
+ .disable_as = mmu_disable_as,
+ .pte_to_phy_addr = pte_to_phy_addr,
+ .ate_is_valid = ate_is_valid,
+ .pte_is_valid = pte_is_valid,
+ .entry_set_ate = entry_set_ate,
+ .entry_set_pte = entry_set_pte,
+ .entries_invalidate = entries_invalidate,
+ .get_num_valid_entries = get_num_valid_entries,
+ .set_num_valid_entries = set_num_valid_entries,
+ .flags = KBASE_MMU_MODE_HAS_NON_CACHEABLE };
struct kbase_mmu_mode const *kbase_mmu_mode_get_aarch64(void)
{
--
Gitblit v1.6.2