Skip to content
8 changes: 5 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,7 @@ drivers-y := drivers/ sound/
net-y := net/
libs-y := lib/
core-y := usr/
extra-y := extra/
endif # KBUILD_EXTMOD

ifeq ($(dot-config),1)
Expand Down Expand Up @@ -610,12 +611,12 @@ core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
$(net-y) $(net-m) $(libs-y) $(libs-m)))
$(net-y) $(net-m) $(libs-y) $(libs-m) $(extra-y) $(extra-m)))

vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
$(init-n) $(init-) \
$(core-n) $(core-) $(drivers-n) $(drivers-) \
$(net-n) $(net-) $(libs-n) $(libs-))))
$(net-n) $(net-) $(libs-n) $(libs-) $(extra-n) $(extra-))))

init-y := $(patsubst %/, %/built-in.o, $(init-y))
core-y := $(patsubst %/, %/built-in.o, $(core-y))
Expand All @@ -624,6 +625,7 @@ net-y := $(patsubst %/, %/built-in.o, $(net-y))
libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
libs-y := $(libs-y1) $(libs-y2)
extra-y := $(patsubst %/, %/built-in.o, $(extra-y))

# Build vmlinux
# ---------------------------------------------------------------------------
Expand Down Expand Up @@ -653,7 +655,7 @@ libs-y := $(libs-y1) $(libs-y2)
# System.map is generated to document addresses of all kernel symbols

vmlinux-init := $(head-y) $(init-y)
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) $(extra-y)
vmlinux-all := $(vmlinux-init) $(vmlinux-main)
vmlinux-lds := arch/$(SRCARCH)/kernel/vmlinux.lds
export KBUILD_VMLINUX_OBJS := $(vmlinux-all)
Expand Down
3 changes: 3 additions & 0 deletions arch/arm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1146,3 +1146,6 @@ source "security/Kconfig"
source "crypto/Kconfig"

source "lib/Kconfig"

source "extra/Kconfig"

4 changes: 2 additions & 2 deletions arch/arm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ comma = ,
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible.
arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-fgcse-lm -fgcse-sm -fsched-spec-load -fforce-addr -ffast-math -fsingle-precision-constant -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -funswitch-loops,-mcpu=cortex-a8 -Wa$(comma)-mcpu=cortex-a8)
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7
ifeq ($(CONFIG_CPU_32v6),y)
arch-$(CONFIG_CPU_32v6K) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k)
arch-$(CONFIG_CPU_32v6K) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-mtune=arm1176jf-s -Wa$(comma)-march=armv6k -mtune=arm1176jf-s)
endif
arch-$(CONFIG_CPU_32v5) :=-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t)
arch-$(CONFIG_CPU_32v4T) :=-D__LINUX_ARM_ARCH__=4 -march=armv4t
Expand Down
41 changes: 26 additions & 15 deletions arch/arm/configs/omap_sirloin_3630_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -166,9 +166,7 @@ CONFIG_ARCH_OMAP3=y
#
# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
CONFIG_OMAP_SMARTREFLEX=y
CONFIG_OMAP_SMARTREFLEX_v15=y
# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
# CONFIG_OMAP_SMARTREFLEX is not set
CONFIG_OMAP_RESET_CLOCKS=y
CONFIG_OMAP_BOOT_TAG=y
CONFIG_OMAP_BOOT_REASON=y
Expand Down Expand Up @@ -221,15 +219,15 @@ CONFIG_FASTPATH=y
#
CONFIG_OMAP3_PM=y
# CONFIG_OMAP_VOLT_SR_BYPASS is not set
CONFIG_OMAP_VOLT_SR_FORCEUPDATE=y
# CONFIG_OMAP_VOLT_SR_FORCEUPDATE is not set
# CONFIG_OMAP_VOLT_SR is not set
# CONFIG_OMAP_VOLT_VSEL is not set
CONFIG_OMAP_VOLT_VSEL=y
# CONFIG_OMAP_VOLT_VMODE is not set
# CONFIG_OMAP3_VDD1_OPP1 is not set
# CONFIG_OMAP3_VDD1_OPP2 is not set
# CONFIG_OMAP3_VDD1_OPP3 is not set
# CONFIG_OMAP3_VDD1_OPP4 is not set
CONFIG_OMAP3_VDD1_OPP5=y
CONFIG_OMAP3_VDD1_OPP4=y
# CONFIG_OMAP3_VDD1_OPP5 is not set
# CONFIG_OMAP3_VDD2_OPP2 is not set
CONFIG_OMAP3_VDD2_OPP3=y
# CONFIG_ENABLE_VOLTSCALE_IN_SUSPEND is not set
Expand Down Expand Up @@ -353,18 +351,30 @@ CONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_OVERRIDE=y
# CONFIG_CPU_FREQ_OVERRIDE_STRIPOPP is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND_TICKLE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_SCREENSTATE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_ONDEMAND_TICKLE=y
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_GOV_LAGFREE=y
CONFIG_LAGFREE_MAX_LOAD=50
CONFIG_LAGFREE_MIN_LOAD=15
CONFIG_LAGFREE_FREQ_STEP_DOWN=100000
CONFIG_LAGFREE_FREQ_SLEEP_MAX=300000
CONFIG_LAGFREE_FREQ_AWAKE_MIN=150000
CONFIG_LAGFREE_FREQ_STEP_UP_SLEEP_PERCENT=20
CONFIG_CPU_FREQ_MIN_TICKS=10
CONFIG_CPU_FREQ_SAMPLING_LATENCY_MULTIPLIER=1000

