diff options
| author | Prabhakar Kushwaha <prabhakar@freescale.com> | 2013-09-12 11:11:28 +0530 | 
|---|---|---|
| committer | York Sun <yorksun@freescale.com> | 2013-10-16 16:15:16 -0700 | 
| commit | 7d436078fe48d020eaee9416b5d4cd342dd106ab (patch) | |
| tree | f98b29e413abdfc9aa00c645cbf12605630dda91 /board/freescale/t1040qds/ddr.c | |
| parent | 0dd38a35f462b3ba28a49cda2dc80ef57eb52acd (diff) | |
| download | olio-uboot-2014.01-7d436078fe48d020eaee9416b5d4cd342dd106ab.tar.xz olio-uboot-2014.01-7d436078fe48d020eaee9416b5d4cd342dd106ab.zip | |
powerpc/t1040qds: Add T1040QDS board
T1040QDS is a high-performance computing evaluation, development and
test platform supporting the T1040 QorIQ Power Architecture™ processor.
 T1040QDS board Overview
 -----------------------
 - Four e5500 cores, each with a private 256 KB L2 cache
 - 256 KB shared L3 CoreNet platform cache (CPC)
 - Interconnect CoreNet platform
 - 32-/64-bit DDR3L/DDR4 SDRAM memory controller with ECC and interleaving
   support
 - Data Path Acceleration Architecture (DPAA) incorporating acceleration
 for the following functions:
    -  Packet parsing, classification, and distribution
    -  Queue management for scheduling, packet sequencing, and congestion
    	management
    -  Cryptography Acceleration
    - RegEx Pattern Matching Acceleration
    - IEEE Std 1588 support
    - Hardware buffer management for buffer allocation and deallocation
 - Ethernet interfaces
    - Integrated 8-port Gigabit Ethernet switch
    - Four 1 Gbps Ethernet controllers
 - SERDES Connections, 8 lanes supporting:
      — PCI Express: supporting Gen 1 and Gen 2;
      — SGMII
      — QSGMII
      — SATA 2.0
      — Aurora debug with dedicated connectors
 - DDR Controller 32-/64-bit DDR3L/DDR4 SDRAM memory controller with ECC and
   Interleaving
 -IFC/Local Bus
     - NAND flash: 8-bit, async, up to 2GB.
     - NOR: 8-bit or 16-bit, non-multiplexed, up to 512MB
     - GASIC: Simple (minimal) target within Qixis FPGA
     - PromJET rapid memory download support
 - Ethernet
     - Two on-board RGMII 10/100/1G ethernet ports.
     - PHY #0 remains powered up during deep-sleep
 - QIXIS System Logic FPGA
 - Clocks
     - System and DDR clock (SYSCLK, “DDRCLK”)
     - SERDES clocks
 - Power Supplies
 - Video
     - DIU supports video at up to 1280x1024x32bpp
 - USB
     - Supports two USB 2.0 ports with integrated PHYs
     — Two type A ports with 5V@1.5A per port.
     — Second port can be converted to OTG mini-AB
 - SDHC
     - SDHC port connects directly to an adapter card slot, featuring:
     - Supporting SD slots for: SD, SDHC (1x, 4x, 8x) and/or MMC
     — Supporting eMMC memory devices
 - SPI
    -  On-board support of 3 different devices and sizes
 - Other IO
    - Two Serial ports
    - ProfiBus port
    - Four I2C ports
