Skip to content

Commit a6a0157

Browse files
akhilpo-qcomRob Clark
authored andcommitted
drm/msm/a6xx: Enable IFPC on Adreno X1-85
Add the IFPC restore register list and enable IFPC support on Adreno X1-85 gpu. Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/673384/ Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
1 parent 870d72d commit a6a0157

3 files changed

Lines changed: 79 additions & 5 deletions

File tree

drivers/gpu/drm/msm/adreno/a6xx_catalog.c

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1353,6 +1353,69 @@ static const uint32_t a7xx_pwrup_reglist_regs[] = {
13531353

13541354
DECLARE_ADRENO_REGLIST_LIST(a7xx_pwrup_reglist);
13551355

1356+
/* Applicable for X185, A750 */
1357+
static const u32 a750_ifpc_reglist_regs[] = {
1358+
REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_0,
1359+
REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_1,
1360+
REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_2,
1361+
REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_3,
1362+
REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_4,
1363+
REG_A6XX_TPL1_NC_MODE_CNTL,
1364+
REG_A6XX_SP_NC_MODE_CNTL,
1365+
REG_A6XX_CP_DBG_ECO_CNTL,
1366+
REG_A6XX_CP_PROTECT_CNTL,
1367+
REG_A6XX_CP_PROTECT(0),
1368+
REG_A6XX_CP_PROTECT(1),
1369+
REG_A6XX_CP_PROTECT(2),
1370+
REG_A6XX_CP_PROTECT(3),
1371+
REG_A6XX_CP_PROTECT(4),
1372+
REG_A6XX_CP_PROTECT(5),
1373+
REG_A6XX_CP_PROTECT(6),
1374+
REG_A6XX_CP_PROTECT(7),
1375+
REG_A6XX_CP_PROTECT(8),
1376+
REG_A6XX_CP_PROTECT(9),
1377+
REG_A6XX_CP_PROTECT(10),
1378+
REG_A6XX_CP_PROTECT(11),
1379+
REG_A6XX_CP_PROTECT(12),
1380+
REG_A6XX_CP_PROTECT(13),
1381+
REG_A6XX_CP_PROTECT(14),
1382+
REG_A6XX_CP_PROTECT(15),
1383+
REG_A6XX_CP_PROTECT(16),
1384+
REG_A6XX_CP_PROTECT(17),
1385+
REG_A6XX_CP_PROTECT(18),
1386+
REG_A6XX_CP_PROTECT(19),
1387+
REG_A6XX_CP_PROTECT(20),
1388+
REG_A6XX_CP_PROTECT(21),
1389+
REG_A6XX_CP_PROTECT(22),
1390+
REG_A6XX_CP_PROTECT(23),
1391+
REG_A6XX_CP_PROTECT(24),
1392+
REG_A6XX_CP_PROTECT(25),
1393+
REG_A6XX_CP_PROTECT(26),
1394+
REG_A6XX_CP_PROTECT(27),
1395+
REG_A6XX_CP_PROTECT(28),
1396+
REG_A6XX_CP_PROTECT(29),
1397+
REG_A6XX_CP_PROTECT(30),
1398+
REG_A6XX_CP_PROTECT(31),
1399+
REG_A6XX_CP_PROTECT(32),
1400+
REG_A6XX_CP_PROTECT(33),
1401+
REG_A6XX_CP_PROTECT(34),
1402+
REG_A6XX_CP_PROTECT(35),
1403+
REG_A6XX_CP_PROTECT(36),
1404+
REG_A6XX_CP_PROTECT(37),
1405+
REG_A6XX_CP_PROTECT(38),
1406+
REG_A6XX_CP_PROTECT(39),
1407+
REG_A6XX_CP_PROTECT(40),
1408+
REG_A6XX_CP_PROTECT(41),
1409+
REG_A6XX_CP_PROTECT(42),
1410+
REG_A6XX_CP_PROTECT(43),
1411+
REG_A6XX_CP_PROTECT(44),
1412+
REG_A6XX_CP_PROTECT(45),
1413+
REG_A6XX_CP_PROTECT(46),
1414+
REG_A6XX_CP_PROTECT(47),
1415+
};
1416+
1417+
DECLARE_ADRENO_REGLIST_LIST(a750_ifpc_reglist);
1418+
13561419
static const struct adreno_info a7xx_gpus[] = {
13571420
{
13581421
.chip_ids = ADRENO_CHIP_IDS(0x07000200),
@@ -1442,12 +1505,14 @@ static const struct adreno_info a7xx_gpus[] = {
14421505
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
14431506
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
14441507
ADRENO_QUIRK_HAS_HW_APRIV |
1445-
ADRENO_QUIRK_PREEMPTION,
1508+
ADRENO_QUIRK_PREEMPTION |
1509+
ADRENO_QUIRK_IFPC,
14461510
.init = a6xx_gpu_init,
14471511
.a6xx = &(const struct a6xx_info) {
14481512
.hwcg = a740_hwcg,
14491513
.protect = &a730_protect,
14501514
.pwrup_reglist = &a7xx_pwrup_reglist,
1515+
.ifpc_reglist = &a750_ifpc_reglist,
14511516
.gmu_chipid = 0x7050001,
14521517
.gmu_cgc_mode = 0x00020202,
14531518
.bcms = (const struct a6xx_bcm[]) {
@@ -1487,6 +1552,7 @@ static const struct adreno_info a7xx_gpus[] = {
14871552
.a6xx = &(const struct a6xx_info) {
14881553
.protect = &a730_protect,
14891554
.pwrup_reglist = &a7xx_pwrup_reglist,
1555+
.ifpc_reglist = &a750_ifpc_reglist,
14901556
.gmu_chipid = 0x7090100,
14911557
.gmu_cgc_mode = 0x00020202,
14921558
.bcms = (const struct a6xx_bcm[]) {

drivers/gpu/drm/msm/adreno/a6xx_gpu.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -828,11 +828,10 @@ static void a7xx_patch_pwrup_reglist(struct msm_gpu *gpu)
828828
u32 *dest = (u32 *)&lock->regs[0];
829829
int i;
830830

831-
reglist = adreno_gpu->info->a6xx->pwrup_reglist;
832-
833831
lock->gpu_req = lock->cpu_req = lock->turn = 0;
834-
lock->ifpc_list_len = 0;
835-
lock->preemption_list_len = reglist->count;
832+
833+
reglist = adreno_gpu->info->a6xx->ifpc_reglist;
834+
lock->ifpc_list_len = reglist->count;
836835

837836
/*
838837
* For each entry in each of the lists, write the offset and the current
@@ -843,6 +842,14 @@ static void a7xx_patch_pwrup_reglist(struct msm_gpu *gpu)
843842
*dest++ = gpu_read(gpu, reglist->regs[i]);
844843
}
845844

845+
reglist = adreno_gpu->info->a6xx->pwrup_reglist;
846+
lock->preemption_list_len = reglist->count;
847+
848+
for (i = 0; i < reglist->count; i++) {
849+
*dest++ = reglist->regs[i];
850+
*dest++ = gpu_read(gpu, reglist->regs[i]);
851+
}
852+
846853
/*
847854
* The overall register list is composed of
848855
* 1. Static IFPC-only registers

drivers/gpu/drm/msm/adreno/a6xx_gpu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ struct a6xx_info {
4545
const struct adreno_reglist *hwcg;
4646
const struct adreno_protect *protect;
4747
const struct adreno_reglist_list *pwrup_reglist;
48+
const struct adreno_reglist_list *ifpc_reglist;
4849
u32 gmu_chipid;
4950
u32 gmu_cgc_mode;
5051
u32 prim_fifo_threshold;

0 commit comments

Comments
 (0)