@ -7288,51 +7288,35 @@ static inline void bnx2x_mcp_wait_one(struct bnx2x *bp)
msleep ( MCP_ONE_TIMEOUT ) ;
}
static int bnx2x_reset_mcp_comp ( struct bnx2x * bp , u32 magic_val )
/*
* initializes bp - > common . shmem_base and waits for validity signature to appear
*/
static int bnx2x_init_shmem ( struct bnx2x * bp )
{
u32 shmem , cnt , validity_offset , val ;
int rc = 0 ;
msleep ( 100 ) ;
int cnt = 0 ;
u32 val = 0 ;
/* Get shmem offset */
shmem = REG_RD ( bp , MISC_REG_SHARED_MEM_ADDR ) ;
if ( shmem = = 0 ) {
BNX2X_ERR ( " Shmem 0 return failure \n " ) ;
rc = - ENOTTY ;
goto exit_lbl ;
}
do {
bp - > common . shmem_base = REG_RD ( bp , MISC_REG_SHARED_MEM_ADDR ) ;
if ( bp - > common . shmem_base ) {
val = SHMEM_RD ( bp , validity_map [ BP_PORT ( bp ) ] ) ;
if ( val & SHR_MEM_VALIDITY_MB )
return 0 ;
}
validity_offset = offsetof ( struct shmem_region , validity_map [ 0 ] ) ;
bnx2x_mcp_wait_one ( bp ) ;
/* Wait for MCP to come up */
for ( cnt = 0 ; cnt < ( MCP_TIMEOUT / MCP_ONE_TIMEOUT ) ; cnt + + ) {
/* TBD: its best to check validity map of last port.
* currently checks on port 0.
*/
val = REG_RD ( bp , shmem + validity_offset ) ;
DP ( NETIF_MSG_HW , " shmem 0x%x validity map(0x%x)=0x%x \n " , shmem ,
shmem + validity_offset , val ) ;
} while ( cnt + + < ( MCP_TIMEOUT / MCP_ONE_TIMEOUT ) ) ;
/* check that shared memory is valid. */
if ( ( val & ( SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB ) )
= = ( SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB ) )
break ;
BNX2X_ERR ( " BAD MCP validity signature \n " ) ;
bnx2x_mcp_wait_one ( bp ) ;
}
DP ( NETIF_MSG_HW , " Cnt=%d Shmem validity map 0x%x \n " , cnt , val ) ;
return - ENODEV ;
}
/* Check that shared memory is valid. This indicates that MCP is up. */
if ( ( val & ( SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB ) ) ! =
( SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB ) ) {
BNX2X_ERR ( " Shmem signature not present. MCP is not up !! \n " ) ;
rc = - ENOTTY ;
goto exit_lbl ;
}
static int bnx2x_reset_mcp_comp ( struct bnx2x * bp , u32 magic_val )
{
int rc = bnx2x_init_shmem ( bp ) ;
exit_lbl :
/* Restore the `magic' bit value */
if ( ! CHIP_IS_E1 ( bp ) )
bnx2x_clp_reset_done ( bp , magic_val ) ;
@ -7845,10 +7829,12 @@ static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp)
BNX2X_DEV_INFO ( " flash_size 0x%x (%d) \n " ,
bp - > common . flash_size , bp - > common . flash_size ) ;
bp - > common . shmem_base = REG_RD ( bp , MISC_REG_SHARED_MEM_ADDR ) ;
bnx2x_init_shmem ( bp ) ;
bp - > common . shmem2_base = REG_RD ( bp , ( BP_PATH ( bp ) ?
MISC_REG_GENERIC_CR_1 :
MISC_REG_GENERIC_CR_0 ) ) ;
bp - > link_params . shmem_base = bp - > common . shmem_base ;
bp - > link_params . shmem2_base = bp - > common . shmem2_base ;
BNX2X_DEV_INFO ( " shmem offset 0x%x shmem2 offset 0x%x \n " ,
@ -7860,11 +7846,6 @@ static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp)
return ;
}
val = SHMEM_RD ( bp , validity_map [ BP_PORT ( bp ) ] ) ;
if ( ( val & ( SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB ) )
! = ( SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB ) )
BNX2X_ERR ( " BAD MCP validity signature \n " ) ;
bp - > common . hw_config = SHMEM_RD ( bp , dev_info . shared_hw_config . config ) ;
BNX2X_DEV_INFO ( " hw_config 0x%08x \n " , bp - > common . hw_config ) ;