@ -32,6 +32,7 @@
# include <asm/armv7.h>
# include <asm/arch/cpu.h>
# include <asm/arch/sys_proto.h>
# include <asm/arch/clocks.h>
# include <asm/sizes.h>
# include <asm/utils.h>
# include <asm/arch/gpio.h>
@ -182,6 +183,121 @@ void do_io_settings(void)
writel ( EFUSE_3 , ( * ctrl ) - > control_efuse_3 ) ;
writel ( EFUSE_4 , ( * ctrl ) - > control_efuse_4 ) ;
}
static const struct srcomp_params srcomp_parameters [ NUM_SYS_CLKS ] = {
{ 0x45 , 0x1 } , /* 12 MHz */
{ - 1 , - 1 } , /* 13 MHz */
{ 0x63 , 0x2 } , /* 16.8 MHz */
{ 0x57 , 0x2 } , /* 19.2 MHz */
{ 0x20 , 0x1 } , /* 26 MHz */
{ - 1 , - 1 } , /* 27 MHz */
{ 0x41 , 0x3 } /* 38.4 MHz */
} ;
void srcomp_enable ( void )
{
u32 srcomp_value , mul_factor , div_factor , clk_val , i ;
u32 sysclk_ind = get_sys_clk_index ( ) ;
u32 omap_rev = omap_revision ( ) ;
mul_factor = srcomp_parameters [ sysclk_ind ] . multiply_factor ;
div_factor = srcomp_parameters [ sysclk_ind ] . divide_factor ;
for ( i = 0 ; i < 4 ; i + + ) {
srcomp_value = readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
srcomp_value & =
~ ( MULTIPLY_FACTOR_XS_MASK | DIVIDE_FACTOR_XS_MASK ) ;
srcomp_value | = ( mul_factor < < MULTIPLY_FACTOR_XS_SHIFT ) |
( div_factor < < DIVIDE_FACTOR_XS_SHIFT ) ;
writel ( srcomp_value , ( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
}
if ( ( omap_rev = = OMAP5430_ES1_0 ) | | ( omap_rev = = OMAP5432_ES1_0 ) ) {
clk_val = readl ( ( * prcm ) - > cm_coreaon_io_srcomp_clkctrl ) ;
clk_val | = OPTFCLKEN_SRCOMP_FCLK_MASK ;
writel ( clk_val , ( * prcm ) - > cm_coreaon_io_srcomp_clkctrl ) ;
for ( i = 0 ; i < 4 ; i + + ) {
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
srcomp_value & = ~ PWRDWN_XS_MASK ;
writel ( srcomp_value ,
( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
while ( ( ( readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 )
& SRCODE_READ_XS_MASK ) > >
SRCODE_READ_XS_SHIFT ) = = 0 )
;
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
srcomp_value & = ~ OVERRIDE_XS_MASK ;
writel ( srcomp_value ,
( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
}
} else {
srcomp_value = readl ( ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
srcomp_value & = ~ ( MULTIPLY_FACTOR_XS_MASK |
DIVIDE_FACTOR_XS_MASK ) ;
srcomp_value | = ( mul_factor < < MULTIPLY_FACTOR_XS_SHIFT ) |
( div_factor < < DIVIDE_FACTOR_XS_SHIFT ) ;
writel ( srcomp_value , ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
for ( i = 0 ; i < 4 ; i + + ) {
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
srcomp_value | = SRCODE_OVERRIDE_SEL_XS_MASK ;
writel ( srcomp_value ,
( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
srcomp_value & = ~ OVERRIDE_XS_MASK ;
writel ( srcomp_value ,
( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
}
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
srcomp_value | = SRCODE_OVERRIDE_SEL_XS_MASK ;
writel ( srcomp_value , ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
srcomp_value & = ~ OVERRIDE_XS_MASK ;
writel ( srcomp_value , ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
clk_val = readl ( ( * prcm ) - > cm_coreaon_io_srcomp_clkctrl ) ;
clk_val | = OPTFCLKEN_SRCOMP_FCLK_MASK ;
writel ( clk_val , ( * prcm ) - > cm_coreaon_io_srcomp_clkctrl ) ;
clk_val = readl ( ( * prcm ) - > cm_wkupaon_io_srcomp_clkctrl ) ;
clk_val | = OPTFCLKEN_SRCOMP_FCLK_MASK ;
writel ( clk_val , ( * prcm ) - > cm_wkupaon_io_srcomp_clkctrl ) ;
for ( i = 0 ; i < 4 ; i + + ) {
while ( ( ( readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 )
& SRCODE_READ_XS_MASK ) > >
SRCODE_READ_XS_SHIFT ) = = 0 )
;
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
srcomp_value & = ~ SRCODE_OVERRIDE_SEL_XS_MASK ;
writel ( srcomp_value ,
( * ctrl ) - > control_srcomp_north_side + i * 4 ) ;
}
while ( ( ( readl ( ( * ctrl ) - > control_srcomp_east_side_wkup ) &
SRCODE_READ_XS_MASK ) > > SRCODE_READ_XS_SHIFT ) = = 0 )
;
srcomp_value =
readl ( ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
srcomp_value & = ~ SRCODE_OVERRIDE_SEL_XS_MASK ;
writel ( srcomp_value , ( * ctrl ) - > control_srcomp_east_side_wkup ) ;
}
}
# endif
void config_data_eye_leveling_samples ( u32 emif_base )