mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
driver/ddr: Add 256 byte interleaving support
Freescale LayerScape SoCs support controller interleaving on 256 byte size. This interleaving is mandoratory. Signed-off-by: York Sun <yorksun@freescale.com>
This commit is contained in:
parent
6b9e309a8a
commit
6b1e1254f3
6 changed files with 26 additions and 2 deletions
5
README
5
README
|
@ -497,6 +497,11 @@ The following options need to be configured:
|
|||
same as CONFIG_SYS_DDR_SDRAM_BASE for all Power SoCs. But
|
||||
it could be different for ARM SoCs.
|
||||
|
||||
CONFIG_SYS_FSL_DDR_INTLV_256B
|
||||
DDR controller interleaving on 256-byte. This is a special
|
||||
interleaving mode, handled by Dickens for Freescale layerscape
|
||||
SoCs with ARM core.
|
||||
|
||||
- Intel Monahans options:
|
||||
CONFIG_SYS_MONAHANS_RUN_MODE_OSC_RATIO
|
||||
|
||||
|
|
|
@ -145,6 +145,7 @@ static void set_csn_config(int dimm_number, int i, fsl_ddr_cfg_regs_t *ddr,
|
|||
if (!popts->memctl_interleaving)
|
||||
break;
|
||||
switch (popts->memctl_interleaving_mode) {
|
||||
case FSL_DDR_256B_INTERLEAVING:
|
||||
case FSL_DDR_CACHE_LINE_INTERLEAVING:
|
||||
case FSL_DDR_PAGE_INTERLEAVING:
|
||||
case FSL_DDR_BANK_INTERLEAVING:
|
||||
|
|
|
@ -291,6 +291,7 @@ static unsigned long long __step_assign_addresses(fsl_ddr_info_t *pinfo,
|
|||
for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) {
|
||||
if (pinfo->memctl_opts[i].memctl_interleaving) {
|
||||
switch (pinfo->memctl_opts[i].memctl_interleaving_mode) {
|
||||
case FSL_DDR_256B_INTERLEAVING:
|
||||
case FSL_DDR_CACHE_LINE_INTERLEAVING:
|
||||
case FSL_DDR_PAGE_INTERLEAVING:
|
||||
case FSL_DDR_BANK_INTERLEAVING:
|
||||
|
|
|
@ -818,21 +818,33 @@ unsigned int populate_memctl_options(int all_dimms_registered,
|
|||
* If memory controller interleaving is enabled, then the data
|
||||
* bus widths must be programmed identically for all memory controllers.
|
||||
*
|
||||
* XXX: Attempt to set all controllers to the same chip select
|
||||
* Attempt to set all controllers to the same chip select
|
||||
* interleaving mode. It will do a best effort to get the
|
||||
* requested ranks interleaved together such that the result
|
||||
* should be a subset of the requested configuration.
|
||||
*
|
||||
* if CONFIG_SYS_FSL_DDR_INTLV_256B is defined, mandatory interleaving
|
||||
* with 256 Byte is enabled.
|
||||
*/
|
||||
#if (CONFIG_NUM_DDR_CONTROLLERS > 1)
|
||||
if (!hwconfig_sub_f("fsl_ddr", "ctlr_intlv", buf))
|
||||
#ifdef CONFIG_SYS_FSL_DDR_INTLV_256B
|
||||
;
|
||||
#else
|
||||
goto done;
|
||||
|
||||
#endif
|
||||
if (pdimm[0].n_ranks == 0) {
|
||||
printf("There is no rank on CS0 for controller %d.\n", ctrl_num);
|
||||
popts->memctl_interleaving = 0;
|
||||
goto done;
|
||||
}
|
||||
popts->memctl_interleaving = 1;
|
||||
#ifdef CONFIG_SYS_FSL_DDR_INTLV_256B
|
||||
popts->memctl_interleaving_mode = FSL_DDR_256B_INTERLEAVING;
|
||||
popts->memctl_interleaving = 1;
|
||||
debug("256 Byte interleaving\n");
|
||||
goto done;
|
||||
#endif
|
||||
/*
|
||||
* test null first. if CONFIG_HWCONFIG is not defined
|
||||
* hwconfig_arg_cmp returns non-zero
|
||||
|
@ -1085,6 +1097,7 @@ void check_interleaving_options(fsl_ddr_info_t *pinfo)
|
|||
"Memory controller interleaving disabled.\n");
|
||||
} else {
|
||||
switch (check_intlv) {
|
||||
case FSL_DDR_256B_INTERLEAVING:
|
||||
case FSL_DDR_CACHE_LINE_INTERLEAVING:
|
||||
case FSL_DDR_PAGE_INTERLEAVING:
|
||||
case FSL_DDR_BANK_INTERLEAVING:
|
||||
|
|
|
@ -228,6 +228,9 @@ void board_add_ram_info(int use_default)
|
|||
puts(" DDR Controller Interleaving Mode: ");
|
||||
|
||||
switch ((cs0_config >> 24) & 0xf) {
|
||||
case FSL_DDR_256B_INTERLEAVING:
|
||||
puts("256B");
|
||||
break;
|
||||
case FSL_DDR_CACHE_LINE_INTERLEAVING:
|
||||
puts("cache line");
|
||||
break;
|
||||
|
|
|
@ -76,6 +76,7 @@ typedef ddr3_spd_eeprom_t generic_spd_eeprom_t;
|
|||
#define FSL_DDR_PAGE_INTERLEAVING 0x1
|
||||
#define FSL_DDR_BANK_INTERLEAVING 0x2
|
||||
#define FSL_DDR_SUPERBANK_INTERLEAVING 0x3
|
||||
#define FSL_DDR_256B_INTERLEAVING 0x8
|
||||
#define FSL_DDR_3WAY_1KB_INTERLEAVING 0xA
|
||||
#define FSL_DDR_3WAY_4KB_INTERLEAVING 0xC
|
||||
#define FSL_DDR_3WAY_8KB_INTERLEAVING 0xD
|
||||
|
|
Loading…
Reference in a new issue