Skip to content

Commit d7170b3

Browse files
superna9999gregkh
authored andcommitted
drm/panfrost: add amlogic reset quirk callback
[ Upstream commit 1100030 ] The T820, G31 & G52 GPUs integrated by Amlogic in the respective GXM, G12A/SM1 & G12B SoCs needs a quirk in the PWR registers at the GPU reset time. Since the Amlogic's integration of the GPU cores with the SoC is not publicly documented we do not know what does these values, but they permit having a fully functional GPU running with Panfrost. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> [Steven: Fix typo in commit log] Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Signed-off-by: Steven Price <steven.price@arm.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200916150147.25753-3-narmstrong@baylibre.com Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent d510544 commit d7170b3

3 files changed

Lines changed: 17 additions & 0 deletions

File tree

drivers/gpu/drm/panfrost/panfrost_gpu.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev)
7575
return 0;
7676
}
7777

78+
void panfrost_gpu_amlogic_quirk(struct panfrost_device *pfdev)
79+
{
80+
/*
81+
* The Amlogic integrated Mali-T820, Mali-G31 & Mali-G52 needs
82+
* these undocumented bits in GPU_PWR_OVERRIDE1 to be set in order
83+
* to operate correctly.
84+
*/
85+
gpu_write(pfdev, GPU_PWR_KEY, GPU_PWR_KEY_UNLOCK);
86+
gpu_write(pfdev, GPU_PWR_OVERRIDE1, 0xfff | (0x20 << 16));
87+
}
88+
7889
static void panfrost_gpu_init_quirks(struct panfrost_device *pfdev)
7990
{
8091
u32 quirks = 0;

drivers/gpu/drm/panfrost/panfrost_gpu.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev);
1616
void panfrost_gpu_power_on(struct panfrost_device *pfdev);
1717
void panfrost_gpu_power_off(struct panfrost_device *pfdev);
1818

19+
void panfrost_gpu_amlogic_quirk(struct panfrost_device *pfdev);
20+
1921
#endif

drivers/gpu/drm/panfrost/panfrost_regs.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
#define GPU_STATUS 0x34
5252
#define GPU_STATUS_PRFCNT_ACTIVE BIT(2)
5353
#define GPU_LATEST_FLUSH_ID 0x38
54+
#define GPU_PWR_KEY 0x50 /* (WO) Power manager key register */
55+
#define GPU_PWR_KEY_UNLOCK 0x2968A819
56+
#define GPU_PWR_OVERRIDE0 0x54 /* (RW) Power manager override settings */
57+
#define GPU_PWR_OVERRIDE1 0x58 /* (RW) Power manager override settings */
5458
#define GPU_FAULT_STATUS 0x3C
5559
#define GPU_FAULT_ADDRESS_LO 0x40
5660
#define GPU_FAULT_ADDRESS_HI 0x44

0 commit comments

Comments
 (0)