Example #1
0
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                   */

}
Example #2
0
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                   */
}
Example #3
0
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                   */

}