Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

bios: DDR initialization skeleton

  • Loading branch information...
commit c38de34a211cf210fd4c7d651e53af756e439fb4 1 parent e5927e2
Sébastien Bourdeauducq sbourdeauducq authored
2  software/bios/Makefile
View
@@ -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
63 software/bios/ddrinit.c
View
@@ -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 software/bios/ddrinit.h
View
@@ -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 software/bios/main.c
View
@@ -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,
@@ -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);
Please sign in to comment.
Something went wrong with that request. Please try again.