Commit 7d334f5c authored by Karunika Choo's avatar Karunika Choo Committed by Boris Brezillon
Browse files

drm/panthor: Add architecture-specific function operations



Introduce architecture-specific function pointers to support
architecture-dependent behaviours. This patch adds the following
function pointers and updates their usage accordingly:

- soft_reset
- l2_power_on
- l2_power_off

Reviewed-by: default avatarSteven Price <steven.price@arm.com>
Signed-off-by: default avatarKarunika Choo <karunika.choo@arm.com>
Link: https://patch.msgid.link/20251125125548.3282320-3-karunika.choo@arm.com


Signed-off-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
parent b1075ae1
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -152,8 +152,8 @@ static void panthor_device_reset_work(struct work_struct *work)
	panthor_sched_pre_reset(ptdev);
	panthor_fw_pre_reset(ptdev, true);
	panthor_mmu_pre_reset(ptdev);
	panthor_gpu_soft_reset(ptdev);
	panthor_gpu_l2_power_on(ptdev);
	panthor_hw_soft_reset(ptdev);
	panthor_hw_l2_power_on(ptdev);
	panthor_mmu_post_reset(ptdev);
	ret = panthor_fw_post_reset(ptdev);
	atomic_set(&ptdev->reset.pending, 0);
+3 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "panthor_fw.h"
#include "panthor_gem.h"
#include "panthor_gpu.h"
#include "panthor_hw.h"
#include "panthor_mmu.h"
#include "panthor_regs.h"
#include "panthor_sched.h"
@@ -1186,7 +1187,7 @@ void panthor_fw_unplug(struct panthor_device *ptdev)
	ptdev->fw->vm = NULL;

	if (!IS_ENABLED(CONFIG_PM) || pm_runtime_active(ptdev->base.dev))
		panthor_gpu_power_off(ptdev, L2, ptdev->gpu_info.l2_present, 20000);
		panthor_hw_l2_power_off(ptdev);
}

/**
@@ -1365,7 +1366,7 @@ int panthor_fw_init(struct panthor_device *ptdev)
		return ret;
	}

	ret = panthor_gpu_l2_power_on(ptdev);
	ret = panthor_hw_l2_power_on(ptdev);
	if (ret)
		return ret;

+9 −3
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include "panthor_device.h"
#include "panthor_gpu.h"
#include "panthor_hw.h"
#include "panthor_regs.h"

/**
@@ -241,6 +242,11 @@ int panthor_gpu_block_power_on(struct panthor_device *ptdev,
	return 0;
}

void panthor_gpu_l2_power_off(struct panthor_device *ptdev)
{
	panthor_gpu_power_off(ptdev, L2, ptdev->gpu_info.l2_present, 20000);
}

/**
 * panthor_gpu_l2_power_on() - Power-on the L2-cache
 * @ptdev: Device.
@@ -368,9 +374,9 @@ void panthor_gpu_suspend(struct panthor_device *ptdev)
{
	/* On a fast reset, simply power down the L2. */
	if (!ptdev->reset.fast)
		panthor_gpu_soft_reset(ptdev);
		panthor_hw_soft_reset(ptdev);
	else
		panthor_gpu_power_off(ptdev, L2, 1, 20000);
		panthor_hw_l2_power_off(ptdev);

	panthor_gpu_irq_suspend(&ptdev->gpu->irq);
}
@@ -385,6 +391,6 @@ void panthor_gpu_suspend(struct panthor_device *ptdev)
void panthor_gpu_resume(struct panthor_device *ptdev)
{
	panthor_gpu_irq_resume(&ptdev->gpu->irq, GPU_INTERRUPTS_MASK);
	panthor_gpu_l2_power_on(ptdev);
	panthor_hw_l2_power_on(ptdev);
}
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ int panthor_gpu_block_power_off(struct panthor_device *ptdev,
				   type ## _PWRTRANS, \
				   mask, timeout_us)

void panthor_gpu_l2_power_off(struct panthor_device *ptdev);
int panthor_gpu_l2_power_on(struct panthor_device *ptdev);
int panthor_gpu_flush_caches(struct panthor_device *ptdev,
			     u32 l2, u32 lsc, u32 other);
+8 −1
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@
#include <drm/drm_print.h>

#include "panthor_device.h"
#include "panthor_gpu.h"
#include "panthor_hw.h"
#include "panthor_regs.h"

@@ -22,7 +23,13 @@ struct panthor_hw_entry {
	struct panthor_hw *hwdev;
};

static struct panthor_hw panthor_hw_arch_v10 = {};
static struct panthor_hw panthor_hw_arch_v10 = {
	.ops = {
		.soft_reset = panthor_gpu_soft_reset,
		.l2_power_off = panthor_gpu_l2_power_off,
		.l2_power_on = panthor_gpu_l2_power_on,
	},
};

static struct panthor_hw_entry panthor_hw_match[] = {
	{
Loading