Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/misoc
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 5483b37c8f99
Choose a base ref
...
head repository: m-labs/misoc
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 6decb357f1fa
Choose a head ref
  • 2 commits
  • 3 files changed
  • 1 contributor

Commits on Sep 1, 2014

  1. Copy the full SHA
    57335bd View commit details
  2. bios: add sdrrderr

    sbourdeauducq committed Sep 1, 2014
    Copy the full SHA
    6decb35 View commit details
Showing with 79 additions and 7 deletions.
  1. +3 −1 software/bios/main.c
  2. +73 −5 software/bios/sdram.c
  3. +3 −1 software/bios/sdram.h
4 changes: 3 additions & 1 deletion software/bios/main.c
Original file line number Diff line number Diff line change
@@ -378,7 +378,9 @@ static void do_command(char *c)
else if(strcmp(token, "sdrrow") == 0) sdrrow(get_token(&c));
else if(strcmp(token, "sdrsw") == 0) sdrsw();
else if(strcmp(token, "sdrhw") == 0) sdrhw();
else if(strcmp(token, "sdrrd") == 0) sdrrd(get_token(&c));
else if(strcmp(token, "sdrrdbuf") == 0) sdrrdbuf(-1);
else if(strcmp(token, "sdrrd") == 0) sdrrd(get_token(&c), get_token(&c));
else if(strcmp(token, "sdrrderr") == 0) sdrrderr(get_token(&c));
else if(strcmp(token, "sdrwr") == 0) sdrwr(get_token(&c));
else if(strcmp(token, "memtest") == 0) memtest();
else if(strcmp(token, "sdrinit") == 0) sdrinit();
78 changes: 73 additions & 5 deletions software/bios/sdram.c
Original file line number Diff line number Diff line change
@@ -61,12 +61,30 @@ void sdrrow(char *_row)
}
}

void sdrrd(char *startaddr)
void sdrrdbuf(int dq)
{
int i, p;
int first_byte, step;

if(dq < 0) {
first_byte = 0;
step = 1;
} else {
first_byte = DFII_PIX_RDDATA_SIZE/2 - 1 - dq;
step = DFII_PIX_RDDATA_SIZE/2;
}

for(p=0;p<DFII_NPHASES;p++)
for(i=first_byte;i<DFII_PIX_RDDATA_SIZE;i+=step)
printf("%02x", MMPTR(dfii_pix_rddata_addr[p]+4*i));
printf("\n");
}

void sdrrd(char *startaddr, char *dq)
{
char *c;
unsigned int addr;
int i;
int p;
int _dq;

if(*startaddr == 0) {
printf("sdrrd <address>\n");
@@ -77,15 +95,65 @@ void sdrrd(char *startaddr)
printf("incorrect address\n");
return;
}
if(*dq == 0)
_dq = -1;
else {
_dq = strtoul(dq, &c, 0);
if(*c != 0) {
printf("incorrect DQ\n");
return;
}
}

dfii_pird_address_write(addr);
dfii_pird_baddress_write(0);
command_prd(DFII_COMMAND_CAS|DFII_COMMAND_CS|DFII_COMMAND_RDDATA);
cdelay(15);

sdrrdbuf(_dq);
}

void sdrrderr(char *count)
{
char *c;
int _count;
int i, j, p;
unsigned char prev_data[DFII_NPHASES*DFII_PIX_RDDATA_SIZE];
unsigned char errs[DFII_PIX_RDDATA_SIZE/2];

if(*count == 0) {
printf("sdrrderr <count>\n");
return;
}
_count = strtoul(count, &c, 0);
if(*c != 0) {
printf("incorrect count\n");
return;
}

dfii_pird_address_write(0);
dfii_pird_baddress_write(0);
command_prd(DFII_COMMAND_CAS|DFII_COMMAND_CS|DFII_COMMAND_RDDATA);
cdelay(15);
for(p=0;p<DFII_NPHASES;p++)
for(i=0;i<DFII_PIX_RDDATA_SIZE;i++)
printf("%02x", MMPTR(dfii_pix_rddata_addr[p]+4*i));
prev_data[p*DFII_PIX_RDDATA_SIZE+i] = MMPTR(dfii_pix_rddata_addr[p]+4*i);
for(i=0;i<DFII_PIX_RDDATA_SIZE/2;i++)
errs[i] = 0;

for(j=0;j<_count;j++) {
command_prd(DFII_COMMAND_CAS|DFII_COMMAND_CS|DFII_COMMAND_RDDATA);
cdelay(15);
for(p=0;p<DFII_NPHASES;p++)
for(i=0;i<DFII_PIX_RDDATA_SIZE;i++) {
unsigned char new_data;

new_data = MMPTR(dfii_pix_rddata_addr[p]+4*i);
errs[i%(DFII_PIX_RDDATA_SIZE/2)] |= prev_data[p*DFII_PIX_RDDATA_SIZE+i] ^ new_data;
prev_data[p*DFII_PIX_RDDATA_SIZE+i] = new_data;
}
}
for(i=0;i<DFII_PIX_RDDATA_SIZE/2;i++)
printf("%02x ", errs[i]);
printf("\n");
}

4 changes: 3 additions & 1 deletion software/bios/sdram.h
Original file line number Diff line number Diff line change
@@ -4,7 +4,9 @@
void sdrsw(void);
void sdrhw(void);
void sdrrow(char *_row);
void sdrrd(char *startaddr);
void sdrrdbuf(int dq);
void sdrrd(char *startaddr, char *dq);
void sdrrderr(char *count);
void sdrwr(char *startaddr);
int memtest_silent(void);
int memtest(void);