From: Kumar Gala <galak@kernel.crashing.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 09/24] FSL DDR: Convert MPC8568MDS to new DDR code.
Date: Wed, 27 Aug 2008 01:10:42 -0500 [thread overview]
Message-ID: <1219817457-7432-9-git-send-email-galak@kernel.crashing.org> (raw)
In-Reply-To: <1219817457-7432-8-git-send-email-galak@kernel.crashing.org>
From: Jon Loeliger <jdl@freescale.com>
Signed-off-by: Jon Loeliger <jdl@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
board/freescale/mpc8568mds/Makefile | 14 ++++--
board/freescale/mpc8568mds/ddr.c | 81 +++++++++++++++++++++++++++++++
board/freescale/mpc8568mds/mpc8568mds.c | 8 +++-
include/configs/MPC8568MDS.h | 38 ++++++++-------
4 files changed, 117 insertions(+), 24 deletions(-)
create mode 100644 board/freescale/mpc8568mds/ddr.c
diff --git a/board/freescale/mpc8568mds/Makefile b/board/freescale/mpc8568mds/Makefile
index ecdc4d3..d499fb3 100644
--- a/board/freescale/mpc8568mds/Makefile
+++ b/board/freescale/mpc8568mds/Makefile
@@ -26,11 +26,15 @@ include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).a
-COBJS := $(BOARD).o bcsr.o law.o tlb.o
-
-SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS := $(addprefix $(obj),$(COBJS))
-SOBJS := $(addprefix $(obj),$(SOBJS))
+COBJS-y += $(BOARD).o
+COBJS-y += bcsr.o
+COBJS-y += ddr.o
+COBJS-y += law.o
+COBJS-y += tlb.o
+
+SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS-y))
+SOBJS := $(addprefix $(obj),$(SOBJS-y))
$(LIB): $(obj).depend $(OBJS) $(SOBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
diff --git a/board/freescale/mpc8568mds/ddr.c b/board/freescale/mpc8568mds/ddr.c
new file mode 100644
index 0000000..1b8ecec
--- /dev/null
+++ b/board/freescale/mpc8568mds/ddr.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * Version 2 as published by the Free Software Foundation.
+ */
+
+#include <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+ i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+ return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+ unsigned int ctrl_num)
+{
+ unsigned int i;
+
+ if (ctrl_num) {
+ printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+ return;
+ }
+
+ for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+ get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+ }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+ /*
+ * Factors to consider for clock adjust:
+ * - number of chips on bus
+ * - position of slot
+ * - DDR1 vs. DDR2?
+ * - ???
+ *
+ * This needs to be determined on a board-by-board basis.
+ * 0110 3/4 cycle late
+ * 0111 7/8 cycle late
+ */
+ popts->clk_adjust = 6;
+
+ /*
+ * Factors to consider for CPO:
+ * - frequency
+ * - ddr1 vs. ddr2
+ */
+ popts->cpo_override = 10;
+
+ /*
+ * Factors to consider for write data delay:
+ * - number of DIMMs
+ *
+ * 1 = 1/4 clock delay
+ * 2 = 1/2 clock delay
+ * 3 = 3/4 clock delay
+ * 4 = 1 clock delay
+ * 5 = 5/4 clock delay
+ * 6 = 3/2 clock delay
+ */
+ popts->write_data_delay = 3;
+
+ /*
+ * Factors to consider for half-strength driver enable:
+ * - number of DIMMs installed
+ */
+ popts->half_strength_driver_enable = 0;
+}
diff --git a/board/freescale/mpc8568mds/mpc8568mds.c b/board/freescale/mpc8568mds/mpc8568mds.c
index 2ccff7d..f9e35cc 100644
--- a/board/freescale/mpc8568mds/mpc8568mds.c
+++ b/board/freescale/mpc8568mds/mpc8568mds.c
@@ -25,8 +25,10 @@
#include <common.h>
#include <pci.h>
#include <asm/processor.h>
+#include <asm/mmu.h>
#include <asm/immap_85xx.h>
#include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
#include <spd_sdram.h>
#include <i2c.h>
#include <ioports.h>
@@ -163,7 +165,10 @@ initdram(int board_type)
udelay(200);
}
#endif
- dram_size = spd_sdram();
+
+ dram_size = fsl_ddr_sdram();
+ dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+ dram_size *= 0x100000;
#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
/*
@@ -171,6 +176,7 @@ initdram(int board_type)
*/
ddr_enable_ecc(dram_size);
#endif
+
/*
* SDRAM Initialization
*/
diff --git a/include/configs/MPC8568MDS.h b/include/configs/MPC8568MDS.h
index a82d528..8aeaa29 100644
--- a/include/configs/MPC8568MDS.h
+++ b/include/configs/MPC8568MDS.h
@@ -41,14 +41,6 @@
#define CONFIG_TSEC_ENET /* tsec ethernet support */
#define CONFIG_QE /* Enable QE */
#define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL /* possible DLL fix needed */
-/*#define CONFIG_DDR_2T_TIMING Sets the 2T timing bit */
-
-/*#define CONFIG_DDR_ECC*/ /* only for ECC DDR module */
-/*#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER*/ /* DDR controller or DMA? */
-#define CONFIG_MEM_INIT_VALUE 0xDeadBeef
-
#define CONFIG_FSL_LAW 1 /* Use common FSL init code */
/*
@@ -58,8 +50,6 @@
*/
#define CONFIG_ASSUME_AMD_FLASH
-#define MPC85xx_DDR_SDRAM_CLK_CNTL /* 85xx has clock control reg */
-
#ifndef __ASSEMBLY__
extern unsigned long get_clock_freq(void);
#endif /*Replace a call to get_clock_freq (after it is implemented)*/
@@ -95,24 +85,33 @@ extern unsigned long get_clock_freq(void);
#define CFG_PCI1_ADDR (CFG_CCSRBAR+0x8000)
#define CFG_PCIE1_ADDR (CFG_CCSRBAR+0xa000)
-/*
- * DDR Setup
- */
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#define CONFIG_DDR_DLL /* possible DLL fix needed */
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER /* DDR controller or DMA? */
+
+#define CONFIG_MEM_INIT_VALUE 0xDeadBeef
+
#define CFG_DDR_SDRAM_BASE 0x00000000 /* DDR is system memory*/
#define CFG_SDRAM_BASE CFG_DDR_SDRAM_BASE
-#define SPD_EEPROM_ADDRESS 0x51 /* DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS 1
+#define CONFIG_DIMM_SLOTS_PER_CTLR 1
+#define CONFIG_CHIP_SELECTS_PER_CTRL (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
-/*
- * Make sure required options are set
- */
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS 0x51 /* CTLR 0 DIMM 0 */
+
+/* Make sure required options are set */
#ifndef CONFIG_SPD_EEPROM
#error ("CONFIG_SPD_EEPROM is required")
#endif
#undef CONFIG_CLOCKS_IN_MHZ
-
/*
* Local Bus Definitions
*/
@@ -302,6 +301,9 @@ extern unsigned long get_clock_freq(void);
#define CONFIG_OF_BOARD_SETUP 1
#define CONFIG_OF_STDOUT_VIA_ALIAS 1
+#define CFG_64BIT_VSPRINTF 1
+#define CFG_64BIT_STRTOUL 1
+
/*
* I2C
*/
--
1.5.5.1
next prev parent reply other threads:[~2008-08-27 6:10 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-27 6:10 [U-Boot] [PATCH 01/24] FSL DDR: Remove duplicate setting of cs0_bnds register on 86xx Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 02/24] FSL DDR: Add e500 TLB helper for DDR code Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 03/24] FSL DDR: Add 85xx specific register setting Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 04/24] FSL DDR: Convert MPC8540ADS to new DDR code Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 05/24] FSL DDR: Convert MPC8560ADS " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 06/24] FSL DDR: Convert MPC8555ADS " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 07/24] FSL DDR: Convert MPC8541CDS " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 08/24] FSL DDR: Convert MPC8548CDS " Kumar Gala
2008-08-27 6:10 ` Kumar Gala [this message]
2008-08-27 6:10 ` [U-Boot] [PATCH 10/24] FSL DDR: Convert MPC8544DS " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 11/24] FSL DDR: Convert socrates " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 12/24] FSL DDR: Convert atum8548 " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 13/24] FSL DDR: Convert sbc8548 " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 14/24] FSL DDR: Convert PM854 " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 15/24] FSL DDR: Convert PM856 " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 16/24] FSL DDR: Convert MPC8540EVAL " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 17/24] FSL DDR: Convert SBC8560 " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 18/24] FSL DDR: Convert STXGP3 " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 19/24] FSL DDR: Convert STXSSA " Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 20/24] FSL DDR: Remove old SPD support from cpu/mpc85xx Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 21/24] mpc85xx: Add support for the MPC8572DS reference board Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 22/24] mpc85xx: Add support for the MPC8536 Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 23/24] mpc85xx: Add support for the MPC8536DS reference board Kumar Gala
2008-08-27 6:10 ` [U-Boot] [PATCH 24/24] mpc85xx: remove redudant code with lib_ppc/interrupts.c Kumar Gala
2008-10-18 18:07 ` [U-Boot] [PATCH 19/24] FSL DDR: Convert STXSSA to new DDR code Wolfgang Denk
2008-10-19 18:19 ` Kumar Gala
2008-08-27 22:37 ` [U-Boot] [PATCH 01/24] FSL DDR: Remove duplicate setting of cs0_bnds register on 86xx Wolfgang Denk
2008-08-27 22:45 ` Jon Loeliger
2008-08-27 23:17 ` Kumar Gala
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1219817457-7432-9-git-send-email-galak@kernel.crashing.org \
--to=galak@kernel.crashing.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.