⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syscon_core.c

📁 AMD的AU1200引导程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    UINT32 regval;

    regval = REG32(KSEG1(SEAD_SD_MRSCODE));

    *(UINT32 *)param = REGFIELD(regval, SEAD_SD_MRSCODE_CL);

    return OK;
}

/************************************************************************
 *    board_systemram_rw_burstlen_gt64120_read
 ************************************************************************/
static UINT32
board_systemram_rw_burstlen_gt64120_read(
    void *param,
    void *data )
{
    /* Same read and write burstlength */

    UINT32 regval;

    GT_L32( sys_nb_base, GT_SDRAM_B0_OFS, regval );

    switch( REGFIELD( regval, GT_SDRAM_B0_BLEN ) )
    {
      case GT_SDRAM_B0_BLEN_4 :
        *(UINT32 *)param = 4;
	break;
      case GT_SDRAM_B0_BLEN_8 :
        *(UINT32 *)param = 8;
	break;
      default : /* Should not happen */
        return ERROR_SYSCON_UNKNOWN_PARAM;
    }

    return OK;
}


/************************************************************************
 *    board_systemram_read_burstlen_sead_read
 ************************************************************************/
static UINT32
board_systemram_read_burstlen_sead_read(
    void *param,
    void *data )
{
    UINT32 regval;

    regval = REG32(KSEG1(SEAD_SD_MRSCODE));

    switch( REGFIELD(regval, SEAD_SD_MRSCODE_BL ) )
    {
      case 0 :
        *(UINT32 *)param = 1;
	break;
      case 1 :
        *(UINT32 *)param = 2;
	break;
      case 2 :
        *(UINT32 *)param = 4;
	break;
      case 3 :
        *(UINT32 *)param = 8;
	break;
      default : /* Should not happen */
        return ERROR_SYSCON_UNKNOWN_PARAM;
    }

    return OK;
}

/************************************************************************
 *    board_systemram_write_burstlen_sead_read
 ************************************************************************/
static UINT32
board_systemram_write_burstlen_sead_read(
    void *param,
    void *data )
{
    UINT32 regval;

    regval = REG32(KSEG1(SEAD_SD_MRSCODE));

    switch( REGFIELD(regval, SEAD_SD_MRSCODE_WBL) )
    {
      case 0 :
        return board_systemram_read_burstlen_sead_read(
	           param, data );
      case 1 :
        *(UINT32 *)param = 1;
	break;
      default : /* Should not happen */
        return ERROR_SYSCON_UNKNOWN_PARAM;
    }

    return OK;
}


/************************************************************************
 *  Implementation : Public functions
 ************************************************************************/


/************************************************************************
 *
 *                          syscon_arch_core_init
 *  Description :
 *  -------------
 *
 *  Initialize core card specific part of SYSCON
 *
 *  Return values :
 *  ---------------
 *
 *  None
 *
 ************************************************************************/
void 
syscon_arch_core_init( 
    t_syscon_obj *objects )		/* Array of SYSCON objects	*/
{
    syscon_objects = objects;

    /* Register objects */

    syscon_register_id_core( 
        SYSCON_BOARD_SYSTEMRAM_REFRESH_CYCLES_ID,
	     /* CoreLV */
	     board_systemram_refresh_cycles_gt64120_read,  NULL,
	     board_systemram_refresh_cycles_gt64120_write, NULL,
	     /* Board with QED RM5261 */
	     board_systemram_refresh_cycles_gt64120_read,  NULL,
	     board_systemram_refresh_cycles_gt64120_write, NULL,
	     /* SEAD board ("NULL" core board) */
	     board_systemram_refresh_cycles_sead_read,     NULL,
		NULL,					   NULL,
		
		/* Pb1000: 11-29-00 DWP */

		NULL,	NULL,
	     NULL,					   NULL );

    syscon_register_id_core( 
        SYSCON_BOARD_SYSTEMRAM_SRASPRCHG_CYCLES_ID,
	     /* CoreLV */
	     board_systemram_srasprchg_cycles_gt64120_read,  NULL,
	     board_systemram_srasprchg_cycles_gt64120_write, NULL,
	     /* Board with QED RM5261 */
	     board_systemram_srasprchg_cycles_gt64120_read,  NULL,
	     board_systemram_srasprchg_cycles_gt64120_write, NULL,
	     /* SEAD board ("NULL" core board) */
	     board_systemram_srasprchg_cycles_sead_read,     NULL,
		NULL,					     NULL,
		
		/* Pb1000: 11-29-00 DWP */
		
		NULL,	NULL,
	     NULL,					     NULL );

    syscon_register_id_core( 
        SYSCON_BOARD_SYSTEMRAM_SRAS2SCAS_CYCLES_ID,
	     /* CoreLV */
	     board_systemram_sras2scas_cycles_gt64120_read,  NULL,
	     board_systemram_sras2scas_cycles_gt64120_write, NULL,
	     /* Board with QED RM5261 */
	     board_systemram_sras2scas_cycles_gt64120_read,  NULL,
	     board_systemram_sras2scas_cycles_gt64120_write, NULL,
	     /* SEAD board ("NULL" core board) */
	     board_systemram_sras2scas_cycles_sead_read,     NULL,
		NULL,					     NULL,
		
		/* Pb1000: 11-29-00 DWP */
		
		NULL,	NULL,
	     NULL,					     NULL );

    syscon_register_id_core( 
        SYSCON_BOARD_SYSTEMRAM_CASLAT_CYCLES_ID,
	     /* CoreLV */
	     board_systemram_caslat_cycles_gt64120_read,  NULL,
	     NULL,					  NULL,
	     /* Board with QED RM5261 */
	     board_systemram_caslat_cycles_gt64120_read,  NULL,
	     NULL,					  NULL,
	     /* SEAD board ("NULL" core board) */
	     board_systemram_caslat_cycles_sead_read,     NULL,
		NULL,					  NULL,
		
		/* Pb1000: 11-29-00 DWP */
		
		NULL,	NULL,
	     NULL,					  NULL );

    syscon_register_id_core( 
        SYSCON_BOARD_SYSTEMRAM_READ_BURSTLEN_ID,
	     /* CoreLV */
	     board_systemram_rw_burstlen_gt64120_read, NULL,
	     NULL,				       NULL,
	     /* Board with QED RM5261 */
	     board_systemram_rw_burstlen_gt64120_read, NULL,
	     NULL,				       NULL,
	     /* SEAD board ("NULL" core board) */
	     board_systemram_read_burstlen_sead_read,  NULL,
		NULL,				       NULL,
		
		/* Pb1000: 11-29-00 DWP */
		
		NULL,	NULL,
	     NULL,				       NULL );

    syscon_register_id_core( 
        SYSCON_BOARD_SYSTEMRAM_WRITE_BURSTLEN_ID,
	     /* CoreLV */
	     board_systemram_rw_burstlen_gt64120_read, NULL,
	     NULL,				       NULL,
	     /* Board with QED RM5261 */
	     board_systemram_rw_burstlen_gt64120_read, NULL,
	     NULL,				       NULL,
	     /* SEAD board ("NULL" core board) */
	     board_systemram_write_burstlen_sead_read, NULL,
		NULL,				       NULL,
		
		/* Pb1000: 11-29-00 DWP */
		
		NULL,	NULL,
	     NULL,				       NULL );
}   


