mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	FSL DDR: Convert MPC8540ADS to new DDR code.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
		| @@ -25,11 +25,14 @@ include $(TOPDIR)/config.mk | |||||||
|  |  | ||||||
| LIB	= $(obj)lib$(BOARD).a | LIB	= $(obj)lib$(BOARD).a | ||||||
|  |  | ||||||
| COBJS	:= $(BOARD).o law.o tlb.o | COBJS-y	+= $(BOARD).o | ||||||
|  | COBJS-y	+= ddr.o | ||||||
|  | COBJS-y	+= law.o | ||||||
|  | COBJS-y	+= tlb.o | ||||||
|  |  | ||||||
| SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | SRCS	:= $(SOBJS:.o=.S) $(COBJS-y:.o=.c) | ||||||
| OBJS	:= $(addprefix $(obj),$(COBJS)) | OBJS	:= $(addprefix $(obj),$(COBJS-y)) | ||||||
| SOBJS	:= $(addprefix $(obj),$(SOBJS)) | SOBJS	:= $(addprefix $(obj),$(SOBJS-y)) | ||||||
|  |  | ||||||
| $(LIB):	$(obj).depend $(OBJS) $(SOBJS) | $(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
| 	$(AR) $(ARFLAGS) $@ $(OBJS) | 	$(AR) $(ARFLAGS) $@ $(OBJS) | ||||||
|   | |||||||
							
								
								
									
										70
									
								
								board/freescale/mpc8540ads/ddr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								board/freescale/mpc8540ads/ddr.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | /* | ||||||
|  |  * 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(ddr1_spd_eeprom_t *spd, unsigned char i2c_address) | ||||||
|  | { | ||||||
|  | 	i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | unsigned int | ||||||
|  | fsl_ddr_get_mem_data_rate(void) | ||||||
|  | { | ||||||
|  | 	return get_ddr_freq(0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void | ||||||
|  | fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd, | ||||||
|  | 		      unsigned int ctrl_num) | ||||||
|  | { | ||||||
|  | 	unsigned int i; | ||||||
|  | 	unsigned int i2c_address = 0; | ||||||
|  |  | ||||||
|  | 	for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) { | ||||||
|  | 		if (ctrl_num == 0 && i == 0) { | ||||||
|  | 			i2c_address = SPD_EEPROM_ADDRESS; | ||||||
|  | 		} | ||||||
|  | 		get_spd(&(ctrl_dimms_spd[i]), i2c_address); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num) | ||||||
|  | { | ||||||
|  | 	/* | ||||||
|  | 	 * Factors to consider for CPO: | ||||||
|  | 	 *	- frequency | ||||||
|  | 	 *	- ddr1 vs. ddr2 | ||||||
|  | 	 */ | ||||||
|  | 	popts->cpo_override = 0; | ||||||
|  |  | ||||||
|  | 	/* | ||||||
|  | 	 * 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; | ||||||
|  | } | ||||||
| @@ -1,4 +1,4 @@ | |||||||
|  /* | /* | ||||||
|  * Copyright 2004 Freescale Semiconductor. |  * Copyright 2004 Freescale Semiconductor. | ||||||
|  * (C) Copyright 2002,2003, Motorola Inc. |  * (C) Copyright 2002,2003, Motorola Inc. | ||||||
|  * Xianghua Xiao, (X.Xiao@motorola.com) |  * Xianghua Xiao, (X.Xiao@motorola.com) | ||||||
| @@ -28,8 +28,9 @@ | |||||||
| #include <common.h> | #include <common.h> | ||||||
| #include <pci.h> | #include <pci.h> | ||||||
| #include <asm/processor.h> | #include <asm/processor.h> | ||||||
|  | #include <asm/mmu.h> | ||||||
| #include <asm/immap_85xx.h> | #include <asm/immap_85xx.h> | ||||||
| #include <spd_sdram.h> | #include <asm/fsl_ddr_sdram.h> | ||||||
| #include <libfdt.h> | #include <libfdt.h> | ||||||
| #include <fdt_support.h> | #include <fdt_support.h> | ||||||
|  |  | ||||||
| @@ -82,10 +83,13 @@ initdram(int board_type) | |||||||
| 	} | 	} | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined(CONFIG_SPD_EEPROM) | #ifdef CONFIG_SPD_EEPROM | ||||||
| 	dram_size = spd_sdram (); | 	dram_size = fsl_ddr_sdram(); | ||||||
|  | 	dram_size = setup_ddr_tlbs(dram_size / 0x100000); | ||||||
|  |  | ||||||
|  | 	dram_size *= 0x100000; | ||||||
| #else | #else | ||||||
| 	dram_size = fixed_sdram (); | 	dram_size = fixed_sdram(); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) | #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) | ||||||
|   | |||||||
| @@ -48,13 +48,6 @@ | |||||||
| #define CONFIG_PCI | #define CONFIG_PCI | ||||||
| #define CONFIG_TSEC_ENET		/* tsec ethernet support */ | #define CONFIG_TSEC_ENET		/* tsec ethernet support */ | ||||||
| #define CONFIG_ENV_OVERWRITE | #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_MEM_INIT_VALUE		0xDeadBeef |  | ||||||
|  |  | ||||||
| #define CONFIG_FSL_LAW		1	/* Use common FSL init code */ | #define CONFIG_FSL_LAW		1	/* Use common FSL init code */ | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -100,33 +93,33 @@ | |||||||
| #define CFG_CCSRBAR_PHYS	CFG_CCSRBAR	/* physical addr of CCSRBAR */ | #define CFG_CCSRBAR_PHYS	CFG_CCSRBAR	/* physical addr of CCSRBAR */ | ||||||
| #define CFG_IMMR		CFG_CCSRBAR	/* PQII uses CFG_IMMR */ | #define CFG_IMMR		CFG_CCSRBAR	/* PQII uses CFG_IMMR */ | ||||||
|  |  | ||||||
|  | /* DDR Setup */ | ||||||
|  | #define CONFIG_FSL_DDR1 | ||||||
|  | #define CONFIG_SPD_EEPROM		/* Use SPD EEPROM for DDR setup*/ | ||||||
|  | #define CONFIG_DDR_SPD | ||||||
|  | #undef CONFIG_FSL_DDR_INTERACTIVE | ||||||
|  |  | ||||||
|  | #define CONFIG_MEM_INIT_VALUE		0xDeadBeef | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * DDR Setup |  | ||||||
|  */ |  | ||||||
| #define CFG_DDR_SDRAM_BASE	0x00000000	/* DDR is system memory*/ | #define CFG_DDR_SDRAM_BASE	0x00000000	/* DDR is system memory*/ | ||||||
| #define CFG_SDRAM_BASE		CFG_DDR_SDRAM_BASE | #define CFG_SDRAM_BASE		CFG_DDR_SDRAM_BASE | ||||||
|  |  | ||||||
| #if defined(CONFIG_SPD_EEPROM) | #define CONFIG_NUM_DDR_CONTROLLERS	1 | ||||||
|     /* | #define CONFIG_DIMM_SLOTS_PER_CTLR	1 | ||||||
|      * Determine DDR configuration from I2C interface. | #define CONFIG_CHIP_SELECTS_PER_CTRL	(2 * CONFIG_DIMM_SLOTS_PER_CTLR) | ||||||
|      */ |  | ||||||
|     #define SPD_EEPROM_ADDRESS	0x51		/* DDR DIMM */ |  | ||||||
|  |  | ||||||
| #else | /* I2C addresses of SPD EEPROMs */ | ||||||
|     /* | #define SPD_EEPROM_ADDRESS	0x51	/* CTLR 0 DIMM 0 */ | ||||||
|      * Manually set up DDR parameters |  | ||||||
|      */ |  | ||||||
|     #define CFG_SDRAM_SIZE	128		/* DDR is 128MB */ |  | ||||||
|     #define CFG_DDR_CS0_BNDS	0x00000007	/* 0-128MB */ |  | ||||||
|     #define CFG_DDR_CS0_CONFIG	0x80000002 |  | ||||||
|     #define CFG_DDR_TIMING_1	0x37344321 |  | ||||||
|     #define CFG_DDR_TIMING_2	0x00000800	/* P9-45,may need tuning */ |  | ||||||
|     #define CFG_DDR_CONTROL	0xc2000000	/* unbuffered,no DYN_PWR */ |  | ||||||
|     #define CFG_DDR_MODE	0x00000062	/* DLL,normal,seq,4/2.5 */ |  | ||||||
|     #define CFG_DDR_INTERVAL	0x05200100	/* autocharge,no open page */ |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  | /* These are used when DDR doesn't use SPD. */ | ||||||
|  | #define CFG_SDRAM_SIZE	128		/* DDR is 128MB */ | ||||||
|  | #define CFG_DDR_CS0_BNDS	0x00000007	/* 0-128MB */ | ||||||
|  | #define CFG_DDR_CS0_CONFIG	0x80000002 | ||||||
|  | #define CFG_DDR_TIMING_1	0x37344321 | ||||||
|  | #define CFG_DDR_TIMING_2	0x00000800	/* P9-45,may need tuning */ | ||||||
|  | #define CFG_DDR_CONTROL		0xc2000000	/* unbuffered,no DYN_PWR */ | ||||||
|  | #define CFG_DDR_MODE		0x00000062	/* DLL,normal,seq,4/2.5 */ | ||||||
|  | #define CFG_DDR_INTERVAL	0x05200100	/* autocharge,no open page */ | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * SDRAM on the Local Bus |  * SDRAM on the Local Bus | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user