From d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 02:45:28 +0000
Subject: [PATCH] add boot partition size
---
kernel/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c | 59 +++++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 43 insertions(+), 16 deletions(-)
diff --git a/kernel/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c b/kernel/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c
index f00acb1..c895b08 100644
--- a/kernel/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c
+++ b/kernel/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
/*
*
- * (C) COPYRIGHT 2020-2021 ARM Limited. All rights reserved.
+ * (C) COPYRIGHT 2020-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
@@ -20,18 +20,19 @@
*/
#include <mali_kbase.h>
-#include "mali_kbase_csf_firmware_cfg.h"
#include <mali_kbase_reset_gpu.h>
+#include <linux/version.h>
+
+#include "mali_kbase_csf_firmware_cfg.h"
+#include "mali_kbase_csf_firmware_log.h"
#if CONFIG_SYSFS
#define CSF_FIRMWARE_CFG_SYSFS_DIR_NAME "firmware_config"
+#define CSF_FIRMWARE_CFG_LOG_VERBOSITY_ENTRY_NAME "Log verbosity"
+
/**
* struct firmware_config - Configuration item within the MCU firmware
- *
- * The firmware may expose configuration options. Each option has a name, the
- * address where the option is controlled and the minimum and maximum values
- * that the option can take.
*
* @node: List head linking all options to
* kbase_device:csf.firmware_config
@@ -47,6 +48,10 @@
* @min: The lowest legal value of the configuration option
* @max: The maximum legal value of the configuration option
* @cur_val: The current value of the configuration option
+ *
+ * The firmware may expose configuration options. Each option has a name, the
+ * address where the option is controlled and the minimum and maximum values
+ * that the option can take.
*/
struct firmware_config {
struct list_head node;
@@ -67,9 +72,9 @@
.mode = VERIFY_OCTAL_PERMISSIONS(_mode), \
}
-static FW_CFG_ATTR(min, S_IRUGO);
-static FW_CFG_ATTR(max, S_IRUGO);
-static FW_CFG_ATTR(cur, S_IRUGO | S_IWUSR);
+static FW_CFG_ATTR(min, 0444);
+static FW_CFG_ATTR(max, 0444);
+static FW_CFG_ATTR(cur, 0644);
static void fw_cfg_kobj_release(struct kobject *kobj)
{
@@ -124,7 +129,7 @@
if (attr == &fw_cfg_attr_cur) {
unsigned long flags;
- u32 val;
+ u32 val, cur_val;
int ret = kstrtouint(buf, 0, &val);
if (ret) {
@@ -139,7 +144,9 @@
return -EINVAL;
spin_lock_irqsave(&kbdev->hwaccess_lock, flags);
- if (config->cur_val == val) {
+
+ cur_val = config->cur_val;
+ if (cur_val == val) {
spin_unlock_irqrestore(&kbdev->hwaccess_lock, flags);
return count;
}
@@ -176,6 +183,20 @@
spin_unlock_irqrestore(&kbdev->hwaccess_lock, flags);
+ /* Enable FW logging only if Log verbosity is non-zero */
+ if (!strcmp(config->name, CSF_FIRMWARE_CFG_LOG_VERBOSITY_ENTRY_NAME) &&
+ (!cur_val || !val)) {
+ ret = kbase_csf_firmware_log_toggle_logging_calls(kbdev, val);
+ if (ret) {
+ /* Undo FW configuration changes */
+ spin_lock_irqsave(&kbdev->hwaccess_lock, flags);
+ config->cur_val = cur_val;
+ kbase_csf_update_firmware_memory(kbdev, config->address, cur_val);
+ spin_unlock_irqrestore(&kbdev->hwaccess_lock, flags);
+ return ret;
+ }
+ }
+
/* If we can update the config without firmware reset then
* we need to just trigger FIRMWARE_CONFIG_UPDATE.
*/
@@ -209,11 +230,18 @@
&fw_cfg_attr_cur,
NULL,
};
+#if (KERNEL_VERSION(5, 2, 0) <= LINUX_VERSION_CODE)
+ATTRIBUTE_GROUPS(fw_cfg);
+#endif
static struct kobj_type fw_cfg_kobj_type = {
.release = &fw_cfg_kobj_release,
.sysfs_ops = &fw_cfg_ops,
+#if (KERNEL_VERSION(5, 2, 0) <= LINUX_VERSION_CODE)
+ .default_groups = fw_cfg_groups,
+#else
.default_attrs = fw_cfg_attrs,
+#endif
};
int kbase_csf_firmware_cfg_init(struct kbase_device *kbdev)
@@ -273,9 +301,8 @@
}
int kbase_csf_firmware_cfg_option_entry_parse(struct kbase_device *kbdev,
- const struct firmware *fw,
- const u32 *entry,
- unsigned int size, bool updatable)
+ const struct kbase_csf_mcu_fw *const fw,
+ const u32 *entry, unsigned int size, bool updatable)
{
const char *name = (char *)&entry[3];
struct firmware_config *config;
@@ -319,8 +346,8 @@
}
int kbase_csf_firmware_cfg_option_entry_parse(struct kbase_device *kbdev,
- const struct firmware *fw,
- const u32 *entry, unsigned int size)
+ const struct kbase_csf_mcu_fw *const fw,
+ const u32 *entry, unsigned int size)
{
return 0;
}
--
Gitblit v1.6.2