Signed-off-by: Poonam Aggrwal <poonam.aggrwal@freescale.com>
Signed-off-by: Priyanka Jain <Priyanka.Jain@freescale.com>
Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
[York Sun: fix conflict in boards.cfg]
Acked-by-by: York Sun <yorksun@freescale.com>
Diffstat (limited to 'board/freescale/t1040qds/ddr.c')
| -rw-r--r-- | board/freescale/t1040qds/ddr.c | 117 | 
1 files changed, 117 insertions, 0 deletions
| diff --git a/board/freescale/t1040qds/ddr.c b/board/freescale/t1040qds/ddr.c new file mode 100644 index 000000000..4fd17da16 --- /dev/null +++ b/board/freescale/t1040qds/ddr.c @@ -0,0 +1,117 @@ +/* + * Copyright 2013 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <i2c.h> +#include <hwconfig.h> +#include <asm/mmu.h> +#include <asm/fsl_ddr_sdram.h> +#include <asm/fsl_ddr_dimm_params.h> +#include <asm/fsl_law.h> +#include "ddr.h" + +DECLARE_GLOBAL_DATA_PTR; + +void fsl_ddr_board_options(memctl_options_t *popts, +				dimm_params_t *pdimm, +				unsigned int ctrl_num) +{ +	const struct board_specific_parameters *pbsp, *pbsp_highest = NULL; +	ulong ddr_freq; + +	if (ctrl_num > 2) { +		printf("Not supported controller number %d\n", ctrl_num); +		return; +	} +	if (!pdimm->n_ranks) +		return; + +	pbsp = udimms[0]; + +	/* Get clk_adjust, cpo, write_data_delay,2t, according to the board ddr +	 * freqency and n_banks specified in board_specific_parameters table. +	 */ +	ddr_freq = get_ddr_freq(0) / 1000000; +	while (pbsp->datarate_mhz_high) { +		if (pbsp->n_ranks == pdimm->n_ranks && +		    (pdimm->rank_density >> 30) >= pbsp->rank_gb) { +			if (ddr_freq <= pbsp->datarate_mhz_high) { +				popts->cpo_override = pbsp->cpo; +				popts->write_data_delay = +					pbsp->write_data_delay; +				popts->clk_adjust = pbsp->clk_adjust; +				popts->wrlvl_start = pbsp->wrlvl_start; +				popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2; +				popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3; +				popts->twot_en = pbsp->force_2t; +				goto found; +			} +			pbsp_highest = pbsp; +		} +		pbsp++; +	} + +	if (pbsp_highest) { +		printf("Error: board specific timing not found\n"); +		printf("for data rate %lu MT/s\n", ddr_freq); +		printf("Trying to use the highest speed (%u) parameters\n", +		       pbsp_highest->datarate_mhz_high); +		popts->cpo_override = pbsp_highest->cpo; +		popts->write_data_delay = pbsp_highest->write_data_delay; +		popts->clk_adjust = pbsp_highest->clk_adjust; +		popts->wrlvl_start = pbsp_highest->wrlvl_start; +		popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2; +		popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3; +		popts->twot_en = pbsp_highest->force_2t; +	} else { +		panic("DIMM is not supported by this board"); +	} +found: +	debug("Found timing match: n_ranks %d, data rate %d, rank_gb %d\n" +		"\tclk_adjust %d, wrlvl_start %d, wrlvl_ctrl_2 0x%x, " +		"wrlvl_ctrl_3 0x%x\n", +		pbsp->n_ranks, pbsp->datarate_mhz_high, pbsp->rank_gb, +		pbsp->clk_adjust, pbsp->wrlvl_start, pbsp->wrlvl_ctl_2, +		pbsp->wrlvl_ctl_3); + +	/* +	 * Factors to consider for half-strength driver enable: +	 *	- number of DIMMs installed +	 */ +	popts->half_strength_driver_enable = 0; +	/* +	 * Write leveling override +	 */ +	popts->wrlvl_override = 1; +	popts->wrlvl_sample = 0xf; + +	/* +	 * rtt and rtt_wr override +	 */ +	popts->rtt_override = 0; + +	/* Enable ZQ calibration */ +	popts->zq_en = 1; + +	/* DHC_EN =1, ODT = 75 Ohm */ +	popts->ddr_cdr1 = DDR_CDR1_DHC_EN | DDR_CDR1_ODT(DDR_CDR_ODT_75ohm); +	popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_75ohm); +} + +phys_size_t initdram(int board_type) +{ +	phys_size_t dram_size; + +	puts("Initializing....using SPD\n"); + +	dram_size = fsl_ddr_sdram(); + +	dram_size = setup_ddr_tlbs(dram_size / 0x100000); +	dram_size *= 0x100000; + +	puts("    DDR: "); +	return dram_size; +} |