@ -31,12 +31,7 @@
# include <command.h>
# include <command.h>
# include <mpc83xx.h>
# include <mpc83xx.h>
# include <asm/processor.h>
# include <asm/processor.h>
# if defined(CONFIG_OF_FLAT_TREE)
# include <ft_build.h>
# elif defined(CONFIG_OF_LIBFDT)
# include <libfdt.h>
# include <libfdt.h>
# include <fdt_support.h>
# endif
DECLARE_GLOBAL_DATA_PTR ;
DECLARE_GLOBAL_DATA_PTR ;
@ -359,427 +354,6 @@ void watchdog_reset (void)
}
}
# endif
# endif
# if defined(CONFIG_OF_LIBFDT)
/*
* " Setter " functions used to add / modify FDT entries .
*/
static int fdt_set_eth0 ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
/* Fix it up if it exists, don't create it if it doesn't exist */
if ( fdt_get_property ( blob , nodeoffset , name , 0 ) ) {
return fdt_setprop ( blob , nodeoffset , name , bd - > bi_enetaddr , 6 ) ;
}
return 0 ;
}
# ifdef CONFIG_HAS_ETH1
/* second onboard ethernet port */
static int fdt_set_eth1 ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
/* Fix it up if it exists, don't create it if it doesn't exist */
if ( fdt_get_property ( blob , nodeoffset , name , 0 ) ) {
return fdt_setprop ( blob , nodeoffset , name , bd - > bi_enet1addr , 6 ) ;
}
return 0 ;
}
# endif
# ifdef CONFIG_HAS_ETH2
/* third onboard ethernet port */
static int fdt_set_eth2 ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
/* Fix it up if it exists, don't create it if it doesn't exist */
if ( fdt_get_property ( blob , nodeoffset , name , 0 ) ) {
return fdt_setprop ( blob , nodeoffset , name , bd - > bi_enet2addr , 6 ) ;
}
return 0 ;
}
# endif
# ifdef CONFIG_HAS_ETH3
/* fourth onboard ethernet port */
static int fdt_set_eth3 ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
/* Fix it up if it exists, don't create it if it doesn't exist */
if ( fdt_get_property ( blob , nodeoffset , name , 0 ) ) {
return fdt_setprop ( blob , nodeoffset , name , bd - > bi_enet3addr , 6 ) ;
}
return 0 ;
}
# endif
static int fdt_set_busfreq ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
u32 tmp ;
/* Create or update the property */
tmp = cpu_to_be32 ( bd - > bi_busfreq ) ;
return fdt_setprop ( blob , nodeoffset , name , & tmp , sizeof ( tmp ) ) ;
}
static int fdt_set_tbfreq ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
u32 tmp ;
/* Create or update the property */
tmp = cpu_to_be32 ( OF_TBCLK ) ;
return fdt_setprop ( blob , nodeoffset , name , & tmp , sizeof ( tmp ) ) ;
}
static int fdt_set_clockfreq ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
u32 tmp ;
/* Create or update the property */
tmp = cpu_to_be32 ( gd - > core_clk ) ;
return fdt_setprop ( blob , nodeoffset , name , & tmp , sizeof ( tmp ) ) ;
}
# ifdef CONFIG_QE
static int fdt_set_qe_busfreq ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
u32 tmp ;
/* Create or update the property */
tmp = cpu_to_be32 ( gd - > qe_clk ) ;
return fdt_setprop ( blob , nodeoffset , name , & tmp , sizeof ( tmp ) ) ;
}
static int fdt_set_qe_brgfreq ( void * blob , int nodeoffset , const char * name , bd_t * bd )
{
u32 tmp ;
/* Create or update the property */
tmp = cpu_to_be32 ( gd - > brg_clk ) ;
return fdt_setprop ( blob , nodeoffset , name , & tmp , sizeof ( tmp ) ) ;
}
# endif
/*
* Fixups to the fdt .
*/
static const struct {
char * node ;
char * prop ;
int ( * set_fn ) ( void * blob , int nodeoffset , const char * name , bd_t * bd ) ;
} fixup_props [ ] = {
{ " /cpus/ " OF_CPU ,
" timebase-frequency " ,
fdt_set_tbfreq
} ,
{ " /cpus/ " OF_CPU ,
" bus-frequency " ,
fdt_set_busfreq
} ,
{ " /cpus/ " OF_CPU ,
" clock-frequency " ,
fdt_set_clockfreq
} ,
{ " / " OF_SOC ,
" bus-frequency " ,
fdt_set_busfreq
} ,
{ " / " OF_SOC " /serial@4500 " ,
" clock-frequency " ,
fdt_set_busfreq
} ,
{ " / " OF_SOC " /serial@4600 " ,
" clock-frequency " ,
fdt_set_busfreq
} ,
# ifdef CONFIG_TSEC1
{ " / " OF_SOC " /ethernet@24000 " ,
" mac-address " ,
fdt_set_eth0
} ,
{ " / " OF_SOC " /ethernet@24000 " ,
" local-mac-address " ,
fdt_set_eth0
} ,
# endif
# ifdef CONFIG_TSEC2
{ " / " OF_SOC " /ethernet@25000 " ,
" mac-address " ,
fdt_set_eth1
} ,
{ " / " OF_SOC " /ethernet@25000 " ,
" local-mac-address " ,
fdt_set_eth1
} ,
# endif
# ifdef CONFIG_QE
{ " / " OF_QE ,
" brg-frequency " ,
fdt_set_qe_brgfreq
} ,
{ " / " OF_QE ,
" bus-frequency " ,
fdt_set_qe_busfreq
} ,
# ifdef CONFIG_UEC_ETH1
# if CFG_UEC1_UCC_NUM == 0 /* UCC1 */
{ " / " OF_QE " /ucc@2000 " ,
" mac-address " ,
fdt_set_eth0
} ,
{ " / " OF_QE " /ucc@2000 " ,
" local-mac-address " ,
fdt_set_eth0
} ,
# elif CFG_UEC1_UCC_NUM == 1 /* UCC2 */
{ " / " OF_QE " /ucc@3000 " ,
" mac-address " ,
fdt_set_eth0
} ,
{ " / " OF_QE " /ucc@3000 " ,
" local-mac-address " ,
fdt_set_eth0
} ,
# elif CFG_UEC1_UCC_NUM == 2 /* UCC3 */
{ " / " OF_QE " /ucc@2200 " ,
" mac-address " ,
fdt_set_eth0
} ,
{ " / " OF_QE " /ucc@2200 " ,
" local-mac-address " ,
fdt_set_eth0
} ,
# elif CFG_UEC1_UCC_NUM == 3 /* UCC4 */
{ " / " OF_QE " /ucc@3200 " ,
" mac-address " ,
fdt_set_eth0
} ,
{ " / " OF_QE " /ucc@3200 " ,
" local-mac-address " ,
fdt_set_eth0
} ,
# endif
# endif /* CONFIG_UEC_ETH1 */
# ifdef CONFIG_UEC_ETH2
# if CFG_UEC2_UCC_NUM == 0 /* UCC1 */
{ " / " OF_QE " /ucc@2000 " ,
" mac-address " ,
fdt_set_eth1
} ,
{ " / " OF_QE " /ucc@2000 " ,
" local-mac-address " ,
fdt_set_eth1
} ,
# elif CFG_UEC2_UCC_NUM == 1 /* UCC2 */
{ " / " OF_QE " /ucc@3000 " ,
" mac-address " ,
fdt_set_eth1
} ,
{ " / " OF_QE " /ucc@3000 " ,
" local-mac-address " ,
fdt_set_eth1
} ,
# elif CFG_UEC2_UCC_NUM == 2 /* UCC3 */
{ " / " OF_QE " /ucc@2200 " ,
" mac-address " ,
fdt_set_eth1
} ,
{ " / " OF_QE " /ucc@2200 " ,
" local-mac-address " ,
fdt_set_eth1
} ,
# elif CFG_UEC2_UCC_NUM == 3 /* UCC4 */
{ " / " OF_QE " /ucc@3200 " ,
" mac-address " ,
fdt_set_eth1
} ,
{ " / " OF_QE " /ucc@3200 " ,
" local-mac-address " ,
fdt_set_eth1
} ,
# endif
# endif /* CONFIG_UEC_ETH2 */
# ifdef CONFIG_UEC_ETH3
# if CFG_UEC3_UCC_NUM == 0 /* UCC1 */
{ " / " OF_QE " /ucc@2000 " ,
" mac-address " ,
fdt_set_eth2
} ,
{ " / " OF_QE " /ucc@2000 " ,
" local-mac-address " ,
fdt_set_eth2
} ,
# elif CFG_UEC3_UCC_NUM == 1 /* UCC2 */
{ " / " OF_QE " /ucc@3000 " ,
" mac-address " ,
fdt_set_eth2
} ,
{ " / " OF_QE " /ucc@3000 " ,
" local-mac-address " ,
fdt_set_eth2
} ,
# elif CFG_UEC3_UCC_NUM == 2 /* UCC3 */
{ " / " OF_QE " /ucc@2200 " ,
" mac-address " ,
fdt_set_eth2
} ,
{ " / " OF_QE " /ucc@2200 " ,
" local-mac-address " ,
fdt_set_eth2
} ,
# elif CFG_UEC3_UCC_NUM == 3 /* UCC4 */
{ " / " OF_QE " /ucc@3200 " ,
" mac-address " ,
fdt_set_eth2
} ,
{ " / " OF_QE " /ucc@3200 " ,
" local-mac-address " ,
fdt_set_eth2
} ,
# endif
# endif /* CONFIG_UEC_ETH3 */
# ifdef CONFIG_UEC_ETH4
# if CFG_UEC4_UCC_NUM == 0 /* UCC1 */
{ " / " OF_QE " /ucc@2000 " ,
" mac-address " ,
fdt_set_eth3
} ,
{ " / " OF_QE " /ucc@2000 " ,
" local-mac-address " ,
fdt_set_eth3
} ,
# elif CFG_UEC4_UCC_NUM == 1 /* UCC2 */
{ " / " OF_QE " /ucc@3000 " ,
" mac-address " ,
fdt_set_eth3
} ,
{ " / " OF_QE " /ucc@3000 " ,
" local-mac-address " ,
fdt_set_eth3
} ,
# elif CFG_UEC4_UCC_NUM == 2 /* UCC3 */
{ " / " OF_QE " /ucc@2200 " ,
" mac-address " ,
fdt_set_eth3
} ,
{ " / " OF_QE " /ucc@2200 " ,
" local-mac-address " ,
fdt_set_eth3
} ,
# elif CFG_UEC4_UCC_NUM == 3 /* UCC4 */
{ " / " OF_QE " /ucc@3200 " ,
" mac-address " ,
fdt_set_eth3
} ,
{ " / " OF_QE " /ucc@3200 " ,
" local-mac-address " ,
fdt_set_eth3
} ,
# endif
# endif /* CONFIG_UEC_ETH4 */
# endif /* CONFIG_QE */
} ;
void
ft_cpu_setup ( void * blob , bd_t * bd )
{
int nodeoffset ;
int err ;
int j ;
for ( j = 0 ; j < ( sizeof ( fixup_props ) / sizeof ( fixup_props [ 0 ] ) ) ; j + + ) {
nodeoffset = fdt_path_offset ( blob , fixup_props [ j ] . node ) ;
if ( nodeoffset > = 0 ) {
err = fixup_props [ j ] . set_fn ( blob , nodeoffset ,
fixup_props [ j ] . prop , bd ) ;
if ( err < 0 )
debug ( " Problem setting %s = %s: %s \n " ,
fixup_props [ j ] . node , fixup_props [ j ] . prop ,
fdt_strerror ( err ) ) ;
} else {
debug ( " Couldn't find %s: %s \n " ,
fixup_props [ j ] . node , fdt_strerror ( nodeoffset ) ) ;
}
}
fdt_fixup_memory ( blob , ( u64 ) bd - > bi_memstart , ( u64 ) bd - > bi_memsize ) ;
}
# elif defined(CONFIG_OF_FLAT_TREE)
void
ft_cpu_setup ( void * blob , bd_t * bd )
{
u32 * p ;
int len ;
ulong clock ;
clock = bd - > bi_busfreq ;
p = ft_get_prop ( blob , " /cpus/ " OF_CPU " /bus-frequency " , & len ) ;
if ( p ! = NULL )
* p = cpu_to_be32 ( clock ) ;
p = ft_get_prop ( blob , " / " OF_SOC " /bus-frequency " , & len ) ;
if ( p ! = NULL )
* p = cpu_to_be32 ( clock ) ;
p = ft_get_prop ( blob , " / " OF_SOC " /serial@4500/clock-frequency " , & len ) ;
if ( p ! = NULL )
* p = cpu_to_be32 ( clock ) ;
p = ft_get_prop ( blob , " / " OF_SOC " /serial@4600/clock-frequency " , & len ) ;
if ( p ! = NULL )
* p = cpu_to_be32 ( clock ) ;
# ifdef CONFIG_TSEC1
p = ft_get_prop ( blob , " / " OF_SOC " /ethernet@24000/mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enetaddr , 6 ) ;
p = ft_get_prop ( blob , " / " OF_SOC " /ethernet@24000/local-mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enetaddr , 6 ) ;
# endif
# ifdef CONFIG_TSEC2
p = ft_get_prop ( blob , " / " OF_SOC " /ethernet@25000/mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enet1addr , 6 ) ;
p = ft_get_prop ( blob , " / " OF_SOC " /ethernet@25000/local-mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enet1addr , 6 ) ;
# endif
# ifdef CONFIG_UEC_ETH1
# if CFG_UEC1_UCC_NUM == 0 /* UCC1 */
p = ft_get_prop ( blob , " / " OF_QE " /ucc@2000/mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enetaddr , 6 ) ;
p = ft_get_prop ( blob , " / " OF_QE " /ucc@2000/local-mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enetaddr , 6 ) ;
# elif CFG_UEC1_UCC_NUM == 2 /* UCC3 */
p = ft_get_prop ( blob , " / " OF_QE " /ucc@2200/mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enetaddr , 6 ) ;
p = ft_get_prop ( blob , " / " OF_QE " /ucc@2200/local-mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enetaddr , 6 ) ;
# endif
# endif
# ifdef CONFIG_UEC_ETH2
# if CFG_UEC2_UCC_NUM == 1 /* UCC2 */
p = ft_get_prop ( blob , " / " OF_QE " /ucc@3000/mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enet1addr , 6 ) ;
p = ft_get_prop ( blob , " / " OF_QE " /ucc@3000/local-mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enet1addr , 6 ) ;
# elif CFG_UEC2_UCC_NUM == 3 /* UCC4 */
p = ft_get_prop ( blob , " / " OF_QE " /ucc@3200/mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enet1addr , 6 ) ;
p = ft_get_prop ( blob , " / " OF_QE " /ucc@3200/local-mac-address " , & len ) ;
if ( p ! = NULL )
memcpy ( p , bd - > bi_enet1addr , 6 ) ;
# endif
# endif
}
# endif
# if defined(CONFIG_DDR_ECC)
# if defined(CONFIG_DDR_ECC)
void dma_init ( void )
void dma_init ( void )
{
{