#
# Floating point emulation
Expand Down Expand Up @@ -1037,7 +1047,8 @@ CONFIG_OMAP3430_1WIRE_PROTOCOL=y
# CONFIG_W1_SLAVE_DS2760 is not set
CONFIG_W1_SLAVE_DS2784=y
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
CONFIG_HWMON=y
CONFIG_SENSORS_OMAP34XX=y
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set

Expand Down Expand Up @@ -1824,14 +1835,14 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_ECB=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_PCBC=m
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_XTS is not set
CONFIG_CRYPTO_LRW=y
CONFIG_CRYPTO_XTS=y
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
Expand Down
5 changes: 5 additions & 0 deletions arch/arm/mach-omap3pe/board-nduid.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#include <linux/kernel.h>
#include <asm/arch/nduid.h>
#include <asm/io.h>
#if defined(CONFIG_ARCH_OMAP24XX)
Expand Down Expand Up @@ -63,5 +64,9 @@ int omap_nduid_get_cpu_id(char *id, unsigned int maxlen)
buf[4] = __raw_readl(CONTROL_TAP_DIE_ID_2);
buf[5] = __raw_readl(CONTROL_TAP_DIE_ID_3);

printk(KERN_INFO "IDCODE: 0x%04x\n", buf[0]);
printk(KERN_INFO "PROD_ID: 0x%04x\n", buf[1]);
printk(KERN_INFO "DIE_ID: 0x%04x%04x%04x%04x\n", buf[2], buf[3], buf[4], buf[5]);

return sizeof(uint32_t) * 6;
}
7 changes: 7 additions & 0 deletions arch/arm/mach-omap3pe/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,13 @@ static void omap3_clk_init_cpufreq_table(struct cpufreq_frequency_table **table)

