Skip to content

Commit

Permalink
bios: DDR initialization skeleton
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastien Bourdeauducq committed Feb 17, 2012
1 parent e5927e2 commit c38de34
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 4 deletions.
2 changes: 1 addition & 1 deletion software/bios/Makefile
@@ -1,7 +1,7 @@
M2DIR=../..
include $(M2DIR)/software/include.mak

OBJECTS=crt0.o isr.o main.o
OBJECTS=crt0.o isr.o ddrinit.o main.o

all: bios.bin

Expand Down
63 changes: 63 additions & 0 deletions software/bios/ddrinit.c
@@ -0,0 +1,63 @@
/*
* Milkymist SoC (Software)
* Copyright (C) 2012 Sebastien Bourdeauducq
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include <stdio.h>

#include <hw/s6ddrphy.h>

#include "ddrinit.h"

static void init_sequence(void)
{
printf("Sending initialization sequence...\n");
// TODO
}

static void calibrate_phy(void)
{
int requests;
int addr;

printf("Calibrating PHY...\n");
while(!(CSR_DDRPHY_STATUS & DDRPHY_STATUS_PHY_CAL_DONE)) {
requests = CSR_DDRPHY_REQUESTS;
addr = CSR_DDRPHY_REQADDR;

if(requests & DDRPHY_REQUEST_READ) {
printf("R %d\n", addr);
// TODO
}
if(requests & DDRPHY_REQUEST_WRITE) {
printf("W %d\n", addr);
// TODO
}

CSR_DDRPHY_REQUESTS = requests;
}
}

int ddrinit(void)
{
printf("Initializing DDR SDRAM...\n");

CSR_DDRPHY_STATUS = DDRPHY_STATUS_RESETN;
init_sequence();
CSR_DDRPHY_STATUS = DDRPHY_STATUS_RESETN|DDRPHY_STATUS_INIT_DONE;
calibrate_phy();

return 1;
}
23 changes: 23 additions & 0 deletions software/bios/ddrinit.h
@@ -0,0 +1,23 @@
/*
* Milkymist SoC (Software)
* Copyright (C) 2012 Sebastien Bourdeauducq
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef __DDRINIT_H
#define __DDRINIT_H

int ddrinit(void);

#endif /* __DDRINIT_H */
9 changes: 6 additions & 3 deletions software/bios/main.c
Expand Up @@ -27,6 +27,8 @@

#include <hw/flash.h>

#include "ddrinit.h"

enum {
CSR_IE = 1, CSR_IM, CSR_IP, CSR_ICC, CSR_DCC, CSR_CC, CSR_CFG, CSR_EBA,
CSR_DC, CSR_DEBA, CSR_JTX, CSR_JRX, CSR_BP0, CSR_BP1, CSR_BP2, CSR_BP3,
Expand Down Expand Up @@ -440,11 +442,12 @@ int main(int i, char **c)
uart_init();
printf(banner);
crcbios();

print_mac();
ddrinit();

if(rescue)
printf("I: Booting in rescue mode\n");

print_mac();

while(1) {
putsnonl("\e[1mBIOS>\e[0m ");
readstr(buffer, 64);
Expand Down

0 comments on commit c38de34

Please sign in to comment.