unsigned int pfgc_dfs_read( unsigned short * dfs_rd_data ) { /*------------------------------------------------------------------------*/ /* */ /*------------------------------------------------------------------------*/ TCOM_ID com_acc_id; /* ID */ TCOM_FUNC com_acc_ret; /* */ TCOM_RW_DATA com_acc_rwdata; /* */ unsigned char read_reg[2]; /* */ unsigned int retval; /* */ unsigned long accs_option; /* I2C */ unsigned long rate; /* I2C Rate */ T_FGC_SYSERR_DATA syserr_info; /* SYSERR <PCIO034> */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0000 ); retval = DFGC_OK; /* */ if( dfs_rd_data == NULL ) /* NULL */ { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0001 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0001 ); MFGC_SYSERR_DATA_SET( /* SYSERR <PCIO034> */ CSYSERR_ALM_RANK_B, /* <PCIO034> */ DFGC_SYSERR_PARAM_ERR, /* <PCIO034> */ ( DFGC_DFS_READ | 0x0001 ), /* <PCIO034> */ ( unsigned long )dfs_rd_data, /* <PCIO034> */ syserr_info ); /* <PCIO034> */ pfgc_log_syserr( &syserr_info ); /* V SYSERR <PCIO034> */ retval = DFGC_NG; /* */ } /* dfs_rd_data == NULL */ else { /* NULL */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0002 ); /* open */ /*<PCIO034> com_acc_ret = pcom_acc_open( DCOM_DEV_DEVICE4, &com_acc_id, NULL ); *//* C */ com_acc_ret = pfgc_fgic_comopen( &com_acc_id ); /* C <PCIO034> */ if( com_acc_ret == DCOM_OK ) /* open */ { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0003 ); rate = DCOM_RATE400K; /* RATE 400K */ com_acc_ret = pcom_acc_ioctl( com_acc_id, DCOM_DEV_DEVICE4, DCOM_IOCTL_RATE, &rate ); /* C */ com_acc_rwdata.size = 1; /* */ accs_option = DCOM_ACCESS_MODE1 | DCOM_SEQUENTIAL_ADDR; com_acc_rwdata.option = &accs_option; /* Normal */ /* CTRL_STATUS Cmd */ MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, CtrlStsCmd ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ mdelay(1); /*<SABU>*/ read_reg[0] = 0xFF; read_reg[1] = 0xFF; com_acc_rwdata.option = NULL; /*<QAIO026> option */ /* Control() Read */ MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, read_reg ); com_acc_ret |= pfgc_fgic_comread( com_acc_id, &com_acc_rwdata ); /* C */ if( com_acc_ret == DCOM_OK ) { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0004 ); /* Read */ *dfs_rd_data = ( unsigned short )( ( unsigned )( read_reg[1] << 8 ) | read_reg[0] ); } /* pcom_acc_write/read == DCOM_OK */ else { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0005 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0002 ); retval = DFGC_NG; } /* pcom_acc_write/read != DCOM_OK */ /* close */ com_acc_ret = pcom_acc_close( com_acc_id ); /* C */ if( com_acc_ret != DCOM_OK ) { /* close */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0006 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0003 ); retval = DFGC_NG; } /* pcom_acc_close != DCOM_NG */ } /* pcom_acc_open == DCOM_OK */ else { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0007 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0004 ); retval = DFGC_NG; } /* pcom_acc_open == DCOM_NG */ } /* dfs_rd_data != NULL */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0xFFFF ); return retval; /* return */ }
unsigned int pfgc_df_study_check( T_FGC_DF_STUDY * df_study_data ) { /*------------------------------------------------------------------------*/ /* */ /*------------------------------------------------------------------------*/ unsigned int retval; /* */ int ret; /* */ unsigned int old_status; /* Seal/FAS */ /*<3131157>unsigned char qmax0_tmp,qmax1_tmp;*//* Qmax0/Qmax1 */ unsigned char qmax_tmp[2]; /* Qmax0/Qmax1 *//*<3131157>*/ unsigned char ra0sts_tmp,ra1sts_tmp; /* Ra0Status/Ra1Status Tmp */ unsigned char rax0sts_tmp,rax1sts_tmp; /* Rax0Sts/Rax1Sts Tmp */ unsigned char ra0_inp[18]; /* Ra0 Tmp */ T_FGC_FW_COM_MEMMAP * rom_va; /* NOR FW */ signed int nand_ret; /*<1100231> NAND */ T_FGC_SYSERR_DATA syserr_info; /*<1100231> SYSERR */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0000 ); retval = DFGC_OK; /* */ /*------------------------------------------------------------------------*/ /* */ /*------------------------------------------------------------------------*/ if( df_study_data == NULL ) /* NULL */ { MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0001 ); MFGC_RDPROC_ERROR( DFGC_DF_STUDY_CHECK | 0x0001 ); retval = DFGC_NG; /* */ } /* df_study_data == NULL */ else { MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0002 ); /* FullAccessMode */ retval = pfgc_fw_fullaccessmode_set( &old_status );/* N */ /* Qmax0/Qmax1 */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Qmax0, &qmax0_tmp );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Qmax1, &qmax1_tmp );*//* N */ retval |= pfgc_fgic_dfread_num( &DF_SC_Qmax0, qmax_tmp, Qmax_readtbl, sizeof( qmax_tmp ) );/* N check *//*<3131157>*/ /*<3131157>if( qmax0_tmp != qmax1_tmp )*/ if( qmax_tmp[0] != qmax_tmp[1] ) /*<3131157> */ { /* Qmax0!=Qmax1 */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0003 ); df_study_data->df_study_state = DFGC_ON; } /* qmax0_tmp != qmax1_tmp */ else { /* */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0004 ); retval |= pfgc_fgic_dfread( &DF_SC_Ra1Sts, &ra1sts_tmp ); retval |= pfgc_fgic_dfread( &DF_SC_Rax0Sts, &rax0sts_tmp ); retval |= pfgc_fgic_dfread( &DF_SC_Rax1Sts, &rax1sts_tmp ); /* Pack0 Ra1,Pack0 Rax,Pack1 Rax Status */ if( ( ra1sts_tmp != 0xFF ) && ( rax0sts_tmp != 0xFF ) && ( rax1sts_tmp != 0xFF ) ) { /* FFh */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0005 ); df_study_data->df_study_state = DFGC_ON; } /* ( ra1sts_tmp != 0xFF ) && ( rax0sts_tmp != 0xFF ) && ( rax1sts_tmp != 0xFF ) */ else { /* */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0006 ); retval |= pfgc_fgic_dfread( &DF_SC_Ra0Sts, &ra0sts_tmp );/* N */ /* Pack0 Ra0 Status */ if( ra0sts_tmp != 0x00 ) { /* 0x00 */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0007 ); df_study_data->df_study_state = DFGC_ON; } /* ra0sts_tmp != 0x00 */ else { /* read */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0008 ); /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0Flg, &ra0_inp[ 0 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0Btr_L, &ra0_inp[ 1 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0Btr_H, &ra0_inp[ 2 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0Gain, &ra0_inp[ 3 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_1, &ra0_inp[ 4 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_2, &ra0_inp[ 5 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_3, &ra0_inp[ 6 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_4, &ra0_inp[ 7 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_5, &ra0_inp[ 8 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_6, &ra0_inp[ 9 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_7, &ra0_inp[ 10 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_8, &ra0_inp[ 11 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_9, &ra0_inp[ 12 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_10, &ra0_inp[ 13 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_11, &ra0_inp[ 14 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_12, &ra0_inp[ 15 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_13, &ra0_inp[ 16 ] );*//* N */ /*<3131157>retval |= pfgc_fgic_dfread( &DF_SC_Ra0_14, &ra0_inp[ 17 ] );*//* N */ retval |= pfgc_fgic_dfread_num( &DF_SC_Ra0Flg, ra0_inp, &Ra0_readtbl[1], sizeof( ra0_inp ) );/* N check *//*<3131157>*/ /*<1100231> rom_va = *//* ROM FW */ /*<1100231> ( T_FGC_FW_COM_MEMMAP * )ioremap( *//* C */ /*<1100231> DMEM_NOR_FGC_FGICFW, */ rom_va = ( T_FGC_FW_COM_MEMMAP * )vmalloc( /*<1100231> C */ ( unsigned long )( sizeof( T_FGC_FW_COM_MEMMAP ) )); if( rom_va == NULL ) { /* ioremap */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x0009 ); MFGC_RDPROC_ERROR( DFGC_DF_STUDY_CHECK | 0x0002 ); retval = DFGC_NG; /* */ } /* rom_va == NULL */ else /*<3100734> */ { /*<3100734> */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x000C ); /*<1100231> */ /*<1100231> */ nand_ret = mtdwrap_read_bbm( MMC_CFG_TBL_PART, /* IDPower */ MMC_FGIC_FW_OFFSET, /* IDPower */ sizeof(T_FGC_FW_COM_MEMMAP), (void *)rom_va); if( nand_ret != 0 ) { /*<1100231> */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x000D ); /*<1100231> */ MFGC_RDPROC_ERROR( DFGC_DF_STUDY_CHECK | 0x000D ); /*<1100231> */ /*<1100231> */ MFGC_SYSERR_DATA_SET( /*<1100231>SYSERR */ CSYSERR_ALM_RANK_B, /*<1100231> */ DFGC_SYSERR_NVM_ERR, /*<1100231> */ ( DFGC_DF_STUDY_CHECK | 0x000D ), /*<1100231> */ ( unsigned long )nand_ret, /*<1100231> */ syserr_info ); /*<1100231> */ pfgc_log_syserr( &syserr_info ); /*<1100231> V */ /*<1100231> */ retval = DFGC_NG; /*<1100231> */ } /*<1100231> */ ret = memcmp( ra0_inp, &rom_va->rom_Pack0_Ra[1], 18 ); /* C */ if( ret != 0 ) { /* */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x000A ); df_study_data->df_study_state = DFGC_ON; } /* memcmp == FALSE */ else { /* */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0x000B ); df_study_data->df_study_state = DFGC_OFF; } /* memcmp == TRUE */ vfree( rom_va ); /*<1100231> V */ rom_va = NULL; /*<1100231> */ } /* ioremap == NULL */ /*<3100734> */ } /* ra0sts_tmp == 0x00 */ } /* !( ( ra1sts_tmp != 0xFF ) && ( rax0sts_tmp != 0xFF ) && ( rax1sts_tmp != 0xFF ) ) */ } /* qmax0_tmp == qmax1_tmp */ retval |= pfgc_fw_fullaccessmode_rev( &old_status ); /* N */ /* FullAccessMode */ } /* df_study_data != NULL */ MFGC_RDPROC_PATH( DFGC_DF_STUDY_CHECK | 0xFFFF ); return retval; /* return */ }
unsigned int pfgc_dfs_write( unsigned long * dfs_wr_data ) { /*------------------------------------------------------------------------*/ /* */ /*------------------------------------------------------------------------*/ TCOM_ID com_acc_id; /* ID */ TCOM_FUNC com_acc_ret; /* */ TCOM_RW_DATA com_acc_rwdata; /* */ unsigned int old_status; /* Seal/FAS */ unsigned int retval; /* */ unsigned long accs_option; /* I2C */ unsigned long rate; /* I2C Rate */ T_FGC_SYSERR_DATA syserr_info; /* SYSERR <PCIO034> */ MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0000 ); retval = DFGC_OK; /* */ /*------------------------------------------------------------------------*/ /* */ /*------------------------------------------------------------------------*/ if( dfs_wr_data == NULL ) /* NULL */ { MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0001 ); MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0001 ); MFGC_SYSERR_DATA_SET( /* SYSERR <PCIO034> */ CSYSERR_ALM_RANK_B, /* <PCIO034> */ DFGC_SYSERR_PARAM_ERR, /* <PCIO034> */ ( DFGC_DFS_WRITE | 0x0001 ), /* <PCIO034> */ ( unsigned long )dfs_wr_data, /* <PCIO034> */ syserr_info ); /* <PCIO034> */ pfgc_log_syserr( &syserr_info ); /* V SYSERR <PCIO034> */ retval = DFGC_NG; /* */ } /* dfs_wr_data == NULL */ else if( *dfs_wr_data == DFGC_DFS_ON ) { /* ON */ MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0002 ); /* FullAccess */ retval = pfgc_fw_fullaccessmode_set( &old_status ); /* N */ /* open */ /*<PCIO034> com_acc_ret = pcom_acc_open( DCOM_DEV_DEVICE4, &com_acc_id, NULL ); *//* C */ com_acc_ret = pfgc_fgic_comopen( &com_acc_id ); /* C <PCIO034> */ if( com_acc_ret == DCOM_OK ) /* open */ { MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0003 ); rate = DCOM_RATE400K; /* RATE 400K */ com_acc_ret = pcom_acc_ioctl( com_acc_id, DCOM_DEV_DEVICE4, DCOM_IOCTL_RATE, &rate ); /* C */ com_acc_rwdata.size = 1; /* */ accs_option = DCOM_ACCESS_MODE1 | DCOM_SEQUENTIAL_ADDR; com_acc_rwdata.option = &accs_option; /* Normal */ /* RESET Cmd */ MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, FgicResetCmd ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ mdelay(2000); /*<SABU>*/ /* IT_ENABLE Cmd */ MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, ItEnableCmd ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ mdelay(2000); /*<SABU>*/ /* Seal Cmd */ MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, SealCmd ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ mdelay( DFGC_WAIT_SEALED ); /* Seal Cmd Wait */ if( com_acc_ret != DCOM_OK ) { /* err */ MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0004 ); MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0002 ); retval = DFGC_NG; } /* pcom_acc_write != DCOM_OK */ /* close */ com_acc_ret = pcom_acc_close( com_acc_id ); /* C */ if( com_acc_ret != DCOM_OK ) { /* close */ MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0005 ); MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0003 ); retval = DFGC_NG; } /* pcom_acc_close != DCOM_OK */ } /* pcom_acc_open == DCOM_OK */ else { MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0006 ); MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0004 ); retval = DFGC_NG; } /* pcom_acc_open != DCOM_OK */ } /* *dfs_wr_data == DFGC_DFS_ON */ else if( *dfs_wr_data == DFGC_DFS_OFF ) { /* OFF */ MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0007 ); /* FullAccess */ retval = pfgc_fw_fullaccessmode_set( &old_status ); /* N */ } /* *dfs_wr_data == DFGC_DFS_OFF */ else { /* */ MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0008 ); MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0005 ); retval = DFGC_NG; } /* *dfs_wr_data == ??? */ MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0xFFFF ); return retval; /* return */ }