prcm = vdd1_rate_table + ARRAY_SIZE(vdd1_rate_table) -1;
for (; prcm->speed; prcm--) {
#ifdef CONFIG_CPU_FREQ_OVERRIDE_STRIPOPP
#ifdef CONFIG_MACH_SIRLOIN_3630
if((prcm->speed / 1000) < 300000) continue;
#else
if((prcm->speed / 1000) < 500000) continue;
#endif
#endif
freq_table[i].index = i;
freq_table[i].frequency = prcm->speed / 1000;
i++;
Expand Down
2 changes: 1 addition & 1 deletion arch/arm/mach-omap3pe/clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@
#define S550M 550000000
#define S625M 625000000
#define S600M 600000000
#define S800M 800000000
#define S1000M 1000000000
#define S1200M 1200000000

/* Macro to enable clock control via clock framework */
#define ENABLE_CLOCKCONTROL 1
Expand Down
4 changes: 2 additions & 2 deletions arch/arm/mach-omap3pe/clock_tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ static struct vdd_prcm_config vdd1_rate_table[MAX_VDD1_OPP +1] = {
/*OPP3*/
{S600M, PRCM_VDD1_OPP3, RATE_IN_343X},
/*OPP4*/
{S800M, PRCM_VDD1_OPP4, RATE_IN_343X},
{S1000M, PRCM_VDD1_OPP4, RATE_IN_343X},
/*OPP5*/
{S1000M, PRCM_VDD1_OPP5, RATE_IN_343X},
{S1200M, PRCM_VDD1_OPP5, RATE_IN_343X},
};

static struct vdd_prcm_config vdd2_rate_table[MAX_VDD2_OPP +1] = {
Expand Down
26 changes: 14 additions & 12 deletions arch/arm/mach-omap3pe/prcm_opp.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ static u8 mpu_iva2_vdd1_volts [2][PRCM_NO_VDD1_OPPS] = {
{ 0x1e, 0x24, 0x30, 0x36, 0x3C }, /* OLD 3430 values */
/* Vsel corresponding to unused (OPP1), 1.0125V (OPP2),
1.2V (OPP3), 1.325V (OPP4), 1.375 (OPP5) */
{ 0x21, 0x21, 0x30, 0x3a, 0x3e }, /* NEW 3630 values */
{ 0x21, 0x21, 0x30, 0x3e, 0x44 }, /* NEW 3630 values */
};

static u8 core_l3_vdd2_volts [2][PRCM_NO_VDD2_OPPS] = { /* only 3 OPPs */
Expand Down Expand Up @@ -226,7 +226,7 @@ void prcm_set_current_vdd2_opp(u32 opp)

u32 omap3_max_vdd1_opp(void)
{
return 5;
return 0;

/* This function call is used in the bridgedriver.
*
Expand Down Expand Up @@ -332,10 +332,10 @@ static struct dpll_param mpu_dpll_param[2][5][PRCM_NO_VDD1_OPPS] = {
/* 26M values */
/* OPP1(150 Mhz) and OPP2(300 Mhz)*/
{{0x12c, 0x0C, 0x07, 0x04}, {0x12c, 0x0C, 0x07, 0x02},
/* OPP3(600 Mhz) and OPP4(800 Mhz)*/
{0x12c, 0x0C, 0x07, 0x01}, {0x190, 0x0C, 0x07, 0x01},
/* OPP5 (1000 Mhz) */
{0x1f4, 0x0C, 0x07, 0x01} },
/* OPP3(600 Mhz) and OPP4(1000 Mhz)*/
{0x12c, 0x0C, 0x07, 0x01}, {0x1f4, 0x0C, 0x07, 0x01},
/* OPP5 (1200 Mhz) */
{0x258, 0x0C, 0x07, 0x01} },
/* 38.4M values */
/* OPP1(125 Mhz) and OPP2(250 Mhz)*/
{{0x271, 0x2F, 0x03, 0x04}, {0x271, 0x2F, 0x03, 0x02},
Expand Down Expand Up @@ -697,10 +697,10 @@ void prcm_scale_finish(void)
valid_rate = clk_round_rate(p_vdd1_clk, S600M);
break;
case PRCM_VDD1_OPP4:
valid_rate = clk_round_rate(p_vdd1_clk, S800M);
valid_rate = clk_round_rate(p_vdd1_clk, S1000M);
break;
case PRCM_VDD1_OPP5:
valid_rate = clk_round_rate(p_vdd1_clk, S1000M);
valid_rate = clk_round_rate(p_vdd1_clk, S1200M);
break;
#else
case PRCM_VDD1_OPP2:
Expand Down Expand Up @@ -732,8 +732,8 @@ static struct vdd1_arm_dsp_freq_d {
{150, 90, CO_VDD1_OPP1, PRCM_VDD1_OPP1},
{300, 180, CO_VDD1_OPP2, PRCM_VDD1_OPP2},
{600, 360, CO_VDD1_OPP3, PRCM_VDD1_OPP3},
{800, 396, CO_VDD1_OPP4, PRCM_VDD1_OPP4},
{1000, 430, CO_VDD1_OPP5, PRCM_VDD1_OPP5},
{1000, 396, CO_VDD1_OPP4, PRCM_VDD1_OPP4},
{1200, 430, CO_VDD1_OPP5, PRCM_VDD1_OPP5},
};
static struct vdd2_core_freq_d {
unsigned int freq;
Expand All @@ -746,7 +746,7 @@ static struct vdd2_core_freq_d {
};

static unsigned int rnd_rate_vdd1[5] = {
S150M, S300M, S600M, S800M, S1000M
S150M, S300M, S600M, S1000M, S1200M
};
static unsigned int rnd_rate_vdd2[3] = {
0, S100M, S200M
Expand Down Expand Up @@ -1889,5 +1889,7 @@ int __init prcm_vdd_clk_init(void)
return -1;
}


#ifdef CONFIG_CPU_FREQ_OVERRIDE
#include "prcm_opp_ss.c"
#endif

70 changes: 70 additions & 0 deletions arch/arm/mach-omap3pe/prcm_opp_ss.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#ifdef CONFIG_CPU_FREQ_OVERRIDE
void omap_pm_opp_get_volts(u8 vdd1_volts[]) {
#ifdef CONFIG_MACH_SIRLOIN_3630
memcpy(vdd1_volts,mpu_iva2_vdd1_volts[tidx],
sizeof(mpu_iva2_vdd1_volts[tidx]));
#else
memcpy(vdd1_volts,mpu_iva2_vdd1_volts,sizeof(mpu_iva2_vdd1_volts));
#endif
}
EXPORT_SYMBOL(omap_pm_opp_get_volts);

void omap_pm_opp_set_volts(u8 vdd1_volts[]) {
#ifdef CONFIG_MACH_SIRLOIN_3630
memcpy(mpu_iva2_vdd1_volts[tidx],vdd1_volts,
sizeof(mpu_iva2_vdd1_volts[tidx]));
prcm_do_voltage_scaling(s_current_vdd1_opp, s_current_vdd1_opp-1);
#else
memcpy(mpu_iva2_vdd1_volts,vdd1_volts,sizeof(mpu_iva2_vdd1_volts));
prcm_do_voltage_scaling(current_vdd1_opp, current_vdd1_opp-1);
#endif
}
EXPORT_SYMBOL(omap_pm_opp_set_volts);

void omap_pm_opp_get_vdd2_volts(u8 *vdd2_volt) {
#ifdef CONFIG_MACH_SIRLOIN_3630
*(vdd2_volt)=(u8 )core_l3_vdd2_volts[tidx][2];
#else
*(vdd2_volt)=(u8 )core_l3_vdd2_volts[2];
#endif
}
EXPORT_SYMBOL(omap_pm_opp_get_vdd2_volts);

void omap_pm_opp_set_vdd2_volts(u8 vdd2_volt) {
#ifdef CONFIG_MACH_SIRLOIN_3630
core_l3_vdd2_volts[tidx][2]=(u8)vdd2_volt;
prcm_do_voltage_scaling(s_current_vdd2_opp, s_current_vdd2_opp-1);
#else
core_l3_vdd2_volts[2]=(u8)vdd2_volt;
prcm_do_voltage_scaling(current_vdd2_opp, current_vdd2_opp-1);
#endif
}
EXPORT_SYMBOL(omap_pm_opp_set_vdd2_volts);

void omap_pm_opp_get_vdd2_freq(u8 *vdd2_freq) {
*(vdd2_freq)=(u8)vdd2_core_freq[2].freq;
}
EXPORT_SYMBOL(omap_pm_opp_get_vdd2_freq);

unsigned int prcm_get_current_vdd1_opp_no(void) {
#ifdef CONFIG_MACH_SIRLOIN_3630
return get_opp_no(s_current_vdd1_opp);
#else
return get_opp_no(current_vdd1_opp);
#endif
}
EXPORT_SYMBOL(prcm_get_current_vdd1_opp_no);

unsigned short get_vdd1_arm_opp_for_freq(unsigned int freq)
{
int i;
for (i = 0; i < ARRAY_SIZE(vdd1_arm_dsp_freq); i++) {
if (vdd1_arm_dsp_freq[i].freq_mpu == (freq / 1000)) {
return i+1;
}
}
return 0;
}
EXPORT_SYMBOL(get_vdd1_arm_opp_for_freq);
#endif

1 change: 1 addition & 0 deletions arch/arm/plat-omap/cpu-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
if (!result)
cpufreq_frequency_table_get_attr(freq_table,
policy->cpu);
policy->max = 1000000;
} else
#endif
{
Expand Down
1 change: 1 addition & 0 deletions drivers/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,5 @@ source "drivers/kvm/Kconfig"
source "drivers/uio/Kconfig"

source "drivers/virtio/Kconfig"

endmenu
Loading