blob: c1fe6643606f72e0d25447643483050949465687 [file] [log] [blame]
#include "io.h"
#include "lgpl_printf.h"
#include "chip_voltage_info.h"
#include "berlin_bootinfo.h"
#include "board_config.h"
#include "pmic_select.h"
// SY8824
static struct leakage_table SY8824B_table_vcpu_h[] =
{
{ 800, 900},
{ 0xffff, 875},
};
static struct leakage_table SY8824B_table_vcpu_l[] =
{
{ 800, 825},
{ 0xffff, 800},
};
static struct freq_leakage_table SY8824B_leakage_table_vcpu[] =
{
{1400, SY8824B_table_vcpu_l},
{1800, SY8824B_table_vcpu_h},
{0, NULL},
};
// SY20276
static struct leakage_table SY20276_table_vcpu_h[] =
{
{ 800, 900},
{ 0xffff, 880},
};
static struct leakage_table SY20276_table_vcpu_l[] =
{
{ 800, 830},
{ 0xffff, 800},
};
static struct freq_leakage_table SY20276_leakage_table_vcpu[] =
{
{1400, SY20276_table_vcpu_l},
{1800, SY20276_table_vcpu_h},
{0, NULL},
};
struct freq_leakage_table * as370_get_vcpu_leakage_table()
{
unsigned int pmic_id = get_pmic_id();
if (SY20276 == pmic_id)
return SY20276_leakage_table_vcpu;
else if (SY8824B == pmic_id || SY20278 == pmic_id)
return SY8824B_leakage_table_vcpu;
else
return SY8824B_leakage_table_vcpu;
}
unsigned int as370_get_default_cpu_voltage()
{
unsigned int volt;
volt = DEFAULT_CPU_VOLTAGE;
return volt;
}
unsigned int as370_get_default_core_voltage()
{
unsigned int volt;
volt = DEFAULT_CORE_VOLTAGE;
return volt;
}
int is_AS370_A0(void)
{
unsigned int chip_version = 0;
const volatile BERLIN_BOOTINFO *pinfo = (BERLIN_BOOTINFO *)BERLIN_BOOTINFO_ADDR;
chip_version = (unsigned int)(pinfo->chip_version);
lgpl_printf("chip rev is ");
if(chip_version == 0x0) {
lgpl_printf("A0\n");
return 1;
}
lgpl_printf("A1\n");
return 0;
}
unsigned int get_leakage_info()
{
unsigned int lkg = 0;
const volatile BERLIN_BOOTINFO *pinfo = (BERLIN_BOOTINFO *)BERLIN_BOOTINFO_ADDR;
lkg = (unsigned int)(pinfo->leakage_current);
if(is_AS370_A0()) {
/* if A0, convert 100C SIDD to 90C SIDD
* the fomula is 90C SIDD = 100C SIDD / 1.38
*/
lkg *= 100;
lkg /= 138;
}
return lkg;
}
unsigned int get_temp_id()
{
unsigned int temp_id = 0;
const volatile BERLIN_BOOTINFO *pinfo = (BERLIN_BOOTINFO *)BERLIN_BOOTINFO_ADDR;
temp_id = (unsigned int)(pinfo->temp_id);
return temp_id;
}
unsigned int get_unique_id(int index)
{
if (index < 0 || index > 1) {
lgpl_printf("get_unique_id invalid index %d\n", index);
return -1;
}
unsigned int unique_id = 0;
const volatile BERLIN_BOOTINFO *pinfo = (BERLIN_BOOTINFO *)BERLIN_BOOTINFO_ADDR;
unique_id = (unsigned int)(pinfo->unique_id[index]);
return unique_id;
}
unsigned int get_feature0(int index)
{
if (index < 0 || index > 1) {
lgpl_printf("get_feature0 invalid index %d\n", index);
return -1;
}
unsigned int feature0 = 0;
const volatile BERLIN_BOOTINFO *pinfo = (BERLIN_BOOTINFO *)BERLIN_BOOTINFO_ADDR;
feature0 = (unsigned int)(pinfo->feature0[index]);
return feature0;
}
unsigned int get_feature2_swapped(int index)
{
if (index < 0 || index > 1) {
lgpl_printf("get_feature2 invalid index %d\n", index);
return -1;
}
unsigned int feature2 = 0;
const volatile BERLIN_BOOTINFO *pinfo = (BERLIN_BOOTINFO *)BERLIN_BOOTINFO_ADDR;
feature2 = (unsigned int)(pinfo->feature2[index]);
return ((feature2 >> 24) & 0xFF) | ((feature2 >> 8) & 0xFF00) |
((feature2 << 8) & 0xFF0000) | ((feature2 << 24) & 0xFF000000);
}
unsigned int get_feature4_swapped(int index)
{
if (index < 0 || index > 1) {
lgpl_printf("get_feature4 invalid index %d\n", index);
return -1;
}
unsigned int feature4 = 0;
const volatile BERLIN_BOOTINFO *pinfo = (BERLIN_BOOTINFO *)BERLIN_BOOTINFO_ADDR;
feature4 = (unsigned int)(pinfo->feature4[index]);
return ((feature4 >> 24) & 0xFF) | ((feature4 >> 8) & 0xFF00) |
((feature4 << 8) & 0xFF0000) | ((feature4 << 24) & 0xFF000000);
}
int is_SPI_controller()
{
return 0;
}
void pv_pinmux_setting()
{
return;
}