Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/panfrost: add amlogic reset quirk callback

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

authored by

Neil Armstrong and committed by
Steven Price
11000300 91e89097

+17
+11
drivers/gpu/drm/panfrost/panfrost_gpu.c
··· 76 76 return 0; 77 77 } 78 78 79 + void panfrost_gpu_amlogic_quirk(struct panfrost_device *pfdev) 80 + { 81 + /* 82 + * The Amlogic integrated Mali-T820, Mali-G31 & Mali-G52 needs 83 + * these undocumented bits in GPU_PWR_OVERRIDE1 to be set in order 84 + * to operate correctly. 85 + */ 86 + gpu_write(pfdev, GPU_PWR_KEY, GPU_PWR_KEY_UNLOCK); 87 + gpu_write(pfdev, GPU_PWR_OVERRIDE1, 0xfff | (0x20 << 16)); 88 + } 89 + 79 90 static void panfrost_gpu_init_quirks(struct panfrost_device *pfdev) 80 91 { 81 92 u32 quirks = 0;
+2
drivers/gpu/drm/panfrost/panfrost_gpu.h
··· 16 16 void panfrost_gpu_power_on(struct panfrost_device *pfdev); 17 17 void panfrost_gpu_power_off(struct panfrost_device *pfdev); 18 18 19 + void panfrost_gpu_amlogic_quirk(struct panfrost_device *pfdev); 20 + 19 21 #endif
+4
drivers/gpu/drm/panfrost/panfrost_regs.h
··· 51 51 #define GPU_STATUS 0x34 52 52 #define GPU_STATUS_PRFCNT_ACTIVE BIT(2) 53 53 #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 */ 54 58 #define GPU_FAULT_STATUS 0x3C 55 59 #define GPU_FAULT_ADDRESS_LO 0x40 56 60 #define GPU_FAULT_ADDRESS_HI 0x44