@ -23,13 +23,21 @@
# include <asm/sizes.h>
# include <asm/io.h>
# define HB_AHCI_BASE 0xffe08000
# define HB_SREG_A9_PWR_REQ 0xfff3cf00
# define HB_SREG_A9_BOOT_SRC_STAT 0xfff3cf04
# define HB_SREG_A9_PWRDOM_STAT 0xfff3cf20
# define HB_PWR_SUSPEND 0
# define HB_PWR_SOFT_RESET 1
# define HB_PWR_HARD_RESET 2
# define HB_PWR_SHUTDOWN 3
# define PWRDOM_STAT_SATA 0x80000000
# define PWRDOM_STAT_PCI 0x40000000
# define PWRDOM_STAT_EMMC 0x20000000
DECLARE_GLOBAL_DATA_PTR ;
/*
@ -58,9 +66,12 @@ int misc_init_r(void)
{
char envbuffer [ 16 ] ;
u32 boot_choice ;
u32 reg = readl ( HB_SREG_A9_PWRDOM_STAT ) ;
ahci_init ( 0xffe08000 ) ;
scsi_scan ( 1 ) ;
if ( reg & PWRDOM_STAT_SATA ) {
ahci_init ( HB_AHCI_BASE ) ;
scsi_scan ( 1 ) ;
}
boot_choice = readl ( HB_SREG_A9_BOOT_SRC_STAT ) & 0xff ;
sprintf ( envbuffer , " bootcmd%d " , boot_choice ) ;
@ -85,6 +96,22 @@ void dram_init_banksize(void)
gd - > bd - > bi_dram [ 0 ] . size = PHYS_SDRAM_1_SIZE ;
}
# if defined(CONFIG_OF_BOARD_SETUP)
void ft_board_setup ( void * fdt , bd_t * bd )
{
static const char disabled [ ] = " disabled " ;
u32 reg = readl ( HB_SREG_A9_PWRDOM_STAT ) ;
if ( ! ( reg & PWRDOM_STAT_SATA ) )
do_fixup_by_compat ( fdt , " calxeda,hb-ahci " , " status " ,
disabled , sizeof ( disabled ) , 1 ) ;
if ( ! ( reg & PWRDOM_STAT_EMMC ) )
do_fixup_by_compat ( fdt , " calxeda,hb-sdhci " , " status " ,
disabled , sizeof ( disabled ) , 1 ) ;
}
# endif
void reset_cpu ( ulong addr )
{
writel ( HB_PWR_HARD_RESET , HB_SREG_A9_PWR_REQ ) ;