📄 syscon_core.c
字号:
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 + -