瀏覽代碼

mm-drivers: hw_fence: share hw fence driver mem pool always

When hw fencing is disabled via kernel command line argument, allow
probing of hw fence driver and perform memory sharing during probe. This
ensures that the carved out memory region for hw fences is always shared
with hypervisor regardless of hw-fencing feature enablement.

Change-Id: I7723fd61860e0d6b8dc374a054c8519d98d700a6
Signed-off-by: Grace An <[email protected]>
Grace An 2 年之前
父節點
當前提交
bb0f9e965f
共有 1 個文件被更改,包括 20 次插入14 次删除
  1. 20 14
      hw_fence/src/msm_hw_fence.c

+ 20 - 14
hw_fence/src/msm_hw_fence.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include <linux/io.h>
@@ -500,15 +500,26 @@ static int msm_hw_fence_probe_init(struct platform_device *pdev)
 	dev_set_drvdata(&pdev->dev, hw_fence_drv_data);
 	hw_fence_drv_data->dev = &pdev->dev;
 
-	/* Initialize HW Fence Driver resources */
-	rc = hw_fence_init(hw_fence_drv_data);
-	if (rc)
-		goto error;
-
-	mutex_init(&hw_fence_drv_data->clients_register_lock);
+	if (hw_fence_driver_enable) {
+		/* Initialize HW Fence Driver resources */
+		rc = hw_fence_init(hw_fence_drv_data);
+		if (rc)
+			goto error;
+
+		mutex_init(&hw_fence_drv_data->clients_register_lock);
+
+		/* set ready value so clients can register */
+		hw_fence_drv_data->resources_ready = true;
+	} else {
+		/* Allocate hw fence driver mem pool and share it with HYP */
+		rc = hw_fence_utils_alloc_mem(hw_fence_drv_data);
+		if (rc) {
+			HWFNC_ERR("failed to alloc base memory\n");
+			goto error;
+		}
 
-	/* set ready ealue so clients can register */
-	hw_fence_drv_data->resources_ready = true;
+		HWFNC_DBG_INFO("hw fence driver not enabled\n");
+	}
 
 	HWFNC_DBG_H("-\n");
 
@@ -534,11 +545,6 @@ static int msm_hw_fence_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
-	if (!hw_fence_driver_enable) {
-		HWFNC_DBG_INFO("hw fence driver not enabled\n");
-		return -EOPNOTSUPP;
-	}
-
 	if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-hw-fence"))
 		rc = msm_hw_fence_probe_init(pdev);
 	if (rc)