@ -13,6 +13,7 @@
# include <linux/clk.h>
# include <linux/delay.h>
# include <linux/err.h>
# include <linux/amba/bus.h>
# include <plat/ste_dma40.h>
@ -44,9 +45,6 @@
# define D40_ALLOC_PHY (1 << 30)
# define D40_ALLOC_LOG_FREE 0
/* Hardware designer of the block */
# define D40_HW_DESIGNER 0x8
/**
* enum 40 _command - The different commands and / or statuses .
*
@ -2525,25 +2523,6 @@ static int __init d40_phy_res_init(struct d40_base *base)
static struct d40_base * __init d40_hw_detect_init ( struct platform_device * pdev )
{
static const struct d40_reg_val dma_id_regs [ ] = {
/* Peripheral Id */
{ . reg = D40_DREG_PERIPHID0 , . val = 0x0040 } ,
{ . reg = D40_DREG_PERIPHID1 , . val = 0x0000 } ,
/*
* D40_DREG_PERIPHID2 Depends on HW revision :
* DB8500ed has 0x0008 ,
* ? has 0x0018 ,
* DB8500v1 has 0x0028
* DB8500v2 has 0x0038
*/
{ . reg = D40_DREG_PERIPHID3 , . val = 0x0000 } ,
/* PCell Id */
{ . reg = D40_DREG_CELLID0 , . val = 0x000d } ,
{ . reg = D40_DREG_CELLID1 , . val = 0x00f0 } ,
{ . reg = D40_DREG_CELLID2 , . val = 0x0005 } ,
{ . reg = D40_DREG_CELLID3 , . val = 0x00b1 }
} ;
struct stedma40_platform_data * plat_data ;
struct clk * clk = NULL ;
void __iomem * virtbase = NULL ;
@ -2552,8 +2531,9 @@ static struct d40_base * __init d40_hw_detect_init(struct platform_device *pdev)
int num_log_chans = 0 ;
int num_phy_chans ;
int i ;
u32 val ;
u32 rev ;
u32 pid ;
u32 cid ;
u8 rev ;
clk = clk_get ( & pdev - > dev , NULL ) ;
@ -2577,32 +2557,32 @@ static struct d40_base * __init d40_hw_detect_init(struct platform_device *pdev)
if ( ! virtbase )
goto failure ;
/* HW version check */
for ( i = 0 ; i < ARRAY_SIZE ( dma_id_regs ) ; i + + ) {
if ( dma_id_regs [ i ] . val ! =
readl ( virtbase + dma_id_regs [ i ] . reg ) ) {
d40_err ( & pdev - > dev ,
" Unknown hardware! Expected 0x%x at 0x%x but got 0x%x \n " ,
dma_id_regs [ i ] . val ,
dma_id_regs [ i ] . reg ,
readl ( virtbase + dma_id_regs [ i ] . reg ) ) ;
goto failure ;
}
}
/* Get silicon revision and designer */
val = readl ( virtbase + D40_DREG_PERIPHID2 ) ;
/* This is just a regular AMBA PrimeCell ID actually */
for ( pid = 0 , i = 0 ; i < 4 ; i + + )
pid | = ( readl ( virtbase + resource_size ( res ) - 0x20 + 4 * i )
& 255 ) < < ( i * 8 ) ;
for ( cid = 0 , i = 0 ; i < 4 ; i + + )
cid | = ( readl ( virtbase + resource_size ( res ) - 0x10 + 4 * i )
& 255 ) < < ( i * 8 ) ;
if ( ( val & D40_DREG_PERIPHID2_DESIGNER_MASK ) ! =
D40_HW_DESIGNER ) {
if ( cid ! = AMBA_CID ) {
d40_err ( & pdev - > dev , " Unknown hardware! No PrimeCell ID \n " ) ;
goto failure ;
}
if ( AMBA_MANF_BITS ( pid ) ! = AMBA_VENDOR_ST ) {
d40_err ( & pdev - > dev , " Unknown designer! Got %x wanted %x \n " ,
val & D40_DREG_PERIPHID2_DESIGNER_MASK ,
D40_HW_DESIGNER ) ;
AMBA_MANF_BITS ( pid ) ,
AMBA_VENDOR_ST ) ;
goto failure ;
}
rev = ( val & D40_DREG_PERIPHID2_REV_MASK ) > >
D40_DREG_PERIPHID2_REV_POS ;
/*
* HW revision :
* DB8500ed has revision 0
* ? has revision 1
* DB8500v1 has revision 2
* DB8500v2 has revision 3
*/
rev = AMBA_REV_BITS ( pid ) ;
/* The number of physical channels on this HW */
num_phy_chans = 4 * ( readl ( virtbase + D40_DREG_ICFG ) & 0x7 ) + 4 ;