Loading drivers/gpu/msm/a5xx_reg.h +14 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ #define A5XX_CP_CONTEXT_SWITCH_SAVE_ADDR_HI 0x83F #define A5XX_CP_CONTEXT_SWITCH_SMMU_INFO_LO 0x840 #define A5XX_CP_CONTEXT_SWITCH_SMMU_INFO_HI 0x841 #define A5XX_CP_ADDR_MODE_CNTL 0x860 #define A5XX_CP_ME_STAT_DATA 0xB14 #define A5XX_CP_WFI_PEND_CTR 0xB15 #define A5XX_CP_INTERRUPT_STATUS 0xB18 Loading @@ -118,6 +119,8 @@ #define A5XX_CP_PERFCTR_CP_SEL_6 0xBB6 #define A5XX_CP_PERFCTR_CP_SEL_7 0xBB7 #define A5XX_VSC_ADDR_MODE_CNTL 0xBC1 /* CP Power Counter Registers Select */ #define A5XX_CP_POWERCTR_CP_SEL_0 0xBBA #define A5XX_CP_POWERCTR_CP_SEL_1 0xBBB Loading Loading @@ -536,6 +539,8 @@ #define A5XX_VSC_PERFCTR_VSC_SEL_0 0xC60 #define A5XX_VSC_PERFCTR_VSC_SEL_1 0xC61 #define A5XX_GRAS_ADDR_MODE_CNTL 0xC81 /* TSE registers */ #define A5XX_GRAS_PERFCTR_TSE_SEL_0 0xC90 #define A5XX_GRAS_PERFCTR_TSE_SEL_1 0xC91 Loading @@ -556,6 +561,7 @@ /* RB registers */ #define A5XX_RB_ADDR_MODE_CNTL 0xCC5 #define A5XX_RB_PERFCTR_RB_SEL_0 0xCD0 #define A5XX_RB_PERFCTR_RB_SEL_1 0xCD1 #define A5XX_RB_PERFCTR_RB_SEL_2 0xCD2 Loading Loading @@ -589,6 +595,7 @@ /* PC registers */ #define A5XX_PC_DBG_ECO_CNTL 0xD00 #define A5XX_PC_ADDR_MODE_CNTL 0xD01 #define A5XX_PC_PERFCTR_PC_SEL_0 0xD10 #define A5XX_PC_PERFCTR_PC_SEL_1 0xD11 #define A5XX_PC_PERFCTR_PC_SEL_2 0xD12 Loading @@ -600,6 +607,7 @@ /* HLSQ registers */ #define A5XX_HLSQ_TIMEOUT_THRESHOLD 0xE00 #define A5XX_HLSQ_ADDR_MODE_CNTL 0xE05 #define A5XX_HLSQ_PERFCTR_HLSQ_SEL_0 0xE10 #define A5XX_HLSQ_PERFCTR_HLSQ_SEL_1 0xE11 #define A5XX_HLSQ_PERFCTR_HLSQ_SEL_2 0xE12 Loading @@ -613,6 +621,7 @@ #define A5XX_HLSQ_DBG_AHB_READ_APERTURE 0xA000 /* VFD registers */ #define A5XX_VFD_ADDR_MODE_CNTL 0xE41 #define A5XX_VFD_PERFCTR_VFD_SEL_0 0xE50 #define A5XX_VFD_PERFCTR_VFD_SEL_1 0xE51 #define A5XX_VFD_PERFCTR_VFD_SEL_2 0xE52 Loading @@ -623,12 +632,15 @@ #define A5XX_VFD_PERFCTR_VFD_SEL_7 0xE57 /* VPC registers */ #define A5XX_VPC_ADDR_MODE_CNTL 0xE61 #define A5XX_VPC_PERFCTR_VPC_SEL_0 0xE64 #define A5XX_VPC_PERFCTR_VPC_SEL_1 0xE65 #define A5XX_VPC_PERFCTR_VPC_SEL_2 0xE66 #define A5XX_VPC_PERFCTR_VPC_SEL_3 0xE67 /* UCHE registers */ #define A5XX_UCHE_ADDR_MODE_CNTL 0xE80 #define A5XX_UCHE_SVM_CNTL 0xE82 #define A5XX_UCHE_WRITE_THRU_BASE_LO 0xE87 #define A5XX_UCHE_WRITE_THRU_BASE_HI 0xE88 #define A5XX_UCHE_TRAP_BASE_LO 0xE89 Loading Loading @@ -656,6 +668,7 @@ /* SP registers */ #define A5XX_SP_DBG_ECO_CNTL 0xEC0 #define A5XX_SP_ADDR_MODE_CNTL 0xEC1 #define A5XX_SP_PERFCTR_SP_SEL_0 0xED0 #define A5XX_SP_PERFCTR_SP_SEL_1 0xED1 #define A5XX_SP_PERFCTR_SP_SEL_2 0xED2 Loading @@ -676,6 +689,7 @@ #define A5XX_SP_POWERCTR_SP_SEL_3 0xEDF /* TP registers */ #define A5XX_TPL1_ADDR_MODE_CNTL 0xF01 #define A5XX_TPL1_PERFCTR_TP_SEL_0 0xF10 #define A5XX_TPL1_PERFCTR_TP_SEL_1 0xF11 #define A5XX_TPL1_PERFCTR_TP_SEL_2 0xF12 Loading drivers/gpu/msm/adreno.c +5 −0 Original line number Diff line number Diff line Loading @@ -1407,6 +1407,11 @@ static int _adreno_start(struct adreno_device *adreno_dev) goto error_mmu_off; } /* Enable 64 bit gpu addr if feature is set */ if (gpudev->enable_64bit && ADRENO_FEATURE(adreno_dev, ADRENO_64BIT)) gpudev->enable_64bit(adreno_dev); if (adreno_dev->perfctr_pwr_lo == 0) { int ret = adreno_perfcounter_get(adreno_dev, KGSL_PERFCOUNTER_GROUP_PWR, 1, Loading drivers/gpu/msm/adreno.h +3 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,8 @@ #define ADRENO_GPMU BIT(8) /* The GPMU supports Limits Management */ #define ADRENO_LM BIT(9) /* The core uses 64 bit GPU addresses */ #define ADRENO_64BIT BIT(10) /* Flags to control command packet settings */ #define KGSL_CMD_FLAGS_NONE 0 Loading Loading @@ -671,6 +673,7 @@ struct adreno_gpudev { uint64_t gpuaddr); void (*preemption_init)(struct adreno_device *); void (*preemption_schedule)(struct adreno_device *); void (*enable_64bit)(struct adreno_device *); }; struct log_field { Loading drivers/gpu/msm/adreno_a5xx.c +19 −0 Original line number Diff line number Diff line Loading @@ -1330,6 +1330,24 @@ static void a5xx_pwrlevel_change_settings(struct adreno_device *adreno_dev, } } static void a5xx_enable_64bit(struct adreno_device *adreno_dev) { struct kgsl_device *device = &adreno_dev->dev; kgsl_regwrite(device, A5XX_CP_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_VSC_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_GRAS_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_RB_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_PC_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_HLSQ_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_VFD_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_VPC_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_UCHE_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_SP_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_TPL1_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_RBBM_SECVID_TSB_ADDR_MODE_CNTL, 0x1); } /* * a5xx_start() - Device start * @adreno_dev: Pointer to adreno device Loading Loading @@ -2981,4 +2999,5 @@ struct adreno_gpudev adreno_a5xx_gpudev = { .preemption_init = a5xx_preemption_init, .gpmu_start = a5xx_gpmu_start, .preemption_schedule = a5xx_preemption_schedule, .enable_64bit = a5xx_enable_64bit, }; drivers/gpu/msm/kgsl.c +10 −10 Original line number Diff line number Diff line Loading @@ -2481,7 +2481,7 @@ long kgsl_ioctl_map_user_mem(struct kgsl_device_private *dev_priv, goto error_attach; /* Adjust the returned value for a non 4k aligned offset */ param->gpuaddr = (unsigned int) param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr + (param->offset & PAGE_MASK); KGSL_STATS_ADD(param->len, kgsl_driver.stats.mapped, Loading Loading @@ -2950,8 +2950,8 @@ long kgsl_ioctl_gpumem_alloc(struct kgsl_device_private *dev_priv, if (IS_ERR(entry)) return PTR_ERR(entry); param->gpuaddr = (unsigned int) entry->memdesc.gpuaddr; param->size = (unsigned int) entry->memdesc.size; param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr; param->size = (size_t) entry->memdesc.size; param->flags = (unsigned int) entry->memdesc.flags; return 0; Loading @@ -2972,10 +2972,10 @@ long kgsl_ioctl_gpumem_alloc_id(struct kgsl_device_private *dev_priv, param->id = entry->id; param->flags = (unsigned int) entry->memdesc.flags; param->size = (unsigned int) entry->memdesc.size; param->mmapsize = (unsigned int) param->size = (size_t) entry->memdesc.size; param->mmapsize = (size_t) kgsl_memdesc_mmapsize(&entry->memdesc); param->gpuaddr = (unsigned int) entry->memdesc.gpuaddr; param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr; return 0; } Loading Loading @@ -3004,14 +3004,14 @@ long kgsl_ioctl_gpumem_get_info(struct kgsl_device_private *dev_priv, * truncated, return -ERANGE. That will signal the user that they * should use a more modern API */ if (entry->memdesc.gpuaddr > UINT_MAX) if (entry->memdesc.gpuaddr > ULONG_MAX) result = -ERANGE; param->gpuaddr = (unsigned int) entry->memdesc.gpuaddr; param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr; param->id = entry->id; param->flags = (unsigned int) entry->memdesc.flags; param->size = (unsigned int) entry->memdesc.size; param->mmapsize = (unsigned int) kgsl_memdesc_mmapsize(&entry->memdesc); param->size = (size_t) entry->memdesc.size; param->mmapsize = (size_t) kgsl_memdesc_mmapsize(&entry->memdesc); param->useraddr = entry->memdesc.useraddr; kgsl_mem_entry_put(entry); Loading Loading
drivers/gpu/msm/a5xx_reg.h +14 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ #define A5XX_CP_CONTEXT_SWITCH_SAVE_ADDR_HI 0x83F #define A5XX_CP_CONTEXT_SWITCH_SMMU_INFO_LO 0x840 #define A5XX_CP_CONTEXT_SWITCH_SMMU_INFO_HI 0x841 #define A5XX_CP_ADDR_MODE_CNTL 0x860 #define A5XX_CP_ME_STAT_DATA 0xB14 #define A5XX_CP_WFI_PEND_CTR 0xB15 #define A5XX_CP_INTERRUPT_STATUS 0xB18 Loading @@ -118,6 +119,8 @@ #define A5XX_CP_PERFCTR_CP_SEL_6 0xBB6 #define A5XX_CP_PERFCTR_CP_SEL_7 0xBB7 #define A5XX_VSC_ADDR_MODE_CNTL 0xBC1 /* CP Power Counter Registers Select */ #define A5XX_CP_POWERCTR_CP_SEL_0 0xBBA #define A5XX_CP_POWERCTR_CP_SEL_1 0xBBB Loading Loading @@ -536,6 +539,8 @@ #define A5XX_VSC_PERFCTR_VSC_SEL_0 0xC60 #define A5XX_VSC_PERFCTR_VSC_SEL_1 0xC61 #define A5XX_GRAS_ADDR_MODE_CNTL 0xC81 /* TSE registers */ #define A5XX_GRAS_PERFCTR_TSE_SEL_0 0xC90 #define A5XX_GRAS_PERFCTR_TSE_SEL_1 0xC91 Loading @@ -556,6 +561,7 @@ /* RB registers */ #define A5XX_RB_ADDR_MODE_CNTL 0xCC5 #define A5XX_RB_PERFCTR_RB_SEL_0 0xCD0 #define A5XX_RB_PERFCTR_RB_SEL_1 0xCD1 #define A5XX_RB_PERFCTR_RB_SEL_2 0xCD2 Loading Loading @@ -589,6 +595,7 @@ /* PC registers */ #define A5XX_PC_DBG_ECO_CNTL 0xD00 #define A5XX_PC_ADDR_MODE_CNTL 0xD01 #define A5XX_PC_PERFCTR_PC_SEL_0 0xD10 #define A5XX_PC_PERFCTR_PC_SEL_1 0xD11 #define A5XX_PC_PERFCTR_PC_SEL_2 0xD12 Loading @@ -600,6 +607,7 @@ /* HLSQ registers */ #define A5XX_HLSQ_TIMEOUT_THRESHOLD 0xE00 #define A5XX_HLSQ_ADDR_MODE_CNTL 0xE05 #define A5XX_HLSQ_PERFCTR_HLSQ_SEL_0 0xE10 #define A5XX_HLSQ_PERFCTR_HLSQ_SEL_1 0xE11 #define A5XX_HLSQ_PERFCTR_HLSQ_SEL_2 0xE12 Loading @@ -613,6 +621,7 @@ #define A5XX_HLSQ_DBG_AHB_READ_APERTURE 0xA000 /* VFD registers */ #define A5XX_VFD_ADDR_MODE_CNTL 0xE41 #define A5XX_VFD_PERFCTR_VFD_SEL_0 0xE50 #define A5XX_VFD_PERFCTR_VFD_SEL_1 0xE51 #define A5XX_VFD_PERFCTR_VFD_SEL_2 0xE52 Loading @@ -623,12 +632,15 @@ #define A5XX_VFD_PERFCTR_VFD_SEL_7 0xE57 /* VPC registers */ #define A5XX_VPC_ADDR_MODE_CNTL 0xE61 #define A5XX_VPC_PERFCTR_VPC_SEL_0 0xE64 #define A5XX_VPC_PERFCTR_VPC_SEL_1 0xE65 #define A5XX_VPC_PERFCTR_VPC_SEL_2 0xE66 #define A5XX_VPC_PERFCTR_VPC_SEL_3 0xE67 /* UCHE registers */ #define A5XX_UCHE_ADDR_MODE_CNTL 0xE80 #define A5XX_UCHE_SVM_CNTL 0xE82 #define A5XX_UCHE_WRITE_THRU_BASE_LO 0xE87 #define A5XX_UCHE_WRITE_THRU_BASE_HI 0xE88 #define A5XX_UCHE_TRAP_BASE_LO 0xE89 Loading Loading @@ -656,6 +668,7 @@ /* SP registers */ #define A5XX_SP_DBG_ECO_CNTL 0xEC0 #define A5XX_SP_ADDR_MODE_CNTL 0xEC1 #define A5XX_SP_PERFCTR_SP_SEL_0 0xED0 #define A5XX_SP_PERFCTR_SP_SEL_1 0xED1 #define A5XX_SP_PERFCTR_SP_SEL_2 0xED2 Loading @@ -676,6 +689,7 @@ #define A5XX_SP_POWERCTR_SP_SEL_3 0xEDF /* TP registers */ #define A5XX_TPL1_ADDR_MODE_CNTL 0xF01 #define A5XX_TPL1_PERFCTR_TP_SEL_0 0xF10 #define A5XX_TPL1_PERFCTR_TP_SEL_1 0xF11 #define A5XX_TPL1_PERFCTR_TP_SEL_2 0xF12 Loading
drivers/gpu/msm/adreno.c +5 −0 Original line number Diff line number Diff line Loading @@ -1407,6 +1407,11 @@ static int _adreno_start(struct adreno_device *adreno_dev) goto error_mmu_off; } /* Enable 64 bit gpu addr if feature is set */ if (gpudev->enable_64bit && ADRENO_FEATURE(adreno_dev, ADRENO_64BIT)) gpudev->enable_64bit(adreno_dev); if (adreno_dev->perfctr_pwr_lo == 0) { int ret = adreno_perfcounter_get(adreno_dev, KGSL_PERFCOUNTER_GROUP_PWR, 1, Loading
drivers/gpu/msm/adreno.h +3 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,8 @@ #define ADRENO_GPMU BIT(8) /* The GPMU supports Limits Management */ #define ADRENO_LM BIT(9) /* The core uses 64 bit GPU addresses */ #define ADRENO_64BIT BIT(10) /* Flags to control command packet settings */ #define KGSL_CMD_FLAGS_NONE 0 Loading Loading @@ -671,6 +673,7 @@ struct adreno_gpudev { uint64_t gpuaddr); void (*preemption_init)(struct adreno_device *); void (*preemption_schedule)(struct adreno_device *); void (*enable_64bit)(struct adreno_device *); }; struct log_field { Loading
drivers/gpu/msm/adreno_a5xx.c +19 −0 Original line number Diff line number Diff line Loading @@ -1330,6 +1330,24 @@ static void a5xx_pwrlevel_change_settings(struct adreno_device *adreno_dev, } } static void a5xx_enable_64bit(struct adreno_device *adreno_dev) { struct kgsl_device *device = &adreno_dev->dev; kgsl_regwrite(device, A5XX_CP_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_VSC_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_GRAS_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_RB_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_PC_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_HLSQ_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_VFD_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_VPC_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_UCHE_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_SP_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_TPL1_ADDR_MODE_CNTL, 0x1); kgsl_regwrite(device, A5XX_RBBM_SECVID_TSB_ADDR_MODE_CNTL, 0x1); } /* * a5xx_start() - Device start * @adreno_dev: Pointer to adreno device Loading Loading @@ -2981,4 +2999,5 @@ struct adreno_gpudev adreno_a5xx_gpudev = { .preemption_init = a5xx_preemption_init, .gpmu_start = a5xx_gpmu_start, .preemption_schedule = a5xx_preemption_schedule, .enable_64bit = a5xx_enable_64bit, };
drivers/gpu/msm/kgsl.c +10 −10 Original line number Diff line number Diff line Loading @@ -2481,7 +2481,7 @@ long kgsl_ioctl_map_user_mem(struct kgsl_device_private *dev_priv, goto error_attach; /* Adjust the returned value for a non 4k aligned offset */ param->gpuaddr = (unsigned int) param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr + (param->offset & PAGE_MASK); KGSL_STATS_ADD(param->len, kgsl_driver.stats.mapped, Loading Loading @@ -2950,8 +2950,8 @@ long kgsl_ioctl_gpumem_alloc(struct kgsl_device_private *dev_priv, if (IS_ERR(entry)) return PTR_ERR(entry); param->gpuaddr = (unsigned int) entry->memdesc.gpuaddr; param->size = (unsigned int) entry->memdesc.size; param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr; param->size = (size_t) entry->memdesc.size; param->flags = (unsigned int) entry->memdesc.flags; return 0; Loading @@ -2972,10 +2972,10 @@ long kgsl_ioctl_gpumem_alloc_id(struct kgsl_device_private *dev_priv, param->id = entry->id; param->flags = (unsigned int) entry->memdesc.flags; param->size = (unsigned int) entry->memdesc.size; param->mmapsize = (unsigned int) param->size = (size_t) entry->memdesc.size; param->mmapsize = (size_t) kgsl_memdesc_mmapsize(&entry->memdesc); param->gpuaddr = (unsigned int) entry->memdesc.gpuaddr; param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr; return 0; } Loading Loading @@ -3004,14 +3004,14 @@ long kgsl_ioctl_gpumem_get_info(struct kgsl_device_private *dev_priv, * truncated, return -ERANGE. That will signal the user that they * should use a more modern API */ if (entry->memdesc.gpuaddr > UINT_MAX) if (entry->memdesc.gpuaddr > ULONG_MAX) result = -ERANGE; param->gpuaddr = (unsigned int) entry->memdesc.gpuaddr; param->gpuaddr = (unsigned long) entry->memdesc.gpuaddr; param->id = entry->id; param->flags = (unsigned int) entry->memdesc.flags; param->size = (unsigned int) entry->memdesc.size; param->mmapsize = (unsigned int) kgsl_memdesc_mmapsize(&entry->memdesc); param->size = (size_t) entry->memdesc.size; param->mmapsize = (size_t) kgsl_memdesc_mmapsize(&entry->memdesc); param->useraddr = entry->memdesc.useraddr; kgsl_mem_entry_put(entry); Loading