blob: 72abdc93406811cb5b7f0803593935b72b89d280 [file] [log] [blame]
/* Copyright (c) 2002,2007-2014, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#define ANY_ID (~0)
#define NO_VER (~0)
/**
* struct adreno_gpudev - GPU device definition
* @gpurev: Unique GPU revision identifier
* @core: Match for the core version of the GPU
* @major: Match for the major version of the GPU
* @minor: Match for the minor version of the GPU
* @patchid: Match for the patch revision of the GPU
* @features: Common adreno features supported by this core
* @pm4fw: Filename for th PM4 firmware
* @pfpfw: Filename for the PFP firmware
* @gpudev: Pointer to the GPU family specific functions for this core
* @gmem_size: Amount of binning memory (GMEM/OCMEM) to reserve for the core
* @sync_lock_pm4_ver: For IOMMUv0 cores the version of PM4 microcode that
* supports the sync lock mechanism
* @sync_lock_pfp_ver: For IOMMUv0 cores the version of PFP microcode that
* supports the sync lock mechanism
* @pm4_jt_idx: Index of the jump table in the PM4 microcode
* @pm4_jt_addr: Address offset to load the jump table for the PM4 microcode
* @pfp_jt_idx: Index of the jump table in the PFP microcode
* @pfp_jt_addr: Address offset to load the jump table for the PFP microcode
* @pm4_bstrp_size: Size of the bootstrap loader for PM4 microcode
* @pfp_bstrp_size: Size of the bootstrap loader for PFP microcde
* @pfp_bstrp_ver: Version of the PFP microcode that supports bootstraping
*/
static const struct adreno_gpulist {
enum adreno_gpurev gpurev;
unsigned int core, major, minor, patchid;
unsigned long features;
const char *pm4fw;
const char *pfpfw;
struct adreno_gpudev *gpudev;
unsigned int gmem_size;
unsigned int sync_lock_pm4_ver;
unsigned int sync_lock_pfp_ver;
unsigned int pm4_jt_idx;
unsigned int pm4_jt_addr;
unsigned int pfp_jt_idx;
unsigned int pfp_jt_addr;
unsigned int pm4_bstrp_size;
unsigned int pfp_bstrp_size;
unsigned int pfp_bstrp_ver;
} adreno_gpulist[] = {
{
.gpurev = ADRENO_REV_A305,
.core = 3,
.major = 0,
.minor = 5,
.patchid = 0,
.pm4fw = "a300_pm4.fw",
.pfpfw = "a300_pfp.fw",
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_256K,
.sync_lock_pm4_ver = 0x3FF037,
.sync_lock_pfp_ver = 0x3FF016,
},
{
.gpurev = ADRENO_REV_A320,
.core = 3,
.major = 2,
.minor = ANY_ID,
.patchid = ANY_ID,
.pm4fw = "a300_pm4.fw",
.pfpfw = "a300_pfp.fw",
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_512K,
.sync_lock_pm4_ver = 0x3FF037,
.sync_lock_pfp_ver = 0x3FF016,
},
{
.gpurev = ADRENO_REV_A330,
.core = 3,
.major = 3,
.minor = 0,
.patchid = ANY_ID,
.features = ADRENO_USES_OCMEM | IOMMU_FLUSH_TLB_ON_MAP,
.pm4fw = "a330_pm4.fw",
.pfpfw = "a330_pfp.fw",
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_1M,
.sync_lock_pm4_ver = NO_VER,
.sync_lock_pfp_ver = NO_VER,
.pm4_jt_idx = 0x8AD,
.pm4_jt_addr = 0x2E4,
.pfp_jt_idx = 0x201,
.pfp_jt_addr = 0x200,
.pm4_bstrp_size = 0x6,
.pfp_bstrp_size = 0x20,
.pfp_bstrp_ver = 0x330020,
},
/* 8226v1 */
{
.gpurev = ADRENO_REV_A305B,
.core = 3,
.major = 0,
.minor = 5,
.patchid = 0x10,
.pm4fw = "a330_pm4.fw",
.pfpfw = "a330_pfp.fw",
.features = ADRENO_USES_OCMEM | IOMMU_FLUSH_TLB_ON_MAP,
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_128K,
.sync_lock_pm4_ver = NO_VER,
.sync_lock_pfp_ver = NO_VER,
.pm4_jt_idx = 0x8AD,
.pm4_jt_addr = 0x2E4,
.pfp_jt_idx = 0x201,
.pfp_jt_addr = 0x200,
},
/* 8226v2 */
{
.gpurev = ADRENO_REV_A305B,
.core = 3,
.major = 0,
.minor = 5,
.patchid = 0x12,
.features = ADRENO_USES_OCMEM | IOMMU_FLUSH_TLB_ON_MAP,
.pm4fw = "a330_pm4.fw",
.pfpfw = "a330_pfp.fw",
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_128K,
.sync_lock_pm4_ver = NO_VER,
.sync_lock_pfp_ver = NO_VER,
.pm4_jt_idx = 0x8AD,
.pm4_jt_addr = 0x2E4,
.pfp_jt_idx = 0x201,
.pfp_jt_addr = 0x200,
},
/*8x10 */
{
.gpurev = ADRENO_REV_A305C,
.core = 3,
.major = 0,
.minor = 5,
.patchid = 0x20,
.pm4fw = "a300_pm4.fw",
.pfpfw = "a300_pfp.fw",
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_128K,
.sync_lock_pm4_ver = 0x3FF037,
.sync_lock_pfp_ver = 0x3FF016,
},
{
.gpurev = ADRENO_REV_A306,
.core = 3,
.major = 0,
.minor = 6,
.patchid = 0x00,
.pm4fw = "a300_pm4.fw",
.pfpfw = "a300_pfp.fw",
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_128K,
.sync_lock_pm4_ver = NO_VER,
.sync_lock_pfp_ver = NO_VER,
},
{
.gpurev = ADRENO_REV_A310,
.core = 3,
.major = 1,
.minor = 0,
.patchid = 0x10,
.features = ADRENO_USES_OCMEM,
.pm4fw = "a330_pm4.fw",
.pfpfw = "a330_pfp.fw",
.gpudev = &adreno_a3xx_gpudev,
.gmem_size = SZ_512K,
.sync_lock_pm4_ver = NO_VER,
.sync_lock_pfp_ver = NO_VER,
.pm4_jt_idx = 0x8AD,
.pm4_jt_addr = 0x2E4,
.pfp_jt_idx = 0x201,
.pfp_jt_addr = 0x200,
},
{
.gpurev = ADRENO_REV_A420,
.core = 4,
.major = 2,
.minor = 0,
.patchid = ANY_ID,
.features = ADRENO_USES_OCMEM | IOMMU_FLUSH_TLB_ON_MAP,
.pm4fw = "a420_pm4.fw",
.pfpfw = "a420_pfp.fw",
.gpudev = &adreno_a4xx_gpudev,
.gmem_size = (SZ_1M + SZ_512K),
.sync_lock_pm4_ver = NO_VER,
.sync_lock_pfp_ver = NO_VER,
.pm4_jt_idx = 0x901,
.pm4_jt_addr = 0x300,
.pfp_jt_idx = 0x401,
.pfp_jt_addr = 0x400,
.pm4_bstrp_size = 0x06,
.pfp_bstrp_size = 0x28,
.pfp_bstrp_ver = 0x4ff083,
},
};