/************************************************************************
 *
 *                          syscon_register_id_core
 *  Description :
 *  -------------
 *
 *  Function used to register core card specific SYSCON object functions.
 *
 *  A read and/or write function may be registered for each core card.
 *  A NULL function pointer indicates that the operation (read or
 *  write) is not allowed for the particular platform.
 *
 *  read_data and write_data pointers are passed to the read and write
 *  function.

 *  Return values :
 *  ---------------
 *
 *  None
 *
 ************************************************************************/
void 
syscon_register_id_core(
    t_syscon_ids   id,			/* OBJECT ID from syscon_api.h  */

    /* CoreLV */
    t_syscon_func  read_core_lv,	/* CoreLV read function         */
    void	   *read_data_core_lv,	/* Registered data		*/
    t_syscon_func  write_core_lv,	/* CoreLV write function	*/
    void	   *write_data_core_lv,	/* Registered data		*/

    /* Board with QED RM5261 */
    t_syscon_func  read_rm5261,	        /* Board with QED RM5261 read function  */
    void	   *read_data_rm5261,   /* Registered data			*/
    t_syscon_func  write_rm5261,	/* Board with QED RM5261 write function */
    void	   *write_data_rm5261,  /* Registered data			*/

    /* SEAD board (i.e. "NULL" core board) */
    t_syscon_func  read_sead,	        /* SEAD read function           */
    void	   *read_data_sead,	/* Registered data		*/
    t_syscon_func  write_sead,		/* SEAD write function		*/
	 void	   *write_data_sead,	/* Registered data		*/
	 
	 /* Pb1000 board (i.e. "NULL" core board) */
	 t_syscon_func  read_pb1000,	        /* Pb1000 read function           */
	 void	   *read_data_pb1000,	/* Registered data		*/
	 t_syscon_func  write_pb1000,		/* Pb1000 write function		*/
	 void	   *write_data_pb1000 )	/* Registered data		*/

{
    t_syscon_obj *obj;

    obj = &syscon_objects[id];

	 /* SEAD/SEAD2 and Pb1000 boards are treated as boards with a "NULL" core card */
    switch( sys_platform )
    {
      case PRODUCT_SEAD_ID  :
      case PRODUCT_SEAD2_ID :
        obj->read       = read_sead;
	obj->read_data  = read_data_sead;
	obj->write      = write_sead;
	obj->write_data = write_data_sead;
	return;
		 
	 case PRODUCT_PB1000_ID:
		 obj->read       = read_pb1000;
		 obj->read_data  = read_data_pb1000;
		 obj->write      = write_pb1000;
		 obj->write_data = write_data_pb1000;
		 return;
		 
		 
      default :
        break;
    }

    switch( sys_corecard )
    {
      case MIPS_REVISION_CORID_CORE_LV :
        obj->read       = read_core_lv;
	obj->read_data  = read_data_core_lv;
	obj->write      = write_core_lv;
	obj->write_data = write_data_core_lv;
	break;

      case MIPS_REVISION_CORID_QED_RM5261 :
        obj->read       = read_rm5261;
	obj->read_data  = read_data_rm5261;
	obj->write      = write_rm5261;
	obj->write_data = write_data_rm5261;
	break;

      /* Add new core cards here */

      default : /* Should not happen */
        obj->read  = NULL;
	obj->write = NULL;
	break;
    }    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -