[PATCH] ddr: fsl: Make bank_addr_bits reflect actual bits
Peng Fan
peng.fan at oss.nxp.com
Tue Sep 6 07:28:07 CEST 2022
On 8/31/2022 5:01 AM, Sean Anderson wrote:
> In both the Freescale DDR controller and the SPD spec, bank address bits
> are stored as the number of bank address bits minus 2. For example, if a
> chip had 8 banks (3 total bank address bits), the value of
> bank_addr_bits would be 1. This is rather surprising for users
> configuring their memory manually, since they can't set bank_addr_bits
> to the actual number of bank address bits. Rectify this.
>
> There is at least one example of this kind of mistake already, in
> board/freescale/t102xrdb/ddr.c. The documented MT40A512M8HX has two bank
> address bits, but bank_addr_bits was set to 2, implying 4 bank address
> bits. Such a value is reserved in BA_BITS_CS, but I suspect the
> controller simply ignores the top bit, making this kind of mistake
> harmless, if misleading.
>
> Fixes: e8a7f1c32b5 ("powerpc/t1023rdb: Add T1023 RDB board support")
> Signed-off-by: Sean Anderson <sean.anderson at seco.com>
In tag:
https://source.denx.de/u-boot/custodians/u-boot-fsl-qoriq/-/tags/fsl-qoriq-2022-9-6
Waiting CI results.
Regards,
Peng.
> ---
>
> board/freescale/ls1043ardb/ddr.c | 2 +-
> drivers/ddr/fsl/ctrl_regs.c | 2 +-
> drivers/ddr/fsl/ddr4_dimm_params.c | 2 +-
> 3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/board/freescale/ls1043ardb/ddr.c b/board/freescale/ls1043ardb/ddr.c
> index 08b43ff5e4c..4d2fce38412 100644
> --- a/board/freescale/ls1043ardb/ddr.c
> +++ b/board/freescale/ls1043ardb/ddr.c
> @@ -114,7 +114,7 @@ dimm_params_t ddr_raw_timing = {
> .mirrored_dimm = 0,
> .n_row_addr = 15,
> .n_col_addr = 10,
> - .bank_addr_bits = 0,
> + .bank_addr_bits = 2,
> .bank_group_bits = 2,
> .edc_config = 0,
> .burst_lengths_bitmask = 0x0c,
> diff --git a/drivers/ddr/fsl/ctrl_regs.c b/drivers/ddr/fsl/ctrl_regs.c
> index b5122d1a1c3..0b0b4e5cb7e 100644
> --- a/drivers/ddr/fsl/ctrl_regs.c
> +++ b/drivers/ddr/fsl/ctrl_regs.c
> @@ -214,7 +214,7 @@ static void set_csn_config(int dimm_number, int i, fsl_ddr_cfg_regs_t *ddr,
> odt_rd_cfg = popts->cs_local_opts[i].odt_rd_cfg;
> odt_wr_cfg = popts->cs_local_opts[i].odt_wr_cfg;
> #ifdef CONFIG_SYS_FSL_DDR4
> - ba_bits_cs_n = dimm_params[dimm_number].bank_addr_bits;
> + ba_bits_cs_n = dimm_params[dimm_number].bank_addr_bits - 2;
> bg_bits_cs_n = dimm_params[dimm_number].bank_group_bits;
> #else
> n_banks_per_sdram_device
> diff --git a/drivers/ddr/fsl/ddr4_dimm_params.c b/drivers/ddr/fsl/ddr4_dimm_params.c
> index e2bdc12ef2c..ea791622628 100644
> --- a/drivers/ddr/fsl/ddr4_dimm_params.c
> +++ b/drivers/ddr/fsl/ddr4_dimm_params.c
> @@ -246,7 +246,7 @@ unsigned int ddr_compute_dimm_parameters(const unsigned int ctrl_num,
> /* SDRAM device parameters */
> pdimm->n_row_addr = ((spd->addressing >> 3) & 0x7) + 12;
> pdimm->n_col_addr = (spd->addressing & 0x7) + 9;
> - pdimm->bank_addr_bits = (spd->density_banks >> 4) & 0x3;
> + pdimm->bank_addr_bits = ((spd->density_banks >> 4) & 0x3) + 2;
> pdimm->bank_group_bits = (spd->density_banks >> 6) & 0x3;
>
> /*
More information about the U-Boot
mailing list