📄 t_mmio.c
字号:
mmio_virt_base_cp = (char *) mmio_virt_base ;
mmio_reg_p = GetMMIORegPtr() ;
count = MMIO_REGS_COUNT ;
while (count-- != 0)
{
val = *((uint32 *) (mmio_virt_base_cp+mmio_reg_p->offset)) ;
sprintf(bfr, "\"%s\",", mmio_reg_p->name) ;
printf("\t{%-25s 0x%06x, 0x%08x, 0x%08x},\n",
bfr,
mmio_reg_p->offset,
mmio_reg_p->rd_wr_mask,
val) ;
mmio_reg_p++ ;
}
return 0 ;
}
/*
* read and verify power on reset mmio register values
*/
int
t_mmio_read()
{
int count ;
MMIO_REG *mmio_reg_p ;
char *mmio_virt_base_cp ;
int errors ;
mmio_virt_base_cp = (char *) mmio_virt_base ;
errors = 0 ;
printf("Comparing MMIO registers with expected boot state:\n");
mmio_reg_p = GetMMIORegPtr() ;
count = MMIO_REGS_COUNT ;
while (count-- != 0)
{
errors += verify_mmio(mmio_virt_base,
mmio_reg_p->name,
mmio_reg_p->offset,
mmio_reg_p->init_mask,
mmio_reg_p->init_val) ;
mmio_reg_p++ ;
}
return errors ;
}
/*
* mmio read/write walking 1's test
*/
int
t_mmio_walk1()
{
int errors ;
int32 start_val ;
int32 loop_val ;
int32 exp_val ;
int count ;
MMIO_REG *mmio_reg_p ;
char *mmio_virt_base_cp ;
errors = 0 ;
mmio_virt_base_cp = (char *) mmio_virt_base ;
/*
* Outer loop for walking 1's test
*/
printf("mmio walking ones test\n") ;
start_val = 1 ;
while (start_val != 0)
{
/*
* Fill mmio regs with walking 1's pattern
*/
loop_val = start_val ;
mmio_reg_p = GetMMIORegPtr() ;
count = MMIO_REGS_COUNT ;
while (count-- != 0)
{
if (mmio_reg_p->rd_wr_mask != 0)
{
exp_val = loop_val & mmio_reg_p->rd_wr_mask ;
*((uint32 *) (mmio_virt_base_cp+mmio_reg_p->offset)) = exp_val ;
}
loop_val = loop_val << 1 ;
if (loop_val == 0)
{
loop_val = 1 ;
}
mmio_reg_p++ ;
}
/*
* Check mmio regs with walking 1's pattern
*/
loop_val = start_val ;
mmio_reg_p = GetMMIORegPtr() ;
count = MMIO_REGS_COUNT ;
while (count-- != 0)
{
if (mmio_reg_p->rd_wr_mask != 0)
{
exp_val = loop_val ;
errors += verify_mmio(mmio_virt_base,
mmio_reg_p->name,
mmio_reg_p->offset,
mmio_reg_p->rd_wr_mask,
exp_val) ;
}
loop_val = loop_val << 1 ;
if (loop_val == 0)
{
loop_val = 1 ;
}
mmio_reg_p++ ;
}
/*
* Walk initial 1 to the left
*/
start_val = start_val << 1 ;
}
return errors ;
}
/*
* mmio read/write walking 0's test
*/
int
t_mmio_walk0()
{
int errors ;
int32 start_val ;
int32 loop_val ;
int32 exp_val ;
int count ;
MMIO_REG *mmio_reg_p ;
char *mmio_virt_base_cp ;
errors = 0 ;
mmio_virt_base_cp = (char *) mmio_virt_base ;
/*
* Outer loop for walking zeros test
*/
printf("mmio walking zeros test\n") ;
start_val = 1 ;
while (start_val != 0)
{
/*
* Fill mmio regs with walking 0's pattern
*/
loop_val = start_val ;
mmio_reg_p = GetMMIORegPtr() ;
count = MMIO_REGS_COUNT ;
while (count-- != 0)
{
if (mmio_reg_p->rd_wr_mask != 0)
{
exp_val = (~loop_val) & mmio_reg_p->rd_wr_mask ;
*((uint32 *) (mmio_virt_base_cp+mmio_reg_p->offset)) = exp_val ;
}
loop_val = loop_val << 1 ;
if (loop_val == 0)
{
loop_val = 1 ;
}
mmio_reg_p++ ;
}
/*
* Check mmio regs with walking 0's pattern
*/
loop_val = start_val ;
mmio_reg_p = GetMMIORegPtr() ;
count = MMIO_REGS_COUNT ;
while (count-- != 0)
{
if (mmio_reg_p->rd_wr_mask != 0)
{
exp_val = (~loop_val) & mmio_reg_p->rd_wr_mask ;
errors += verify_mmio(mmio_virt_base,
mmio_reg_p->name,
mmio_reg_p->offset,
mmio_reg_p->rd_wr_mask,
exp_val) ;
}
loop_val = loop_val << 1 ;
if (loop_val == 0)
{
loop_val = 1 ;
}
mmio_reg_p++ ;
}
/*
* Walk initial 1 to the left
*/
start_val = start_val << 1 ;
}
return errors ;
}
/*
* turn off BO bit in BIU_CTL
*/
int
t_mmio_burst_off()
{
int32 old_val ;
int32 new_val ;
old_val = MMIO(BIU_CNTL) ;
new_val = old_val | 0x2 ;
MMIO(BIU_CNTL) = new_val ;
printf("Burst mode off - BIU_CNTL: old %08x new %08x\n", old_val, new_val) ;
return 0 ;
}
/*
* turn on BO bit in BIU_CNTL
*/
int
t_mmio_burst_on()
{
int32 old_val ;
int32 new_val ;
old_val = MMIO(BIU_CNTL) ;
new_val = old_val & ~0x2 ;
MMIO(BIU_CNTL) = new_val ;
printf("Burst mode on - BIU_CNTL: old %08x new %08x\n", old_val, new_val) ;
return 0 ;
}
PVOID GetMMIORegPtr ( VOID )
{
return mmio_reg_tm1c;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -