mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-09-10 01:12:45 -04:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
796
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-asv.c
Normal file
796
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-asv.c
Normal file
|
@ -0,0 +1,796 @@
|
|||
#include "../pwrcal-env.h"
|
||||
#include "../pwrcal-rae.h"
|
||||
#include "../pwrcal-asv.h"
|
||||
#include "S5E8890-cmusfr.h"
|
||||
#include "S5E8890-cmu.h"
|
||||
#include "S5E8890-vclk.h"
|
||||
#include "S5E8890-vclk-internal.h"
|
||||
|
||||
#include <soc/samsung/ect_parser.h>
|
||||
|
||||
#ifdef PWRCAL_TARGET_LINUX
|
||||
#include <linux/io.h>
|
||||
#include <asm/map.h>
|
||||
#endif
|
||||
#ifdef PWRCAL_TARGET_FW
|
||||
#define S5P_VA_APM_SRAM ((void *)0x11200000)
|
||||
#endif
|
||||
|
||||
#define EXYNOS_MAILBOX_RCC_MIN_MAX(x) (S5P_VA_APM_SRAM + (0x3700) + (x * 0x4))
|
||||
#define EXYNOS_MAILBOX_ATLAS_RCC(x) (S5P_VA_APM_SRAM + (0x3730) + (x * 0x4))
|
||||
#define EXYNOS_MAILBOX_APOLLO_RCC(x) (S5P_VA_APM_SRAM + (0x3798) + (x * 0x4))
|
||||
#define EXYNOS_MAILBOX_G3D_RCC(x) (S5P_VA_APM_SRAM + (0x37EC) + (x * 0x4))
|
||||
#define EXYNOS_MAILBOX_MIF_RCC(x) (S5P_VA_APM_SRAM + (0x381C) + (x * 0x4))
|
||||
|
||||
|
||||
enum dvfs_id {
|
||||
cal_asv_dvfs_big,
|
||||
cal_asv_dvfs_little,
|
||||
cal_asv_dvfs_g3d,
|
||||
cal_asv_dvfs_mif,
|
||||
cal_asv_dvfs_int,
|
||||
cal_asv_dvfs_cam,
|
||||
cal_asv_dvfs_disp,
|
||||
num_of_dvfs,
|
||||
};
|
||||
|
||||
#define MAX_ASV_GROUP 16
|
||||
#define NUM_OF_ASVTABLE 1
|
||||
#define PWRCAL_ASV_LIST(table) {table, sizeof(table) / sizeof(table[0])}
|
||||
|
||||
struct asv_table_entry {
|
||||
unsigned int index;
|
||||
unsigned int *voltage;
|
||||
};
|
||||
|
||||
struct asv_table_list {
|
||||
struct asv_table_entry *table;
|
||||
unsigned int table_size;
|
||||
unsigned int voltage_count;
|
||||
};
|
||||
|
||||
#define FORCE_ASV_MAGIC 0x57E90000
|
||||
static unsigned int force_asv_group[num_of_dvfs];
|
||||
|
||||
#define APM_OTP_ADDRESS 0x101E9018
|
||||
#define APM_TABLE_BASE 0x11203700
|
||||
#define APM_FUSE_TABLE_BASE APM_TABLE_BASE
|
||||
#define APM_RCC_TABLE_BASE (APM_TABLE_BASE + 0x0030)
|
||||
static void *apm_sram_base;
|
||||
|
||||
struct asv_tbl_info {
|
||||
unsigned mngs_asv_group:4;
|
||||
int mngs_modified_group:4;
|
||||
unsigned mngs_ssa10:2;
|
||||
unsigned mngs_ssa11:2;
|
||||
unsigned mngs_ssa0:4;
|
||||
unsigned apollo_asv_group:4;
|
||||
int apollo_modified_group:4;
|
||||
unsigned apollo_ssa10:2;
|
||||
unsigned apollo_ssa11:2;
|
||||
unsigned apollo_ssa0:4;
|
||||
|
||||
unsigned g3d_asv_group:4;
|
||||
int g3d_modified_group:4;
|
||||
unsigned g3d_ssa10:2;
|
||||
unsigned g3d_ssa11:2;
|
||||
unsigned g3d_ssa0:4;
|
||||
unsigned mif_asv_group:4;
|
||||
int mif_modified_group:4;
|
||||
unsigned mif_ssa10:2;
|
||||
unsigned mif_ssa11:2;
|
||||
unsigned mif_ssa0:4;
|
||||
|
||||
unsigned int_asv_group:4;
|
||||
int int_modified_group:4;
|
||||
unsigned int_ssa10:2;
|
||||
unsigned int_ssa11:2;
|
||||
unsigned int_ssa0:4;
|
||||
unsigned disp_asv_group:4;
|
||||
int disp_modified_group:4;
|
||||
unsigned disp_ssa10:2;
|
||||
unsigned disp_ssa11:2;
|
||||
unsigned disp_ssa0:4;
|
||||
|
||||
unsigned asv_table_ver:7;
|
||||
unsigned fused_grp:1;
|
||||
unsigned reserved_0:12;
|
||||
unsigned g3d_mcs0:4;
|
||||
unsigned g3d_mcs1:4;
|
||||
};
|
||||
#define ASV_INFO_ADDR_BASE (0x101E9000)
|
||||
#define ASV_INFO_ADDR_CNT (sizeof(struct asv_tbl_info) / 4)
|
||||
|
||||
static struct asv_tbl_info asv_tbl_info;
|
||||
|
||||
static struct asv_table_list *pwrcal_big_asv_table;
|
||||
static struct asv_table_list *pwrcal_little_asv_table;
|
||||
static struct asv_table_list *pwrcal_g3d_asv_table;
|
||||
static struct asv_table_list *pwrcal_mif_asv_table;
|
||||
static struct asv_table_list *pwrcal_int_asv_table;
|
||||
static struct asv_table_list *pwrcal_cam_asv_table;
|
||||
static struct asv_table_list *pwrcal_disp_asv_table;
|
||||
|
||||
static struct asv_table_list *pwrcal_big_rcc_table;
|
||||
static struct asv_table_list *pwrcal_little_rcc_table;
|
||||
static struct asv_table_list *pwrcal_g3d_rcc_table;
|
||||
static struct asv_table_list *pwrcal_mif_rcc_table;
|
||||
|
||||
static struct pwrcal_vclk_dfs *asv_dvfs_big;
|
||||
static struct pwrcal_vclk_dfs *asv_dvfs_little;
|
||||
static struct pwrcal_vclk_dfs *asv_dvfs_g3d;
|
||||
static struct pwrcal_vclk_dfs *asv_dvfs_mif;
|
||||
static struct pwrcal_vclk_dfs *asv_dvfs_int;
|
||||
static struct pwrcal_vclk_dfs *asv_dvfs_cam;
|
||||
static struct pwrcal_vclk_dfs *asv_dvfs_disp;
|
||||
|
||||
|
||||
static void asv_set_grp(unsigned int id, unsigned int asvgrp)
|
||||
{
|
||||
force_asv_group[id & 0x0000FFFF] = FORCE_ASV_MAGIC | asvgrp;
|
||||
}
|
||||
|
||||
static void asv_set_tablever(unsigned int version)
|
||||
{
|
||||
asv_tbl_info.asv_table_ver = version;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static struct freq_limit {
|
||||
unsigned int big_max;
|
||||
unsigned int little_max;
|
||||
unsigned int g3d_max;
|
||||
unsigned int mif_max;
|
||||
unsigned int int_max;
|
||||
unsigned int cam_max;
|
||||
unsigned int disp_max;
|
||||
} freq_limit_policy[] = {
|
||||
[0] = {
|
||||
.big_max = 1872000,
|
||||
.little_max = 1378000,
|
||||
.g3d_max = 600000,
|
||||
.mif_max = 1539000,
|
||||
},
|
||||
[1] = {
|
||||
.big_max = 1872000,
|
||||
.little_max = 1378000,
|
||||
.g3d_max = 600000,
|
||||
.mif_max = 1539000,
|
||||
},
|
||||
};
|
||||
static void asv_set_freq_limit(void)
|
||||
{
|
||||
if (!asv_tbl_info.fused_grp) {
|
||||
asv_dvfs_big->table->max_freq = 728000;
|
||||
asv_dvfs_little->table->max_freq = 1274000;
|
||||
asv_dvfs_g3d->table->max_freq = 260000;
|
||||
asv_dvfs_mif->table->max_freq = 1144000;
|
||||
} else {
|
||||
if (freq_limit_policy[asv_tbl_info.asv_table_ver].big_max)
|
||||
asv_dvfs_big->table->max_freq = freq_limit_policy[asv_tbl_info.asv_table_ver].big_max;
|
||||
if (freq_limit_policy[asv_tbl_info.asv_table_ver].little_max)
|
||||
asv_dvfs_little->table->max_freq = freq_limit_policy[asv_tbl_info.asv_table_ver].little_max;
|
||||
if (freq_limit_policy[asv_tbl_info.asv_table_ver].g3d_max)
|
||||
asv_dvfs_g3d->table->max_freq = freq_limit_policy[asv_tbl_info.asv_table_ver].g3d_max;
|
||||
if (freq_limit_policy[asv_tbl_info.asv_table_ver].mif_max)
|
||||
asv_dvfs_mif->table->max_freq = freq_limit_policy[asv_tbl_info.asv_table_ver].mif_max;
|
||||
if (freq_limit_policy[asv_tbl_info.asv_table_ver].int_max)
|
||||
asv_dvfs_int->table->max_freq = freq_limit_policy[asv_tbl_info.asv_table_ver].int_max;
|
||||
if (freq_limit_policy[asv_tbl_info.asv_table_ver].cam_max)
|
||||
asv_dvfs_cam->table->max_freq = freq_limit_policy[asv_tbl_info.asv_table_ver].cam_max;
|
||||
if (freq_limit_policy[asv_tbl_info.asv_table_ver].disp_max)
|
||||
asv_dvfs_disp->table->max_freq = freq_limit_policy[asv_tbl_info.asv_table_ver].disp_max;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static void asv_get_asvinfo(void)
|
||||
{
|
||||
int i;
|
||||
unsigned int *pasv_table;
|
||||
unsigned long tmp;
|
||||
|
||||
pasv_table = (unsigned int *)&asv_tbl_info;
|
||||
for (i = 0; i < ASV_INFO_ADDR_CNT; i++) {
|
||||
#ifdef PWRCAL_TARGET_LINUX
|
||||
exynos_smc_readsfr((unsigned long)(ASV_INFO_ADDR_BASE + 0x4 * i), &tmp);
|
||||
#else
|
||||
#if (CONFIG_STARTUP_EL_MODE == STARTUP_EL3)
|
||||
tmp = *((volatile unsigned int *)(unsigned long)(ASV_INFO_ADDR_BASE + 0x4 * i));
|
||||
#else
|
||||
smc_readsfr((unsigned long)(ASV_INFO_ADDR_BASE + 0x4 * i), &tmp);
|
||||
#endif
|
||||
#endif
|
||||
*(pasv_table + i) = (unsigned int)tmp;
|
||||
}
|
||||
|
||||
if (!asv_tbl_info.fused_grp) {
|
||||
asv_tbl_info.mngs_asv_group = 0;
|
||||
asv_tbl_info.mngs_modified_group = 0;
|
||||
asv_tbl_info.mngs_ssa10 = 0;
|
||||
asv_tbl_info.mngs_ssa11 = 0;
|
||||
asv_tbl_info.mngs_ssa0 = 0;
|
||||
asv_tbl_info.apollo_asv_group = 0;
|
||||
asv_tbl_info.apollo_modified_group = 0;
|
||||
asv_tbl_info.apollo_ssa10 = 0;
|
||||
asv_tbl_info.apollo_ssa11 = 0;
|
||||
asv_tbl_info.apollo_ssa0 = 0;
|
||||
|
||||
asv_tbl_info.g3d_asv_group = 0;
|
||||
asv_tbl_info.g3d_modified_group = 0;
|
||||
asv_tbl_info.g3d_ssa10 = 0;
|
||||
asv_tbl_info.g3d_ssa11 = 0;
|
||||
asv_tbl_info.g3d_ssa0 = 0;
|
||||
asv_tbl_info.mif_asv_group = 0;
|
||||
asv_tbl_info.mif_modified_group = 0;
|
||||
asv_tbl_info.mif_ssa10 = 0;
|
||||
asv_tbl_info.mif_ssa11 = 0;
|
||||
asv_tbl_info.mif_ssa0 = 0;
|
||||
|
||||
asv_tbl_info.int_asv_group = 0;
|
||||
asv_tbl_info.int_modified_group = 0;
|
||||
asv_tbl_info.int_ssa10 = 0;
|
||||
asv_tbl_info.int_ssa11 = 0;
|
||||
asv_tbl_info.int_ssa0 = 0;
|
||||
asv_tbl_info.disp_asv_group = 0;
|
||||
asv_tbl_info.disp_modified_group = 0;
|
||||
asv_tbl_info.disp_ssa10 = 0;
|
||||
asv_tbl_info.disp_ssa11 = 0;
|
||||
asv_tbl_info.disp_ssa0 = 0;
|
||||
|
||||
asv_tbl_info.asv_table_ver = 0;
|
||||
asv_tbl_info.fused_grp = 0;
|
||||
asv_tbl_info.reserved_0 = 0;
|
||||
asv_tbl_info.g3d_mcs0 = 0;
|
||||
asv_tbl_info.g3d_mcs1 = 0;
|
||||
}
|
||||
|
||||
if (asv_tbl_info.g3d_mcs0 == 0)
|
||||
asv_tbl_info.g3d_mcs0 = 0x5;
|
||||
if (asv_tbl_info.g3d_mcs1 == 0)
|
||||
asv_tbl_info.g3d_mcs1 = 0xE;
|
||||
|
||||
asv_set_freq_limit();
|
||||
}
|
||||
|
||||
static int get_asv_group(enum dvfs_id domain, unsigned int lv)
|
||||
{
|
||||
int asv = 0;
|
||||
int mod = 0;
|
||||
|
||||
switch (domain) {
|
||||
case cal_asv_dvfs_big:
|
||||
asv = asv_tbl_info.mngs_asv_group;
|
||||
mod = asv_tbl_info.mngs_modified_group;
|
||||
break;
|
||||
case cal_asv_dvfs_little:
|
||||
asv = asv_tbl_info.apollo_asv_group;
|
||||
mod = asv_tbl_info.apollo_modified_group;
|
||||
break;
|
||||
case cal_asv_dvfs_g3d:
|
||||
asv = asv_tbl_info.g3d_asv_group;
|
||||
mod = asv_tbl_info.g3d_modified_group;
|
||||
break;
|
||||
case cal_asv_dvfs_mif:
|
||||
asv = asv_tbl_info.mif_asv_group;
|
||||
mod = asv_tbl_info.mif_modified_group;
|
||||
break;
|
||||
case cal_asv_dvfs_int:
|
||||
asv = asv_tbl_info.int_asv_group;
|
||||
mod = asv_tbl_info.int_modified_group;
|
||||
break;
|
||||
case cal_asv_dvfs_cam:
|
||||
asv = asv_tbl_info.disp_asv_group;
|
||||
mod = asv_tbl_info.disp_modified_group;
|
||||
break;
|
||||
case cal_asv_dvfs_disp:
|
||||
asv = asv_tbl_info.disp_asv_group;
|
||||
mod = asv_tbl_info.disp_modified_group;
|
||||
break;
|
||||
default:
|
||||
BUG(); /* Never reach */
|
||||
break;
|
||||
}
|
||||
|
||||
if ((force_asv_group[domain & 0x0000FFFF] & 0xFFFF0000) != FORCE_ASV_MAGIC) {
|
||||
if (mod)
|
||||
asv += mod;
|
||||
} else {
|
||||
asv = force_asv_group[domain & 0x0000FFFF] & 0x0000FFFF;
|
||||
}
|
||||
|
||||
if (asv < 0 || asv >= MAX_ASV_GROUP)
|
||||
BUG(); /* Never reach */
|
||||
|
||||
return asv;
|
||||
}
|
||||
|
||||
static unsigned int get_asv_voltage(enum dvfs_id domain, unsigned int lv)
|
||||
{
|
||||
int asv;
|
||||
unsigned int ssa10, ssa11;
|
||||
unsigned int ssa0;
|
||||
unsigned int subgrp_index;
|
||||
const unsigned int *table;
|
||||
unsigned int volt;
|
||||
|
||||
switch (domain) {
|
||||
case cal_asv_dvfs_big:
|
||||
asv = get_asv_group(cal_asv_dvfs_big, lv);
|
||||
ssa10 = asv_tbl_info.mngs_ssa10;
|
||||
ssa11 = asv_tbl_info.mngs_ssa11;
|
||||
ssa0 = asv_tbl_info.mngs_ssa0;
|
||||
subgrp_index = 16;
|
||||
table = pwrcal_big_asv_table[asv_tbl_info.asv_table_ver].table[lv].voltage;
|
||||
break;
|
||||
case cal_asv_dvfs_little:
|
||||
asv = get_asv_group(cal_asv_dvfs_little, lv);
|
||||
ssa10 = asv_tbl_info.apollo_ssa10;
|
||||
ssa11 = asv_tbl_info.apollo_ssa11;
|
||||
ssa0 = asv_tbl_info.apollo_ssa0;
|
||||
subgrp_index = 10;
|
||||
table = pwrcal_little_asv_table[asv_tbl_info.asv_table_ver].table[lv].voltage;
|
||||
break;
|
||||
case cal_asv_dvfs_g3d:
|
||||
asv = get_asv_group(cal_asv_dvfs_g3d, lv);
|
||||
ssa10 = asv_tbl_info.g3d_ssa10;
|
||||
ssa11 = asv_tbl_info.g3d_ssa11;
|
||||
ssa0 = asv_tbl_info.g3d_ssa0;
|
||||
subgrp_index = 7;
|
||||
table = pwrcal_g3d_asv_table[asv_tbl_info.asv_table_ver].table[lv].voltage;
|
||||
break;
|
||||
case cal_asv_dvfs_mif:
|
||||
asv = get_asv_group(cal_asv_dvfs_mif, lv);
|
||||
ssa10 = asv_tbl_info.mif_ssa10;
|
||||
ssa11 = asv_tbl_info.mif_ssa11;
|
||||
ssa0 = asv_tbl_info.mif_ssa0;
|
||||
subgrp_index = 8;
|
||||
table = pwrcal_mif_asv_table[asv_tbl_info.asv_table_ver].table[lv].voltage;
|
||||
break;
|
||||
case cal_asv_dvfs_int:
|
||||
asv = get_asv_group(cal_asv_dvfs_int, lv);
|
||||
ssa10 = asv_tbl_info.int_ssa10;
|
||||
ssa11 = asv_tbl_info.int_ssa11;
|
||||
ssa0 = asv_tbl_info.int_ssa0;
|
||||
subgrp_index = 15;
|
||||
table = pwrcal_int_asv_table[asv_tbl_info.asv_table_ver].table[lv].voltage;
|
||||
break;
|
||||
case cal_asv_dvfs_cam:
|
||||
asv = get_asv_group(cal_asv_dvfs_cam, lv);
|
||||
ssa10 = asv_tbl_info.disp_ssa10;
|
||||
ssa11 = asv_tbl_info.disp_ssa11;
|
||||
ssa0 = asv_tbl_info.disp_ssa0;
|
||||
subgrp_index = 5;
|
||||
table = pwrcal_cam_asv_table[asv_tbl_info.asv_table_ver].table[lv].voltage;
|
||||
break;
|
||||
case cal_asv_dvfs_disp:
|
||||
asv = get_asv_group(cal_asv_dvfs_disp, lv);
|
||||
ssa10 = asv_tbl_info.disp_ssa10;
|
||||
ssa11 = asv_tbl_info.disp_ssa11;
|
||||
ssa0 = asv_tbl_info.disp_ssa0;
|
||||
subgrp_index = 2;
|
||||
table = pwrcal_disp_asv_table[asv_tbl_info.asv_table_ver].table[lv].voltage;
|
||||
break;
|
||||
default:
|
||||
BUG(); /* Never reach */
|
||||
break;
|
||||
}
|
||||
|
||||
volt = table[asv];
|
||||
if (lv < subgrp_index) {
|
||||
volt += 12500 * ssa10;
|
||||
if (ssa10 == 3)
|
||||
volt += 12500;
|
||||
} else {
|
||||
volt += 12500 * ssa11;
|
||||
if (ssa11 == 3)
|
||||
volt += 12500;
|
||||
}
|
||||
|
||||
if (volt < 575000 + ssa0 * 25000)
|
||||
volt = 575000 + ssa0 * 25000;
|
||||
|
||||
return volt;
|
||||
}
|
||||
|
||||
static int dvfsbig_get_asv_table(unsigned int *table)
|
||||
{
|
||||
int lv, max_lv;
|
||||
|
||||
max_lv = asv_dvfs_big->table->num_of_lv;
|
||||
|
||||
for (lv = 0; lv < max_lv; lv++)
|
||||
table[lv] = get_asv_voltage(cal_asv_dvfs_big, lv);
|
||||
|
||||
return max_lv;
|
||||
}
|
||||
|
||||
static int dvfslittle_get_asv_table(unsigned int *table)
|
||||
{
|
||||
int lv, max_lv;
|
||||
|
||||
max_lv = asv_dvfs_little->table->num_of_lv;
|
||||
|
||||
for (lv = 0; lv < max_lv; lv++)
|
||||
table[lv] = get_asv_voltage(cal_asv_dvfs_little, lv);
|
||||
|
||||
return max_lv;
|
||||
}
|
||||
|
||||
static int dvfsg3d_get_asv_table(unsigned int *table)
|
||||
{
|
||||
int lv, max_lv;
|
||||
|
||||
max_lv = asv_dvfs_g3d->table->num_of_lv;
|
||||
|
||||
for (lv = 0; lv < max_lv; lv++)
|
||||
table[lv] = get_asv_voltage(cal_asv_dvfs_g3d, lv);
|
||||
|
||||
return max_lv;
|
||||
}
|
||||
|
||||
static int dvfsmif_get_asv_table(unsigned int *table)
|
||||
{
|
||||
int lv, max_lv;
|
||||
|
||||
max_lv = asv_dvfs_mif->table->num_of_lv;
|
||||
|
||||
for (lv = 0; lv < max_lv; lv++)
|
||||
table[lv] = get_asv_voltage(cal_asv_dvfs_mif, lv);
|
||||
|
||||
return max_lv;
|
||||
}
|
||||
|
||||
static int dvfsint_get_asv_table(unsigned int *table)
|
||||
{
|
||||
int lv, max_lv;
|
||||
|
||||
max_lv = asv_dvfs_int->table->num_of_lv;
|
||||
|
||||
for (lv = 0; lv < max_lv; lv++)
|
||||
table[lv] = get_asv_voltage(cal_asv_dvfs_int, lv);
|
||||
|
||||
return max_lv;
|
||||
}
|
||||
|
||||
static int dvfscam_get_asv_table(unsigned int *table)
|
||||
{
|
||||
int lv, max_lv;
|
||||
|
||||
max_lv = asv_dvfs_cam->table->num_of_lv;
|
||||
|
||||
for (lv = 0; lv < max_lv; lv++)
|
||||
table[lv] = get_asv_voltage(cal_asv_dvfs_cam, lv);
|
||||
|
||||
return max_lv;
|
||||
}
|
||||
|
||||
static int dvfsdisp_get_asv_table(unsigned int *table)
|
||||
{
|
||||
int lv, max_lv;
|
||||
|
||||
max_lv = asv_dvfs_disp->table->num_of_lv;
|
||||
|
||||
for (lv = 0; lv < max_lv; lv++)
|
||||
table[lv] = get_asv_voltage(cal_asv_dvfs_disp, lv);
|
||||
|
||||
return max_lv;
|
||||
}
|
||||
|
||||
static int dfsg3d_set_ema(unsigned int volt)
|
||||
{
|
||||
if (volt > 750000)
|
||||
pwrcal_writel(EMA_RF2_UHD_CON, asv_tbl_info.g3d_mcs0);
|
||||
else
|
||||
pwrcal_writel(EMA_RF2_UHD_CON, asv_tbl_info.g3d_mcs1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int asv_rcc_set_table(void)
|
||||
{
|
||||
int i;
|
||||
int lv, max_lv, asv;
|
||||
unsigned int *p;
|
||||
unsigned long tmp;
|
||||
|
||||
if (!apm_sram_base) {
|
||||
#ifdef PWRCAL_TARGET_LINUX
|
||||
apm_sram_base = (void *)ioremap(APM_TABLE_BASE, SZ_4K);
|
||||
#else
|
||||
apm_sram_base = (void *)APM_TABLE_BASE;
|
||||
#endif
|
||||
}
|
||||
|
||||
p = (unsigned int *)(apm_sram_base);
|
||||
for (i = 0; i < 8; i++) {
|
||||
#ifdef PWRCAL_TARGET_LINUX
|
||||
exynos_smc_readsfr((unsigned long)(APM_OTP_ADDRESS + 0x4 * i), &tmp);
|
||||
#else
|
||||
#if (CONFIG_STARTUP_EL_MODE == STARTUP_EL3)
|
||||
tmp = *((volatile unsigned int *)(unsigned long)(APM_OTP_ADDRESS + 0x4 * i));
|
||||
#else
|
||||
smc_readsfr((unsigned long)(APM_OTP_ADDRESS + 0x4 * i), &tmp);
|
||||
#endif
|
||||
#endif
|
||||
*(p + i) = (unsigned int)tmp;
|
||||
}
|
||||
|
||||
p = (unsigned int *)(apm_sram_base + 0x0030);
|
||||
max_lv = asv_dvfs_big->table->num_of_lv;
|
||||
if (max_lv > 25)
|
||||
max_lv = 25;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_big, lv);
|
||||
*(p + lv) = pwrcal_big_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv];
|
||||
}
|
||||
|
||||
p = (unsigned int *)(apm_sram_base + 0x0098);
|
||||
max_lv = asv_dvfs_little->table->num_of_lv;
|
||||
if (max_lv > 20)
|
||||
max_lv = 20;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_little, lv);
|
||||
*(p + lv) = pwrcal_little_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv];
|
||||
}
|
||||
|
||||
p = (unsigned int *)(apm_sram_base + 0x00EC);
|
||||
max_lv = asv_dvfs_g3d->table->num_of_lv;
|
||||
if (max_lv > 11)
|
||||
max_lv = 11;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_g3d, lv);
|
||||
*(p + lv) = pwrcal_g3d_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv];
|
||||
}
|
||||
|
||||
p = (unsigned int *)(apm_sram_base + 0x011C);
|
||||
max_lv = asv_dvfs_mif->table->num_of_lv;
|
||||
if (max_lv > 16)
|
||||
max_lv = 16;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_mif, lv);
|
||||
*(p + lv) = pwrcal_mif_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void asv_voltage_init_table(struct asv_table_list **asv_table, struct pwrcal_vclk_dfs *dfs)
|
||||
{
|
||||
int i, j, k;
|
||||
void *asv_block, *margin_block;
|
||||
struct ect_voltage_domain *domain;
|
||||
struct ect_voltage_table *table;
|
||||
struct asv_table_entry *asv_entry;
|
||||
struct ect_margin_domain *margin_domain = NULL;
|
||||
|
||||
asv_block = ect_get_block("ASV");
|
||||
if (asv_block == NULL)
|
||||
return;
|
||||
|
||||
margin_block = ect_get_block("MARGIN");
|
||||
|
||||
domain = ect_asv_get_domain(asv_block, dfs->vclk.name);
|
||||
if (domain == NULL)
|
||||
return;
|
||||
|
||||
if (asv_tbl_info.asv_table_ver >= domain->num_of_table)
|
||||
BUG();
|
||||
|
||||
if (margin_block)
|
||||
margin_domain = ect_margin_get_domain(margin_block, dfs->vclk.name);
|
||||
|
||||
*asv_table = kzalloc(sizeof(struct asv_table_list) * domain->num_of_table, GFP_KERNEL);
|
||||
if (*asv_table == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < domain->num_of_table; ++i) {
|
||||
table = &domain->table_list[i];
|
||||
|
||||
(*asv_table)[i].table_size = domain->num_of_table;
|
||||
(*asv_table)[i].table = kzalloc(sizeof(struct asv_table_entry) * domain->num_of_level, GFP_KERNEL);
|
||||
if ((*asv_table)[i].table == NULL)
|
||||
return;
|
||||
|
||||
for (j = 0; j < domain->num_of_level; ++j) {
|
||||
asv_entry = &(*asv_table)[i].table[j];
|
||||
|
||||
asv_entry->index = domain->level_list[j];
|
||||
asv_entry->voltage = kzalloc(sizeof(unsigned int) * domain->num_of_group, GFP_KERNEL);
|
||||
|
||||
for (k = 0; k < domain->num_of_group; ++k) {
|
||||
asv_entry->voltage[k] = table->voltages[j * domain->num_of_group + k];
|
||||
if (margin_domain != NULL)
|
||||
asv_entry->voltage[k] += margin_domain->offset[j * margin_domain->num_of_group + k];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void asv_rcc_init_table(struct asv_table_list **rcc_table, struct pwrcal_vclk_dfs *dfs)
|
||||
|
||||
{
|
||||
int i, j, k;
|
||||
void *rcc_block;
|
||||
struct ect_rcc_domain *domain;
|
||||
struct ect_rcc_table *table;
|
||||
struct asv_table_entry *rcc_entry;
|
||||
|
||||
rcc_block = ect_get_block("RCC");
|
||||
if (rcc_block == NULL)
|
||||
return;
|
||||
|
||||
domain = ect_rcc_get_domain(rcc_block, dfs->vclk.name);
|
||||
if (domain == NULL)
|
||||
return;
|
||||
|
||||
*rcc_table = kzalloc(sizeof(struct asv_table_list) * domain->num_of_table, GFP_KERNEL);
|
||||
if (*rcc_table == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < domain->num_of_table; ++i) {
|
||||
table = &domain->table_list[i];
|
||||
|
||||
(*rcc_table)[i].table_size = domain->num_of_table;
|
||||
(*rcc_table)[i].table = kzalloc(sizeof(struct asv_table_entry) * domain->num_of_level, GFP_KERNEL);
|
||||
if ((*rcc_table)[i].table == NULL)
|
||||
return;
|
||||
|
||||
for (j = 0; j < domain->num_of_level; ++j) {
|
||||
rcc_entry = &(*rcc_table)[i].table[j];
|
||||
|
||||
rcc_entry->index = domain->level_list[j];
|
||||
rcc_entry->voltage = kzalloc(sizeof(unsigned int) * domain->num_of_group, GFP_KERNEL);
|
||||
|
||||
for (k = 0; k < domain->num_of_group; ++k)
|
||||
rcc_entry->voltage[k] = table->rcc[j * domain->num_of_group + k];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void asv_voltage_table_init(void)
|
||||
{
|
||||
asv_voltage_init_table(&pwrcal_big_asv_table, asv_dvfs_big);
|
||||
asv_voltage_init_table(&pwrcal_little_asv_table, asv_dvfs_little);
|
||||
asv_voltage_init_table(&pwrcal_g3d_asv_table, asv_dvfs_g3d);
|
||||
asv_voltage_init_table(&pwrcal_mif_asv_table, asv_dvfs_mif);
|
||||
asv_voltage_init_table(&pwrcal_int_asv_table, asv_dvfs_int);
|
||||
asv_voltage_init_table(&pwrcal_cam_asv_table, asv_dvfs_cam);
|
||||
asv_voltage_init_table(&pwrcal_disp_asv_table, asv_dvfs_disp);
|
||||
}
|
||||
|
||||
static void asv_rcc_table_init(void)
|
||||
{
|
||||
asv_rcc_init_table(&pwrcal_big_rcc_table, asv_dvfs_big);
|
||||
asv_rcc_init_table(&pwrcal_little_rcc_table, asv_dvfs_little);
|
||||
asv_rcc_init_table(&pwrcal_g3d_rcc_table, asv_dvfs_g3d);
|
||||
asv_rcc_init_table(&pwrcal_mif_rcc_table, asv_dvfs_mif);
|
||||
}
|
||||
|
||||
static int asv_init(void)
|
||||
{
|
||||
struct vclk *vclk;
|
||||
|
||||
vclk = cal_get_vclk(dvfs_big);
|
||||
asv_dvfs_big = to_dfs(vclk);
|
||||
asv_dvfs_big->dfsops->get_asv_table = dvfsbig_get_asv_table;
|
||||
/* asv_dvfs_big->dfsops->set_ema = dvfsbig_set_ema;
|
||||
*/
|
||||
vclk = cal_get_vclk(dvfs_little);
|
||||
asv_dvfs_little = to_dfs(vclk);
|
||||
asv_dvfs_little->dfsops->get_asv_table = dvfslittle_get_asv_table;
|
||||
/* asv_dvfs_little->dfsops->set_ema = dvfslittle_set_ema;
|
||||
*/
|
||||
vclk = cal_get_vclk(dvfs_g3d);
|
||||
asv_dvfs_g3d = to_dfs(vclk);
|
||||
asv_dvfs_g3d->dfsops->get_asv_table = dvfsg3d_get_asv_table;
|
||||
asv_dvfs_g3d->dfsops->set_ema = dfsg3d_set_ema;
|
||||
|
||||
vclk = cal_get_vclk(dvfs_mif);
|
||||
asv_dvfs_mif = to_dfs(vclk);
|
||||
asv_dvfs_mif->dfsops->get_asv_table = dvfsmif_get_asv_table;
|
||||
|
||||
vclk = cal_get_vclk(dvfs_int);
|
||||
asv_dvfs_int = to_dfs(vclk);
|
||||
asv_dvfs_int->dfsops->get_asv_table = dvfsint_get_asv_table;
|
||||
/* asv_dvfs_int->dfsops->set_ema = dvfsint_set_ema;
|
||||
*/
|
||||
vclk = cal_get_vclk(dvfs_cam);
|
||||
asv_dvfs_cam = to_dfs(vclk);
|
||||
asv_dvfs_cam->dfsops->get_asv_table = dvfscam_get_asv_table;
|
||||
|
||||
vclk = cal_get_vclk(dvfs_disp);
|
||||
asv_dvfs_disp = to_dfs(vclk);
|
||||
asv_dvfs_disp->dfsops->get_asv_table = dvfsdisp_get_asv_table;
|
||||
|
||||
pwrcal_big_asv_table = NULL;
|
||||
pwrcal_little_asv_table = NULL;
|
||||
pwrcal_g3d_asv_table = NULL;
|
||||
pwrcal_mif_asv_table = NULL;
|
||||
pwrcal_int_asv_table = NULL;
|
||||
pwrcal_cam_asv_table = NULL;
|
||||
pwrcal_disp_asv_table = NULL;
|
||||
|
||||
pwrcal_big_rcc_table = NULL;
|
||||
pwrcal_little_rcc_table = NULL;
|
||||
pwrcal_g3d_rcc_table = NULL;
|
||||
pwrcal_mif_rcc_table = NULL;
|
||||
|
||||
asv_get_asvinfo();
|
||||
asv_voltage_table_init();
|
||||
asv_rcc_table_init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void asv_print_info(void)
|
||||
{
|
||||
pr_info("asv_table_ver : %d\n", asv_tbl_info.asv_table_ver);
|
||||
pr_info("fused_grp : %d\n", asv_tbl_info.fused_grp);
|
||||
|
||||
pr_info("mngs_asv_group : %d\n", asv_tbl_info.mngs_asv_group);
|
||||
pr_info("mngs_modified_group : %d\n", asv_tbl_info.mngs_modified_group);
|
||||
pr_info("apollo_asv_group : %d\n", asv_tbl_info.apollo_asv_group);
|
||||
pr_info("apollo_modified_group : %d\n", asv_tbl_info.apollo_modified_group);
|
||||
|
||||
pr_info("g3d_asv_group : %d\n", asv_tbl_info.g3d_asv_group);
|
||||
pr_info("g3d_modified_group : %d\n", asv_tbl_info.g3d_modified_group);
|
||||
pr_info("mif_asv_group : %d\n", asv_tbl_info.mif_asv_group);
|
||||
pr_info("mif_modified_group : %d\n", asv_tbl_info.mif_modified_group);
|
||||
|
||||
pr_info("int_asv_group : %d\n", asv_tbl_info.int_asv_group);
|
||||
pr_info("int_modified_group : %d\n", asv_tbl_info.int_modified_group);
|
||||
pr_info("disp_asv_group : %d\n", asv_tbl_info.disp_asv_group);
|
||||
pr_info("disp_modified_group : %d\n", asv_tbl_info.disp_modified_group);
|
||||
|
||||
pr_info("g3d_mcs0 : %d\n", asv_tbl_info.g3d_mcs0);
|
||||
pr_info("g3d_mcs1 : %d\n", asv_tbl_info.g3d_mcs1);
|
||||
}
|
||||
|
||||
static void rcc_print_info(void)
|
||||
{
|
||||
int lv, max_lv, asv;
|
||||
|
||||
pr_info("==== RCC Table ====\n");
|
||||
max_lv = asv_dvfs_big->table->num_of_lv;
|
||||
if (max_lv > 25)
|
||||
max_lv = 25;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_big, lv);
|
||||
pr_info("big rcc [%d] : %d\n", lv, pwrcal_big_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv]);
|
||||
}
|
||||
|
||||
max_lv = asv_dvfs_little->table->num_of_lv;
|
||||
if (max_lv > 20)
|
||||
max_lv = 20;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_little, lv);
|
||||
pr_info("little rcc [%d] : %d\n", lv, pwrcal_little_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv]);
|
||||
}
|
||||
|
||||
max_lv = asv_dvfs_g3d->table->num_of_lv;
|
||||
if (max_lv > 11)
|
||||
max_lv = 11;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_g3d, lv);
|
||||
pr_info("g3d rcc [%d] : %d\n", lv, pwrcal_g3d_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv]);
|
||||
}
|
||||
|
||||
max_lv = asv_dvfs_mif->table->num_of_lv;
|
||||
if (max_lv > 16)
|
||||
max_lv = 16;
|
||||
for (lv = 0; lv < max_lv; lv++) {
|
||||
asv = get_asv_group(cal_asv_dvfs_mif, lv);
|
||||
pr_info("mif rcc [%d] : %d\n", lv, pwrcal_mif_rcc_table[asv_tbl_info.asv_table_ver].table[lv].voltage[asv]);
|
||||
}
|
||||
}
|
||||
|
||||
struct cal_asv_ops cal_asv_ops = {
|
||||
.print_asv_info = asv_print_info,
|
||||
.print_rcc_info = rcc_print_info,
|
||||
.set_grp = asv_set_grp,
|
||||
.set_tablever = asv_set_tablever,
|
||||
.set_rcc_table = asv_rcc_set_table,
|
||||
.asv_init = asv_init,
|
||||
};
|
3617
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-cmu.c
Normal file
3617
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-cmu.c
Normal file
File diff suppressed because it is too large
Load diff
3290
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-cmu.h
Normal file
3290
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-cmu.h
Normal file
File diff suppressed because it is too large
Load diff
1947
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-cmusfr.h
Executable file
1947
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-cmusfr.h
Executable file
File diff suppressed because it is too large
Load diff
1075
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-dfs.c
Executable file
1075
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-dfs.c
Executable file
File diff suppressed because it is too large
Load diff
513
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-drampara.c
Executable file
513
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-drampara.c
Executable file
|
@ -0,0 +1,513 @@
|
|||
#include "../pwrcal-env.h"
|
||||
#include "../pwrcal-rae.h"
|
||||
#include "S5E8890-sfrbase.h"
|
||||
#include "S5E8890-vclk-internal.h"
|
||||
|
||||
#include <soc/samsung/ect_parser.h>
|
||||
|
||||
#ifndef MHZ
|
||||
#define MHZ ((unsigned long long)1000000)
|
||||
#endif
|
||||
|
||||
#define __SMC_ALL (DMC_MISC_CCORE_BASE + 0x8000)
|
||||
#define __PHY_ALL (DMC_MISC_CCORE_BASE + 0x4000)
|
||||
#define __DMC_MISC_ALL (DMC_MISC_CCORE_BASE + 0x0000)
|
||||
|
||||
#define ModeRegAddr ((void *)(__SMC_ALL + 0x0000))
|
||||
#define MprMrCtl ((void *)(__SMC_ALL + 0x0004))
|
||||
#define ModeRegWrData ((void *)(__SMC_ALL + 0x0008))
|
||||
|
||||
#define DramTiming0_0 ((void *)(__SMC_ALL + 0x0058))
|
||||
#define DramTiming1_0 ((void *)(__SMC_ALL + 0x005C))
|
||||
#define DramTiming2_0 ((void *)(__SMC_ALL + 0x0060))
|
||||
#define DramTiming3_0 ((void *)(__SMC_ALL + 0x0064))
|
||||
#define DramTiming4_0 ((void *)(__SMC_ALL + 0x0068))
|
||||
#define DramTiming5_0 ((void *)(__SMC_ALL + 0x006C))
|
||||
#define DramTiming6_0 ((void *)(__SMC_ALL + 0x0070))
|
||||
#define DramTiming7_0 ((void *)(__SMC_ALL + 0x0074))
|
||||
#define DramTiming8_0 ((void *)(__SMC_ALL + 0x0078))
|
||||
#define DramTiming9_0 ((void *)(__SMC_ALL + 0x007C))
|
||||
#define DramDerateTiming0_0 ((void *)(__SMC_ALL + 0x0088))
|
||||
#define DramDerateTiming1_0 ((void *)(__SMC_ALL + 0x008C))
|
||||
#define Dimm0AutoRefTiming1_0 ((void *)(__SMC_ALL + 0x009C))
|
||||
#define Dimm1AutoRefTiming1_0 ((void *)(__SMC_ALL + 0x00A4))
|
||||
#define AutoRefTiming2_0 ((void *)(__SMC_ALL + 0x00A8))
|
||||
#define PwrMgmtTiming0_0 ((void *)(__SMC_ALL + 0x00B8))
|
||||
#define PwrMgmtTiming1_0 ((void *)(__SMC_ALL + 0x00BC))
|
||||
#define PwrMgmtTiming2_0 ((void *)(__SMC_ALL + 0x00C0))
|
||||
#define PwrMgmtTiming3_0 ((void *)(__SMC_ALL + 0x00C4))
|
||||
#define TmrTrnInterval_0 ((void *)(__SMC_ALL + 0x00C8))
|
||||
#define DvfsTrnCtl_0 ((void *)(__SMC_ALL + 0x00CC))
|
||||
#define TrnTiming0_0 ((void *)(__SMC_ALL + 0x00D0))
|
||||
#define TrnTiming1_0 ((void *)(__SMC_ALL + 0x00D4))
|
||||
#define TrnTiming2_0 ((void *)(__SMC_ALL + 0x00D8))
|
||||
#define DFIDelay1_0 ((void *)(__SMC_ALL + 0x00E0))
|
||||
#define DFIDelay2_0 ((void *)(__SMC_ALL + 0x00E4))
|
||||
|
||||
#define DramTiming0_1 ((void *)(__SMC_ALL + 0x0108))
|
||||
#define DramTiming1_1 ((void *)(__SMC_ALL + 0x010C))
|
||||
#define DramTiming2_1 ((void *)(__SMC_ALL + 0x0110))
|
||||
#define DramTiming3_1 ((void *)(__SMC_ALL + 0x0114))
|
||||
#define DramTiming4_1 ((void *)(__SMC_ALL + 0x0118))
|
||||
#define DramTiming5_1 ((void *)(__SMC_ALL + 0x011C))
|
||||
#define DramTiming6_1 ((void *)(__SMC_ALL + 0x0120))
|
||||
#define DramTiming7_1 ((void *)(__SMC_ALL + 0x0124))
|
||||
#define DramTiming8_1 ((void *)(__SMC_ALL + 0x0128))
|
||||
#define DramTiming9_1 ((void *)(__SMC_ALL + 0x012C))
|
||||
#define DramDerateTiming0_1 ((void *)(__SMC_ALL + 0x0138))
|
||||
#define DramDerateTiming1_1 ((void *)(__SMC_ALL + 0x013C))
|
||||
#define Dimm0AutoRefTiming1_1 ((void *)(__SMC_ALL + 0x014C))
|
||||
#define Dimm1AutoRefTiming1_1 ((void *)(__SMC_ALL + 0x0154))
|
||||
#define AutoRefTiming2_1 ((void *)(__SMC_ALL + 0x0168))
|
||||
#define PwrMgmtTiming0_1 ((void *)(__SMC_ALL + 0x0168))
|
||||
#define PwrMgmtTiming1_1 ((void *)(__SMC_ALL + 0x016C))
|
||||
#define PwrMgmtTiming2_1 ((void *)(__SMC_ALL + 0x0170))
|
||||
#define PwrMgmtTiming3_1 ((void *)(__SMC_ALL + 0x0174))
|
||||
#define TmrTrnInterval_1 ((void *)(__SMC_ALL + 0x0178))
|
||||
#define DvfsTrnCtl_1 ((void *)(__SMC_ALL + 0x017C))
|
||||
#define TrnTiming0_1 ((void *)(__SMC_ALL + 0x0180))
|
||||
#define TrnTiming1_1 ((void *)(__SMC_ALL + 0x0184))
|
||||
#define TrnTiming2_1 ((void *)(__SMC_ALL + 0x0188))
|
||||
#define DFIDelay1_1 ((void *)(__SMC_ALL + 0x0190))
|
||||
#define DFIDelay2_1 ((void *)(__SMC_ALL + 0x0194))
|
||||
|
||||
#define PHY_DVFS_CON_CH0 ((void *)(LPDDR4_PHY0_BASE + 0x00B8))
|
||||
#define PHY_DVFS_CON ((void *)(__PHY_ALL + 0x00B8))
|
||||
#define PHY_DVFS0_CON0 ((void *)(__PHY_ALL + 0x00BC))
|
||||
#define PHY_DVFS0_CON1 ((void *)(__PHY_ALL + 0x00C4))
|
||||
#define PHY_DVFS0_CON2 ((void *)(__PHY_ALL + 0x00CC))
|
||||
#define PHY_DVFS0_CON3 ((void *)(__PHY_ALL + 0x00D4))
|
||||
#define PHY_DVFS0_CON4 ((void *)(__PHY_ALL + 0x00DC))
|
||||
|
||||
#define PHY_DVFS1_CON0 ((void *)(__PHY_ALL + 0x00C0))
|
||||
#define PHY_DVFS1_CON1 ((void *)(__PHY_ALL + 0x00C8))
|
||||
#define PHY_DVFS1_CON2 ((void *)(__PHY_ALL + 0x00D0))
|
||||
#define PHY_DVFS1_CON3 ((void *)(__PHY_ALL + 0x00D8))
|
||||
#define PHY_DVFS1_CON4 ((void *)(__PHY_ALL + 0x00E0))
|
||||
|
||||
#define DMC_MISC_CON0 ((void *)(__DMC_MISC_ALL + 0x0014))
|
||||
#define DMC_MISC_CON1 ((void *)(__DMC_MISC_ALL + 0x003C))
|
||||
#define MRS_DATA1 ((void *)(__DMC_MISC_ALL + 0x0054))
|
||||
|
||||
enum mif_timing_set_idx {
|
||||
MIF_TIMING_SET_0,
|
||||
MIF_TIMING_SET_1
|
||||
};
|
||||
|
||||
enum smc_dram_mode_register {
|
||||
DRAM_MR0,
|
||||
DRAM_MR1,
|
||||
DRAM_MR2,
|
||||
DRAM_MR3,
|
||||
DRAM_MR4,
|
||||
DRAM_MR5,
|
||||
DRAM_MR6,
|
||||
DRAM_MR7,
|
||||
DRAM_MR8,
|
||||
DRAM_MR9,
|
||||
DRAM_MR10,
|
||||
DRAM_MR11,
|
||||
DRAM_MR12,
|
||||
DRAM_MR13,
|
||||
DRAM_MR14,
|
||||
DRAM_MR15,
|
||||
DRAM_MR16,
|
||||
DRAM_MR17,
|
||||
DRAM_MR18,
|
||||
DRAM_MR19,
|
||||
DRAM_MR20,
|
||||
DRAM_MR21,
|
||||
DRAM_MR22,
|
||||
DRAM_MR23,
|
||||
DRAM_MR24,
|
||||
DRAM_MR25,
|
||||
DRAM_MR32 = 32,
|
||||
DRAM_MR40 = 40,
|
||||
};
|
||||
|
||||
enum timing_parameter_column {
|
||||
DramTiming0,
|
||||
DramTiming1,
|
||||
DramTiming2,
|
||||
DramTiming3,
|
||||
DramTiming4,
|
||||
DramTiming5,
|
||||
DramTiming6,
|
||||
DramTiming7,
|
||||
DramTiming8,
|
||||
DramTiming9,
|
||||
DramDerateTiming0,
|
||||
DramDerateTiming1,
|
||||
Dimm0AutoRefTiming1,
|
||||
Dimm1AutoRefTiming1,
|
||||
AutoRefTiming2,
|
||||
PwrMgmtTiming0,
|
||||
PwrMgmtTiming1,
|
||||
PwrMgmtTiming2,
|
||||
PwrMgmtTiming3,
|
||||
TmrTrnInterval,
|
||||
DFIDelay1,
|
||||
DFIDelay2,
|
||||
DvfsTrnCtl,
|
||||
TrnTiming0,
|
||||
TrnTiming1,
|
||||
TrnTiming2,
|
||||
DVFSn_CON0,
|
||||
DVFSn_CON1,
|
||||
DVFSn_CON2,
|
||||
DVFSn_CON3,
|
||||
DVFSn_CON4,
|
||||
DirectCmd_MR1,
|
||||
DirectCmd_MR2,
|
||||
DirectCmd_MR3,
|
||||
DirectCmd_MR11,
|
||||
DirectCmd_MR12,
|
||||
DirectCmd_MR14,
|
||||
DirectCmd_MR22,
|
||||
|
||||
num_of_g_smc_dfs_table_column = TrnTiming2 - DramTiming0 + 1,
|
||||
num_of_g_phy_dfs_table_column = DVFSn_CON4 - DVFSn_CON0 + 1,
|
||||
num_of_g_dram_dfs_table_column = DirectCmd_MR22 - DirectCmd_MR1 + 1,
|
||||
num_of_dram_parameter = num_of_g_smc_dfs_table_column + num_of_g_phy_dfs_table_column + num_of_g_dram_dfs_table_column,
|
||||
};
|
||||
|
||||
struct smc_dfs_table {
|
||||
unsigned int DramTiming0;
|
||||
unsigned int DramTiming1;
|
||||
unsigned int DramTiming2;
|
||||
unsigned int DramTiming3;
|
||||
unsigned int DramTiming4;
|
||||
unsigned int DramTiming5;
|
||||
unsigned int DramTiming6;
|
||||
unsigned int DramTiming7;
|
||||
unsigned int DramTiming8;
|
||||
unsigned int DramTiming9;
|
||||
unsigned int DramDerateTiming0;
|
||||
unsigned int DramDerateTiming1;
|
||||
unsigned int Dimm0AutoRefTiming1;
|
||||
unsigned int Dimm1AutoRefTiming1;
|
||||
unsigned int AutoRefTiming2;
|
||||
unsigned int PwrMgmtTiming0;
|
||||
unsigned int PwrMgmtTiming1;
|
||||
unsigned int PwrMgmtTiming2;
|
||||
unsigned int PwrMgmtTiming3;
|
||||
unsigned int TmrTrnInterval;
|
||||
unsigned int DFIDelay1;
|
||||
unsigned int DFIDelay2;
|
||||
unsigned int DvfsTrnCtl;
|
||||
unsigned int TrnTiming0;
|
||||
unsigned int TrnTiming1;
|
||||
unsigned int TrnTiming2;
|
||||
};
|
||||
|
||||
struct phy_dfs_table {
|
||||
unsigned int DVFSn_CON0;
|
||||
unsigned int DVFSn_CON1;
|
||||
unsigned int DVFSn_CON2;
|
||||
unsigned int DVFSn_CON3;
|
||||
unsigned int DVFSn_CON4;
|
||||
};
|
||||
|
||||
struct dram_dfs_table {
|
||||
unsigned int DirectCmd_MR1;
|
||||
unsigned int DirectCmd_MR2;
|
||||
unsigned int DirectCmd_MR3;
|
||||
unsigned int DirectCmd_MR11;
|
||||
unsigned int DirectCmd_MR12;
|
||||
unsigned int DirectCmd_MR14;
|
||||
unsigned int DirectCmd_MR22;
|
||||
};
|
||||
|
||||
static struct smc_dfs_table *g_smc_dfs_table;
|
||||
static struct phy_dfs_table *g_phy_dfs_table;
|
||||
static struct dram_dfs_table *g_dram_dfs_table;
|
||||
static unsigned long long *mif_freq_to_level;
|
||||
static int num_mif_freq_to_level;
|
||||
|
||||
static const struct smc_dfs_table g_smc_dfs_table_switch[] = {
|
||||
/* DramTiming0__n, DramTiming1__n, DramTiming2__n, DramTiming3__n, DramTiming4__n, DramTiming5__n, DramTiming6__n, DramTiming7__n, DramTiming8__n, DramTiming9__n, DramDerateTiming0__n, DramDerateTiming1__n, Dimm0AutoRefTiming1__n, Dimm1AutoRefTiming1__n, AutoRefTiming2__n, PwmMgmtTiming0_n, PwmMgmtTiming1__n, PwmMgmtTiming2__n, PwmMgmtTiming3__n, TmrTrnIntvl, DFIDelay1, DFIDelay2, DvfsTrnCtl, TrnTiming0, TrnTiming1, TrnTiming2 */
|
||||
/* BUS3_PLL SW 936 */ { 0x00050a09, 0x09041e14, 0x05000013, 0x00000100, 0x09050500, 0x00110805, 0x00070004, 0x00070004, 0x00001004, 0x0a132811, 0x20150b0a, 0x00000a06, 0x002b0055, 0x002b0055, 0x00000005, 0x04020604, 0x00000404, 0x0000005a, 0x00000492, 0x00000000, 0x00010510, 0x00001004, 0x00000303, 0x25180875, 0x16250f18, 0x00000014 },
|
||||
/* BUS0_PLL SW 468 */ { 0x00030505, 0x05040f0a, 0x0400000a, 0x00000100, 0x05040400, 0x000a0605, 0x00070004, 0x00070004, 0x00000c04, 0x0a101c0a, 0x100b0605, 0x00000504, 0x0016002b, 0x0016002b, 0x00000004, 0x03020403, 0x00000404, 0x0000002e, 0x00000249, 0x00000000, 0x00010309, 0x00000902, 0x00000000, 0x1e18043b, 0x101e0c18, 0x00000014 }
|
||||
};
|
||||
|
||||
static const struct phy_dfs_table g_phy_dfs_table_switch[] = {
|
||||
/* DVFSn_CON0, DVFSn_CON1, DVFSn_CON2, DVFSn_CON3, DVFSn_CON4 */
|
||||
/* BUS3_PLL SW 936 */ { 0x3a859800, 0x80100000, 0x4001a070, 0x7df3ffff, 0x00003f3f },
|
||||
/* BUS0_PLL SW 468 */ { 0x1d430800, 0x80100000, 0x00004051, 0x7df3ffff, 0x00003f3f }
|
||||
};
|
||||
|
||||
static const struct dram_dfs_table g_dram_dfs_table_switch[] = {
|
||||
/* MR1OP, MR2OP, MR3OP, MR11OP, MR12OP, MR14OP, MR22OP */
|
||||
/* BUS3_PLL SW 936 */ { 0x3e, 0x1b, 0xf1, 0x04, 0x5d, 0x17, 0x26 },
|
||||
/* BUS0_PLL SW 468 */ { 0x16, 0x09, 0xf1, 0x04, 0x5d, 0x17, 0x26 }
|
||||
};
|
||||
|
||||
static const unsigned long long mif_freq_to_level_switch[] = {
|
||||
/* BUS3_PLL SW 936 */ 936 * MHZ,
|
||||
/* BUS0_PLL SW 468 */ 468 * MHZ
|
||||
};
|
||||
|
||||
void dmc_misc_direct_dmc_enable(int enable)
|
||||
{
|
||||
pwrcal_writel(DMC_MISC_CON0, (enable<<24)|(0x2<<20));
|
||||
}
|
||||
|
||||
void smc_mode_register_write(int mr, int op)
|
||||
{
|
||||
pwrcal_writel(ModeRegAddr, ((0x3<<28)|(mr<<20)));
|
||||
pwrcal_writel(ModeRegWrData, op);
|
||||
pwrcal_writel(MprMrCtl, 0x10);
|
||||
}
|
||||
|
||||
static unsigned int convert_to_level(unsigned long long freq)
|
||||
{
|
||||
int idx;
|
||||
int tablesize = num_mif_freq_to_level;
|
||||
|
||||
for (idx = tablesize - 1; idx >= 0; idx--)
|
||||
if (freq <= mif_freq_to_level[idx])
|
||||
return (unsigned int)idx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int convert_to_level_switch(unsigned long long freq)
|
||||
{
|
||||
int idx;
|
||||
int tablesize = sizeof(mif_freq_to_level_switch) / sizeof(mif_freq_to_level_switch[0]);
|
||||
|
||||
for (idx = tablesize - 1; idx >= 0; idx--)
|
||||
if (freq <= mif_freq_to_level_switch[idx])
|
||||
return (unsigned int)idx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pwrcal_dmc_set_dvfs(unsigned long long target_mif_freq, unsigned int timing_set_idx)
|
||||
{
|
||||
unsigned int uReg;
|
||||
unsigned int target_mif_level_idx, target_mif_level_switch_idx;
|
||||
unsigned int mr13;
|
||||
|
||||
target_mif_level_idx = convert_to_level(target_mif_freq);
|
||||
|
||||
target_mif_level_switch_idx = convert_to_level_switch(target_mif_freq);
|
||||
|
||||
/* 1. Configure parameter */
|
||||
if (timing_set_idx == MIF_TIMING_SET_0) {
|
||||
pwrcal_writel(DMC_MISC_CON1, 0x0); //timing_set_sw_r=0x0
|
||||
|
||||
pwrcal_writel(DramTiming0_0, g_smc_dfs_table[target_mif_level_idx].DramTiming0);
|
||||
pwrcal_writel(DramTiming1_0, g_smc_dfs_table[target_mif_level_idx].DramTiming1);
|
||||
pwrcal_writel(DramTiming2_0, g_smc_dfs_table[target_mif_level_idx].DramTiming2);
|
||||
pwrcal_writel(DramTiming3_0, g_smc_dfs_table[target_mif_level_idx].DramTiming3);
|
||||
pwrcal_writel(DramTiming4_0, g_smc_dfs_table[target_mif_level_idx].DramTiming4);
|
||||
pwrcal_writel(DramTiming5_0, g_smc_dfs_table[target_mif_level_idx].DramTiming5);
|
||||
pwrcal_writel(DramTiming6_0, g_smc_dfs_table[target_mif_level_idx].DramTiming6);
|
||||
pwrcal_writel(DramTiming7_0, g_smc_dfs_table[target_mif_level_idx].DramTiming7);
|
||||
pwrcal_writel(DramTiming8_0, g_smc_dfs_table[target_mif_level_idx].DramTiming8);
|
||||
pwrcal_writel(DramTiming9_0, g_smc_dfs_table[target_mif_level_idx].DramTiming9);
|
||||
pwrcal_writel(DramDerateTiming0_0, g_smc_dfs_table[target_mif_level_idx].DramDerateTiming0);
|
||||
pwrcal_writel(DramDerateTiming1_0, g_smc_dfs_table[target_mif_level_idx].DramDerateTiming1);
|
||||
pwrcal_writel(Dimm0AutoRefTiming1_0, g_smc_dfs_table[target_mif_level_idx].Dimm0AutoRefTiming1);
|
||||
pwrcal_writel(Dimm1AutoRefTiming1_0, g_smc_dfs_table[target_mif_level_idx].Dimm1AutoRefTiming1);
|
||||
pwrcal_writel(AutoRefTiming2_0, g_smc_dfs_table[target_mif_level_idx].AutoRefTiming2);
|
||||
pwrcal_writel(PwrMgmtTiming0_0, g_smc_dfs_table[target_mif_level_idx].PwrMgmtTiming0);
|
||||
pwrcal_writel(PwrMgmtTiming1_0, g_smc_dfs_table[target_mif_level_idx].PwrMgmtTiming1);
|
||||
pwrcal_writel(PwrMgmtTiming2_0, g_smc_dfs_table[target_mif_level_idx].PwrMgmtTiming2);
|
||||
pwrcal_writel(PwrMgmtTiming3_0, g_smc_dfs_table[target_mif_level_idx].PwrMgmtTiming3);
|
||||
pwrcal_writel(TmrTrnInterval_0, g_smc_dfs_table[target_mif_level_idx].TmrTrnInterval);
|
||||
pwrcal_writel(DFIDelay1_0, g_smc_dfs_table[target_mif_level_idx].DFIDelay1);
|
||||
pwrcal_writel(DFIDelay2_0, g_smc_dfs_table[target_mif_level_idx].DFIDelay2);
|
||||
pwrcal_writel(DvfsTrnCtl_0, g_smc_dfs_table[target_mif_level_idx].DvfsTrnCtl);
|
||||
pwrcal_writel(TrnTiming0_0, g_smc_dfs_table[target_mif_level_idx].TrnTiming0);
|
||||
pwrcal_writel(TrnTiming1_0, g_smc_dfs_table[target_mif_level_idx].TrnTiming1);
|
||||
pwrcal_writel(TrnTiming2_0, g_smc_dfs_table[target_mif_level_idx].TrnTiming2);
|
||||
|
||||
uReg = pwrcal_readl((void *)PHY_DVFS_CON_CH0);
|
||||
uReg &= ~(0x3<<30);
|
||||
uReg |= (0x1<<30); //0x1 = DVFS 1 mode
|
||||
pwrcal_writel(PHY_DVFS_CON, uReg);
|
||||
|
||||
pwrcal_writel(PHY_DVFS0_CON0, g_phy_dfs_table[target_mif_level_idx].DVFSn_CON0);
|
||||
pwrcal_writel(PHY_DVFS0_CON1, g_phy_dfs_table[target_mif_level_idx].DVFSn_CON1);
|
||||
pwrcal_writel(PHY_DVFS0_CON2, g_phy_dfs_table[target_mif_level_idx].DVFSn_CON2);
|
||||
pwrcal_writel(PHY_DVFS0_CON3, g_phy_dfs_table[target_mif_level_idx].DVFSn_CON3);
|
||||
pwrcal_writel(PHY_DVFS0_CON4, g_phy_dfs_table[target_mif_level_idx].DVFSn_CON4);
|
||||
|
||||
mr13 = (0x1<<7)|(0x0<<6)|(0x0<<5)|(0x1<<3); //FSP-OP=0x1, FSP-WR=0x0, DMD=0x0, VRCG=0x1
|
||||
smc_mode_register_write(DRAM_MR13, mr13);
|
||||
smc_mode_register_write(DRAM_MR1, g_dram_dfs_table[target_mif_level_idx].DirectCmd_MR1);
|
||||
smc_mode_register_write(DRAM_MR2, g_dram_dfs_table[target_mif_level_idx].DirectCmd_MR2);
|
||||
smc_mode_register_write(DRAM_MR3, g_dram_dfs_table[target_mif_level_idx].DirectCmd_MR3);
|
||||
smc_mode_register_write(DRAM_MR11, g_dram_dfs_table[target_mif_level_idx].DirectCmd_MR11);
|
||||
smc_mode_register_write(DRAM_MR12, g_dram_dfs_table[target_mif_level_idx].DirectCmd_MR12);
|
||||
smc_mode_register_write(DRAM_MR14, g_dram_dfs_table[target_mif_level_idx].DirectCmd_MR14);
|
||||
smc_mode_register_write(DRAM_MR22, g_dram_dfs_table[target_mif_level_idx].DirectCmd_MR22);
|
||||
|
||||
mr13 &= ~(0x1<<7); // clear FSP-OP[7]
|
||||
pwrcal_writel(MRS_DATA1, mr13);
|
||||
} else if (timing_set_idx == MIF_TIMING_SET_1) {
|
||||
pwrcal_writel(DMC_MISC_CON1, 0x1); //timing_set_sw_r=0x1
|
||||
|
||||
pwrcal_writel(DramTiming0_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming0);
|
||||
pwrcal_writel(DramTiming1_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming1);
|
||||
pwrcal_writel(DramTiming2_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming2);
|
||||
pwrcal_writel(DramTiming3_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming3);
|
||||
pwrcal_writel(DramTiming4_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming4);
|
||||
pwrcal_writel(DramTiming5_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming5);
|
||||
pwrcal_writel(DramTiming6_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming6);
|
||||
pwrcal_writel(DramTiming7_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming7);
|
||||
pwrcal_writel(DramTiming8_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming8);
|
||||
pwrcal_writel(DramTiming9_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramTiming9);
|
||||
pwrcal_writel(DramDerateTiming0_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramDerateTiming0);
|
||||
pwrcal_writel(DramDerateTiming1_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DramDerateTiming1);
|
||||
pwrcal_writel(Dimm0AutoRefTiming1_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].Dimm0AutoRefTiming1);
|
||||
pwrcal_writel(Dimm1AutoRefTiming1_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].Dimm1AutoRefTiming1);
|
||||
pwrcal_writel(AutoRefTiming2_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].AutoRefTiming2);
|
||||
pwrcal_writel(PwrMgmtTiming0_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].PwrMgmtTiming0);
|
||||
pwrcal_writel(PwrMgmtTiming1_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].PwrMgmtTiming1);
|
||||
pwrcal_writel(PwrMgmtTiming2_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].PwrMgmtTiming2);
|
||||
pwrcal_writel(PwrMgmtTiming3_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].PwrMgmtTiming3);
|
||||
pwrcal_writel(TmrTrnInterval_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].TmrTrnInterval);
|
||||
pwrcal_writel(DFIDelay1_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DFIDelay1);
|
||||
pwrcal_writel(DFIDelay2_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DFIDelay2);
|
||||
pwrcal_writel(DvfsTrnCtl_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].DvfsTrnCtl);
|
||||
pwrcal_writel(TrnTiming0_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].TrnTiming0);
|
||||
pwrcal_writel(TrnTiming1_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].TrnTiming1);
|
||||
pwrcal_writel(TrnTiming2_1, g_smc_dfs_table_switch[target_mif_level_switch_idx].TrnTiming2);
|
||||
|
||||
uReg = pwrcal_readl(PHY_DVFS_CON_CH0);
|
||||
uReg &= ~(0x3<<30);
|
||||
uReg |= (0x2<<30); //0x2 = DVFS 2 mode
|
||||
pwrcal_writel(PHY_DVFS_CON, uReg);
|
||||
|
||||
pwrcal_writel(PHY_DVFS1_CON0, g_phy_dfs_table_switch[target_mif_level_switch_idx].DVFSn_CON0);
|
||||
pwrcal_writel(PHY_DVFS1_CON1, g_phy_dfs_table_switch[target_mif_level_switch_idx].DVFSn_CON1);
|
||||
pwrcal_writel(PHY_DVFS1_CON2, g_phy_dfs_table_switch[target_mif_level_switch_idx].DVFSn_CON2);
|
||||
pwrcal_writel(PHY_DVFS1_CON3, g_phy_dfs_table_switch[target_mif_level_switch_idx].DVFSn_CON3);
|
||||
pwrcal_writel(PHY_DVFS1_CON4, g_phy_dfs_table_switch[target_mif_level_switch_idx].DVFSn_CON4);
|
||||
|
||||
mr13 = (0x0<<7)|(0x1<<6)|(0x0<<5)|(0x1<<3); //FSP-OP=0x0, FSP-WR=0x1, DMD=0x0, VRCG=0x1
|
||||
smc_mode_register_write(DRAM_MR13, mr13);
|
||||
smc_mode_register_write(DRAM_MR1, g_dram_dfs_table_switch[target_mif_level_switch_idx].DirectCmd_MR1);
|
||||
smc_mode_register_write(DRAM_MR2, g_dram_dfs_table_switch[target_mif_level_switch_idx].DirectCmd_MR2);
|
||||
smc_mode_register_write(DRAM_MR3, g_dram_dfs_table_switch[target_mif_level_switch_idx].DirectCmd_MR3);
|
||||
smc_mode_register_write(DRAM_MR11, g_dram_dfs_table_switch[target_mif_level_switch_idx].DirectCmd_MR11);
|
||||
smc_mode_register_write(DRAM_MR12, g_dram_dfs_table_switch[target_mif_level_switch_idx].DirectCmd_MR12);
|
||||
smc_mode_register_write(DRAM_MR14, g_dram_dfs_table_switch[target_mif_level_switch_idx].DirectCmd_MR14);
|
||||
smc_mode_register_write(DRAM_MR22, g_dram_dfs_table_switch[target_mif_level_switch_idx].DirectCmd_MR22);
|
||||
|
||||
mr13 &= ~(0x1<<7); // clear FSP-OP[7]
|
||||
mr13 |= (0x1<<7); // set FSP-OP[7]=0x1
|
||||
pwrcal_writel(MRS_DATA1, mr13);
|
||||
} else {
|
||||
pr_err("wrong DMC timing set selection on DVFS\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dfs_dram_param_init(void)
|
||||
{
|
||||
int i;
|
||||
void *dram_block;
|
||||
int memory_size = 3; // means 3GB
|
||||
struct ect_timing_param_size *size;
|
||||
|
||||
dram_block = ect_get_block(BLOCK_TIMING_PARAM);
|
||||
if (dram_block == NULL)
|
||||
return;
|
||||
|
||||
size = ect_timing_param_get_size(dram_block, memory_size);
|
||||
if (size == NULL)
|
||||
return;
|
||||
|
||||
if (num_of_g_smc_dfs_table_column + num_of_g_phy_dfs_table_column + num_of_g_dram_dfs_table_column != size->num_of_timing_param)
|
||||
return;
|
||||
|
||||
g_smc_dfs_table = kzalloc(sizeof(struct smc_dfs_table) * num_of_g_smc_dfs_table_column * size->num_of_level, GFP_KERNEL);
|
||||
if (g_smc_dfs_table == NULL)
|
||||
return;
|
||||
|
||||
g_phy_dfs_table = kzalloc(sizeof(struct phy_dfs_table) * num_of_g_phy_dfs_table_column * size->num_of_level, GFP_KERNEL);
|
||||
if (g_phy_dfs_table == NULL)
|
||||
return;
|
||||
|
||||
g_dram_dfs_table = kzalloc(sizeof(struct dram_dfs_table) * num_of_g_dram_dfs_table_column * size->num_of_level, GFP_KERNEL);
|
||||
if (g_dram_dfs_table == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < size->num_of_level; ++i) {
|
||||
g_smc_dfs_table[i].DramTiming0 = size->timing_parameter[i * num_of_dram_parameter + DramTiming0];
|
||||
g_smc_dfs_table[i].DramTiming1 = size->timing_parameter[i * num_of_dram_parameter + DramTiming1];
|
||||
g_smc_dfs_table[i].DramTiming2 = size->timing_parameter[i * num_of_dram_parameter + DramTiming2];
|
||||
g_smc_dfs_table[i].DramTiming3 = size->timing_parameter[i * num_of_dram_parameter + DramTiming3];
|
||||
g_smc_dfs_table[i].DramTiming4 = size->timing_parameter[i * num_of_dram_parameter + DramTiming4];
|
||||
g_smc_dfs_table[i].DramTiming5 = size->timing_parameter[i * num_of_dram_parameter + DramTiming5];
|
||||
g_smc_dfs_table[i].DramTiming6 = size->timing_parameter[i * num_of_dram_parameter + DramTiming6];
|
||||
g_smc_dfs_table[i].DramTiming7 = size->timing_parameter[i * num_of_dram_parameter + DramTiming7];
|
||||
g_smc_dfs_table[i].DramTiming8 = size->timing_parameter[i * num_of_dram_parameter + DramTiming8];
|
||||
g_smc_dfs_table[i].DramTiming9 = size->timing_parameter[i * num_of_dram_parameter + DramTiming9];
|
||||
g_smc_dfs_table[i].DramDerateTiming0 = size->timing_parameter[i * num_of_dram_parameter + DramDerateTiming0];
|
||||
g_smc_dfs_table[i].DramDerateTiming1 = size->timing_parameter[i * num_of_dram_parameter + DramDerateTiming1];
|
||||
g_smc_dfs_table[i].Dimm0AutoRefTiming1 = size->timing_parameter[i * num_of_dram_parameter + Dimm0AutoRefTiming1];
|
||||
g_smc_dfs_table[i].Dimm1AutoRefTiming1 = size->timing_parameter[i * num_of_dram_parameter + Dimm1AutoRefTiming1];
|
||||
g_smc_dfs_table[i].AutoRefTiming2 = size->timing_parameter[i * num_of_dram_parameter + AutoRefTiming2];
|
||||
g_smc_dfs_table[i].PwrMgmtTiming0 = size->timing_parameter[i * num_of_dram_parameter + PwrMgmtTiming0];
|
||||
g_smc_dfs_table[i].PwrMgmtTiming1 = size->timing_parameter[i * num_of_dram_parameter + PwrMgmtTiming1];
|
||||
g_smc_dfs_table[i].PwrMgmtTiming2 = size->timing_parameter[i * num_of_dram_parameter + PwrMgmtTiming2];
|
||||
g_smc_dfs_table[i].PwrMgmtTiming3 = size->timing_parameter[i * num_of_dram_parameter + PwrMgmtTiming3];
|
||||
g_smc_dfs_table[i].TmrTrnInterval = size->timing_parameter[i * num_of_dram_parameter + TmrTrnInterval];
|
||||
g_smc_dfs_table[i].DFIDelay1 = size->timing_parameter[i * num_of_dram_parameter + DFIDelay1];
|
||||
g_smc_dfs_table[i].DFIDelay2 = size->timing_parameter[i * num_of_dram_parameter + DFIDelay2];
|
||||
g_smc_dfs_table[i].DvfsTrnCtl = size->timing_parameter[i * num_of_dram_parameter + DvfsTrnCtl];
|
||||
g_smc_dfs_table[i].TrnTiming0 = size->timing_parameter[i * num_of_dram_parameter + TrnTiming0];
|
||||
g_smc_dfs_table[i].TrnTiming1 = size->timing_parameter[i * num_of_dram_parameter + TrnTiming1];
|
||||
g_smc_dfs_table[i].TrnTiming2 = size->timing_parameter[i * num_of_dram_parameter + TrnTiming2];
|
||||
|
||||
g_phy_dfs_table[i].DVFSn_CON0 = size->timing_parameter[i * num_of_dram_parameter + DVFSn_CON0];
|
||||
g_phy_dfs_table[i].DVFSn_CON1 = size->timing_parameter[i * num_of_dram_parameter + DVFSn_CON1];
|
||||
g_phy_dfs_table[i].DVFSn_CON2 = size->timing_parameter[i * num_of_dram_parameter + DVFSn_CON2];
|
||||
g_phy_dfs_table[i].DVFSn_CON3 = size->timing_parameter[i * num_of_dram_parameter + DVFSn_CON3];
|
||||
g_phy_dfs_table[i].DVFSn_CON4 = size->timing_parameter[i * num_of_dram_parameter + DVFSn_CON4];
|
||||
|
||||
g_dram_dfs_table[i].DirectCmd_MR1 = size->timing_parameter[i * num_of_dram_parameter + DirectCmd_MR1];
|
||||
g_dram_dfs_table[i].DirectCmd_MR2 = size->timing_parameter[i * num_of_dram_parameter + DirectCmd_MR2];
|
||||
g_dram_dfs_table[i].DirectCmd_MR3 = size->timing_parameter[i * num_of_dram_parameter + DirectCmd_MR3];
|
||||
g_dram_dfs_table[i].DirectCmd_MR11 = size->timing_parameter[i * num_of_dram_parameter + DirectCmd_MR11];
|
||||
g_dram_dfs_table[i].DirectCmd_MR12 = size->timing_parameter[i * num_of_dram_parameter + DirectCmd_MR12];
|
||||
g_dram_dfs_table[i].DirectCmd_MR14 = size->timing_parameter[i * num_of_dram_parameter + DirectCmd_MR14];
|
||||
g_dram_dfs_table[i].DirectCmd_MR22 = size->timing_parameter[i * num_of_dram_parameter + DirectCmd_MR22];
|
||||
}
|
||||
}
|
||||
|
||||
void dfs_mif_level_init(void)
|
||||
{
|
||||
int i;
|
||||
void *dvfs_block;
|
||||
struct ect_dvfs_domain *domain;
|
||||
|
||||
dvfs_block = ect_get_block(BLOCK_DVFS);
|
||||
if (dvfs_block == NULL)
|
||||
return;
|
||||
|
||||
domain = ect_dvfs_get_domain(dvfs_block, vclk_dvfs_mif.vclk.name);
|
||||
if (domain == NULL)
|
||||
return;
|
||||
|
||||
mif_freq_to_level = kzalloc(sizeof(unsigned long long) * domain->num_of_level, GFP_KERNEL);
|
||||
if (mif_freq_to_level == NULL)
|
||||
return;
|
||||
|
||||
num_mif_freq_to_level = domain->num_of_level;
|
||||
|
||||
for (i = 0; i < domain->num_of_level; ++i)
|
||||
mif_freq_to_level[i] = domain->list_level[i].level * KHZ;
|
||||
}
|
||||
|
||||
void dfs_dram_init(void)
|
||||
{
|
||||
dfs_dram_param_init();
|
||||
dfs_mif_level_init();
|
||||
}
|
798
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-pll.c
Normal file
798
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-pll.c
Normal file
|
@ -0,0 +1,798 @@
|
|||
#include "../pwrcal.h"
|
||||
#include "../pwrcal-clk.h"
|
||||
#include "../pwrcal-env.h"
|
||||
#include "../pwrcal-rae.h"
|
||||
#include "../pwrcal-pmu.h"
|
||||
#include "S5E8890-cmusfr.h"
|
||||
#include "S5E8890-pmusfr.h"
|
||||
#include "S5E8890-cmu.h"
|
||||
|
||||
|
||||
/*
|
||||
PLLs
|
||||
*/
|
||||
/* PLL141XX Clock Type */
|
||||
#define PLL141XX_MDIV_SHIFT 16
|
||||
#define PLL141XX_PDIV_SHIFT 8
|
||||
#define PLL141XX_SDIV_SHIFT 0
|
||||
#define PLL141XX_MDIV_MASK 0x3FF
|
||||
#define PLL141XX_PDIV_MASK 0x3F
|
||||
#define PLL141XX_SDIV_MASK 0x7
|
||||
#define PLL141XX_ENABLE 31
|
||||
#define PLL141XX_LOCKED 29
|
||||
#define PLL141XX_BYPASS 22
|
||||
|
||||
/* PLL1431X Clock Type */
|
||||
#define PLL1431X_MDIV_SHIFT 16
|
||||
#define PLL1431X_PDIV_SHIFT 8
|
||||
#define PLL1431X_SDIV_SHIFT 0
|
||||
#define PLL1431X_K_SHIFT 0
|
||||
#define PLL1431X_MDIV_MASK 0x3FF
|
||||
#define PLL1431X_PDIV_MASK 0x3F
|
||||
#define PLL1431X_SDIV_MASK 0x7
|
||||
#define PLL1431X_K_MASK 0xFFFF
|
||||
#define PLL1431X_ENABLE 31
|
||||
#define PLL1431X_LOCKED 29
|
||||
#define PLL1431X_BYPASS 4
|
||||
|
||||
#define FIN_HZ_26M (26*MHZ)
|
||||
|
||||
static const struct pwrcal_pll_rate_table *_clk_get_pll_settings(
|
||||
struct pwrcal_pll *pll_clk,
|
||||
unsigned long long rate)
|
||||
{
|
||||
int i;
|
||||
const struct pwrcal_pll_rate_table *prate_table = pll_clk->rate_table;
|
||||
|
||||
for (i = 0; i < pll_clk->rate_count; i++) {
|
||||
if (rate == prate_table[i].rate)
|
||||
return &prate_table[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int _clk_pll141xx_find_pms(struct pll_spec *pll_spec,
|
||||
struct pwrcal_pll_rate_table *rate_table,
|
||||
unsigned long long rate)
|
||||
{
|
||||
unsigned int p, m, s;
|
||||
unsigned long long fref, fvco, fout;
|
||||
unsigned long long tmprate, tmpfout;
|
||||
unsigned long long mindiffrate = 0xFFFFFFFFFFFFFFFF;
|
||||
unsigned int min_p, min_m, min_s, min_fout;
|
||||
|
||||
for (p = pll_spec->pdiv_min; p <= pll_spec->pdiv_max; p++) {
|
||||
fref = FIN_HZ_26M / p;
|
||||
if ((fref < pll_spec->fref_min) || (fref > pll_spec->fref_max))
|
||||
continue;
|
||||
|
||||
for (s = pll_spec->sdiv_min; s <= pll_spec->sdiv_max; s++) {
|
||||
tmprate = rate;
|
||||
do_div(tmprate, MHZ);
|
||||
tmprate = tmprate * p * (1 << s);
|
||||
do_div(tmprate, (FIN_HZ_26M / MHZ));
|
||||
m = (unsigned int)tmprate;
|
||||
|
||||
if ((m < pll_spec->mdiv_min)
|
||||
|| (m > pll_spec->mdiv_max))
|
||||
continue;
|
||||
|
||||
fvco = ((unsigned long long)FIN_HZ_26M) * m;
|
||||
do_div(fvco, p);
|
||||
if ((fvco < pll_spec->fvco_min)
|
||||
|| (fvco > pll_spec->fvco_max))
|
||||
continue;
|
||||
|
||||
fout = fvco >> s;
|
||||
if ((fout >= pll_spec->fout_min)
|
||||
&& (fout <= pll_spec->fout_max)) {
|
||||
tmprate = rate;
|
||||
do_div(tmprate, KHZ);
|
||||
tmpfout = fout;
|
||||
do_div(tmpfout, KHZ);
|
||||
if (tmprate == tmpfout) {
|
||||
rate_table->rate = fout;
|
||||
rate_table->pdiv = p;
|
||||
rate_table->mdiv = m;
|
||||
rate_table->sdiv = s;
|
||||
rate_table->kdiv = 0;
|
||||
return 0;
|
||||
}
|
||||
if (tmpfout < tmprate && mindiffrate > tmprate - tmpfout) {
|
||||
mindiffrate = tmprate - tmpfout;
|
||||
min_fout = fout;
|
||||
min_p = p;
|
||||
min_m = m;
|
||||
min_s = s;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mindiffrate != 0xFFFFFFFFFFFFFFFF) {
|
||||
rate_table->rate = min_fout;
|
||||
rate_table->pdiv = min_p;
|
||||
rate_table->mdiv = min_m;
|
||||
rate_table->sdiv = min_s;
|
||||
rate_table->kdiv = 0;
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
static int _clk_pll1419x_find_pms(struct pll_spec *pll_spec,
|
||||
struct pwrcal_pll_rate_table *rate_table,
|
||||
unsigned long long rate)
|
||||
{
|
||||
unsigned int p, m, s;
|
||||
unsigned long long fref, fvco, fout;
|
||||
unsigned long long tmprate, tmpfout;
|
||||
unsigned long long mindiffrate = 0xFFFFFFFFFFFFFFFF;
|
||||
unsigned int min_p, min_m, min_s, min_fout;
|
||||
|
||||
for (p = pll_spec->pdiv_min; p <= pll_spec->pdiv_max; p++) {
|
||||
fref = FIN_HZ_26M / p;
|
||||
if ((fref < pll_spec->fref_min) || (fref > pll_spec->fref_max))
|
||||
continue;
|
||||
|
||||
for (s = pll_spec->sdiv_min; s <= pll_spec->sdiv_max; s++) {
|
||||
/*tmprate = rate;*/
|
||||
tmprate = rate/2; /*for PLL1419*/
|
||||
do_div(tmprate, MHZ);
|
||||
tmprate = tmprate * p * (1 << s);
|
||||
do_div(tmprate, (FIN_HZ_26M / MHZ));
|
||||
m = (unsigned int)tmprate;
|
||||
|
||||
if ((m < pll_spec->mdiv_min)
|
||||
|| (m > pll_spec->mdiv_max))
|
||||
continue;
|
||||
|
||||
fvco = ((unsigned long long)FIN_HZ_26M) * m;
|
||||
do_div(fvco, p);
|
||||
if ((fvco < pll_spec->fvco_min)
|
||||
|| (fvco > pll_spec->fvco_max))
|
||||
continue;
|
||||
|
||||
fout = fvco >> s;
|
||||
if ((fout >= pll_spec->fout_min)
|
||||
&& (fout <= pll_spec->fout_max)) {
|
||||
tmprate = rate;
|
||||
do_div(tmprate, KHZ);
|
||||
tmpfout = fout;
|
||||
do_div(tmpfout, KHZ);
|
||||
if (tmprate == tmpfout) {
|
||||
rate_table->rate = fout;
|
||||
rate_table->pdiv = p;
|
||||
rate_table->mdiv = m;
|
||||
rate_table->sdiv = s;
|
||||
rate_table->kdiv = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (tmpfout < tmprate && mindiffrate > tmprate - tmpfout) {
|
||||
mindiffrate = tmprate - tmpfout;
|
||||
min_fout = fout;
|
||||
min_p = p;
|
||||
min_m = m;
|
||||
min_s = s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mindiffrate != 0xFFFFFFFFFFFFFFFF) {
|
||||
rate_table->rate = min_fout;
|
||||
rate_table->pdiv = min_p;
|
||||
rate_table->mdiv = min_m;
|
||||
rate_table->sdiv = min_s;
|
||||
rate_table->kdiv = 0;
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int _clk_pll141xx_is_enabled(struct pwrcal_clk *clk)
|
||||
{
|
||||
return (int)(pwrcal_getbit(clk->offset, PLL141XX_ENABLE));
|
||||
}
|
||||
|
||||
static int _clk_pll141xx_enable(struct pwrcal_clk *clk)
|
||||
{
|
||||
int timeout;
|
||||
|
||||
if (pwrcal_getbit(clk->offset, PLL141XX_ENABLE))
|
||||
return 0;
|
||||
|
||||
pwrcal_setbit(clk->offset, PLL141XX_ENABLE, 1);
|
||||
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(clk->offset, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _clk_pll1419x_enable(struct pwrcal_clk *clk)
|
||||
{
|
||||
int timeout;
|
||||
|
||||
if (pwrcal_getbit(clk->offset, PLL141XX_ENABLE))
|
||||
return 0;
|
||||
|
||||
pwrcal_setbit(clk->offset, PLL141XX_ENABLE, 1);
|
||||
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF0_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF1_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF2_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF3_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int _clk_pll141xx_disable(struct pwrcal_clk *clk)
|
||||
{
|
||||
pwrcal_setbit(clk->offset, PLL141XX_ENABLE, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _clk_pll141xx_is_disabled_bypass(struct pwrcal_clk *clk)
|
||||
{
|
||||
if (pwrcal_getbit(clk->offset + 1, PLL141XX_BYPASS))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int _clk_pll141xx_set_bypass(struct pwrcal_clk *clk, int bypass_disable)
|
||||
{
|
||||
if (bypass_disable == 0)
|
||||
pwrcal_setbit(clk + 1, PLL141XX_BYPASS, 1);
|
||||
else
|
||||
pwrcal_setbit(clk + 1, PLL141XX_BYPASS, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _clk_pll141xx_set_pms(struct pwrcal_clk *clk,
|
||||
const struct pwrcal_pll_rate_table *rate_table)
|
||||
{
|
||||
unsigned int mdiv, pdiv, sdiv, pll_con0;
|
||||
|
||||
int timeout;
|
||||
|
||||
pdiv = rate_table->pdiv;
|
||||
mdiv = rate_table->mdiv;
|
||||
sdiv = rate_table->sdiv;
|
||||
|
||||
pll_con0 = pwrcal_readl(clk->offset);
|
||||
pll_con0 &= ~((PLL141XX_MDIV_MASK << PLL141XX_MDIV_SHIFT)
|
||||
| (PLL141XX_PDIV_MASK << PLL141XX_PDIV_SHIFT)
|
||||
| (PLL141XX_SDIV_MASK << PLL141XX_SDIV_SHIFT));
|
||||
pll_con0 |= (mdiv << PLL141XX_MDIV_SHIFT)
|
||||
| (pdiv << PLL141XX_PDIV_SHIFT)
|
||||
| (sdiv << PLL141XX_SDIV_SHIFT);
|
||||
pll_con0 &= ~(1<<26);
|
||||
pll_con0 |= (1<<5);
|
||||
|
||||
pwrcal_writel(clk->status, pdiv*150);
|
||||
pwrcal_writel(clk->offset, pll_con0);
|
||||
|
||||
if (pll_con0 & (1 << PLL141XX_ENABLE)) {
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(clk->offset, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
static int _clk_pll1419x_set_pms(struct pwrcal_clk *clk,
|
||||
const struct pwrcal_pll_rate_table *rate_table)
|
||||
{
|
||||
unsigned int mdiv, pdiv, sdiv, pll_con0;
|
||||
|
||||
int timeout;
|
||||
|
||||
pdiv = rate_table->pdiv;
|
||||
mdiv = rate_table->mdiv;
|
||||
sdiv = rate_table->sdiv;
|
||||
|
||||
pll_con0 = pwrcal_readl(clk->offset);
|
||||
pll_con0 &= ~((PLL141XX_MDIV_MASK << PLL141XX_MDIV_SHIFT)
|
||||
| (PLL141XX_PDIV_MASK << PLL141XX_PDIV_SHIFT)
|
||||
| (PLL141XX_SDIV_MASK << PLL141XX_SDIV_SHIFT));
|
||||
pll_con0 |= (mdiv << PLL141XX_MDIV_SHIFT)
|
||||
| (pdiv << PLL141XX_PDIV_SHIFT)
|
||||
| (sdiv << PLL141XX_SDIV_SHIFT);
|
||||
|
||||
pwrcal_writel(MIF0_PLL_LOCK, pdiv*150);
|
||||
pwrcal_writel(MIF1_PLL_LOCK, pdiv*150);
|
||||
pwrcal_writel(MIF2_PLL_LOCK, pdiv*150);
|
||||
pwrcal_writel(MIF3_PLL_LOCK, pdiv*150);
|
||||
pwrcal_writel(clk->offset, pll_con0);
|
||||
|
||||
if (pll_con0 & (1 << PLL141XX_ENABLE)) {
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF0_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF1_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF2_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(MIF3_PLL_CON0, PLL141XX_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int _clk_pll141xx_set_rate(struct pwrcal_clk *clk,
|
||||
unsigned long long rate)
|
||||
{
|
||||
struct pwrcal_pll *pll = to_pll(clk);
|
||||
struct pll_spec *pll_spec;
|
||||
struct pwrcal_pll_rate_table tmp_rate_table;
|
||||
const struct pwrcal_pll_rate_table *rate_table;
|
||||
|
||||
if (rate == 0) {
|
||||
if (_clk_pll141xx_is_enabled(clk) != 0)
|
||||
if (_clk_pll141xx_disable(clk))
|
||||
goto errorout;
|
||||
return 0;
|
||||
}
|
||||
|
||||
rate_table = _clk_get_pll_settings(pll, rate);
|
||||
if (rate_table == NULL) {
|
||||
pll_spec = clk_pll_get_spec(clk);
|
||||
if (pll_spec == NULL)
|
||||
goto errorout;
|
||||
|
||||
if (_clk_pll141xx_find_pms(pll_spec, &tmp_rate_table, rate)) {
|
||||
pr_err("can't find pms value for rate(%lldHz) of \'%s\'",
|
||||
rate,
|
||||
clk->name);
|
||||
goto errorout;
|
||||
}
|
||||
|
||||
rate_table = &tmp_rate_table;
|
||||
|
||||
pr_warn("not exist in rate table, p(%d), m(%d), s(%d), fout(%lldHz) %s",
|
||||
rate_table->pdiv,
|
||||
rate_table->mdiv,
|
||||
rate_table->sdiv,
|
||||
rate,
|
||||
clk->name);
|
||||
}
|
||||
|
||||
if (_clk_pll141xx_set_pms(clk, rate_table))
|
||||
goto errorout;
|
||||
|
||||
if (rate != 0) {
|
||||
if (_clk_pll141xx_is_enabled(clk) == 0)
|
||||
_clk_pll141xx_enable(clk);
|
||||
}
|
||||
return 0;
|
||||
|
||||
errorout:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int _clk_pll1419x_set_rate(struct pwrcal_clk *clk,
|
||||
unsigned long long rate)
|
||||
{
|
||||
struct pwrcal_pll *pll = to_pll(clk);
|
||||
struct pll_spec *pll_spec;
|
||||
struct pwrcal_pll_rate_table tmp_rate_table;
|
||||
const struct pwrcal_pll_rate_table *rate_table;
|
||||
|
||||
if (rate == 0) {
|
||||
if (_clk_pll141xx_is_enabled(clk) != 0)
|
||||
if (_clk_pll141xx_disable(clk))
|
||||
goto errorout;
|
||||
return 0;
|
||||
}
|
||||
|
||||
rate_table = _clk_get_pll_settings(pll, rate);
|
||||
if (rate_table == NULL) {
|
||||
pll_spec = clk_pll_get_spec(clk);
|
||||
if (pll_spec == NULL)
|
||||
goto errorout;
|
||||
|
||||
if (_clk_pll1419x_find_pms(pll_spec, &tmp_rate_table, rate)) {
|
||||
pr_err("can't find pms value for rate(%lldHz) of \'%s\'",
|
||||
rate,
|
||||
clk->name);
|
||||
goto errorout;
|
||||
}
|
||||
|
||||
rate_table = &tmp_rate_table;
|
||||
|
||||
pr_warn("not exist in rate table, p(%d), m(%d), s(%d), fout(%lldHz) %s",
|
||||
rate_table->pdiv,
|
||||
rate_table->mdiv,
|
||||
rate_table->sdiv,
|
||||
rate,
|
||||
clk->name);
|
||||
}
|
||||
|
||||
_clk_pll141xx_disable(clk);
|
||||
|
||||
if (_clk_pll1419x_set_pms(clk, rate_table))
|
||||
goto errorout;
|
||||
|
||||
if (rate != 0) {
|
||||
if (_clk_pll141xx_is_enabled(clk) == 0)
|
||||
_clk_pll1419x_enable(clk);
|
||||
}
|
||||
return 0;
|
||||
|
||||
errorout:
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
static unsigned long long _clk_pll141xx_get_rate(struct pwrcal_clk *clk)
|
||||
{
|
||||
unsigned int mdiv, pdiv, sdiv, pll_con0;
|
||||
unsigned long long fout;
|
||||
|
||||
if (_clk_pll141xx_is_enabled(clk) == 0)
|
||||
return 0;
|
||||
pll_con0 = pwrcal_readl(clk->offset);
|
||||
mdiv = (pll_con0 >> PLL141XX_MDIV_SHIFT) & PLL141XX_MDIV_MASK;
|
||||
pdiv = (pll_con0 >> PLL141XX_PDIV_SHIFT) & PLL141XX_PDIV_MASK;
|
||||
sdiv = (pll_con0 >> PLL141XX_SDIV_SHIFT) & PLL141XX_SDIV_MASK;
|
||||
|
||||
if (pdiv == 0) {
|
||||
pr_err("pdiv is 0, id(%s)", clk->name);
|
||||
return 0;
|
||||
}
|
||||
fout = FIN_HZ_26M * mdiv;
|
||||
do_div(fout, (pdiv << sdiv));
|
||||
return (unsigned long long)fout;
|
||||
}
|
||||
|
||||
static unsigned long long _clk_pll1419x_get_rate(struct pwrcal_clk *clk)
|
||||
{
|
||||
unsigned int mdiv, pdiv, sdiv, pll_con0;
|
||||
unsigned long long fout;
|
||||
|
||||
if (_clk_pll141xx_is_enabled(clk) == 0)
|
||||
return 0;
|
||||
|
||||
pll_con0 = pwrcal_readl(clk->offset);
|
||||
mdiv = (pll_con0 >> PLL141XX_MDIV_SHIFT) & PLL141XX_MDIV_MASK;
|
||||
pdiv = (pll_con0 >> PLL141XX_PDIV_SHIFT) & PLL141XX_PDIV_MASK;
|
||||
sdiv = (pll_con0 >> PLL141XX_SDIV_SHIFT) & PLL141XX_SDIV_MASK;
|
||||
|
||||
if (pdiv == 0) {
|
||||
pr_err("pdiv is 0, id(%s)", clk->name);
|
||||
return 0;
|
||||
}
|
||||
fout = FIN_HZ_26M * 2 * mdiv;
|
||||
do_div(fout, (pdiv << sdiv));
|
||||
return (unsigned long long)fout;
|
||||
}
|
||||
|
||||
static int _clk_pll1431x_find_pms(struct pll_spec *pll_spec,
|
||||
struct pwrcal_pll_rate_table *rate_table,
|
||||
unsigned long long rate)
|
||||
{
|
||||
unsigned int p, m, s;
|
||||
signed short k;
|
||||
unsigned long long fref, fvco, fout;
|
||||
unsigned long long tmprate, tmpfout;
|
||||
|
||||
for (p = pll_spec->pdiv_min; p <= pll_spec->pdiv_max; p++) {
|
||||
fref = FIN_HZ_26M / p;
|
||||
if ((fref < pll_spec->fref_min) || (fref > pll_spec->fref_max))
|
||||
continue;
|
||||
|
||||
for (s = pll_spec->sdiv_min; s <= pll_spec->sdiv_max; s++) {
|
||||
tmprate = rate;
|
||||
do_div(tmprate, MHZ);
|
||||
tmprate = tmprate * p * (1 << s);
|
||||
do_div(tmprate, (FIN_HZ_26M / MHZ));
|
||||
m = (unsigned int)tmprate;
|
||||
|
||||
if ((m < pll_spec->mdiv_min)
|
||||
|| (m > pll_spec->mdiv_max))
|
||||
continue;
|
||||
|
||||
tmprate = rate;
|
||||
do_div(tmprate, MHZ);
|
||||
tmprate = tmprate * p * (1 << s);
|
||||
do_div(tmprate, (FIN_HZ_26M / MHZ));
|
||||
tmprate = (tmprate - m) * 65536;
|
||||
k = (unsigned int)tmprate;
|
||||
if ((k < pll_spec->kdiv_min)
|
||||
|| (k > pll_spec->kdiv_max))
|
||||
continue;
|
||||
|
||||
fvco = FIN_HZ_26M * ((m << 16) + k);
|
||||
do_div(fvco, p);
|
||||
fvco >>= 16;
|
||||
if ((fvco < pll_spec->fvco_min)
|
||||
|| (fvco > pll_spec->fvco_max))
|
||||
continue;
|
||||
|
||||
fout = fvco >> s;
|
||||
if ((fout >= pll_spec->fout_min)
|
||||
&& (fout <= pll_spec->fout_max)) {
|
||||
tmprate = rate;
|
||||
do_div(tmprate, KHZ);
|
||||
tmpfout = fout;
|
||||
do_div(tmpfout, KHZ);
|
||||
if (tmprate == tmpfout) {
|
||||
rate_table->rate = fout;
|
||||
rate_table->pdiv = p;
|
||||
rate_table->mdiv = m;
|
||||
rate_table->sdiv = s;
|
||||
rate_table->kdiv = k;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int _clk_pll1431x_is_enabled(struct pwrcal_clk *clk)
|
||||
{
|
||||
return (int)(pwrcal_getbit(clk->offset, PLL1431X_ENABLE));
|
||||
}
|
||||
|
||||
static int _clk_pll1431x_enable(struct pwrcal_clk *clk)
|
||||
{
|
||||
int timeout;
|
||||
|
||||
if (pwrcal_getbit(clk->offset, PLL1431X_ENABLE))
|
||||
return 0;
|
||||
|
||||
pwrcal_setbit(clk->offset, PLL1431X_ENABLE, 1);
|
||||
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(clk->offset, PLL1431X_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _clk_pll1431x_disable(struct pwrcal_clk *clk)
|
||||
{
|
||||
pwrcal_setbit(clk->offset, PLL1431X_ENABLE, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _clk_pll1431x_is_disabled_bypass(struct pwrcal_clk *clk)
|
||||
{
|
||||
if (pwrcal_getbit(clk->offset + 2, PLL1431X_BYPASS))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int _clk_pll1431x_set_bypass(struct pwrcal_clk *clk, int bypass_disable)
|
||||
{
|
||||
if (bypass_disable == 0)
|
||||
pwrcal_setbit(clk->offset + 2, PLL1431X_BYPASS, 1);
|
||||
else
|
||||
pwrcal_setbit(clk->offset + 2, PLL1431X_BYPASS, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _clk_pll1431x_set_pms(struct pwrcal_clk *clk,
|
||||
const struct pwrcal_pll_rate_table *rate_table)
|
||||
{
|
||||
unsigned int mdiv, pdiv, sdiv, pll_con0, pll_con1;
|
||||
signed short kdiv;
|
||||
int timeout;
|
||||
|
||||
pdiv = rate_table->pdiv;
|
||||
mdiv = rate_table->mdiv;
|
||||
sdiv = rate_table->sdiv;
|
||||
kdiv = rate_table->kdiv;
|
||||
|
||||
pll_con0 = pwrcal_readl(clk->offset);
|
||||
pll_con1 = pwrcal_readl(clk->offset + 1);
|
||||
pll_con0 &= ~((PLL1431X_MDIV_MASK << PLL1431X_MDIV_SHIFT)
|
||||
| (PLL1431X_PDIV_MASK << PLL1431X_PDIV_SHIFT)
|
||||
| (PLL1431X_SDIV_MASK << PLL1431X_SDIV_SHIFT));
|
||||
pll_con0 |= (mdiv << PLL1431X_MDIV_SHIFT)
|
||||
| (pdiv << PLL1431X_PDIV_SHIFT)
|
||||
| (sdiv << PLL1431X_SDIV_SHIFT);
|
||||
pll_con0 &= ~(1<<26);
|
||||
pll_con0 |= (1<<5);
|
||||
|
||||
pll_con1 &= ~(PLL1431X_K_MASK << PLL1431X_K_SHIFT);
|
||||
pll_con1 |= (kdiv << PLL1431X_K_SHIFT);
|
||||
|
||||
if (kdiv == 0)
|
||||
pwrcal_writel(clk->status, pdiv*3000);
|
||||
else
|
||||
pwrcal_writel(clk->status, pdiv*3000);
|
||||
pwrcal_writel(clk->offset, pll_con0);
|
||||
pwrcal_writel(clk->offset + 1, pll_con1);
|
||||
|
||||
if (pll_con0 & (1 << PLL1431X_ENABLE)) {
|
||||
for (timeout = 0;; timeout++) {
|
||||
if (pwrcal_getbit(clk->offset, PLL1431X_LOCKED))
|
||||
break;
|
||||
if (timeout > CLK_WAIT_CNT)
|
||||
return -1;
|
||||
cpu_relax();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _clk_pll1431x_set_rate(struct pwrcal_clk *clk,
|
||||
unsigned long long rate)
|
||||
{
|
||||
struct pwrcal_pll *pll = to_pll(clk);
|
||||
struct pwrcal_pll_rate_table tmp_rate_table;
|
||||
const struct pwrcal_pll_rate_table *rate_table;
|
||||
struct pll_spec *pll_spec;
|
||||
|
||||
if (rate == 0) {
|
||||
if (_clk_pll1431x_is_enabled(clk) != 0)
|
||||
if (_clk_pll1431x_disable(clk))
|
||||
goto errorout;
|
||||
return 0;
|
||||
}
|
||||
|
||||
rate_table = _clk_get_pll_settings(pll, rate);
|
||||
if (rate_table == NULL) {
|
||||
pll_spec = clk_pll_get_spec(clk);
|
||||
if (pll_spec == NULL)
|
||||
goto errorout;
|
||||
|
||||
if (_clk_pll1431x_find_pms(pll_spec, &tmp_rate_table, rate) < 0) {
|
||||
pr_err("can't find pms value for rate(%lldHz) of %s",
|
||||
rate,
|
||||
clk->name);
|
||||
goto errorout;
|
||||
}
|
||||
|
||||
rate_table = &tmp_rate_table;
|
||||
pr_warn("not exist in rate table, p(%d) m(%d) s(%d) k(%d) fout(%lld Hz) of %s",
|
||||
rate_table->pdiv,
|
||||
rate_table->mdiv,
|
||||
rate_table->sdiv,
|
||||
rate_table->kdiv,
|
||||
rate,
|
||||
clk->name);
|
||||
}
|
||||
|
||||
if (_clk_pll1431x_set_pms(clk, rate_table))
|
||||
goto errorout;
|
||||
|
||||
if (rate != 0) {
|
||||
if (_clk_pll1431x_is_enabled(clk) == 0)
|
||||
_clk_pll1431x_enable(clk);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
errorout:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static unsigned long long _clk_pll1431x_get_rate(struct pwrcal_clk *clk)
|
||||
{
|
||||
unsigned int mdiv, pdiv, sdiv, pll_con0, pll_con1;
|
||||
signed short kdiv;
|
||||
unsigned long long fout;
|
||||
|
||||
if (_clk_pll1431x_is_enabled(clk) == 0)
|
||||
return 0;
|
||||
|
||||
pll_con0 = pwrcal_readl(clk->offset);
|
||||
pll_con1 = pwrcal_readl(clk->offset + 1);
|
||||
mdiv = (pll_con0 >> PLL1431X_MDIV_SHIFT) & PLL1431X_MDIV_MASK;
|
||||
pdiv = (pll_con0 >> PLL1431X_PDIV_SHIFT) & PLL1431X_PDIV_MASK;
|
||||
sdiv = (pll_con0 >> PLL1431X_SDIV_SHIFT) & PLL1431X_SDIV_MASK;
|
||||
|
||||
kdiv = (short)(pll_con1 >> PLL1431X_K_SHIFT) & PLL1431X_K_MASK;
|
||||
|
||||
if (pdiv == 0) {
|
||||
pr_err("pdiv is 0, id(%s)", clk->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fout = FIN_HZ_26M * ((mdiv << 16) + kdiv);
|
||||
do_div(fout, (pdiv << sdiv));
|
||||
fout >>= 16;
|
||||
|
||||
return (unsigned long long)fout;
|
||||
}
|
||||
|
||||
struct pwrcal_pll_ops pll141xx_ops = {
|
||||
.is_enabled = _clk_pll141xx_is_enabled,
|
||||
.enable = _clk_pll141xx_enable,
|
||||
.disable = _clk_pll141xx_disable,
|
||||
.set_rate = _clk_pll141xx_set_rate,
|
||||
.get_rate = _clk_pll141xx_get_rate,
|
||||
};
|
||||
|
||||
struct pwrcal_pll_ops pll1419x_ops = {
|
||||
.is_enabled = _clk_pll141xx_is_enabled,
|
||||
.enable = _clk_pll1419x_enable,
|
||||
.disable = _clk_pll141xx_disable,
|
||||
.set_rate = _clk_pll1419x_set_rate,
|
||||
.get_rate = _clk_pll1419x_get_rate,
|
||||
};
|
||||
|
||||
struct pwrcal_pll_ops pll1431x_ops = {
|
||||
.is_enabled = _clk_pll1431x_is_enabled,
|
||||
.enable = _clk_pll1431x_enable,
|
||||
.disable = _clk_pll1431x_disable,
|
||||
.set_rate = _clk_pll1431x_set_rate,
|
||||
.get_rate = _clk_pll1431x_get_rate,
|
||||
};
|
1063
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-pmu.c
Normal file
1063
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-pmu.c
Normal file
File diff suppressed because it is too large
Load diff
2112
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-pmusfr.h
Executable file
2112
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-pmusfr.h
Executable file
File diff suppressed because it is too large
Load diff
99
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-rae.c
Executable file
99
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-rae.c
Executable file
|
@ -0,0 +1,99 @@
|
|||
#include "../pwrcal-rae.h"
|
||||
#include "S5E8890-sfrbase.h"
|
||||
|
||||
#ifdef PWRCAL_TARGET_LINUX
|
||||
|
||||
struct v2p_sfr v2psfrmap[] = {
|
||||
DEFINE_V2P(CMU_PERIS_BASE, 0x10040000),
|
||||
DEFINE_V2P(CMU_TOP_BASE, 0x10570000),
|
||||
DEFINE_V2P(CMU_CCORE_BASE, 0x105B0000),
|
||||
DEFINE_V2P(CMU_MIF0_BASE, 0x10850000),
|
||||
DEFINE_V2P(CMU_MIF1_BASE, 0x10950000),
|
||||
DEFINE_V2P(CMU_MIF2_BASE, 0x10A50000),
|
||||
DEFINE_V2P(CMU_MIF3_BASE, 0x10B50000),
|
||||
DEFINE_V2P(CMU_FSYS0_BASE, 0x10E90000),
|
||||
DEFINE_V2P(CMU_IMEM_BASE, 0x11060000),
|
||||
DEFINE_V2P(CMU_AUD_BASE, 0x114C0000),
|
||||
DEFINE_V2P(CMU_MNGS_BASE, 0x11800000),
|
||||
DEFINE_V2P(CMU_APOLLO_BASE, 0x11900000),
|
||||
DEFINE_V2P(CMU_BUS0_BASE, 0x13400000),
|
||||
DEFINE_V2P(CMU_BUS1_BASE, 0x14800000),
|
||||
DEFINE_V2P(CMU_PERIC0_BASE, 0x13610000),
|
||||
DEFINE_V2P(CMU_DISP0_BASE, 0x13AD0000),
|
||||
DEFINE_V2P(CMU_DISP1_BASE, 0x13F00000),
|
||||
DEFINE_V2P(CMU_CAM0_LOCAL_BASE, 0x140F0000),
|
||||
DEFINE_V2P(CMU_CAM0_BASE, 0x144D0000),
|
||||
DEFINE_V2P(CMU_CAM1_LOCAL_BASE, 0x141F0000),
|
||||
DEFINE_V2P(CMU_CAM1_BASE, 0x145D0000),
|
||||
DEFINE_V2P(CMU_ISP0_LOCAL_BASE, 0x14290000),
|
||||
DEFINE_V2P(CMU_ISP0_BASE, 0x146D0000),
|
||||
DEFINE_V2P(CMU_ISP1_LOCAL_BASE, 0x142F0000),
|
||||
DEFINE_V2P(CMU_ISP1_BASE, 0x147D0000),
|
||||
DEFINE_V2P(CMU_G3D_BASE, 0x14AA0000),
|
||||
DEFINE_V2P(CMU_PERIC1_BASE, 0x14C80000),
|
||||
DEFINE_V2P(CMU_MSCL_BASE, 0x150D0000),
|
||||
DEFINE_V2P(CMU_MFC_BASE, 0x15280000),
|
||||
DEFINE_V2P(CMU_FSYS1_BASE, 0x156E0000),
|
||||
|
||||
|
||||
DEFINE_V2P(PMU_PERIS_BASE, 0x10010000),
|
||||
DEFINE_V2P(PMU_ALIVE_BASE, 0x105C0000),
|
||||
DEFINE_V2P(PMU_CCORE_BASE, 0x105F0000),
|
||||
DEFINE_V2P(PMU_MIF0_BASE, 0x10840000),
|
||||
DEFINE_V2P(PMU_MIF1_BASE, 0x10940000),
|
||||
DEFINE_V2P(PMU_MIF2_BASE, 0x10A40000),
|
||||
DEFINE_V2P(PMU_MIF3_BASE, 0x10B40000),
|
||||
DEFINE_V2P(PMU_FSYS0_BASE, 0x10E70000),
|
||||
DEFINE_V2P(PMU_IMEM_BASE, 0x11070000),
|
||||
DEFINE_V2P(PMU_AUD_BASE, 0x114D0000),
|
||||
DEFINE_V2P(PMU_MNGS_BASE, 0x11820000),
|
||||
DEFINE_V2P(PMU_APOLLO_BASE, 0x11920000),
|
||||
DEFINE_V2P(PMU_BUS0_BASE, 0x13420000),
|
||||
DEFINE_V2P(PMU_BUS1_BASE, 0x14820000),
|
||||
DEFINE_V2P(PMU_PERIC0_BASE, 0x13600000),
|
||||
DEFINE_V2P(PMU_DISP0_BASE, 0x13AE0000),
|
||||
DEFINE_V2P(PMU_DISP1_BASE, 0x13F10000),
|
||||
DEFINE_V2P(PMU_CAM0_BASE, 0x144E0000),
|
||||
DEFINE_V2P(PMU_CAM1_BASE, 0x145E0000),
|
||||
DEFINE_V2P(PMU_ISP0_BASE, 0x146E0000),
|
||||
DEFINE_V2P(PMU_ISP1_BASE, 0x147E0000),
|
||||
DEFINE_V2P(PMU_G3D_BASE, 0x14A40000),
|
||||
DEFINE_V2P(PMU_PERIC1_BASE, 0x14C70000),
|
||||
DEFINE_V2P(PMU_MSCL_BASE, 0x150F0000),
|
||||
DEFINE_V2P(PMU_MFC_BASE, 0x15290000),
|
||||
DEFINE_V2P(PMU_FSYS1_BASE, 0x156C0000),
|
||||
|
||||
DEFINE_V2P(DMC_MISC_CCORE_BASE, 0x10520000),
|
||||
DEFINE_V2P(LPDDR4_PHY0_BASE, 0x10820000),
|
||||
|
||||
DEFINE_V2P(SYSREG_APOLLO_BASE, 0x11940000),
|
||||
DEFINE_V2P(SYSREG_AUD_BASE, 0x11480000),
|
||||
DEFINE_V2P(SYSREG_BUS0_BASE, 0x134C0000),
|
||||
DEFINE_V2P(SYSREG_BUS1_BASE, 0x148C0000),
|
||||
DEFINE_V2P(SYSREG_CAM0_BASE, 0x144F0000),
|
||||
DEFINE_V2P(SYSREG_CAM1_BASE, 0x145F0000),
|
||||
DEFINE_V2P(SYSREG_CCORE_BASE, 0x105D0000),
|
||||
DEFINE_V2P(SYSREG_DISP0_BASE, 0x13A60000),
|
||||
DEFINE_V2P(SYSREG_DISP1_BASE, 0x13F20000),
|
||||
DEFINE_V2P(SYSREG_FSYS0_BASE, 0x10E50000),
|
||||
DEFINE_V2P(SYSREG_FSYS1_BASE, 0x15600000),
|
||||
DEFINE_V2P(SYSREG_G3D_BASE, 0x14AE0000),
|
||||
DEFINE_V2P(SYSREG_IMEM_BASE, 0x11080000),
|
||||
DEFINE_V2P(SYSREG_ISP0_BASE, 0x146F0000),
|
||||
DEFINE_V2P(SYSREG_ISP1_BASE, 0x147F0000),
|
||||
DEFINE_V2P(SYSREG_MFC_BASE, 0x152A0000),
|
||||
DEFINE_V2P(SYSREG_MIF0_BASE, 0x10830000),
|
||||
DEFINE_V2P(SYSREG_MIF1_BASE, 0x10930000),
|
||||
DEFINE_V2P(SYSREG_MIF2_BASE, 0x10A30000),
|
||||
DEFINE_V2P(SYSREG_MIF3_BASE, 0x10B30000),
|
||||
DEFINE_V2P(SYSREG_MNGS_BASE, 0x11850000),
|
||||
DEFINE_V2P(SYSREG_MSCL_BASE, 0x151C0000),
|
||||
DEFINE_V2P(SYSREG_PERIC0_BASE, 0x136E0000),
|
||||
DEFINE_V2P(SYSREG_PERIC1_BASE, 0x14C60000),
|
||||
DEFINE_V2P(SYSREG_PERIS_BASE, 0x10050000),
|
||||
};
|
||||
|
||||
int num_of_v2psfrmap = sizeof(v2psfrmap) / sizeof(v2psfrmap[0]);
|
||||
void *spinlock_enable_offset = (void *)PMU_PERIS_BASE;
|
||||
|
||||
#endif
|
190
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-sfrbase.h
Executable file
190
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-sfrbase.h
Executable file
|
@ -0,0 +1,190 @@
|
|||
#ifndef __EXYNOS8890_SFRBASE_H__
|
||||
#define __EXYNOS8890_SFRBASE_H__
|
||||
|
||||
#include "../pwrcal-env.h"
|
||||
|
||||
#ifdef PWRCAL_TARGET_FW
|
||||
|
||||
#define CMU_PERIS_BASE 0x10040000
|
||||
#define CMU_TOP_BASE 0x10570000
|
||||
#define CMU_CCORE_BASE 0x105B0000
|
||||
#define CMU_MIF0_BASE 0x10850000
|
||||
#define CMU_MIF1_BASE 0x10950000
|
||||
#define CMU_MIF2_BASE 0x10A50000
|
||||
#define CMU_MIF3_BASE 0x10B50000
|
||||
#define CMU_FSYS0_BASE 0x10E90000
|
||||
#define CMU_IMEM_BASE 0x11060000
|
||||
#define CMU_AUD_BASE 0x114C0000
|
||||
#define CMU_MNGS_BASE 0x11800000
|
||||
#define CMU_APOLLO_BASE 0x11900000
|
||||
#define CMU_BUS0_BASE 0x13400000
|
||||
#define CMU_BUS1_BASE 0x14800000
|
||||
#define CMU_PERIC0_BASE 0x13610000
|
||||
#define CMU_DISP0_BASE 0x13AD0000
|
||||
#define CMU_DISP1_BASE 0x13F00000
|
||||
#define CMU_CAM0_LOCAL_BASE 0x140F0000
|
||||
#define CMU_CAM0_BASE 0x144D0000
|
||||
#define CMU_CAM1_LOCAL_BASE 0x141F0000
|
||||
#define CMU_CAM1_BASE 0x145D0000
|
||||
#define CMU_ISP0_LOCAL_BASE 0x14290000
|
||||
#define CMU_ISP0_BASE 0x146D0000
|
||||
#define CMU_ISP1_LOCAL_BASE 0x142F0000
|
||||
#define CMU_ISP1_BASE 0x147D0000
|
||||
#define CMU_G3D_BASE 0x14AA0000
|
||||
#define CMU_PERIC1_BASE 0x14C80000
|
||||
#define CMU_MSCL_BASE 0x150D0000
|
||||
#define CMU_MFC_BASE 0x15280000
|
||||
#define CMU_FSYS1_BASE 0x156E0000
|
||||
|
||||
|
||||
#define PMU_PERIS_BASE 0x10010000
|
||||
#define PMU_ALIVE_BASE 0x105C0000
|
||||
#define PMU_CCORE_BASE 0x105F0000
|
||||
#define PMU_MIF0_BASE 0x10840000
|
||||
#define PMU_MIF1_BASE 0x10940000
|
||||
#define PMU_MIF2_BASE 0x10A40000
|
||||
#define PMU_MIF3_BASE 0x10B40000
|
||||
#define PMU_FSYS0_BASE 0x10E70000
|
||||
#define PMU_IMEM_BASE 0x11070000
|
||||
#define PMU_AUD_BASE 0x114D0000
|
||||
#define PMU_MNGS_BASE 0x11820000
|
||||
#define PMU_APOLLO_BASE 0x11920000
|
||||
#define PMU_BUS0_BASE 0x13420000
|
||||
#define PMU_BUS1_BASE 0x14820000
|
||||
#define PMU_PERIC0_BASE 0x13600000
|
||||
#define PMU_DISP0_BASE 0x13AE0000
|
||||
#define PMU_DISP1_BASE 0x13F10000
|
||||
#define PMU_CAM0_BASE 0x144E0000
|
||||
#define PMU_CAM1_BASE 0x145E0000
|
||||
#define PMU_ISP0_BASE 0x146E0000
|
||||
#define PMU_ISP1_BASE 0x147E0000
|
||||
#define PMU_G3D_BASE 0x14A40000
|
||||
#define PMU_PERIC1_BASE 0x14C70000
|
||||
#define PMU_MSCL_BASE 0x150F0000
|
||||
#define PMU_MFC_BASE 0x15290000
|
||||
#define PMU_FSYS1_BASE 0x156C0000
|
||||
|
||||
#define DMC_MISC_CCORE_BASE 0x10520000
|
||||
#define LPDDR4_PHY0_BASE 0x10820000
|
||||
|
||||
#define SYSREG_APOLLO_BASE 0x11940000
|
||||
#define SYSREG_AUD_BASE 0x11480000
|
||||
#define SYSREG_BUS0_BASE 0x134C0000
|
||||
#define SYSREG_BUS1_BASE 0x148C0000
|
||||
#define SYSREG_CAM0_BASE 0x144F0000
|
||||
#define SYSREG_CAM1_BASE 0x145F0000
|
||||
#define SYSREG_CCORE_BASE 0x105D0000
|
||||
#define SYSREG_DISP0_BASE 0x13A60000
|
||||
#define SYSREG_DISP1_BASE 0x13F20000
|
||||
#define SYSREG_FSYS0_BASE 0x10E50000
|
||||
#define SYSREG_FSYS1_BASE 0x15600000
|
||||
#define SYSREG_G3D_BASE 0x14AE0000
|
||||
#define SYSREG_IMEM_BASE 0x11080000
|
||||
#define SYSREG_ISP0_BASE 0x146F0000
|
||||
#define SYSREG_ISP1_BASE 0x147F0000
|
||||
#define SYSREG_MFC_BASE 0x152A0000
|
||||
#define SYSREG_MIF0_BASE 0x10830000
|
||||
#define SYSREG_MIF1_BASE 0x10930000
|
||||
#define SYSREG_MIF2_BASE 0x10A30000
|
||||
#define SYSREG_MIF3_BASE 0x10B30000
|
||||
#define SYSREG_MNGS_BASE 0x11850000
|
||||
#define SYSREG_MSCL_BASE 0x151C0000
|
||||
#define SYSREG_PERIC0_BASE 0x136E0000
|
||||
#define SYSREG_PERIC1_BASE 0x14C60000
|
||||
#define SYSREG_PERIS_BASE 0x10050000
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef PWRCAL_TARGET_LINUX
|
||||
|
||||
#define CMU_PERIS_BASE 0x00010000
|
||||
#define CMU_TOP_BASE 0x00020000
|
||||
#define CMU_CCORE_BASE 0x00030000
|
||||
#define CMU_MIF0_BASE 0x00040000
|
||||
#define CMU_MIF1_BASE 0x00050000
|
||||
#define CMU_MIF2_BASE 0x00060000
|
||||
#define CMU_MIF3_BASE 0x00070000
|
||||
#define CMU_FSYS0_BASE 0x00080000
|
||||
#define CMU_IMEM_BASE 0x00090000
|
||||
#define CMU_AUD_BASE 0x000A0000
|
||||
#define CMU_MNGS_BASE 0x000B0000
|
||||
#define CMU_APOLLO_BASE 0x000C0000
|
||||
#define CMU_BUS0_BASE 0x000D0000
|
||||
#define CMU_BUS1_BASE 0x000E0000
|
||||
#define CMU_PERIC0_BASE 0x000F0000
|
||||
#define CMU_DISP0_BASE 0x00100000
|
||||
#define CMU_DISP1_BASE 0x00110000
|
||||
#define CMU_CAM0_LOCAL_BASE 0x00120000
|
||||
#define CMU_CAM0_BASE 0x00130000
|
||||
#define CMU_CAM1_LOCAL_BASE 0x00140000
|
||||
#define CMU_CAM1_BASE 0x00150000
|
||||
#define CMU_ISP0_LOCAL_BASE 0x00160000
|
||||
#define CMU_ISP0_BASE 0x00170000
|
||||
#define CMU_ISP1_LOCAL_BASE 0x00180000
|
||||
#define CMU_ISP1_BASE 0x00190000
|
||||
#define CMU_G3D_BASE 0x001A0000
|
||||
#define CMU_PERIC1_BASE 0x001B0000
|
||||
#define CMU_MSCL_BASE 0x001C0000
|
||||
#define CMU_MFC_BASE 0x001D0000
|
||||
#define CMU_FSYS1_BASE 0x001E0000
|
||||
|
||||
|
||||
#define PMU_PERIS_BASE 0x001F0000
|
||||
#define PMU_ALIVE_BASE 0x00200000
|
||||
#define PMU_CCORE_BASE 0x00210000
|
||||
#define PMU_MIF0_BASE 0x00220000
|
||||
#define PMU_MIF1_BASE 0x00230000
|
||||
#define PMU_MIF2_BASE 0x00240000
|
||||
#define PMU_MIF3_BASE 0x00250000
|
||||
#define PMU_FSYS0_BASE 0x00260000
|
||||
#define PMU_IMEM_BASE 0x00270000
|
||||
#define PMU_AUD_BASE 0x00280000
|
||||
#define PMU_MNGS_BASE 0x00290000
|
||||
#define PMU_APOLLO_BASE 0x002A0000
|
||||
#define PMU_BUS0_BASE 0x002B0000
|
||||
#define PMU_BUS1_BASE 0x002C0000
|
||||
#define PMU_PERIC0_BASE 0x002D0000
|
||||
#define PMU_DISP0_BASE 0x002E0000
|
||||
#define PMU_DISP1_BASE 0x002F0000
|
||||
#define PMU_CAM0_BASE 0x00300000
|
||||
#define PMU_CAM1_BASE 0x00310000
|
||||
#define PMU_ISP0_BASE 0x00320000
|
||||
#define PMU_ISP1_BASE 0x00330000
|
||||
#define PMU_G3D_BASE 0x00340000
|
||||
#define PMU_PERIC1_BASE 0x00350000
|
||||
#define PMU_MSCL_BASE 0x00360000
|
||||
#define PMU_MFC_BASE 0x00370000
|
||||
#define PMU_FSYS1_BASE 0x00380000
|
||||
|
||||
#define DMC_MISC_CCORE_BASE 0x00390000
|
||||
#define LPDDR4_PHY0_BASE 0x003A0000
|
||||
|
||||
#define SYSREG_APOLLO_BASE 0x003B0000
|
||||
#define SYSREG_AUD_BASE 0x003C0000
|
||||
#define SYSREG_BUS0_BASE 0x003D0000
|
||||
#define SYSREG_BUS1_BASE 0x003E0000
|
||||
#define SYSREG_CAM0_BASE 0x003F0000
|
||||
#define SYSREG_CAM1_BASE 0x00400000
|
||||
#define SYSREG_CCORE_BASE 0x00410000
|
||||
#define SYSREG_DISP0_BASE 0x00420000
|
||||
#define SYSREG_DISP1_BASE 0x00430000
|
||||
#define SYSREG_FSYS0_BASE 0x00440000
|
||||
#define SYSREG_FSYS1_BASE 0x00450000
|
||||
#define SYSREG_G3D_BASE 0x00460000
|
||||
#define SYSREG_IMEM_BASE 0x00470000
|
||||
#define SYSREG_ISP0_BASE 0x00480000
|
||||
#define SYSREG_ISP1_BASE 0x00490000
|
||||
#define SYSREG_MFC_BASE 0x004A0000
|
||||
#define SYSREG_MIF0_BASE 0x004B0000
|
||||
#define SYSREG_MIF1_BASE 0x004C0000
|
||||
#define SYSREG_MIF2_BASE 0x004D0000
|
||||
#define SYSREG_MIF3_BASE 0x004E0000
|
||||
#define SYSREG_MNGS_BASE 0x004F0000
|
||||
#define SYSREG_MSCL_BASE 0x00500000
|
||||
#define SYSREG_PERIC0_BASE 0x00510000
|
||||
#define SYSREG_PERIC1_BASE 0x00520000
|
||||
#define SYSREG_PERIS_BASE 0x00530000
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
2331
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-syspwr.c
Normal file
2331
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-syspwr.c
Normal file
File diff suppressed because it is too large
Load diff
406
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-vclk-internal.h
Normal file
406
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-vclk-internal.h
Normal file
|
@ -0,0 +1,406 @@
|
|||
#ifndef __EXYNOS8890_VCLKS_H__
|
||||
#define __EXYNOS8890_VCLKS_H__
|
||||
|
||||
#include "../pwrcal-vclk.h"
|
||||
#include "../pwrcal-pmu.h"
|
||||
#include "S5E8890-vclk.h"
|
||||
|
||||
|
||||
GRPGATE_EXTERN(gate_apollo_ppmu)
|
||||
GRPGATE_EXTERN(gate_apollo_bts)
|
||||
GRPGATE_EXTERN(gate_mngs_ppmu)
|
||||
GRPGATE_EXTERN(gate_mngs_bts)
|
||||
GRPGATE_EXTERN(gate_aud_common)
|
||||
GRPGATE_EXTERN(gate_aud_lpass)
|
||||
GRPGATE_EXTERN(gate_aud_mi2s)
|
||||
GRPGATE_EXTERN(gate_aud_pcm)
|
||||
GRPGATE_EXTERN(gate_aud_uart)
|
||||
GRPGATE_EXTERN(gate_aud_dma)
|
||||
GRPGATE_EXTERN(gate_aud_slimbus)
|
||||
GRPGATE_EXTERN(gate_aud_sysmmu)
|
||||
GRPGATE_EXTERN(gate_aud_ppmu)
|
||||
GRPGATE_EXTERN(gate_aud_bts)
|
||||
GRPGATE_EXTERN(gate_aud_sclk_mi2s)
|
||||
GRPGATE_EXTERN(gate_aud_sclk_pcm)
|
||||
GRPGATE_EXTERN(gate_aud_sclk_slimbus)
|
||||
GRPGATE_EXTERN(gate_bus0_display)
|
||||
GRPGATE_EXTERN(gate_bus0_cam)
|
||||
GRPGATE_EXTERN(gate_bus0_fsys1)
|
||||
GRPGATE_EXTERN(gate_bus1_mfc)
|
||||
GRPGATE_EXTERN(gate_bus1_mscl)
|
||||
GRPGATE_EXTERN(gate_bus1_fsys0)
|
||||
GRPGATE_EXTERN(gate_cam0_common)
|
||||
GRPGATE_EXTERN(gate_cam0_csis0)
|
||||
GRPGATE_EXTERN(gate_cam0_csis1)
|
||||
GRPGATE_EXTERN(gate_cam0_fimc_bns)
|
||||
GRPGATE_EXTERN(gate_cam0_fimc_3aa0)
|
||||
GRPGATE_EXTERN(gate_cam0_fimc_3aa1)
|
||||
GRPGATE_EXTERN(gate_cam0_hpm)
|
||||
GRPGATE_EXTERN(gate_cam0_sysmmu)
|
||||
GRPGATE_EXTERN(gate_cam0_ppmu)
|
||||
GRPGATE_EXTERN(gate_cam0_bts)
|
||||
GRPGATE_EXTERN(gate_cam0_phyclk_hs0_csis0_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam0_phyclk_hs1_csis0_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam0_phyclk_hs2_csis0_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam0_phyclk_hs3_csis0_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam0_phyclk_hs0_csis1_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam0_phyclk_hs1_csis1_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam1_common)
|
||||
GRPGATE_EXTERN(gate_cam1_isp_cpu_gic_common)
|
||||
GRPGATE_EXTERN(gate_cam1_isp_cpu)
|
||||
GRPGATE_EXTERN(gate_cam1_gic_is)
|
||||
GRPGATE_EXTERN(gate_cam1_csis2)
|
||||
GRPGATE_EXTERN(gate_cam1_csis3)
|
||||
GRPGATE_EXTERN(gate_cam1_fimc_vra)
|
||||
GRPGATE_EXTERN(gate_cam1_mc_scaler)
|
||||
GRPGATE_EXTERN(gate_cam1_i2c0_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_i2c1_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_i2c2_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_i2c3_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_wdt_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_mcuctl_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_uart_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_sclk_uart_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_spi0_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_spi1_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_pdma_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_pwm_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_sclk_pwm_isp)
|
||||
GRPGATE_EXTERN(gate_cam1_sysmmu)
|
||||
GRPGATE_EXTERN(gate_cam1_ppmu)
|
||||
GRPGATE_EXTERN(gate_cam1_bts)
|
||||
GRPGATE_EXTERN(gate_cam1_phyclk_hs0_csis2_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam1_phyclk_hs1_csis2_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam1_phyclk_hs2_csis2_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam1_phyclk_hs3_csis2_rx_byte)
|
||||
GRPGATE_EXTERN(gate_cam1_phyclk_hs0_csis3_rx_byte)
|
||||
GRPGATE_EXTERN(gate_disp0_common)
|
||||
GRPGATE_EXTERN(gate_disp0_decon0)
|
||||
GRPGATE_EXTERN(gate_disp0_dsim0)
|
||||
GRPGATE_EXTERN(gate_disp0_dsim1)
|
||||
GRPGATE_EXTERN(gate_disp0_dsim2)
|
||||
GRPGATE_EXTERN(gate_disp0_hdmi)
|
||||
GRPGATE_EXTERN(gate_disp0_dp)
|
||||
GRPGATE_EXTERN(gate_disp0_hpm_apbif_disp0)
|
||||
GRPGATE_EXTERN(gate_disp0_sysmmu)
|
||||
GRPGATE_EXTERN(gate_disp0_ppmu)
|
||||
GRPGATE_EXTERN(gate_disp0_bts)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_hdmiphy_tmds_20b_clko)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_hdmiphy_tmds_10b_clko)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_hdmiphy_pixel_clko)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_mipidphy0_rxclkesc0)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_mipidphy0_bitclkdiv8)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_mipidphy1_rxclkesc0)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_mipidphy1_bitclkdiv8)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_mipidphy2_rxclkesc0)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_mipidphy2_bitclkdiv8)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_dpphy_ch0_txd_clk)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_dpphy_ch1_txd_clk)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_dpphy_ch2_txd_clk)
|
||||
GRPGATE_EXTERN(gate_disp0_phyclk_dpphy_ch3_txd_clk)
|
||||
GRPGATE_EXTERN(gate_disp0_oscclk_dp_i_clk_24m)
|
||||
GRPGATE_EXTERN(gate_disp0_oscclk_i_dptx_phy_i_ref_clk_24m)
|
||||
GRPGATE_EXTERN(gate_disp0_oscclk_i_mipi_dphy_m1s0_m_xi)
|
||||
GRPGATE_EXTERN(gate_disp0_oscclk_i_mipi_dphy_m4s0_m_xi)
|
||||
GRPGATE_EXTERN(gate_disp0_oscclk_i_mipi_dphy_m4s4_m_xi)
|
||||
GRPGATE_EXTERN(gate_disp1_common)
|
||||
GRPGATE_EXTERN(gate_disp1_decon1)
|
||||
GRPGATE_EXTERN(gate_disp1_hpmdisp1)
|
||||
GRPGATE_EXTERN(gate_disp1_sysmmu)
|
||||
GRPGATE_EXTERN(gate_disp1_ppmu)
|
||||
GRPGATE_EXTERN(gate_disp1_bts)
|
||||
GRPGATE_EXTERN(gate_fsys0_common)
|
||||
GRPGATE_EXTERN(gate_fsys0_usbdrd_etrusb_common)
|
||||
GRPGATE_EXTERN(gate_fsys0_usbdrd30)
|
||||
GRPGATE_EXTERN(gate_fsys0_etr_usb)
|
||||
GRPGATE_EXTERN(gate_fsys0_usbhost20)
|
||||
GRPGATE_EXTERN(gate_fsys0_mmc0_ufs_common)
|
||||
GRPGATE_EXTERN(gate_fsys0_mmc0)
|
||||
GRPGATE_EXTERN(gate_fsys0_ufs_linkemedded)
|
||||
GRPGATE_EXTERN(gate_fsys0_pdma_common)
|
||||
GRPGATE_EXTERN(gate_fsys0_pdma0)
|
||||
GRPGATE_EXTERN(gate_fsys0_pdmas)
|
||||
GRPGATE_EXTERN(gate_fsys0_ppmu)
|
||||
GRPGATE_EXTERN(gate_fsys0_bts)
|
||||
GRPGATE_EXTERN(gate_fsys0_hpm)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_usbdrd30_udrd30_phyclock)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_usbdrd30_udrd30_pipe_pclk)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_ufs_tx0_symbol)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_ufs_rx0_symbol)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_usbhost20_phyclock)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_usbhost20_freeclk)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_usbhost20_clk48mohci)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_usbhost20phy_ref_clk)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_ufs_rx_pwm_clk)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_ufs_tx_pwm_clk)
|
||||
GRPGATE_EXTERN(gate_fsys0_phyclk_ufs_refclk_out_soc)
|
||||
GRPGATE_EXTERN(gate_fsys1_common)
|
||||
GRPGATE_EXTERN(gate_fsys1_mmc2_ufs_common)
|
||||
GRPGATE_EXTERN(gate_fsys1_mmc2)
|
||||
GRPGATE_EXTERN(gate_fsys1_ufs20_sdcard)
|
||||
GRPGATE_EXTERN(gate_fsys1_sromc)
|
||||
GRPGATE_EXTERN(gate_fsys1_pciewifi0)
|
||||
GRPGATE_EXTERN(gate_fsys1_pciewifi1)
|
||||
GRPGATE_EXTERN(gate_fsys1_ppmu)
|
||||
GRPGATE_EXTERN(gate_fsys1_bts)
|
||||
GRPGATE_EXTERN(gate_fsys1_hpm)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_ufs_link_sdcard_tx0_symbol)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_ufs_link_sdcard_rx0_symbol)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_pcie_wifi0_tx0)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_pcie_wifi0_rx0)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_pcie_wifi1_tx0)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_pcie_wifi1_rx0)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_pcie_wifi0_dig_refclk)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_pcie_wifi1_dig_refclk)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_ufs_link_sdcard_rx_pwm_clk)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_ufs_link_sdcard_tx_pwm_clk)
|
||||
GRPGATE_EXTERN(gate_fsys1_phyclk_ufs_link_sdcard_refclk_out_soc)
|
||||
GRPGATE_EXTERN(gate_g3d_common)
|
||||
GRPGATE_EXTERN(gate_g3d_g3d_common)
|
||||
GRPGATE_EXTERN(gate_g3d_g3d)
|
||||
GRPGATE_EXTERN(gate_g3d_iram_path_test)
|
||||
GRPGATE_EXTERN(gate_g3d_ppmu)
|
||||
GRPGATE_EXTERN(gate_g3d_bts)
|
||||
GRPGATE_EXTERN(gate_imem_common)
|
||||
GRPGATE_EXTERN(gate_imem_apm_sss_rtic_mc_common)
|
||||
GRPGATE_EXTERN(gate_imem_apm)
|
||||
GRPGATE_EXTERN(gate_imem_sss)
|
||||
GRPGATE_EXTERN(gate_imem_rtic)
|
||||
GRPGATE_EXTERN(gate_imem_mc)
|
||||
GRPGATE_EXTERN(gate_imem_intmem)
|
||||
GRPGATE_EXTERN(gate_imem_intmem_alv)
|
||||
GRPGATE_EXTERN(gate_imem_gic400)
|
||||
GRPGATE_EXTERN(gate_imem_ppmu)
|
||||
GRPGATE_EXTERN(gate_isp0_common)
|
||||
GRPGATE_EXTERN(gate_isp0_fimc_isp0)
|
||||
GRPGATE_EXTERN(gate_isp0_fimc_tpu)
|
||||
GRPGATE_EXTERN(gate_isp0_sysmmu)
|
||||
GRPGATE_EXTERN(gate_isp0_ppmu)
|
||||
GRPGATE_EXTERN(gate_isp0_bts)
|
||||
GRPGATE_EXTERN(gate_isp1_fimc_isp1)
|
||||
GRPGATE_EXTERN(gate_isp1_sysmmu)
|
||||
GRPGATE_EXTERN(gate_isp1_ppmu)
|
||||
GRPGATE_EXTERN(gate_isp1_bts)
|
||||
GRPGATE_EXTERN(gate_mfc_common)
|
||||
GRPGATE_EXTERN(gate_mfc_mfc)
|
||||
GRPGATE_EXTERN(gate_mfc_hpm)
|
||||
GRPGATE_EXTERN(gate_mfc_sysmmu)
|
||||
GRPGATE_EXTERN(gate_mfc_ppmu)
|
||||
GRPGATE_EXTERN(gate_mscl_common)
|
||||
GRPGATE_EXTERN(gate_mscl_mscl0_jpeg_common)
|
||||
GRPGATE_EXTERN(gate_mscl_mscl0)
|
||||
GRPGATE_EXTERN(gate_mscl_jpeg)
|
||||
GRPGATE_EXTERN(gate_mscl_mscl1_g2d_common)
|
||||
GRPGATE_EXTERN(gate_mscl_mscl1)
|
||||
GRPGATE_EXTERN(gate_mscl_g2d)
|
||||
GRPGATE_EXTERN(gate_mscl_sysmmu)
|
||||
GRPGATE_EXTERN(gate_mscl_ppmu)
|
||||
GRPGATE_EXTERN(gate_mscl_bts)
|
||||
GRPGATE_EXTERN(gate_peric0_hsi2c0)
|
||||
GRPGATE_EXTERN(gate_peric0_hsi2c1)
|
||||
GRPGATE_EXTERN(gate_peric0_hsi2c4)
|
||||
GRPGATE_EXTERN(gate_peric0_hsi2c5)
|
||||
GRPGATE_EXTERN(gate_peric0_hsi2c9)
|
||||
GRPGATE_EXTERN(gate_peric0_hsi2c10)
|
||||
GRPGATE_EXTERN(gate_peric0_hsi2c11)
|
||||
GRPGATE_EXTERN(gate_peric0_uart0)
|
||||
GRPGATE_EXTERN(gate_peric0_adcif)
|
||||
GRPGATE_EXTERN(gate_peric0_pwm)
|
||||
GRPGATE_EXTERN(gate_peric0_sclk_pwm)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c_common)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c2)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c3)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c6)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c7)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c8)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c12)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c13)
|
||||
GRPGATE_EXTERN(gate_peric1_hsi2c14)
|
||||
GRPGATE_EXTERN(gate_peric1_spi_i2s_pcm1_spdif_common)
|
||||
GRPGATE_EXTERN(gate_peric1_uart1)
|
||||
GRPGATE_EXTERN(gate_peric1_uart2)
|
||||
GRPGATE_EXTERN(gate_peric1_uart3)
|
||||
GRPGATE_EXTERN(gate_peric1_uart4)
|
||||
GRPGATE_EXTERN(gate_peric1_uart5)
|
||||
GRPGATE_EXTERN(gate_peric1_spi0)
|
||||
GRPGATE_EXTERN(gate_peric1_spi1)
|
||||
GRPGATE_EXTERN(gate_peric1_spi2)
|
||||
GRPGATE_EXTERN(gate_peric1_spi3)
|
||||
GRPGATE_EXTERN(gate_peric1_spi4)
|
||||
GRPGATE_EXTERN(gate_peric1_spi5)
|
||||
GRPGATE_EXTERN(gate_peric1_spi6)
|
||||
GRPGATE_EXTERN(gate_peric1_spi7)
|
||||
GRPGATE_EXTERN(gate_peric1_i2s1)
|
||||
GRPGATE_EXTERN(gate_peric1_pcm1)
|
||||
GRPGATE_EXTERN(gate_peric1_spdif)
|
||||
GRPGATE_EXTERN(gate_peric1_gpio_nfc)
|
||||
GRPGATE_EXTERN(gate_peric1_gpio_touch)
|
||||
GRPGATE_EXTERN(gate_peric1_gpio_fp)
|
||||
GRPGATE_EXTERN(gate_peric1_gpio_ese)
|
||||
GRPGATE_EXTERN(gate_peris_sfr_apbif_hdmi_cec)
|
||||
GRPGATE_EXTERN(gate_peris_hpm)
|
||||
GRPGATE_EXTERN(gate_peris_mct)
|
||||
GRPGATE_EXTERN(gate_peris_wdt_mngs)
|
||||
GRPGATE_EXTERN(gate_peris_wdt_apollo)
|
||||
GRPGATE_EXTERN(gate_peris_sysreg_peris)
|
||||
GRPGATE_EXTERN(gate_peris_monocnt_apbif)
|
||||
GRPGATE_EXTERN(gate_peris_rtc_apbif)
|
||||
GRPGATE_EXTERN(gate_peris_top_rtc)
|
||||
GRPGATE_EXTERN(gate_peris_otp_con_top)
|
||||
GRPGATE_EXTERN(gate_peris_chipid)
|
||||
GRPGATE_EXTERN(gate_peris_tmu)
|
||||
|
||||
M1D1G1_EXTERN(sclk_decon0_eclk0)
|
||||
M1D1G1_EXTERN(sclk_decon0_vclk0)
|
||||
M1D1G1_EXTERN(sclk_decon0_vclk1)
|
||||
M1D1G1_EXTERN(sclk_hdmi_audio)
|
||||
M1D1G1_EXTERN(sclk_decon1_eclk0)
|
||||
M1D1G1_EXTERN(sclk_decon1_eclk1)
|
||||
M1D1G1_EXTERN(sclk_usbdrd30)
|
||||
M1D1G1_EXTERN(sclk_mmc0)
|
||||
M1D1G1_EXTERN(sclk_ufsunipro20)
|
||||
M1D1G1_EXTERN(sclk_phy24m)
|
||||
M1D1G1_EXTERN(sclk_ufsunipro_cfg)
|
||||
M1D1G1_EXTERN(sclk_mmc2)
|
||||
M1D1G1_EXTERN(sclk_ufsunipro20_sdcard)
|
||||
M1D1G1_EXTERN(sclk_pcie_phy)
|
||||
M1D1G1_EXTERN(sclk_ufsunipro_sdcard_cfg)
|
||||
M1D1G1_EXTERN(sclk_uart0)
|
||||
M1D1G1_EXTERN(sclk_spi0)
|
||||
M1D1G1_EXTERN(sclk_spi1)
|
||||
M1D1G1_EXTERN(sclk_spi2)
|
||||
M1D1G1_EXTERN(sclk_spi3)
|
||||
M1D1G1_EXTERN(sclk_spi4)
|
||||
M1D1G1_EXTERN(sclk_spi5)
|
||||
M1D1G1_EXTERN(sclk_spi6)
|
||||
M1D1G1_EXTERN(sclk_spi7)
|
||||
M1D1G1_EXTERN(sclk_uart1)
|
||||
M1D1G1_EXTERN(sclk_uart2)
|
||||
M1D1G1_EXTERN(sclk_uart3)
|
||||
M1D1G1_EXTERN(sclk_uart4)
|
||||
M1D1G1_EXTERN(sclk_uart5)
|
||||
M1D1G1_EXTERN(sclk_promise_int)
|
||||
M1D1G1_EXTERN(sclk_promise_disp)
|
||||
M1D1G1_EXTERN(sclk_ap2cp_mif_pll_out)
|
||||
M1D1G1_EXTERN(sclk_isp_spi0)
|
||||
M1D1G1_EXTERN(sclk_isp_spi1)
|
||||
M1D1G1_EXTERN(sclk_isp_uart)
|
||||
M1D1G1_EXTERN(sclk_isp_sensor0)
|
||||
M1D1G1_EXTERN(sclk_isp_sensor1)
|
||||
M1D1G1_EXTERN(sclk_isp_sensor2)
|
||||
M1D1G1_EXTERN(sclk_isp_sensor3)
|
||||
M1D1G1_EXTERN(sclk_decon0_eclk0_local)
|
||||
M1D1G1_EXTERN(sclk_decon0_vclk0_local)
|
||||
M1D1G1_EXTERN(sclk_decon0_vclk1_local)
|
||||
M1D1G1_EXTERN(sclk_decon1_eclk0_local)
|
||||
M1D1G1_EXTERN(sclk_decon1_eclk1_local)
|
||||
|
||||
P1_EXTERN(p1_disp_pll)
|
||||
P1_EXTERN(p1_aud_pll)
|
||||
P1_EXTERN(p1_mfc_pll)
|
||||
|
||||
D1_EXTERN(d1_sclk_i2s_local)
|
||||
D1_EXTERN(d1_sclk_pcm_local)
|
||||
D1_EXTERN(d1_sclk_slimbus)
|
||||
D1_EXTERN(d1_sclk_cp_i2s)
|
||||
D1_EXTERN(d1_sclk_asrc)
|
||||
|
||||
PXMXDX_EXTERN(pxmxdx_top)
|
||||
PXMXDX_EXTERN(pxmxdx_mfc)
|
||||
PXMXDX_EXTERN(pxmxdx_mscl)
|
||||
PXMXDX_EXTERN(pxmxdx_imem)
|
||||
PXMXDX_EXTERN(pxmxdx_fsys0)
|
||||
PXMXDX_EXTERN(pxmxdx_fsys1)
|
||||
PXMXDX_EXTERN(pxmxdx_disp0)
|
||||
PXMXDX_EXTERN(pxmxdx_disp1)
|
||||
PXMXDX_EXTERN(pxmxdx_aud)
|
||||
PXMXDX_EXTERN(pxmxdx_aud_cp)
|
||||
PXMXDX_EXTERN(pxmxdx_isp0_isp0)
|
||||
PXMXDX_EXTERN(pxmxdx_isp0_tpu)
|
||||
PXMXDX_EXTERN(pxmxdx_isp0_trex)
|
||||
PXMXDX_EXTERN(pxmxdx_isp1_isp1)
|
||||
PXMXDX_EXTERN(pxmxdx_cam0_csis0)
|
||||
PXMXDX_EXTERN(pxmxdx_cam0_csis1)
|
||||
PXMXDX_EXTERN(pxmxdx_cam0_csis2)
|
||||
PXMXDX_EXTERN(pxmxdx_cam0_csis3)
|
||||
PXMXDX_EXTERN(pxmxdx_cam0_3aa0)
|
||||
PXMXDX_EXTERN(pxmxdx_cam0_3aa1)
|
||||
PXMXDX_EXTERN(pxmxdx_cam0_trex)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_arm)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_vra)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_trex)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_bus)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_peri)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_csis2)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_csis3)
|
||||
PXMXDX_EXTERN(pxmxdx_cam1_scl)
|
||||
PXMXDX_EXTERN(pxmxdx_oscclk_nfc)
|
||||
PXMXDX_EXTERN(pxmxdx_oscclk_aud)
|
||||
|
||||
UMUX_EXTERN(umux_bus0_aclk_bus0_528)
|
||||
UMUX_EXTERN(umux_bus0_aclk_bus0_200)
|
||||
UMUX_EXTERN(umux_bus1_aclk_bus1_528)
|
||||
UMUX_EXTERN(umux_cam0_phyclk_rxbyteclkhs0_csis0_user)
|
||||
UMUX_EXTERN(umux_cam0_phyclk_rxbyteclkhs1_csis0_user)
|
||||
UMUX_EXTERN(umux_cam0_phyclk_rxbyteclkhs2_csis0_user)
|
||||
UMUX_EXTERN(umux_cam0_phyclk_rxbyteclkhs3_csis0_user)
|
||||
UMUX_EXTERN(umux_cam0_phyclk_rxbyteclkhs0_csis1_user)
|
||||
UMUX_EXTERN(umux_cam0_phyclk_rxbyteclkhs1_csis1_user)
|
||||
UMUX_EXTERN(umux_cam1_phyclk_rxbyteclkhs0_csis2_user)
|
||||
UMUX_EXTERN(umux_cam1_phyclk_rxbyteclkhs1_csis2_user)
|
||||
UMUX_EXTERN(umux_cam1_phyclk_rxbyteclkhs2_csis2_user)
|
||||
UMUX_EXTERN(umux_cam1_phyclk_rxbyteclkhs3_csis2_user)
|
||||
UMUX_EXTERN(umux_cam1_phyclk_rxbyteclkhs0_csis3_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_hdmiphy_pixel_clko_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_hdmiphy_tmds_clko_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy0_rxclkesc0_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy0_bitclkdiv2_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy0_bitclkdiv8_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy1_rxclkesc0_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy1_bitclkdiv2_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy1_bitclkdiv8_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy2_rxclkesc0_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy2_bitclkdiv2_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_mipidphy2_bitclkdiv8_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_dpphy_ch0_txd_clk_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_dpphy_ch1_txd_clk_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_dpphy_ch2_txd_clk_user)
|
||||
UMUX_EXTERN(umux_disp0_phyclk_dpphy_ch3_txd_clk_user)
|
||||
UMUX_EXTERN(umux_disp1_phyclk_mipidphy0_bitclkdiv2_user)
|
||||
UMUX_EXTERN(umux_disp1_phyclk_mipidphy1_bitclkdiv2_user)
|
||||
UMUX_EXTERN(umux_disp1_phyclk_mipidphy2_bitclkdiv2_user)
|
||||
UMUX_EXTERN(umux_disp1_phyclk_disp1_hdmiphy_pixel_clko_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_usbdrd30_udrd30_phyclock_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_usbdrd30_udrd30_pipe_pclk_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_ufs_tx0_symbol_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_ufs_rx0_symbol_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_usbhost20_phyclock_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_usbhost20_freeclk_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_usbhost20_clk48mohci_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_usbhost20phy_ref_clk)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_ufs_rx_pwm_clk_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_ufs_tx_pwm_clk_user)
|
||||
UMUX_EXTERN(umux_fsys0_phyclk_ufs_refclk_out_soc_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_ufs_link_sdcard_tx0_symbol_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_ufs_link_sdcard_rx0_symbol_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_pcie_wifi0_tx0_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_pcie_wifi0_rx0_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_pcie_wifi1_tx0_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_pcie_wifi1_rx0_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_pcie_wifi0_dig_refclk_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_pcie_wifi1_dig_refclk_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_ufs_link_sdcard_rx_pwm_clk_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_ufs_link_sdcard_tx_pwm_clk_user)
|
||||
UMUX_EXTERN(umux_fsys1_phyclk_ufs_link_sdcard_refclk_out_soc_user)
|
||||
|
||||
DFS_EXTERN(dvfs_big)
|
||||
DFS_EXTERN(dvfs_little)
|
||||
DFS_EXTERN(dvfs_g3d)
|
||||
DFS_EXTERN(dvfs_mif)
|
||||
DFS_EXTERN(dvfs_int)
|
||||
DFS_EXTERN(dvfs_cam)
|
||||
DFS_EXTERN(dvfs_disp)
|
||||
|
||||
|
||||
|
||||
#endif
|
2303
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-vclk.c
Normal file
2303
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-vclk.c
Normal file
File diff suppressed because it is too large
Load diff
422
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-vclk.h
Normal file
422
drivers/soc/samsung/pwrcal/S5E8890_EVT0/S5E8890-vclk.h
Normal file
|
@ -0,0 +1,422 @@
|
|||
#ifndef __EXYNOS8890_VCLK_H__
|
||||
#define __EXYNOS8890_VCLK_H__
|
||||
|
||||
enum {
|
||||
invalid_vclk_id = 0x00000FFF,
|
||||
|
||||
gate_apollo_ppmu = 0x0A000000,
|
||||
gate_apollo_bts,
|
||||
gate_mngs_ppmu,
|
||||
gate_mngs_bts,
|
||||
gate_aud_common,
|
||||
gate_aud_lpass,
|
||||
gate_aud_mi2s,
|
||||
gate_aud_pcm,
|
||||
gate_aud_uart,
|
||||
gate_aud_dma,
|
||||
gate_aud_slimbus,
|
||||
gate_aud_sysmmu,
|
||||
gate_aud_ppmu,
|
||||
gate_aud_bts,
|
||||
gate_aud_sclk_mi2s,
|
||||
gate_aud_sclk_pcm,
|
||||
gate_aud_sclk_slimbus,
|
||||
gate_bus0_display,
|
||||
gate_bus0_cam,
|
||||
gate_bus0_fsys1,
|
||||
gate_bus1_mfc,
|
||||
gate_bus1_mscl,
|
||||
gate_bus1_fsys0,
|
||||
gate_cam0_common,
|
||||
gate_cam0_csis0,
|
||||
gate_cam0_csis1,
|
||||
gate_cam0_fimc_bns,
|
||||
gate_cam0_fimc_3aa0,
|
||||
gate_cam0_fimc_3aa1,
|
||||
gate_cam0_hpm,
|
||||
gate_cam0_sysmmu,
|
||||
gate_cam0_ppmu,
|
||||
gate_cam0_bts,
|
||||
gate_cam0_phyclk_hs0_csis0_rx_byte,
|
||||
gate_cam0_phyclk_hs1_csis0_rx_byte,
|
||||
gate_cam0_phyclk_hs2_csis0_rx_byte,
|
||||
gate_cam0_phyclk_hs3_csis0_rx_byte,
|
||||
gate_cam0_phyclk_hs0_csis1_rx_byte,
|
||||
gate_cam0_phyclk_hs1_csis1_rx_byte,
|
||||
gate_cam1_common,
|
||||
gate_cam1_isp_cpu_gic_common,
|
||||
gate_cam1_isp_cpu,
|
||||
gate_cam1_gic_is,
|
||||
gate_cam1_csis2,
|
||||
gate_cam1_csis3,
|
||||
gate_cam1_fimc_vra,
|
||||
gate_cam1_mc_scaler,
|
||||
gate_cam1_i2c0_isp,
|
||||
gate_cam1_i2c1_isp,
|
||||
gate_cam1_i2c2_isp,
|
||||
gate_cam1_i2c3_isp,
|
||||
gate_cam1_wdt_isp,
|
||||
gate_cam1_mcuctl_isp,
|
||||
gate_cam1_uart_isp,
|
||||
gate_cam1_sclk_uart_isp,
|
||||
gate_cam1_spi0_isp,
|
||||
gate_cam1_spi1_isp,
|
||||
gate_cam1_pdma_isp,
|
||||
gate_cam1_pwm_isp,
|
||||
gate_cam1_sclk_pwm_isp,
|
||||
gate_cam1_sysmmu,
|
||||
gate_cam1_ppmu,
|
||||
gate_cam1_bts,
|
||||
gate_cam1_phyclk_hs0_csis2_rx_byte,
|
||||
gate_cam1_phyclk_hs1_csis2_rx_byte,
|
||||
gate_cam1_phyclk_hs2_csis2_rx_byte,
|
||||
gate_cam1_phyclk_hs3_csis2_rx_byte,
|
||||
gate_cam1_phyclk_hs0_csis3_rx_byte,
|
||||
gate_ccore_i2c,
|
||||
gate_disp0_common,
|
||||
gate_disp0_decon0,
|
||||
gate_disp0_dsim0,
|
||||
gate_disp0_dsim1,
|
||||
gate_disp0_dsim2,
|
||||
gate_disp0_hdmi,
|
||||
gate_disp0_dp,
|
||||
gate_disp0_hpm_apbif_disp0,
|
||||
gate_disp0_sysmmu,
|
||||
gate_disp0_ppmu,
|
||||
gate_disp0_bts,
|
||||
gate_disp0_phyclk_hdmiphy_tmds_20b_clko,
|
||||
gate_disp0_phyclk_hdmiphy_tmds_10b_clko,
|
||||
gate_disp0_phyclk_hdmiphy_pixel_clko,
|
||||
gate_disp0_phyclk_mipidphy0_rxclkesc0,
|
||||
gate_disp0_phyclk_mipidphy0_bitclkdiv8,
|
||||
gate_disp0_phyclk_mipidphy1_rxclkesc0,
|
||||
gate_disp0_phyclk_mipidphy1_bitclkdiv8,
|
||||
gate_disp0_phyclk_mipidphy2_rxclkesc0,
|
||||
gate_disp0_phyclk_mipidphy2_bitclkdiv8,
|
||||
gate_disp0_phyclk_dpphy_ch0_txd_clk,
|
||||
gate_disp0_phyclk_dpphy_ch1_txd_clk,
|
||||
gate_disp0_phyclk_dpphy_ch2_txd_clk,
|
||||
gate_disp0_phyclk_dpphy_ch3_txd_clk,
|
||||
gate_disp0_oscclk_dp_i_clk_24m,
|
||||
gate_disp0_oscclk_i_dptx_phy_i_ref_clk_24m,
|
||||
gate_disp0_oscclk_i_mipi_dphy_m1s0_m_xi,
|
||||
gate_disp0_oscclk_i_mipi_dphy_m4s0_m_xi,
|
||||
gate_disp0_oscclk_i_mipi_dphy_m4s4_m_xi,
|
||||
gate_disp1_common,
|
||||
gate_disp1_decon1,
|
||||
gate_disp1_hpmdisp1,
|
||||
gate_disp1_sysmmu,
|
||||
gate_disp1_ppmu,
|
||||
gate_disp1_bts,
|
||||
gate_fsys0_common,
|
||||
gate_fsys0_usbdrd_etrusb_common,
|
||||
gate_fsys0_usbdrd30,
|
||||
gate_fsys0_etr_usb,
|
||||
gate_fsys0_usbhost20,
|
||||
gate_fsys0_mmc0_ufs_common,
|
||||
gate_fsys0_mmc0,
|
||||
gate_fsys0_ufs_linkemedded,
|
||||
gate_fsys0_pdma_common,
|
||||
gate_fsys0_pdma0,
|
||||
gate_fsys0_pdmas,
|
||||
gate_fsys0_ppmu,
|
||||
gate_fsys0_bts,
|
||||
gate_fsys0_hpm,
|
||||
gate_fsys0_phyclk_usbdrd30_udrd30_phyclock,
|
||||
gate_fsys0_phyclk_usbdrd30_udrd30_pipe_pclk,
|
||||
gate_fsys0_phyclk_ufs_tx0_symbol,
|
||||
gate_fsys0_phyclk_ufs_rx0_symbol,
|
||||
gate_fsys0_phyclk_usbhost20_phyclock,
|
||||
gate_fsys0_phyclk_usbhost20_freeclk,
|
||||
gate_fsys0_phyclk_usbhost20_clk48mohci,
|
||||
gate_fsys0_phyclk_usbhost20phy_ref_clk,
|
||||
gate_fsys0_phyclk_ufs_rx_pwm_clk,
|
||||
gate_fsys0_phyclk_ufs_tx_pwm_clk,
|
||||
gate_fsys0_phyclk_ufs_refclk_out_soc,
|
||||
gate_fsys1_common,
|
||||
gate_fsys1_mmc2_ufs_common,
|
||||
gate_fsys1_mmc2,
|
||||
gate_fsys1_ufs20_sdcard,
|
||||
gate_fsys1_sromc,
|
||||
gate_fsys1_pciewifi0,
|
||||
gate_fsys1_pciewifi1,
|
||||
gate_fsys1_ppmu,
|
||||
gate_fsys1_bts,
|
||||
gate_fsys1_hpm,
|
||||
gate_fsys1_phyclk_ufs_link_sdcard_tx0_symbol,
|
||||
gate_fsys1_phyclk_ufs_link_sdcard_rx0_symbol,
|
||||
gate_fsys1_phyclk_pcie_wifi0_tx0,
|
||||
gate_fsys1_phyclk_pcie_wifi0_rx0,
|
||||
gate_fsys1_phyclk_pcie_wifi1_tx0,
|
||||
gate_fsys1_phyclk_pcie_wifi1_rx0,
|
||||
gate_fsys1_phyclk_pcie_wifi0_dig_refclk,
|
||||
gate_fsys1_phyclk_pcie_wifi1_dig_refclk,
|
||||
gate_fsys1_phyclk_ufs_link_sdcard_rx_pwm_clk,
|
||||
gate_fsys1_phyclk_ufs_link_sdcard_tx_pwm_clk,
|
||||
gate_fsys1_phyclk_ufs_link_sdcard_refclk_out_soc,
|
||||
gate_g3d_common,
|
||||
gate_g3d_g3d_common,
|
||||
gate_g3d_g3d,
|
||||
gate_g3d_iram_path_test,
|
||||
gate_g3d_ppmu,
|
||||
gate_g3d_bts,
|
||||
gate_imem_common,
|
||||
gate_imem_apm_sss_rtic_mc_common,
|
||||
gate_imem_apm,
|
||||
gate_imem_sss,
|
||||
gate_imem_rtic,
|
||||
gate_imem_mc,
|
||||
gate_imem_intmem,
|
||||
gate_imem_intmem_alv,
|
||||
gate_imem_gic400,
|
||||
gate_imem_ppmu,
|
||||
gate_isp0_common,
|
||||
gate_isp0_fimc_isp0,
|
||||
gate_isp0_fimc_tpu,
|
||||
gate_isp0_sysmmu,
|
||||
gate_isp0_ppmu,
|
||||
gate_isp0_bts,
|
||||
gate_isp1_fimc_isp1,
|
||||
gate_isp1_sysmmu,
|
||||
gate_isp1_ppmu,
|
||||
gate_isp1_bts,
|
||||
gate_mfc_common,
|
||||
gate_mfc_mfc,
|
||||
gate_mfc_hpm,
|
||||
gate_mfc_sysmmu,
|
||||
gate_mfc_ppmu,
|
||||
gate_mscl_common,
|
||||
gate_mscl_mscl0_jpeg_common,
|
||||
gate_mscl_mscl0,
|
||||
gate_mscl_jpeg,
|
||||
gate_mscl_mscl1_g2d_common,
|
||||
gate_mscl_mscl1,
|
||||
gate_mscl_g2d,
|
||||
gate_mscl_sysmmu,
|
||||
gate_mscl_ppmu,
|
||||
gate_mscl_bts,
|
||||
gate_peric0_hsi2c0,
|
||||
gate_peric0_hsi2c1,
|
||||
gate_peric0_hsi2c4,
|
||||
gate_peric0_hsi2c5,
|
||||
gate_peric0_hsi2c9,
|
||||
gate_peric0_hsi2c10,
|
||||
gate_peric0_hsi2c11,
|
||||
gate_peric0_uart0,
|
||||
gate_peric0_adcif,
|
||||
gate_peric0_pwm,
|
||||
gate_peric0_sclk_pwm,
|
||||
gate_peric1_hsi2c_common,
|
||||
gate_peric1_hsi2c2,
|
||||
gate_peric1_hsi2c3,
|
||||
gate_peric1_hsi2c6,
|
||||
gate_peric1_hsi2c7,
|
||||
gate_peric1_hsi2c8,
|
||||
gate_peric1_hsi2c12,
|
||||
gate_peric1_hsi2c13,
|
||||
gate_peric1_hsi2c14,
|
||||
gate_peric1_spi_i2s_pcm1_spdif_common,
|
||||
gate_peric1_uart1,
|
||||
gate_peric1_uart2,
|
||||
gate_peric1_uart3,
|
||||
gate_peric1_uart4,
|
||||
gate_peric1_uart5,
|
||||
gate_peric1_spi0,
|
||||
gate_peric1_spi1,
|
||||
gate_peric1_spi2,
|
||||
gate_peric1_spi3,
|
||||
gate_peric1_spi4,
|
||||
gate_peric1_spi5,
|
||||
gate_peric1_spi6,
|
||||
gate_peric1_spi7,
|
||||
gate_peric1_i2s1,
|
||||
gate_peric1_pcm1,
|
||||
gate_peric1_spdif,
|
||||
gate_peric1_gpio_nfc,
|
||||
gate_peric1_gpio_touch,
|
||||
gate_peric1_gpio_fp,
|
||||
gate_peric1_gpio_ese,
|
||||
gate_peris_sfr_apbif_hdmi_cec,
|
||||
gate_peris_hpm,
|
||||
gate_peris_mct,
|
||||
gate_peris_wdt_mngs,
|
||||
gate_peris_wdt_apollo,
|
||||
gate_peris_sysreg_peris,
|
||||
gate_peris_monocnt_apbif,
|
||||
gate_peris_rtc_apbif,
|
||||
gate_peris_top_rtc,
|
||||
gate_peris_otp_con_top,
|
||||
gate_peris_chipid,
|
||||
gate_peris_tmu,
|
||||
vclk_group_grpgate_end,
|
||||
num_of_grpgate = vclk_group_grpgate_end - 0x0A000000,
|
||||
|
||||
sclk_decon0_eclk0 = 0x0A010000,
|
||||
sclk_decon0_vclk0,
|
||||
sclk_decon0_vclk1,
|
||||
sclk_hdmi_audio,
|
||||
sclk_decon1_eclk0,
|
||||
sclk_decon1_eclk1,
|
||||
sclk_usbdrd30,
|
||||
sclk_mmc0,
|
||||
sclk_ufsunipro20,
|
||||
sclk_phy24m,
|
||||
sclk_ufsunipro_cfg,
|
||||
sclk_mmc2,
|
||||
sclk_ufsunipro20_sdcard,
|
||||
sclk_pcie_phy,
|
||||
sclk_ufsunipro_sdcard_cfg,
|
||||
sclk_uart0,
|
||||
sclk_spi0,
|
||||
sclk_spi1,
|
||||
sclk_spi2,
|
||||
sclk_spi3,
|
||||
sclk_spi4,
|
||||
sclk_spi5,
|
||||
sclk_spi6,
|
||||
sclk_spi7,
|
||||
sclk_uart1,
|
||||
sclk_uart2,
|
||||
sclk_uart3,
|
||||
sclk_uart4,
|
||||
sclk_uart5,
|
||||
sclk_promise_int,
|
||||
sclk_promise_disp,
|
||||
sclk_ap2cp_mif_pll_out,
|
||||
sclk_isp_spi0,
|
||||
sclk_isp_spi1,
|
||||
sclk_isp_uart,
|
||||
sclk_isp_sensor0,
|
||||
sclk_isp_sensor1,
|
||||
sclk_isp_sensor2,
|
||||
sclk_isp_sensor3,
|
||||
sclk_decon0_eclk0_local,
|
||||
sclk_decon0_vclk0_local,
|
||||
sclk_decon0_vclk1_local,
|
||||
sclk_decon1_eclk0_local,
|
||||
sclk_decon1_eclk1_local,
|
||||
vclk_group_m1d1g1_end,
|
||||
num_of_m1d1g1 = vclk_group_m1d1g1_end - 0x0A010000,
|
||||
|
||||
p1_disp_pll = 0x0A020000,
|
||||
p1_aud_pll,
|
||||
p1_mfc_pll,
|
||||
vclk_group_p1_end,
|
||||
num_of_p1 = vclk_group_p1_end - 0x0A020000,
|
||||
|
||||
m1_dummy = 0x0A030000,
|
||||
vclk_group_m1_end,
|
||||
num_of_m1 = vclk_group_m1_end - 0x0A030000,
|
||||
|
||||
d1_sclk_i2s_local = 0x0A040000,
|
||||
d1_sclk_pcm_local,
|
||||
d1_sclk_slimbus,
|
||||
d1_sclk_cp_i2s,
|
||||
d1_sclk_asrc,
|
||||
vclk_group_d1_end,
|
||||
num_of_d1 = vclk_group_d1_end - 0x0A040000,
|
||||
|
||||
pxmxdx_top = 0x0A050000,
|
||||
pxmxdx_mfc,
|
||||
pxmxdx_mscl,
|
||||
pxmxdx_imem,
|
||||
pxmxdx_fsys0,
|
||||
pxmxdx_fsys1,
|
||||
pxmxdx_disp0,
|
||||
pxmxdx_disp1,
|
||||
pxmxdx_aud,
|
||||
pxmxdx_aud_cp,
|
||||
pxmxdx_isp0_isp0,
|
||||
pxmxdx_isp0_tpu,
|
||||
pxmxdx_isp0_trex,
|
||||
pxmxdx_isp1_isp1,
|
||||
pxmxdx_cam0_csis0,
|
||||
pxmxdx_cam0_csis1,
|
||||
pxmxdx_cam0_csis2,
|
||||
pxmxdx_cam0_csis3,
|
||||
pxmxdx_cam0_3aa0,
|
||||
pxmxdx_cam0_3aa1,
|
||||
pxmxdx_cam0_trex,
|
||||
pxmxdx_cam1_arm,
|
||||
pxmxdx_cam1_vra,
|
||||
pxmxdx_cam1_trex,
|
||||
pxmxdx_cam1_bus,
|
||||
pxmxdx_cam1_peri,
|
||||
pxmxdx_cam1_csis2,
|
||||
pxmxdx_cam1_csis3,
|
||||
pxmxdx_cam1_scl,
|
||||
pxmxdx_oscclk_nfc,
|
||||
pxmxdx_oscclk_aud,
|
||||
vclk_group_pxmxdx_end,
|
||||
num_of_pxmxdx = vclk_group_pxmxdx_end - 0x0A050000,
|
||||
|
||||
umux_bus0_aclk_bus0_528 = 0x0A060000,
|
||||
umux_bus0_aclk_bus0_200,
|
||||
umux_bus1_aclk_bus1_528,
|
||||
umux_cam0_phyclk_rxbyteclkhs0_csis0_user,
|
||||
umux_cam0_phyclk_rxbyteclkhs1_csis0_user,
|
||||
umux_cam0_phyclk_rxbyteclkhs2_csis0_user,
|
||||
umux_cam0_phyclk_rxbyteclkhs3_csis0_user,
|
||||
umux_cam0_phyclk_rxbyteclkhs0_csis1_user,
|
||||
umux_cam0_phyclk_rxbyteclkhs1_csis1_user,
|
||||
umux_cam1_phyclk_rxbyteclkhs0_csis2_user,
|
||||
umux_cam1_phyclk_rxbyteclkhs1_csis2_user,
|
||||
umux_cam1_phyclk_rxbyteclkhs2_csis2_user,
|
||||
umux_cam1_phyclk_rxbyteclkhs3_csis2_user,
|
||||
umux_cam1_phyclk_rxbyteclkhs0_csis3_user,
|
||||
umux_disp0_phyclk_hdmiphy_pixel_clko_user,
|
||||
umux_disp0_phyclk_hdmiphy_tmds_clko_user,
|
||||
umux_disp0_phyclk_mipidphy0_rxclkesc0_user,
|
||||
umux_disp0_phyclk_mipidphy0_bitclkdiv2_user,
|
||||
umux_disp0_phyclk_mipidphy0_bitclkdiv8_user,
|
||||
umux_disp0_phyclk_mipidphy1_rxclkesc0_user,
|
||||
umux_disp0_phyclk_mipidphy1_bitclkdiv2_user,
|
||||
umux_disp0_phyclk_mipidphy1_bitclkdiv8_user,
|
||||
umux_disp0_phyclk_mipidphy2_rxclkesc0_user,
|
||||
umux_disp0_phyclk_mipidphy2_bitclkdiv2_user,
|
||||
umux_disp0_phyclk_mipidphy2_bitclkdiv8_user,
|
||||
umux_disp0_phyclk_dpphy_ch0_txd_clk_user,
|
||||
umux_disp0_phyclk_dpphy_ch1_txd_clk_user,
|
||||
umux_disp0_phyclk_dpphy_ch2_txd_clk_user,
|
||||
umux_disp0_phyclk_dpphy_ch3_txd_clk_user,
|
||||
umux_disp1_phyclk_mipidphy0_bitclkdiv2_user,
|
||||
umux_disp1_phyclk_mipidphy1_bitclkdiv2_user,
|
||||
umux_disp1_phyclk_mipidphy2_bitclkdiv2_user,
|
||||
umux_disp1_phyclk_disp1_hdmiphy_pixel_clko_user,
|
||||
umux_fsys0_phyclk_usbdrd30_udrd30_phyclock_user,
|
||||
umux_fsys0_phyclk_usbdrd30_udrd30_pipe_pclk_user,
|
||||
umux_fsys0_phyclk_ufs_tx0_symbol_user,
|
||||
umux_fsys0_phyclk_ufs_rx0_symbol_user,
|
||||
umux_fsys0_phyclk_usbhost20_phyclock_user,
|
||||
umux_fsys0_phyclk_usbhost20_freeclk_user,
|
||||
umux_fsys0_phyclk_usbhost20_clk48mohci_user,
|
||||
umux_fsys0_phyclk_usbhost20phy_ref_clk,
|
||||
umux_fsys0_phyclk_ufs_rx_pwm_clk_user,
|
||||
umux_fsys0_phyclk_ufs_tx_pwm_clk_user,
|
||||
umux_fsys0_phyclk_ufs_refclk_out_soc_user,
|
||||
umux_fsys1_phyclk_ufs_link_sdcard_tx0_symbol_user,
|
||||
umux_fsys1_phyclk_ufs_link_sdcard_rx0_symbol_user,
|
||||
umux_fsys1_phyclk_pcie_wifi0_tx0_user,
|
||||
umux_fsys1_phyclk_pcie_wifi0_rx0_user,
|
||||
umux_fsys1_phyclk_pcie_wifi1_tx0_user,
|
||||
umux_fsys1_phyclk_pcie_wifi1_rx0_user,
|
||||
umux_fsys1_phyclk_pcie_wifi0_dig_refclk_user,
|
||||
umux_fsys1_phyclk_pcie_wifi1_dig_refclk_user,
|
||||
umux_fsys1_phyclk_ufs_link_sdcard_rx_pwm_clk_user,
|
||||
umux_fsys1_phyclk_ufs_link_sdcard_tx_pwm_clk_user,
|
||||
umux_fsys1_phyclk_ufs_link_sdcard_refclk_out_soc_user,
|
||||
vclk_group_umux_end,
|
||||
num_of_umux = vclk_group_umux_end - 0x0A060000,
|
||||
|
||||
dvfs_big = 0x0A070000,
|
||||
dvfs_little,
|
||||
dvfs_g3d,
|
||||
dvfs_mif,
|
||||
dvfs_int,
|
||||
dvfs_cam,
|
||||
dvfs_disp,
|
||||
vclk_group_dfs_end,
|
||||
num_of_dfs = vclk_group_dfs_end - 0x0A070000,
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue