[U-Boot] [PATCH v2 01/10] ram: Add driver for MPC83xx

Mario Six mario.six at gdsys.cc
Fri May 4 08:04:07 UTC 2018


Hi Simon,

On Thu, May 3, 2018 at 9:01 PM, Simon Glass <sjg at chromium.org> wrote:
> Hi Mario,
>
> On 27 April 2018 at 06:52, Mario Six <mario.six at gdsys.cc> wrote:
>> Add a RAM driver for the MPC83xx architecture.
>>
>> Signed-off-by: Mario Six <mario.six at gdsys.cc>
>>
>> ---
>>
>> v1 -> v2:
>> No changes
>>
>> ---
>>  arch/powerpc/cpu/mpc83xx/spd_sdram.c       |   4 +
>>  drivers/ram/Kconfig                        |   8 +
>>  drivers/ram/Makefile                       |   1 +
>>  drivers/ram/mpc83xx_sdram.c                | 948 +++++++++++++++++++++++++++++
>>  include/dt-bindings/memory/mpc83xx-sdram.h | 143 +++++
>>  include/mpc83xx.h                          |   6 +
>>  6 files changed, 1110 insertions(+)
>>  create mode 100644 drivers/ram/mpc83xx_sdram.c
>>  create mode 100644 include/dt-bindings/memory/mpc83xx-sdram.h
>>
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
>
> Question below
>
> [..]
>
>> new file mode 100644
>> index 0000000000..1a73f7b3da
>> --- /dev/null
>> +++ b/drivers/ram/mpc83xx_sdram.c
>> @@ -0,0 +1,948 @@
>> +#define DEBUG
>> +
>> +#include <common.h>
>> +#include <dm.h>
>> +#include <ram.h>
>> +#include <asm/io.h>
>> +#include <dt-bindings/memory/mpc83xx-sdram.h>
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +#define CSCONFIG_ENABLE                        0x80000000
>> +
>> +#define BANK_BITS_2            0x00000000
>> +#define BANK_BITS_3            0x00004000
>> +
>> +#define ROW_BITS_12            0x00000000
>> +#define ROW_BITS_13            0x00000100
>> +#define ROW_BITS_14            0x00000200
>> +
>> +#define COL_BITS_8             0x00000000
>> +#define COL_BITS_9             0x00000001
>> +#define COL_BITS_10            0x00000002
>> +#define COL_BITS_11            0x00000003
>> +
>> +#define TIMING_CFG3_EXT_REFREC_SHIFT   16
>> +
>> +#define TIMING_CFG0_RWT_SHIFT          30
>> +#define TIMING_CFG0_WRT_SHIFT          28
>> +#define TIMING_CFG0_RRT_SHIFT          26
>> +#define TIMING_CFG0_WWT_SHIFT          24
>> +#define TIMING_CFG0_ACT_PD_EXIT_SHIFT  20
>> +#define TIMING_CFG0_PRE_PD_EXIT_SHIFT  16
>> +#define TIMING_CFG0_ODT_PD_EXIT_SHIFT  8
>> +#define TIMING_CFG0_MRS_CYC_SHIFT      0
>> +
>> +#define TIMING_CFG1_PRETOACT_SHIFT     28
>> +#define TIMING_CFG1_ACTTOPRE_SHIFT     24
>> +#define TIMING_CFG1_ACTTORW_SHIFT      20
>> +#define TIMING_CFG1_CASLAT_SHIFT       16
>> +#define TIMING_CFG1_REFREC_SHIFT       12
>> +#define TIMING_CFG1_WRREC_SHIFT                8
>> +#define TIMING_CFG1_ACTTOACT_SHIFT     4
>> +#define TIMING_CFG1_WRTORD_SHIFT       0
>> +
>> +#define TIMING_CFG2_CPO_SHIFT          23
>> +#define TIMING_CFG2_WR_DATA_DELAY_SHIFT        10
>> +#define TIMING_CFG2_ADD_LAT_SHIFT      28
>> +#define TIMING_CFG2_WR_LAT_DELAY_SHIFT 19
>> +#define TIMING_CFG2_RD_TO_PRE_SHIFT    13
>> +#define TIMING_CFG2_CKE_PLS_SHIFT      6
>> +#define TIMING_CFG2_FOUR_ACT_SHIFT     0
>> +
>> +#define SDRAM_CFG_SREN_SHIFT           (31 - 1)
>> +#define SDRAM_CFG_ECC_EN_SHIFT         (31 - 2)
>> +#define SDRAM_CFG_RD_EN_SHIFT          (31 - 3)
>> +#define SDRAM_CFG_SDRAM_TYPE_SHIFT     (31 - 7)
>> +#define SDRAM_CFG_DYN_PWR_SHIFT                (31 - 10)
>> +#define SDRAM_CFG_DBW_SHIFT            (31 - 12)
>> +#define SDRAM_CFG_NCAP_SHIFT           (31 - 14)
>> +#define SDRAM_CFG_2T_EN_SHIFT          (31 - 16)
>> +#define SDRAM_CFG_BA_INTLV_CTL_SHIFT   (31 - 23)
>> +#define SDRAM_CFG_PCHB8_SHIFT          (31 - 27)
>> +#define SDRAM_CFG_HSE_SHIFT            (31 - 28)
>> +#define SDRAM_CFG_BI_SHIFT             (31 - 31)
>> +
>> +#define SDRAM_CFG2_FRC_SR_SHIFT        (31 - 0)
>> +#define SDRAM_CFG2_DLL_RST_DIS (31 - 2)
>> +#define SDRAM_CFG2_DQS_CFG     (31 - 5)
>> +#define SDRAM_CFG2_ODT_CFG     (31 - 10)
>> +#define SDRAM_CFG2_NUM_PR      (31 - 19)
>> +
>> +#define SDRAM_MODE_ESD_SHIFT           16
>> +#define SDRAM_MODE_SD_SHIFT            0
>> +
>> +#define SDRAM_MODE2_ESD2_SHIFT         (31 - 15)
>> +#define SDRAM_MODE2_ESD3_SHIFT         (31 - 31)
>> +
>> +#define SDRAM_INTERVAL_REFINT_SHIFT    16
>> +#define SDRAM_INTERVAL_BSTOPRE_SHIFT   0
>> +
>> +#define SDRAM_CFG_MEM_EN              0x80000000
>> +
>> +int dram_init(void)
>> +{
>> +       struct udevice *ram_ctrl;
>> +       int ret;
>> +
>> +       /* Current assumption: There is only one RAM controller */
>> +       ret = uclass_first_device_err(UCLASS_RAM, &ram_ctrl);
>> +
>> +       if (ret) {
>> +               debug("uclass_first_device_err failed: %d\n", ret);
>> +               return ret;
>> +       }
>> +
>> +       /* Set gd->ram_size? */
>> +
>> +       return 0;
>> +}
>> +
>> +phys_size_t get_effective_memsize(void)
>> +{
>> +#ifndef CONFIG_VERY_BIG_RAM
>
> Can this (and the #ifdefs below in this file) be converted to
>
> if (IS_ENABLED(CONFIG_...))
>
> instead, to increase build coverage?
>

Yes, no problem, will convert for v3.

By the way, is this a practice that's generally encouraged, or is it just
useful in special cases such as this one?

> Regards,
> Simon

Best regards,
Mario


More information about the U-Boot mailing list