Merge "msm: kgsl: Add support for A508 GPU on SDM630"
This commit is contained in:
commit
8c3934fc84
3 changed files with 26 additions and 5 deletions
|
@ -299,4 +299,20 @@ static const struct adreno_gpu_core adreno_gpulist[] = {
|
||||||
.num_protected_regs = 0x20,
|
.num_protected_regs = 0x20,
|
||||||
.busy_mask = 0xFFFFFFFE,
|
.busy_mask = 0xFFFFFFFE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.gpurev = ADRENO_REV_A508,
|
||||||
|
.core = 5,
|
||||||
|
.major = 0,
|
||||||
|
.minor = 8,
|
||||||
|
.patchid = ANY_ID,
|
||||||
|
.features = ADRENO_PREEMPTION | ADRENO_64BIT |
|
||||||
|
ADRENO_CONTENT_PROTECTION | ADRENO_CPZ_RETENTION,
|
||||||
|
.pm4fw_name = "a530_pm4.fw",
|
||||||
|
.pfpfw_name = "a530_pfp.fw",
|
||||||
|
.zap_name = "a508_zap",
|
||||||
|
.gpudev = &adreno_a5xx_gpudev,
|
||||||
|
.gmem_size = (SZ_128K + SZ_8K),
|
||||||
|
.num_protected_regs = 0x20,
|
||||||
|
.busy_mask = 0xFFFFFFFE,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -169,6 +169,7 @@ enum adreno_gpurev {
|
||||||
ADRENO_REV_A430 = 430,
|
ADRENO_REV_A430 = 430,
|
||||||
ADRENO_REV_A505 = 505,
|
ADRENO_REV_A505 = 505,
|
||||||
ADRENO_REV_A506 = 506,
|
ADRENO_REV_A506 = 506,
|
||||||
|
ADRENO_REV_A508 = 508,
|
||||||
ADRENO_REV_A510 = 510,
|
ADRENO_REV_A510 = 510,
|
||||||
ADRENO_REV_A512 = 512,
|
ADRENO_REV_A512 = 512,
|
||||||
ADRENO_REV_A530 = 530,
|
ADRENO_REV_A530 = 530,
|
||||||
|
@ -1002,6 +1003,7 @@ static inline int adreno_is_a5xx(struct adreno_device *adreno_dev)
|
||||||
|
|
||||||
ADRENO_TARGET(a505, ADRENO_REV_A505)
|
ADRENO_TARGET(a505, ADRENO_REV_A505)
|
||||||
ADRENO_TARGET(a506, ADRENO_REV_A506)
|
ADRENO_TARGET(a506, ADRENO_REV_A506)
|
||||||
|
ADRENO_TARGET(a508, ADRENO_REV_A508)
|
||||||
ADRENO_TARGET(a510, ADRENO_REV_A510)
|
ADRENO_TARGET(a510, ADRENO_REV_A510)
|
||||||
ADRENO_TARGET(a512, ADRENO_REV_A512)
|
ADRENO_TARGET(a512, ADRENO_REV_A512)
|
||||||
ADRENO_TARGET(a530, ADRENO_REV_A530)
|
ADRENO_TARGET(a530, ADRENO_REV_A530)
|
||||||
|
|
|
@ -59,6 +59,7 @@ static const struct adreno_vbif_platform a5xx_vbif_platforms[] = {
|
||||||
{ adreno_is_a530, a530_vbif },
|
{ adreno_is_a530, a530_vbif },
|
||||||
{ adreno_is_a512, a540_vbif },
|
{ adreno_is_a512, a540_vbif },
|
||||||
{ adreno_is_a510, a530_vbif },
|
{ adreno_is_a510, a530_vbif },
|
||||||
|
{ adreno_is_a508, a530_vbif },
|
||||||
{ adreno_is_a505, a530_vbif },
|
{ adreno_is_a505, a530_vbif },
|
||||||
{ adreno_is_a506, a530_vbif },
|
{ adreno_is_a506, a530_vbif },
|
||||||
};
|
};
|
||||||
|
@ -182,7 +183,7 @@ static void a5xx_platform_setup(struct adreno_device *adreno_dev)
|
||||||
uint64_t addr;
|
uint64_t addr;
|
||||||
struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
|
struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
|
||||||
|
|
||||||
if (adreno_is_a505_or_a506(adreno_dev)) {
|
if (adreno_is_a505_or_a506(adreno_dev) || adreno_is_a508(adreno_dev)) {
|
||||||
gpudev->snapshot_data->sect_sizes->cp_meq = 32;
|
gpudev->snapshot_data->sect_sizes->cp_meq = 32;
|
||||||
gpudev->snapshot_data->sect_sizes->cp_merciu = 1024;
|
gpudev->snapshot_data->sect_sizes->cp_merciu = 1024;
|
||||||
gpudev->snapshot_data->sect_sizes->roq = 256;
|
gpudev->snapshot_data->sect_sizes->roq = 256;
|
||||||
|
@ -537,7 +538,7 @@ static void a5xx_regulator_disable(struct adreno_device *adreno_dev)
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
|
struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
|
||||||
|
|
||||||
if (adreno_is_a512(adreno_dev))
|
if (adreno_is_a512(adreno_dev) || adreno_is_a508(adreno_dev))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* If feature is not supported or not enabled */
|
/* If feature is not supported or not enabled */
|
||||||
|
@ -1195,6 +1196,7 @@ static const struct {
|
||||||
{ adreno_is_a510, a510_hwcg_regs, ARRAY_SIZE(a510_hwcg_regs) },
|
{ adreno_is_a510, a510_hwcg_regs, ARRAY_SIZE(a510_hwcg_regs) },
|
||||||
{ adreno_is_a505, a50x_hwcg_regs, ARRAY_SIZE(a50x_hwcg_regs) },
|
{ adreno_is_a505, a50x_hwcg_regs, ARRAY_SIZE(a50x_hwcg_regs) },
|
||||||
{ adreno_is_a506, a50x_hwcg_regs, ARRAY_SIZE(a50x_hwcg_regs) },
|
{ adreno_is_a506, a50x_hwcg_regs, ARRAY_SIZE(a50x_hwcg_regs) },
|
||||||
|
{ adreno_is_a508, a50x_hwcg_regs, ARRAY_SIZE(a50x_hwcg_regs) },
|
||||||
};
|
};
|
||||||
|
|
||||||
void a5xx_hwcg_set(struct adreno_device *adreno_dev, bool on)
|
void a5xx_hwcg_set(struct adreno_device *adreno_dev, bool on)
|
||||||
|
@ -1640,7 +1642,8 @@ static void a5xx_clk_set_options(struct adreno_device *adreno_dev,
|
||||||
const char *name, struct clk *clk)
|
const char *name, struct clk *clk)
|
||||||
{
|
{
|
||||||
/* Handle clock settings for GFX PSCBCs */
|
/* Handle clock settings for GFX PSCBCs */
|
||||||
if (adreno_is_a540(adreno_dev) || adreno_is_a512(adreno_dev)) {
|
if (adreno_is_a540(adreno_dev) || adreno_is_a512(adreno_dev) ||
|
||||||
|
adreno_is_a508(adreno_dev)) {
|
||||||
if (!strcmp(name, "mem_iface_clk")) {
|
if (!strcmp(name, "mem_iface_clk")) {
|
||||||
clk_set_flags(clk, CLKFLAG_NORETAIN_PERIPH);
|
clk_set_flags(clk, CLKFLAG_NORETAIN_PERIPH);
|
||||||
clk_set_flags(clk, CLKFLAG_NORETAIN_MEM);
|
clk_set_flags(clk, CLKFLAG_NORETAIN_MEM);
|
||||||
|
@ -1927,7 +1930,7 @@ static void a5xx_start(struct adreno_device *adreno_dev)
|
||||||
* Below CP registers are 0x0 by default, program init
|
* Below CP registers are 0x0 by default, program init
|
||||||
* values based on a5xx flavor.
|
* values based on a5xx flavor.
|
||||||
*/
|
*/
|
||||||
if (adreno_is_a505_or_a506(adreno_dev)) {
|
if (adreno_is_a505_or_a506(adreno_dev) || adreno_is_a508(adreno_dev)) {
|
||||||
kgsl_regwrite(device, A5XX_CP_MEQ_THRESHOLDS, 0x20);
|
kgsl_regwrite(device, A5XX_CP_MEQ_THRESHOLDS, 0x20);
|
||||||
kgsl_regwrite(device, A5XX_CP_MERCIU_SIZE, 0x400);
|
kgsl_regwrite(device, A5XX_CP_MERCIU_SIZE, 0x400);
|
||||||
kgsl_regwrite(device, A5XX_CP_ROQ_THRESHOLDS_2, 0x40000030);
|
kgsl_regwrite(device, A5XX_CP_ROQ_THRESHOLDS_2, 0x40000030);
|
||||||
|
@ -1953,7 +1956,7 @@ static void a5xx_start(struct adreno_device *adreno_dev)
|
||||||
* vtxFifo and primFifo thresholds default values
|
* vtxFifo and primFifo thresholds default values
|
||||||
* are different.
|
* are different.
|
||||||
*/
|
*/
|
||||||
if (adreno_is_a505_or_a506(adreno_dev))
|
if (adreno_is_a505_or_a506(adreno_dev) || adreno_is_a508(adreno_dev))
|
||||||
kgsl_regwrite(device, A5XX_PC_DBG_ECO_CNTL,
|
kgsl_regwrite(device, A5XX_PC_DBG_ECO_CNTL,
|
||||||
(0x100 << 11 | 0x100 << 22));
|
(0x100 << 11 | 0x100 << 22));
|
||||||
else if (adreno_is_a510(adreno_dev) || adreno_is_a512(adreno_dev))
|
else if (adreno_is_a510(adreno_dev) || adreno_is_a512(adreno_dev))
|
||||||
|
|
Loading…
Add table
Reference in a new issue