From patchwork Wed May 21 09:47:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4055 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 3AE8D3F378 for ; Wed, 21 May 2025 11:47:41 +0200 (CEST) Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-601a4d2913fsf4494855a12.0 for ; Wed, 21 May 2025 02:47:41 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747820861; cv=pass; d=google.com; s=arc-20240605; b=brF/ONcQcsXN+ILTJ6vf6y25h4g9/ghkNhu8eyR9ZZp6USrzlq0RWaP78czGQvBwmN YgaSXpiFWnl0duOb/SV+8IhR6AdD6F2K/YnYq+Po32vC0ze8r0Wbd8nl3VQ9X8B6iTE0 LX9WRfw/RJj3yENjULelX+HsgYL4s6x8c04js+M1RyyyDu4wxAJyxEg13xcx+lbfQZ71 v2JN9F81yGzwMhThvZiAa9K24F3vaLgudSXu75WhTmd+DuadHSG9dMVTJ6pCbGaNJHl+ 8VXemI2s95ufYf38GKpBGOx8ahVW1tTYxoI503/u/JsG7jGvt+68xR0Cg6y48XUfRs7n I/2A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:message-id:date:subject:cc:to :from:dkim-signature; bh=K0cjpjKimqpxap7tm/JvTy9Bw8pysBDQb36VcwsMAok=; fh=rS9tRYzIiGF0neOrcaCSU6WUO1JvnUFmaczxqr/jKaM=; b=QP13IEcg+cyr6h77fIqai+FM3wPkKXCKjYldEwRFxRObiTUcpezCRmujUmFU8exPxL re8vkgDWpv7T7HXFYlyLMdpX+MmJfxQxxPG0yzVY4N2MU/+fTjgeLZnWdJuKxt5KS8qF PP95giPZGOlFBQKrE1e4xpqBG6T5xdbehA+B3a1qA7RtLDTihX49blDtMh9On+ze8lPF VjUXzKXzBcqpM5cWNWAvTYYMDN9OC632jK6C0SqajO9b+rboLXe1CTPUrzeN9jJZzq6X 5EFJqkJkKQOmasiTE71HWZEp6mWtfwB77fZrcxqUiFjwAOH5tcZMymjzd7r3MZH/NR3i sXlw==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=XfpgAwlZ; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1747820861; x=1748425661; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:message-id:date:subject:cc:to:from :from:to:cc:subject:date:message-id:reply-to; bh=K0cjpjKimqpxap7tm/JvTy9Bw8pysBDQb36VcwsMAok=; b=FyjwAYgFQAW3/yWDrLcyeHI7Alubfyyh2BD6RlgfwyCHBtgy7gu1CAqPeeE9X7d3Ir 0LPgqADg6gRvSlyGG65TH7DOiTD6J/d2LEO2KGIpUEAMimReJP3TmSE4gV5M95+SneR6 DniHQbRZJ4mU/L3FTtEBosg2sDR9LnCwqd/lI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747820861; x=1748425661; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :message-id:date:subject:cc:to:from:x-beenthere:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=K0cjpjKimqpxap7tm/JvTy9Bw8pysBDQb36VcwsMAok=; b=aqDvaDDEbqGytdm7X+t/Akcr/DXkq8YNRNdTWoJOmvq7dDXBkd+SFGynUDlOjsfbsq MnH8FSYYYRRja+v5di0XqBQB2FUL9mQYUMGuNecdQS+yR9ISyHLlTSHZ1PfjhM2IGiPM fHzs9nGvOJrn8N9+4SHwHlZDFkNwXoWopBvmo4ngShd2fuPrzAZFsjvoXhacq6Hi7fCV hZ7k2RpnB/WL/5KMU/8VMUkAooOrUFtWIQm/TqkFBQQnbczLVxDtIhl+syPkqVvR8gA7 VNqr1CSnip5MbPja81W3JQ0KX33tQkSzxgaBBD6FgtHfyyXYuEiDf0Ox0nU2bVXavEJk kEBQ== X-Forwarded-Encrypted: i=2; AJvYcCWs+3ME/hQiwaob4rLqYYoLJxUkkyatNnRwseS3eFSkuz/kXxYCsRF7KHpjVhvviFKStja4aMz/+lsdA2eP@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0Yxx/MrwCBeqmawXLGNwlrb4fuS2i3r2XwJMlyg/J4FktNW+gVYd 3bsFvliffq875qjE1Rr0cgAUlTa+fGP5raJclz0j0svWBWWIyy9qbDoz6arxRj9QxN8fDRnigDG ZbA== X-Google-Smtp-Source: AGHT+IE/xCpKUOGCrHT6TAAjg10Y2VWzR2rUa9xJLqC54JIO/Mic5BbNq36czsDLoeO9BcRe2KvBdA== X-Received: by 2002:a05:6402:1e89:b0:5fa:9222:e875 with SMTP id 4fb4d7f45d1cf-601140a16fcmr18307773a12.18.1747820860706; Wed, 21 May 2025 02:47:40 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBEAdo7NE0llG+kWrBN3CyUgE8juqZPClw6K7StVD8xEYA== Received: by 2002:a05:6402:2744:b0:5f4:8519:a63d with SMTP id 4fb4d7f45d1cf-60219e2f23cls212162a12.2.-pod-prod-06-eu; Wed, 21 May 2025 02:47:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV37VjFNl3LQrOC8pAZdJXZquitFxV4i6vaYnQ695NG3uzEjpzWQM+cS6sKOKmx2ChZTUqzZcDzp1ysJtTc@amarulasolutions.com X-Received: by 2002:a17:906:68f:b0:ad5:b251:17f8 with SMTP id a640c23a62f3a-ad5b2511921mr119866566b.41.1747820858451; Wed, 21 May 2025 02:47:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747820858; cv=none; d=google.com; s=arc-20240605; b=KWGwnMmedLg/MSMPqpuLcCzx90BuSG7RcYlYWfJtjzjqMfrRl5wFQPMcNkkUGFjFFm 73luUsbBdL2AxVKPLTrRzWVUwsUR5lv6VMEailq22WIUD5cgD+NLxy25NZWyFRqNZGak zLPNzdP84AOXrp631lP46M0bLTUIF9gni6rQlyN0T3r88IFkaS0KHsCRUl16uSmr6IpD 3yrAYjIm1Pvp0JlTLsp6K+RgTxb8mWl5CiiLXgmqCdKdDQ2bOtcue9u+4myvjUVnVoYC XJyzD/66qE9TJ6wPr73JeQVMxiMVh+rKTfG3MEwWFIMp/VsyyNuIdHbQyI9AKqzVOxqR LI8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=3une2V6O+TFBaqW3IKrvVv3z+OFvXFBRIvL2GNzhxTM=; fh=cLFEk9OOJfnNqdYhhXRJDgsDqOwzpJuANMiagSy8Lns=; b=hrNW5aPMEacaV/SVqeL/Cl+2wg4Rox4oLolXdSldYJR2wSy6FtTmmDelhAh3Gk3M/A VGwPmUIu0f/utX1uXu3vChQt/ySXl7w0TY5HziMKdmto5bS8lHWzbkkeixs0bcaRanu5 693aHIvppFIPRBTVZ6gUAe97sp48+mSBwpHmBNm0W8rigTIDjiTqWhW8mCZkQG4ly7nU BI7lBxw5Esqw3zKa2NqyHH1WAeMGyB4w1j6BGf5LRA7pVF/6XA66jZGwQU89GeydsrOZ 9kX05W5cfYEoQ8pIZ8jD/IDVAXcemWu8KgpU/tzZ5fXMK4XqwQQL/qCEgOmDA1DmZV36 TeTQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=XfpgAwlZ; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id a640c23a62f3a-ad52d373973sor654563866b.14.2025.05.21.02.47.38 for (Google Transport Security); Wed, 21 May 2025 02:47:38 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AJvYcCXqua57gk1slWkdGOlbETTZXcVCDRlvqZs6R71GKg9LXISyCRHi1vUEAWPqsBnNQOV9r+sPKXgWpbjJ8Pps@amarulasolutions.com X-Gm-Gg: ASbGnctd4Q8dksTxEj/nFAoOymOhbm0+Twf+TeVu/Y793T03RB41KKaietYfTyJtyCm knIrnn9+WTF0itJbofb8dy7yNno/3xu3GVXZsC17XxZ7saZa1Xa8kHLEAX2le2s2nEIBF7JBon+ h8vdp7hM3fgsOlogI5ipxOHwX0gMdHL6NdZZoqFAovQtiRYN1oH+QO964ReL5FpNHiaMYCK+F2h 9sbnhmXC+R1pduEO7Ob+QXjSH4WqiOfPVqUes5C5vhAKpnKGhMcpr4kAVE098vdsLzeFLAcM9rg ypnaFuTOAO+slebPAeVoH4nDaOHcMxELnAlS6WakHVet+KIizUoY6eXehaO/yr3cj2DnJb9u02Z k65r1+zjRfGeQ X-Received: by 2002:a17:906:9fc8:b0:ad5:b09:115e with SMTP id a640c23a62f3a-ad536b81936mr1679202566b.18.1747820857767; Wed, 21 May 2025 02:47:37 -0700 (PDT) Received: from localhost.localdomain ([2001:b07:6474:ebbf:cfc5:5070:d6f4:1d86]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad52d06b497sm863951166b.42.2025.05.21.02.47.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 May 2025 02:47:37 -0700 (PDT) From: Dario Binacchi To: u-boot@lists.denx.de Cc: michael@amarulasolutions.com, Simon Holesch , linux-amarula@amarulasolutions.com, Michael Bode , Dario Binacchi , Tom Rini , Wolfgang Birkner Subject: [PATCH v3 1/4] board: bsh: imx6ulz_smm_m2: Match SPL DDR settings to DCD table Date: Wed, 21 May 2025 11:47:29 +0200 Message-ID: <20250521094735.1037146-1-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=XfpgAwlZ; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Michael Trimarchi When using SPL on i.mx6 we frequently notice some DDR initialization mismatches between the SPL code and the non-SPL code. As the non-SPL code have been tested for long time and proves to be reliable, let's configure the DDR in the exact same way as the non-SPL case. The idea is simple: just use the DCD table and write directly to the DDR registers. Signed-off-by: Michael Trimarchi Signed-off-by: Dario Binacchi --- Changes in v3: - Drop changes on arch/arm/include/asm/arch-mx6/mx6-ddr.h and arch/arm/mach-imx/mx6/ddr.c files. They are not needed. Changes in v2: - Add 'static struct' globally in the module where the definitions can mabe static. - Use standard C comment style board/bsh/imx6ulz_smm_m2/spl.c | 260 +++++++++++++++++++++++++-------- 1 file changed, 198 insertions(+), 62 deletions(-) diff --git a/board/bsh/imx6ulz_smm_m2/spl.c b/board/bsh/imx6ulz_smm_m2/spl.c index 724841b57456..936e54662e98 100644 --- a/board/bsh/imx6ulz_smm_m2/spl.c +++ b/board/bsh/imx6ulz_smm_m2/spl.c @@ -31,70 +31,209 @@ static void setup_iomux_uart(void) imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads)); } -static struct mx6ul_iomux_grp_regs mx6_grp_ioregs = { - .grp_addds = 0x00000028, - .grp_ddrmode_ctl = 0x00020000, - .grp_b0ds = 0x00000028, - .grp_ctlds = 0x00000028, - .grp_b1ds = 0x00000028, - .grp_ddrpke = 0x00000000, - .grp_ddrmode = 0x00020000, - .grp_ddr_type = 0x000c0000, +struct dram_cfg_param { + unsigned int reg; + unsigned int val; }; -static struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = { - .dram_dqm0 = 0x00000028, - .dram_dqm1 = 0x00000028, - .dram_ras = 0x00000028, - .dram_cas = 0x00000028, - .dram_odt0 = 0x00000028, - .dram_odt1 = 0x00000028, - .dram_sdba2 = 0x00000000, - .dram_sdclk_0 = 0x00000028, - .dram_sdqs0 = 0x00000028, - .dram_sdqs1 = 0x00000028, - .dram_reset = 0x000c0028, +struct dram_timing_info { + const struct dram_cfg_param *ddrc_cfg; + unsigned int ddrc_cfg_num; }; -static struct mx6_mmdc_calibration mx6_mmcd_calib = { - .p0_mpwldectrl0 = 0x00000000, - .p0_mpwldectrl1 = 0x00100010, - .p0_mpdgctrl0 = 0x414c014c, - .p0_mpdgctrl1 = 0x00000000, - .p0_mprddlctl = 0x40403a42, - .p0_mpwrdlctl = 0x4040342e, -}; +static const struct dram_cfg_param ddr_ddrc_cfg_128mb[] = { + /* IOMUX */ + + /* DDR IO Type: */ + {0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */ + {0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */ + + /* Clock: */ + {0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */ + + /* Address: */ + {0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */ + {0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */ + {0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */ + + /* Control: */ + {0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */ + + {0x020e0270, 0x00000000}, /* + * IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured + * using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS + */ + + {0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */ + {0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */ + {0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */ + + /* Data Strobes: */ + {0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */ + {0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */ + {0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */ + + /* Data: */ + {0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */ + {0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */ + {0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */ + + {0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */ + {0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */ + + /* + * ============================================================================= + * DDR Controller Registers + * ============================================================================= + * Manufacturer:ISSI + * Device Part Number:IS43TR16640BL-125JBLI + * Clock Freq.: 400MHz + * Density per CS in Gb: 1 + * Chip Selects used:1 + * Number of Banks:8 + * Row address: 13 + * Column address: 10 + * Data bus width16 + * ============================================================================= + */ + + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR, set the Configuration request bit during + * MMDC set up + */ + + /* + * ============================================================================= + * Calibration setup + * ============================================================================= + */ + + {0x021b0800, 0xA1390003}, /* + * DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic + * HW ZQ calibration. + */ + + /* + * For target board, may need to run write leveling calibration to fine tune these + * settings. + */ + {0x021b080c, 0x00000000}, + + /* Read DQS Gating calibration */ + {0x021b083c, 0x41480148}, /* MPDGCTRL0 PHY0 */ + + /* Read calibration */ + {0x021b0848, 0x40403A3E}, /* MPRDDLCTL PHY0 */ + + /* Write calibration */ + {0x021b0850, 0x4040362E}, /* MPWRDLCTL PHY0 */ + + /* + * Read data bit delay: 3 is the recommended default value, although out of reset + * value is 0 + */ + {0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */ + {0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */ + + /* Write data bit delay: */ + {0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */ + {0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */ + + /* DQS&CLK Duty Cycle */ + {0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */ + + /* Complete calibration by forced measurement: */ + {0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */ -static struct mx6_ddr_sysinfo ddr_sysinfo = { - .dsize = 0, - .cs1_mirror = 0, - .cs_density = 32, - .ncs = 1, - .bi_on = 1, - .rtt_nom = 1, - .rtt_wr = 0, - .ralat = 5, - .walat = 1, - .mif3_mode = 3, - .rst_to_cke = 0x23, /* 33 cycles (JEDEC value for DDR3) - total of 500 us */ - .sde_to_rst = 0x10, /* 14 cycles (JEDEC value for DDR3) - total of 200 us */ - .refsel = 1, - .refr = 3, + /* + * ============================================================================= + * Calibration setup end + * ============================================================================= + */ + + /* MMDC init: */ + {0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */ + {0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */ + {0x021b000c, 0x2B2F52F3}, /* MMDC0_MDCFG0 */ + {0x021b0010, 0xB66D0B63}, /* MMDC0_MDCFG1 */ + {0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */ + + /* + * MDMISC: RALAT kept to the high level of 5. + * MDMISC: consider reducing RALAT if your 528MHz board design allow that. + * Lower RALAT benefits: + * a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3 + * b. Small performance improvement + */ + {0x021b0018, 0x00211740}, /* MMDC0_MDMISC */ + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR, set the Configuration request + * bit during MMDC set up + */ + {0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */ + {0x021b0030, 0x002F1023}, /* MMDC0_MDOR */ + {0x021b0040, 0x00000043}, /* Chan0 CS0_END */ + {0x021b0000, 0x82180000}, /* MMDC0_MDCTL */ + + {0x021b0890, 0x00400000}, /* MPPDCMPR2 */ + + /* Mode register writes */ + {0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */ + {0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */ + {0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */ + {0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */ + {0x021b001c, 0x04008040}, /* + * MMDC0_MDSCR, ZQ calibration command sent to + * device on CS0 + */ + {0x021b0020, 0x00007800}, /* MMDC0_MDREF */ + + {0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */ + + {0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */ + + {0x021b0404, 0x00011006}, /* + * MMDC0_MAPSR ADOPT power down enabled, + * MMDC will enter automatically to self-refresh + * while the number of idle cycle reached. + */ + + {0x021b001c, 0x00000000}, /* + * MMDC0_MDSCR, clear this register + * (especially the configuration bit as initialization + * is complete) + */ }; -static struct mx6_ddr3_cfg mem_ddr = { - .mem_speed = 1333, - .density = 2, - .width = 16, - .banks = 8, - .rowaddr = 13, - .coladdr = 10, - .pagesz = 2, - .trcd = 1350, - .trcmin = 4950, - .trasmin = 3600, +static struct dram_timing_info dram_timing_128mb = { + .ddrc_cfg = ddr_ddrc_cfg_128mb, + .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_128mb), }; +static void ddr_cfg_write(const struct dram_timing_info *dram_timing_info) +{ + int i; + const struct dram_cfg_param *ddrc_cfg = dram_timing_info->ddrc_cfg; + const int ddrc_cfg_num = dram_timing_info->ddrc_cfg_num; + + for (i = 0; i < ddrc_cfg_num; i++) { + debug("Writing 0x%x to register 0x%x\n", ddrc_cfg->val, + ddrc_cfg->reg); + writel(ddrc_cfg->val, ddrc_cfg->reg); + ddrc_cfg++; + } +} + +static void spl_dram_init(void) +{ + struct mmdc_p_regs *mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR; + + clrbits_le32(&mmdc0->mdctl, 1 << 31); /* clear SDE_0 */ + clrbits_le32(&mmdc0->mdctl, 1 << 30); /* clear SDE_1 */ + + ddr_cfg_write(&dram_timing_128mb); +} + static void ccgr_init(void) { struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; @@ -108,20 +247,17 @@ static void ccgr_init(void) writel(0xFFFFFFFF, &ccm->CCGR6); } -static void imx6ul_spl_dram_cfg(void) -{ - mx6ul_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs); - mx6_dram_cfg(&ddr_sysinfo, &mx6_mmcd_calib, &mem_ddr); -} - void board_init_f(ulong dummy) { ccgr_init(); + + /* DDR initialization */ + spl_dram_init(); + arch_cpu_init(); timer_init(); setup_iomux_uart(); preloader_console_init(); - imx6ul_spl_dram_cfg(); } void reset_cpu(void) From patchwork Wed May 21 09:47:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4056 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 4D8CF3F378 for ; Wed, 21 May 2025 11:47:42 +0200 (CEST) Received: by mail-ed1-f69.google.com with SMTP id 4fb4d7f45d1cf-5fcb3e44457sf6893315a12.2 for ; Wed, 21 May 2025 02:47:42 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747820862; cv=pass; d=google.com; s=arc-20240605; b=kZgCym8nS2B4m48xurTdO0+nbK5ajmHYJTkjrU0bwE+Aq82qA9xMlxOYaGCADuHxv1 wQwWuG8wToiX0NOVOlUMGGYc0RqOpgaMVeWPPp351iJD7lEo/ty7/gL/FWf+3UvEICul 4l53QksWVoF/MxXZZq0T9MY7CKStH8LPmMjOoaYVNMff0evjj0rk32bzZ/CCvmVtXPDG zM74MW5LBoDrfU8r/ejcY22LJx2CwumjJ5pWmlT0p1mcciCZp/Fu5quNf6WMcg2TosV7 MP2tUJxtbgGwKZEkx6Fh6/aYpZn/ZGoJa0pVXjfXHHtKQ0/E+f3YkXKQYTdHVffCEit4 elzA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=xVSGYE6iqrIAq+JpZWnBe3zXzREpF/cq1obpLzNiJZo=; fh=RgMpBnTM58+GksAF91AyzHveS4DvA1uJciEAO0SvPkA=; b=OFzlwmN3zq2BzjrbwxLHbDKiSiDiChxSAPow7KVhQ+469cqNOr8uCwYooqapDnPrD5 3cxRozJbxO87Ft6qYi/V6QVS6irnwNL+jXtmDVLSUNDh0KiqJEw18lBE5gyWRN5aup6f Ko6yOtsLOUfO+S61UcFG6XAvV/wJ780ozAYMyQVE+bJ0GYtm9M+MdfZk49DnoWItWKPP FNZ6lJvt9HBZ4X21olXHtYPNpA0xv4gV9m1kiMDgiDiXzESuMsotHegcu3S0r2juDrwT P9bpdARBVKifp2+dxwiFY9Hy1PfXstCJs6JdyczAiCAmJJiWASmq95KiMfxIt/3d2xMu /tlA==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=nHIGxAEP; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1747820862; x=1748425662; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=xVSGYE6iqrIAq+JpZWnBe3zXzREpF/cq1obpLzNiJZo=; b=FHB0uZVjCLKP36xGJo0c2TGciF9iWA9RkscZyAMyecp8Yfn465/Nnwj77Dlw99+HIe AKM+5pPpyl6SBS1uR0rqSbRtTKGRoOwKiU/t0iUjt/qLl+VgWiYVwbG1J7iL/nZyCLYl 1Nbu5c/3PJT5LK1hA0JMb++FLfdK9o+6sLs1k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747820862; x=1748425662; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=xVSGYE6iqrIAq+JpZWnBe3zXzREpF/cq1obpLzNiJZo=; b=tCWk4fWheS9OGEXLN7KxFQiMUrmrHiAAzVL7UdK7pV48x+Qg8WsBL5qUIIpK5L0gz/ gcMaZJBwp7jcK9N793llD+ZudGk5KD+D+RNGELVgUrzuVh/wy+RuGxK+MC5Car6gOtn4 kPl/k6ulQjVk5yNuIeVLacVR0d5adoWDsBj8LtHiHx83zLK47qtTQi9q17xJM3YCpFjc LBfHg5sLrAF137ts/MA4XL9Kt4WsPOg7X2U2/ibd1oWS1uFGzHsjh/tsPr8PyJJUoXgB trJEHfhiSrLotxzGzgJ0tGOPOr2E+mYMhU4F8Ca2dSpD0qQFHeAvevK12BlPKdoHYWTK edSg== X-Forwarded-Encrypted: i=2; AJvYcCUelc3c8WQEO6d+N4CJZtaZgRUbXwI1ya4mEmHF18Id3b48zBd2CcrnpVdevRrjWx7FcuKjVHFnKaHSoKq7@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YzSvc4lekZIl3t+vsrlfjUVgV9xZPyktWqdElgEefuMNjgECGY7 PAxyPPPRVQmPxqmnQColzoyrsam2JLm4BPCNUtuE3m/a0Xxd+DKBBY/5R+h6YmI0Cu5MbQ== X-Google-Smtp-Source: AGHT+IFQy+kldOZub/ALvgyz2q9FRrtU+WNusx61xEpesN6Nx9F3pzF25uOJpFFGA5Zwey/e1r3gjA== X-Received: by 2002:a05:6402:4306:b0:601:f87b:b6a9 with SMTP id 4fb4d7f45d1cf-601f87bba22mr8771766a12.25.1747820861747; Wed, 21 May 2025 02:47:41 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBEfo6Z66bKo4zfhPzKL+J9+OaPqx7eHsHlTeTaezC9Czg== Received: by 2002:a05:6402:2803:b0:601:d62c:7601 with SMTP id 4fb4d7f45d1cf-602444d8c51ls105481a12.2.-pod-prod-01-eu; Wed, 21 May 2025 02:47:40 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXU0q/FPoMyxeA6uwJ1e4YQMAQfJy/XPVtb6HOoxpyQ9F2src4BK666CPGdEkwFyI/l1bvSa1Z5dIC2AHil@amarulasolutions.com X-Received: by 2002:a17:907:f496:b0:ac6:f3f5:3aa5 with SMTP id a640c23a62f3a-ad52d49e2e8mr2145013766b.16.1747820859566; Wed, 21 May 2025 02:47:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747820859; cv=none; d=google.com; s=arc-20240605; b=Bp9nwgIuNAw2+RkkID0w+I6DbHcovaMoDfZPvd+lXe+xpngKSkARlqgjlI8TzwEe1z kyHVP6sRpYjCjSRwg6aZs5MRzdt+DUhIVsN7zngUn6t6an5fXl7PhhP76RG4FskqShjt cY2bGgf8K2KxR9tP8jV5SZ9ZbU9SxDLEtHlSCjgC9Jl2luMVluAJsWy30GF3KNl83z9e vNXBe5IXZTih8B1AJZ6hQ+hssUFF7jHxLHz4lEX7/ApYD+ltamZ09AVeOi+IjPJ4UOLS qCK1GM+guGKc//SkXLZtQHZ8T/lcZ4r0UIPSskHb7KIokWtyZhhZpFPivtAapzRVrfIP 88sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=VJTFK8xdv4RQyg0pIfTbfJObVjKhhuj+68bC/WJdesQ=; fh=8qDRsUnajAS3+96Q/ue5DWuXY59CICrod9CGMlfsXro=; b=cjGQQZg2kakvHIQeU/830e/le/NtvhznsmHs0z9EilQIyGrVfe+NQv5cWBR4A0F0+D hjV4TddjTR+ifRH9bTUxhwpnNoBl1saAAx7UhplZU0vOVle+fpgP+klar6ydFk6O5PvU we2OS0Djg/iJHHIBcjxJSLXHOUTTp7+kcOIAeAoC71tkHCdOYqm2thFg74C8THvvIy8O ZdkFbvRIzyX7NFmwMxxF7fSp++LiI5kUaAArMJrOMd9XteI3PsVKGUzxHUqkV4O8KBge EOUnVfUuoi3rF5wTUnGs2VNDymQo/eqhwNdTegSWq+ugbNLstdjGzCFMX2dMMhWFhj/B 7jlw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=nHIGxAEP; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id a640c23a62f3a-ad52d0805d6sor548824266b.6.2025.05.21.02.47.39 for (Google Transport Security); Wed, 21 May 2025 02:47:39 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AJvYcCXh7ATNB7NsE83P6eepi0GX6rp7+KvRra6RqoJccZ1ByLhQyiYHNXp/bps4ewPR7ArJhz2EP+zQJDDbC1P6@amarulasolutions.com X-Gm-Gg: ASbGncu+XJruPrMf06mCGPR2egAjGDSb4AlTASDGEQEI8TbVOLxOe27qxbZD0FnOyEx svJ/NlTOPaguc2Ana4wRSq2utc9G7nXH4bwE7YU94aM0wZ2rd0bOie3YGJmws0FX2pv2jRtNOfU zJA2uO28pWSnRJq7H+n5LQLOVxC31kNmZPBQWzpMWzsLkuFExy0W2/Qn5NGMQfvwZ/9aGusSR5k QeLNUGX+wjxUiUbfFhFKYj6HZebuKQsAoRt5gzGIjYZCZ1ej2UDloVPuL8+UDYh/ie2Vyj/BK7X kzdjr+8yp/crLr7WuH5J3pUd9mvsV9W6rKOh65cMEy0agTZFmFj0BOD5WYyQBQt/UdtfXHJ15LM b2Txo1J7s+bJy X-Received: by 2002:a17:906:fe49:b0:ad2:3f1f:7970 with SMTP id a640c23a62f3a-ad52d45aef4mr1921831366b.2.1747820858969; Wed, 21 May 2025 02:47:38 -0700 (PDT) Received: from localhost.localdomain ([2001:b07:6474:ebbf:cfc5:5070:d6f4:1d86]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad52d06b497sm863951166b.42.2025.05.21.02.47.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 May 2025 02:47:38 -0700 (PDT) From: Dario Binacchi To: u-boot@lists.denx.de Cc: michael@amarulasolutions.com, Simon Holesch , linux-amarula@amarulasolutions.com, Michael Bode , Wolfgang Birkner , Dario Binacchi , Simon Glass , Tom Rini Subject: [PATCH v3 2/4] board: bsh: imx6ulz_smm_m2: Add support for 256 MiB DRAM Date: Wed, 21 May 2025 11:47:30 +0200 Message-ID: <20250521094735.1037146-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250521094735.1037146-1-dario.binacchi@amarulasolutions.com> References: <20250521094735.1037146-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=nHIGxAEP; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Simon Holesch Calibration values were calculated using the NXP tool I.MX6ULL_DDR3_Script_Aid_V0.01.xlsx Signed-off-by: Wolfgang Birkner Signed-off-by: Simon Holesch Signed-off-by: Michael Trimarchi Signed-off-by: Dario Binacchi --- (no changes since v2) Changes in v2: - Use standard C comment style board/bsh/imx6ulz_smm_m2/Makefile | 2 +- board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c | 169 +++++++++++++++ board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c | 168 +++++++++++++++ board/bsh/imx6ulz_smm_m2/spl.c | 207 ++----------------- board/bsh/imx6ulz_smm_m2/spl_mtypes.h | 26 +++ include/configs/imx6ulz_smm_m2.h | 6 +- 6 files changed, 388 insertions(+), 190 deletions(-) create mode 100644 board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c create mode 100644 board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c create mode 100644 board/bsh/imx6ulz_smm_m2/spl_mtypes.h diff --git a/board/bsh/imx6ulz_smm_m2/Makefile b/board/bsh/imx6ulz_smm_m2/Makefile index 59870419bdde..d448f4fc5215 100644 --- a/board/bsh/imx6ulz_smm_m2/Makefile +++ b/board/bsh/imx6ulz_smm_m2/Makefile @@ -2,5 +2,5 @@ # (C) Copyright 2021 Amarula Solutions B.V. obj-y := imx6ulz_smm_m2.o -obj-$(CONFIG_XPL_BUILD) += spl.o +obj-$(CONFIG_XPL_BUILD) += spl.o ddr3l_timing_256m.o ddr3l_timing_128m.o diff --git a/board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c new file mode 100644 index 000000000000..66c3483adbf5 --- /dev/null +++ b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include "spl_mtypes.h" + +static const struct dram_cfg_param ddr_ddrc_cfg_128mb[] = { + /* IOMUX */ + + /* DDR IO Type: */ + {0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */ + {0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */ + + /* Clock: */ + {0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */ + + /* Address: */ + {0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */ + {0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */ + {0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */ + + /* Control: */ + {0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */ + {0x020e0270, 0x00000000}, /* + * IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured + * using Group Control Register IOMUXC_SW_PAD_CTL_GRP_CTLDS + */ + + {0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */ + {0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */ + {0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */ + + /* Data Strobes: */ + {0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */ + {0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */ + {0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */ + + /* Data: */ + {0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */ + {0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */ + {0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */ + + {0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */ + {0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */ + + /* + * ============================================================================= + * DDR Controller Registers + * ============================================================================= + * Manufacturer:ISSI + * Device Part Number:IS43TR16640BL-125JBLI + * Clock Freq.: 400MHz + * Density per CS in Gb: 1 + * Chip Selects used:1 + * Number of Banks:8 + * Row address: 13 + * Column address: 10 + * Data bus width16 + * ============================================================================= + */ + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR, set the Configuration request bit + * during MMDC set up + */ + + /* + * ============================================================================= + * Calibration setup. + * ============================================================================= + */ + {0x021b0800, 0xA1390003}, /* + * DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic + * HW ZQ calibration. + */ + + /* + * For target board, may need to run write leveling calibration to fine tune + * these settings. + */ + {0x021b080c, 0x00000000}, + + /* Read DQS Gating calibration */ + {0x021b083c, 0x41480148}, /* MPDGCTRL0 PHY0 */ + + /* Read calibration */ + {0x021b0848, 0x40403A3E}, /* MPRDDLCTL PHY0 */ + + /* Write calibration */ + {0x021b0850, 0x4040362E}, /* MPWRDLCTL PHY0 */ + + /* + * Read data bit delay: 3 is the recommended default value, although out of reset + * value is 0. + */ + {0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */ + {0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */ + + /* Write data bit delay: */ + {0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */ + {0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */ + + /* DQS&CLK Duty Cycle */ + {0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */ + + /* Complete calibration by forced measurement: */ + {0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */ + + /* + * ============================================================================= + * Calibration setup end + * ============================================================================= + */ + + /* MMDC init: */ + {0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */ + {0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */ + {0x021b000c, 0x2B2F52F3}, /* MMDC0_MDCFG0 */ + {0x021b0010, 0xB66D0B63}, /* MMDC0_MDCFG1 */ + {0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */ + + /* + * MDMISC: RALAT kept to the high level of 5. + * MDMISC: consider reducing RALAT if your 528MHz board design allow that. + * Lower RALAT benefits: + * a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3 + * b. Small performance improvement + */ + {0x021b0018, 0x00211740}, /* MMDC0_MDMISC */ + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR, set the Configuration request bit during + * MMDC set up + */ + {0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */ + {0x021b0030, 0x002F1023}, /* MMDC0_MDOR */ + {0x021b0040, 0x00000043}, /* Chan0 CS0_END */ + {0x021b0000, 0x82180000}, /* MMDC0_MDCTL */ + + {0x021b0890, 0x00400000}, /* MPPDCMPR2 */ + + /* Mode register writes */ + {0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */ + {0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */ + {0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */ + {0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */ + {0x021b001c, 0x04008040}, /* + * MMDC0_MDSCR, ZQ calibration command sent to device + * on CS0 + */ + + {0x021b0020, 0x00007800}, /* MMDC0_MDREF */ + + {0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */ + + {0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */ + + {0x021b0404, 0x00011006}, /* + * MMDC0_MAPSR ADOPT power down enabled, + * MMDC will enter automatically to self-refresh + * while the number of idle cycle reached. + */ + + {0x021b001c, 0x00000000}, /* + * MMDC0_MDSCR, clear this register (especially the + * configuration bit as initialization is complete) + */ +}; + +struct dram_timing_info bsh_dram_timing_128mb = { + .ddrc_cfg = ddr_ddrc_cfg_128mb, + .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_128mb), +}; diff --git a/board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c new file mode 100644 index 000000000000..0fe5b90a6732 --- /dev/null +++ b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include "spl_mtypes.h" + +static const struct dram_cfg_param ddr_ddrc_cfg_256mb[] = { + /* IOMUX */ + + /* DDR IO Type: */ + {0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */ + {0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */ + + /* Clock: */ + {0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */ + + /* Address: */ + {0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */ + {0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */ + {0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */ + + /* Control: */ + {0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */ + {0x020e0270, 0x00000000}, /* + * IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured + * using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS + */ + + {0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */ + {0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */ + {0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */ + + /* Data Strobes: */ + {0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */ + {0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */ + {0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */ + + /* Data: */ + {0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */ + {0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */ + {0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */ + + {0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */ + {0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */ + + /* + * ============================================================================= + * DDR Controller Registers + * ============================================================================= + * Manufacturer:ISSI + * Device Part Number:IS43TR16640BL-125JBLI + * Clock Freq.: 400MHz + * Density per CS in Gb: 2 + * Chip Selects used:1 + * Number of Banks:8 + * Row address: 14 + * Column address: 10 + * Data bus width16 + * ============================================================================= + */ + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR, set the Configuration request bit during + * MMDC set up + */ + + /* + * ============================================================================= + * Calibration setup. + * ============================================================================= + */ + {0x021b0800, 0xA1390003}, /* + * DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic + * HW ZQ calibration + */ + + /* + * For target board, may need to run write leveling calibration to fine tune these settings + */ + {0x021b080c, 0x00050005}, + + /* Read DQS Gating calibration */ + {0x021b083c, 0x01480144}, /* MPDGCTRL0 PHY0 */ + + /* Read calibration */ + {0x021b0848, 0x4040363A}, /* MPRDDLCTL PHY0 */ + + /* Write calibration */ + {0x021b0850, 0x40402E2C}, /* MPWRDLCTL PHY0 */ + + /* + * Read data bit delay: 3 is the reccommended default value, although out of reset value + * is 0 + */ + {0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */ + {0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */ + + /* Write data bit delay: */ + {0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */ + {0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */ + + /* DQS&CLK Duty Cycle */ + {0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */ + + /* Complete calibration by forced measurement: */ + {0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */ + + /* + * ============================================================================= + * Calibration setup end + * ============================================================================= + */ + + /* MMDC init: */ + {0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */ + {0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */ + {0x021b000c, 0x3F435333}, /* MMDC0_MDCFG0 */ + {0x021b0010, 0xB68E0B63}, /* MMDC0_MDCFG1 */ + {0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */ + + /* + * MDMISC: RALAT kept to the high level of 5. + * MDMISC: consider reducing RALAT if your 528MHz board design allow that. + * Lower RALAT benefits: + * a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3 + * b. Small performence improvment + */ + {0x021b0018, 0x00211740}, /* MMDC0_MDMISC */ + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR, set the Configuration request bit during + * MMDC set up + */ + {0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */ + {0x021b0030, 0x00431023}, /* MMDC0_MDOR */ + {0x021b0040, 0x00000047}, /* Chan0 CS0_END */ + {0x021b0000, 0x83180000}, /* MMDC0_MDCTL */ + + {0x021b0890, 0x00400000}, /* MPPDCMPR2 */ + + /* Mode register writes */ + {0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */ + {0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */ + {0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */ + {0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */ + {0x021b001c, 0x04008040}, /* + * MMDC0_MDSCR, ZQ calibration command sent to device + * on CS0 + */ + + {0x021b0020, 0x00007800}, /* MMDC0_MDREF */ + + {0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */ + + {0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */ + + {0x021b0404, 0x00011006}, /* + * MMDC0_MAPSR ADOPT power down enabled, MMDC will enter + * automatically to self-refresh while the number of idle + * cycle reached + */ + + {0x021b001c, 0x00000000}, /* + * MMDC0_MDSCR, clear this register (especially the + * configuration bit as initialization is complete) + */ +}; + +struct dram_timing_info bsh_dram_timing_256mb = { + .ddrc_cfg = ddr_ddrc_cfg_256mb, + .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_256mb), +}; diff --git a/board/bsh/imx6ulz_smm_m2/spl.c b/board/bsh/imx6ulz_smm_m2/spl.c index 936e54662e98..85fd9e133eb3 100644 --- a/board/bsh/imx6ulz_smm_m2/spl.c +++ b/board/bsh/imx6ulz_smm_m2/spl.c @@ -17,6 +17,8 @@ #include #include +#include "spl_mtypes.h" + #define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) @@ -31,190 +33,15 @@ static void setup_iomux_uart(void) imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads)); } -struct dram_cfg_param { - unsigned int reg; - unsigned int val; -}; - -struct dram_timing_info { - const struct dram_cfg_param *ddrc_cfg; - unsigned int ddrc_cfg_num; -}; - -static const struct dram_cfg_param ddr_ddrc_cfg_128mb[] = { - /* IOMUX */ - - /* DDR IO Type: */ - {0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */ - {0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */ - - /* Clock: */ - {0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */ - - /* Address: */ - {0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */ - {0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */ - {0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */ - - /* Control: */ - {0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */ - - {0x020e0270, 0x00000000}, /* - * IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured - * using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS - */ - - {0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */ - {0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */ - {0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */ - - /* Data Strobes: */ - {0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */ - {0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */ - {0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */ - - /* Data: */ - {0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */ - {0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */ - {0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */ - - {0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */ - {0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */ - - /* - * ============================================================================= - * DDR Controller Registers - * ============================================================================= - * Manufacturer:ISSI - * Device Part Number:IS43TR16640BL-125JBLI - * Clock Freq.: 400MHz - * Density per CS in Gb: 1 - * Chip Selects used:1 - * Number of Banks:8 - * Row address: 13 - * Column address: 10 - * Data bus width16 - * ============================================================================= - */ - - {0x021b001c, 0x00008000}, /* - * MMDC0_MDSCR, set the Configuration request bit during - * MMDC set up - */ - - /* - * ============================================================================= - * Calibration setup - * ============================================================================= - */ - - {0x021b0800, 0xA1390003}, /* - * DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic - * HW ZQ calibration. - */ - - /* - * For target board, may need to run write leveling calibration to fine tune these - * settings. - */ - {0x021b080c, 0x00000000}, - - /* Read DQS Gating calibration */ - {0x021b083c, 0x41480148}, /* MPDGCTRL0 PHY0 */ - - /* Read calibration */ - {0x021b0848, 0x40403A3E}, /* MPRDDLCTL PHY0 */ - - /* Write calibration */ - {0x021b0850, 0x4040362E}, /* MPWRDLCTL PHY0 */ - - /* - * Read data bit delay: 3 is the recommended default value, although out of reset - * value is 0 - */ - {0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */ - {0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */ - - /* Write data bit delay: */ - {0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */ - {0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */ - - /* DQS&CLK Duty Cycle */ - {0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */ - - /* Complete calibration by forced measurement: */ - {0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */ - - /* - * ============================================================================= - * Calibration setup end - * ============================================================================= - */ - - /* MMDC init: */ - {0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */ - {0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */ - {0x021b000c, 0x2B2F52F3}, /* MMDC0_MDCFG0 */ - {0x021b0010, 0xB66D0B63}, /* MMDC0_MDCFG1 */ - {0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */ - - /* - * MDMISC: RALAT kept to the high level of 5. - * MDMISC: consider reducing RALAT if your 528MHz board design allow that. - * Lower RALAT benefits: - * a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3 - * b. Small performance improvement - */ - {0x021b0018, 0x00211740}, /* MMDC0_MDMISC */ - {0x021b001c, 0x00008000}, /* - * MMDC0_MDSCR, set the Configuration request - * bit during MMDC set up - */ - {0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */ - {0x021b0030, 0x002F1023}, /* MMDC0_MDOR */ - {0x021b0040, 0x00000043}, /* Chan0 CS0_END */ - {0x021b0000, 0x82180000}, /* MMDC0_MDCTL */ - - {0x021b0890, 0x00400000}, /* MPPDCMPR2 */ - - /* Mode register writes */ - {0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */ - {0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */ - {0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */ - {0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */ - {0x021b001c, 0x04008040}, /* - * MMDC0_MDSCR, ZQ calibration command sent to - * device on CS0 - */ - {0x021b0020, 0x00007800}, /* MMDC0_MDREF */ - - {0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */ - - {0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */ - - {0x021b0404, 0x00011006}, /* - * MMDC0_MAPSR ADOPT power down enabled, - * MMDC will enter automatically to self-refresh - * while the number of idle cycle reached. - */ - - {0x021b001c, 0x00000000}, /* - * MMDC0_MDSCR, clear this register - * (especially the configuration bit as initialization - * is complete) - */ -}; - -static struct dram_timing_info dram_timing_128mb = { - .ddrc_cfg = ddr_ddrc_cfg_128mb, - .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_128mb), -}; - static void ddr_cfg_write(const struct dram_timing_info *dram_timing_info) { int i; const struct dram_cfg_param *ddrc_cfg = dram_timing_info->ddrc_cfg; const int ddrc_cfg_num = dram_timing_info->ddrc_cfg_num; + struct mmdc_p_regs *mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR; + + clrbits_le32(&mmdc0->mdctl, 1 << 31); /* clear SDE_0 */ + clrbits_le32(&mmdc0->mdctl, 1 << 30); /* clear SDE_1 */ for (i = 0; i < ddrc_cfg_num; i++) { debug("Writing 0x%x to register 0x%x\n", ddrc_cfg->val, @@ -226,12 +53,22 @@ static void ddr_cfg_write(const struct dram_timing_info *dram_timing_info) static void spl_dram_init(void) { - struct mmdc_p_regs *mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR; - - clrbits_le32(&mmdc0->mdctl, 1 << 31); /* clear SDE_0 */ - clrbits_le32(&mmdc0->mdctl, 1 << 30); /* clear SDE_1 */ - - ddr_cfg_write(&dram_timing_128mb); + /* Configure memory to maximum supported size for detection */ + ddr_cfg_write(&bsh_dram_timing_256mb); + + /* Detect memory physically present */ + gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE, SZ_256M); + + /* Reconfigure memory for actual detected size */ + switch (gd->ram_size) { + case SZ_256M: + /* Already configured, nothing to do */ + break; + case SZ_128M: + default: + ddr_cfg_write(&bsh_dram_timing_128mb); + break; + } } static void ccgr_init(void) diff --git a/board/bsh/imx6ulz_smm_m2/spl_mtypes.h b/board/bsh/imx6ulz_smm_m2/spl_mtypes.h new file mode 100644 index 000000000000..2b517c316e0f --- /dev/null +++ b/board/bsh/imx6ulz_smm_m2/spl_mtypes.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2025 BSH Hausgeraete GmbH + * + * Written by: Simon Holesch + */ + +#ifndef SPL_MTYPES_H +#define SPL_MTYPES_H + +#include + +struct dram_cfg_param { + unsigned int reg; + unsigned int val; +}; + +struct dram_timing_info { + const struct dram_cfg_param *ddrc_cfg; + unsigned int ddrc_cfg_num; +}; + +extern struct dram_timing_info bsh_dram_timing_128mb; +extern struct dram_timing_info bsh_dram_timing_256mb; + +#endif /* SPL_MTYPES_H */ diff --git a/include/configs/imx6ulz_smm_m2.h b/include/configs/imx6ulz_smm_m2.h index 44a3fc02e8ac..87aede218d16 100644 --- a/include/configs/imx6ulz_smm_m2.h +++ b/include/configs/imx6ulz_smm_m2.h @@ -60,10 +60,8 @@ BOOTENV /* Physical Memory Map */ -#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR -#define PHYS_SDRAM_SIZE SZ_128M - -#define CFG_SYS_SDRAM_BASE PHYS_SDRAM +#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR +#define CFG_SYS_SDRAM_BASE PHYS_SDRAM #define CFG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR #define CFG_SYS_INIT_RAM_SIZE IRAM_SIZE From patchwork Wed May 21 09:47:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4057 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 256773F378 for ; Wed, 21 May 2025 11:47:43 +0200 (CEST) Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-601a3e44997sf3570391a12.0 for ; Wed, 21 May 2025 02:47:43 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747820863; cv=pass; d=google.com; s=arc-20240605; b=XqSBXwFwQkrpT0Qky3VGrA3aQACsoL3WrYenoIy6Z/Nh6NHbJAonv1TrkpTS7RdPgZ OnEiKJetUXGW9gbiaSZFAWPzjTqGUrIFa+3f7QjJaG6mgr+UrDu/X+4S/t6sqUxpDwRm IWHuqYYlxPtszF4fdmqUCiGtvrxFKCWuYVT/YGOmWb3hZN8E0ft+7U/8KUhw51aRpNT4 4Yq3itWcRyZjJknFE3q/WVwnbaFLzkXCNGoIUWIwshbWScelm7UgWPBXeS+bBpnPeJF7 LLHKb+xMrSwxi9Je+f6MeGWEiyPk3ib/75XPsvOLf6wbnKD9sKS+JEa0PpsS5sqq0shO rHWQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=1KIwEAwPqe98IJCx0Hr02rZcQKBYBDeR67L3BrMbYr4=; fh=NLSZ/TewpSm2Itz5wrnerZ9tsDuItEqxgV9ltMdm+OU=; b=gyMZT9EaejcneXX4TvE7VUjpPB4myfYsy2mV3uZ32/dnM8N16cJvLLVlzHCOuwiNhD iyXqxX59mmiILoVEwlIUnth7og5yC+B6cpfEmGhRv2xfTFRHIHFyreIOTI1xamvo0d3D iREo+HtmhaiNE4C4znHT9z3ndIYdd0tfIqwfZ2HRmc/wzy8E8T28GqdnKpEZRCovgFhY x4EFW+DWZ9BdczMVRhQqcWKBS3V5/3L1LSfQTgR//BrvmLzWGFim/pIbpkNYufypJNqz N/1JeimWIO7GAhL+AKPVsNvGPWHl+RfQPJGxy7x2k1sGd25aqgSkdmlJfWIJN74z1Krd p3Mw==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=P0V3R+eb; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1747820863; x=1748425663; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=1KIwEAwPqe98IJCx0Hr02rZcQKBYBDeR67L3BrMbYr4=; b=Rfu9MtSl7tiRRXODByUWZpCC2LMd/IPPWJXCbOYOKc/SyYmkFk2AQXgtf3XWV7dOVM Nrn2jdOLlU68S53CUqwicflVAFIEFseeybK0q86kAW/tDPXJ2OxCgJcR08IRPdZOc20O JWtmF0b1HUrR2gr7D4QrEBcTZsidF0wbpX25A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747820863; x=1748425663; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=1KIwEAwPqe98IJCx0Hr02rZcQKBYBDeR67L3BrMbYr4=; b=jADRX98QZ/9M8B9r4U4h6hK4Lot//RBrciIKTePOYJh+7WudpClcFXwIqgulFc1aqc B06NB0+iMblEHrtFUr+w7kV33f3BRwfmQdQYnwjt7OqfwJen5ms9Re85P272EJpuO75a L1TA7EWDfUQpgB0/RgOPjMyU7kmINd3N9atz5byzUBmvHJ6wrV5XYzOQTz6TOCcoNW3Z Y/m0Pci9oXJkS2/hrnhv62MZXaRZZh/DYj0NtvADhsQQV/bSKlK5bchFY9yTIYRWivUV PvmYtCGSZ+mNfjZyej1cTdOgu08kKP3/zgQbo0Vhfjcfc+014nRSO11K7iVEirKekPZd W+Gw== X-Forwarded-Encrypted: i=2; AJvYcCXVCWbxLVfftYFLPu4U/2t/9bqcTkiHp3mjLUD9RfxNY1TVyL7N4jNejbruGB4H5ve5/rdR+ex2bLjtcUJq@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0Ywp0KwNQw0koTX0oTERJdvvFofwJVGbJRkA3fDvNwx79d9XgwE2 Tg5bnzkAYEJRKeTfWtztdZ5qZR0onJBnCU/WEqh/obC+W4Q/9DIsb2ANfokkF4ymit6+Uw== X-Google-Smtp-Source: AGHT+IFp2WDDkiIE58Iggpdz7lGy6T2hf8D8wDfCrMf4olQ5rj4bsdmQsli3VwYj6GnQAftbQyTYSg== X-Received: by 2002:a05:6402:4308:b0:601:e0cf:9ed with SMTP id 4fb4d7f45d1cf-601e0cf0c8emr10369430a12.22.1747820862704; Wed, 21 May 2025 02:47:42 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBE85Q0rSobjmXHBVd9K3//ZaRtlwS1yROSxXwEI9XbU/g== Received: by 2002:a05:6402:2354:b0:601:956f:a0dc with SMTP id 4fb4d7f45d1cf-6022d1ec9ecls644324a12.0.-pod-prod-02-eu; Wed, 21 May 2025 02:47:41 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWgS/UH+yfIC4G/jouqIy4ZnY0HEa9hu8lODLLzPQ0pyr7G07+D6psz6ZfU3hYhGhgu1+WS/eXDL+bBKxKJ@amarulasolutions.com X-Received: by 2002:a17:907:1b20:b0:ace:c505:3349 with SMTP id a640c23a62f3a-ad52d42c0f0mr1967069666b.12.1747820860641; Wed, 21 May 2025 02:47:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747820860; cv=none; d=google.com; s=arc-20240605; b=OrvBEQY0CnCuUNnxoK+5PKaNrvIOrIuqp8NGF3kHVwIZp+Gu78Ew3EBGe3mPXC7jFd WegRJ4aLBvZLEjZDRKp81y5d/YXUo4yQIfq0lbVqtNtJaPV2lTA0KAG9tj1tZFqHR9FJ jjlGmT3oR/AJL+Ys1kyLZR/q9+EPVZXJsDyFziR1guh36ZUcnbt97CIX9Fom4RlhRAVo jfcCGcbktHPu9O0zcVN6M91AEXS8lC8QfW+lltuyC/9KVbSd/UBaLxil+I7+vfxq2Nz8 0Vkx9mmLBpD5BqCExojGhmyON0RIlupZPHcl9ZvQZdP/rnuzukkqQ+VivuOHH3p70hxq I13w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=WL1ajC+MEmVAyZkDKpX1jUi4ijIdGE+PBJjaGV0UHBo=; fh=zSf5iSTNlnYKNZOdJwLOMOE51Y3DIR5jU3hyvJ0WPEg=; b=jtHJYhP5ata9mEZYY58gj9BERrd3EUN24RAe6919m+pujtYsGiyhLS2wOdbRM7xRsv XnO7hcS1p8UuO7FDeSg6Nd46/9AJzI7rZk/TcV8ioC4gOO+Pu8FOPrHoVJ/dBtNsSysZ XfQA2fYMvr2VtRFGvjhbjcPItwJlneC27n1dF+nFaCLligKq54gxqeD0mgcYMnCkojxi J4XGAZsmex3ZwhZY0BcxA3EmQtXUxVENItEl96FWAPyBq2m5xsbBqIV7ToWFfI+pg4Qo Ef+whVhX4kBP/5KvQV/+yZ6czS7laPKdfDZVIFduC7wob75CL40gUKRAj+NyDsXC1Scm wpKA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=P0V3R+eb; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id a640c23a62f3a-ad52d060786sor589481066b.2.2025.05.21.02.47.40 for (Google Transport Security); Wed, 21 May 2025 02:47:40 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AJvYcCVxDR6btsGB2SRb5SEssuRNLVKOz0ETnUsA2YyDKB4Re6SuQHzxxD5JBebvVsNtIpcvDgxJ1QjYZG0dpJeR@amarulasolutions.com X-Gm-Gg: ASbGnctO50V7fyXblQ5K8vQDBLZESaAsyg5isDXh1xZ9uewegk4I8udSMGpIQkrOIsW 0ML9b14/OJB+zlOLpbsbpwJGrNAymEx61O4v16MS1tRRrKAOvujWwddZ+tPN2KvlHv2vuDVeHak 8y4y8+Xd9iewBOeV3Eu0eXR44g1WzJueT/KSynF9Fz0PTeUAYq/F8mFIF+iQcrPgSiSxbNu4pcG 50ee9gG1MPnDodhwfZDAR6gByNPKmZuAfTtbkBikRoRL1y9OGMmgIjZLTUeRZN1ztPoq4t4G3bh cR0FhHOHWsEwQfiBsi30JXuBZJouia6Vtp3Hw3xfKExGjO1mbNXGZE/eAG/2bppkRoNAnMt+VS3 eQHMJVpYtJbqn X-Received: by 2002:a17:907:1c0a:b0:ad2:2146:3b7d with SMTP id a640c23a62f3a-ad52d583b9cmr1702582166b.46.1747820860137; Wed, 21 May 2025 02:47:40 -0700 (PDT) Received: from localhost.localdomain ([2001:b07:6474:ebbf:cfc5:5070:d6f4:1d86]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad52d06b497sm863951166b.42.2025.05.21.02.47.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 May 2025 02:47:39 -0700 (PDT) From: Dario Binacchi To: u-boot@lists.denx.de Cc: michael@amarulasolutions.com, Simon Holesch , linux-amarula@amarulasolutions.com, Michael Bode , Dario Binacchi , Simon Glass , Tom Rini , Wolfgang Birkner Subject: [PATCH v3 3/4] board: bsh: imx6ulz_smm_m2: Add support for 512 MiB DRAM Date: Wed, 21 May 2025 11:47:31 +0200 Message-ID: <20250521094735.1037146-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250521094735.1037146-1-dario.binacchi@amarulasolutions.com> References: <20250521094735.1037146-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=P0V3R+eb; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Michael Bode Calibration values were calculated using the NXP tool I.MX6ULL_DDR3_Script_Aid_V0.01.xlsx Signed-off-by: Michael Bode Signed-off-by: Michael Trimarchi Signed-off-by: Dario Binacchi --- (no changes since v2) Changes in v2: - Use standard C comment style board/bsh/imx6ulz_smm_m2/Makefile | 3 +- board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c | 168 +++++++++++++++++++ board/bsh/imx6ulz_smm_m2/spl.c | 9 +- board/bsh/imx6ulz_smm_m2/spl_mtypes.h | 1 + 4 files changed, 176 insertions(+), 5 deletions(-) create mode 100644 board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c diff --git a/board/bsh/imx6ulz_smm_m2/Makefile b/board/bsh/imx6ulz_smm_m2/Makefile index d448f4fc5215..4f4d67f659d0 100644 --- a/board/bsh/imx6ulz_smm_m2/Makefile +++ b/board/bsh/imx6ulz_smm_m2/Makefile @@ -2,5 +2,4 @@ # (C) Copyright 2021 Amarula Solutions B.V. obj-y := imx6ulz_smm_m2.o -obj-$(CONFIG_XPL_BUILD) += spl.o ddr3l_timing_256m.o ddr3l_timing_128m.o - +obj-$(CONFIG_XPL_BUILD) += spl.o ddr3l_timing_512m.o ddr3l_timing_256m.o ddr3l_timing_128m.o diff --git a/board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c new file mode 100644 index 000000000000..f5989382f5aa --- /dev/null +++ b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include "spl_mtypes.h" + +static const struct dram_cfg_param ddr_ddrc_cfg_512mb[] = { + /* + * ============================================================================= + * IOMUX + * ============================================================================= + */ + + /* DDR IO Type: */ + {0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */ + {0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */ + + /* Clock: */ + {0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */ + + /* Address: */ + {0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */ + {0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */ + {0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */ + + /* Control: */ + {0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */ + {0x020e0270, 0x00000000}, /* + * IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured using + * Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS + */ + {0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */ + {0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */ + {0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */ + + /* Data Strobes: */ + {0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */ + {0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */ + {0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */ + + /* Data: */ + {0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */ + {0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */ + {0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */ + + {0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */ + {0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */ + + /* + * ============================================================================= + * DDR Controller Registers + * ============================================================================= + * Manufacturer:ISSI + * Device Part Number:IS43TR16640BL-125JBLI + * Clock Freq.: 400MHz + * Density per CS in Gb: 2 + * Chip Selects used:1 + * Number of Banks:8 + * Row address: 14 + * Column address: 10 + * Data bus width16 + * ============================================================================= + */ + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR, set the Configuration request bit during + * MMDC set up + */ + + /* + * ============================================================================= + * Calibration setup. + * ============================================================================= + */ + {0x021b0800, 0xA1390003}, /* + * DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic + * HW ZQ calibration + */ + + /* + * For target board may need to run write leveling calibration to fine tune these settings + */ + {0x021b080c, 0x00000000}, + + /* Read DQS Gating calibration */ + {0x021b083c, 0x01440140}, /* MPDGCTRL0 PHY0 */ + + /* Read calibration */ + {0x021b0848, 0x40403A3E}, /* MPRDDLCTL PHY0 */ + + /* Write calibration */ + {0x021b0850, 0x4040322A}, /* MPWRDLCTL PHY0 */ + + /* + * Read data bit delay: 3 is the reccommended default value, although out of reset value + * is 0 + */ + {0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */ + {0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */ + + /* Write data bit delay: */ + {0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */ + {0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */ + + /* DQS&CLK Duty Cycle */ + {0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */ + + /* Complete calibration by forced measurement: */ + {0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */ + + /* + * ============================================================================= + * Calibration setup end + * ============================================================================= + */ + + /* MMDC init: */ + {0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */ + {0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */ + {0x021b000c, 0x3F435333}, /* MMDC0_MDCFG0 */ + {0x021b0010, 0xB68E0B63}, /* MMDC0_MDCFG1 */ + {0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */ + + /* + * MDMISC: RALAT kept to the high level of 5. + * MDMISC: consider reducing RALAT if your 528MHz board design allow that. + * Lower RALAT benefits: + * a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3 + * b. Small performence improvment + */ + {0x021b0018, 0x00211740}, /* MMDC0_MDMISC */ + {0x021b001c, 0x00008000}, /* + * MMDC0_MDSCR set the Configuration request bit during + * MMDC set up + */ + {0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */ + {0x021b0030, 0x00431023}, /* MMDC0_MDOR */ + {0x021b0040, 0x0000004F}, /* Chan0 CS0_END */ + {0x021b0000, 0x84180000}, /* MMDC0_MDCTL */ + + {0x021b0890, 0x00400000}, /* MPPDCMPR2 */ + + /* Mode register writes */ + {0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */ + {0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */ + {0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */ + {0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */ + {0x021b001c, 0x04008040}, /* MMDC0_MDSCR, ZQ calibration command sent to device on CS0 */ + + {0x021b0020, 0x00007800}, /* MMDC0_MDREF */ + + {0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */ + + {0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */ + + {0x021b0404, 0x00011006}, /* + * MMDC0_MAPSR ADOPT power down enabled, MMDC will enter + * automatically to self-refresh while the number of idle + * cycle reached + */ + + {0x021b001c, 0x00000000}, /* + * MMDC0_MDSCR, clear this register (especially the configuration + * bit as initialization is complete) + */ +}; + +struct dram_timing_info bsh_dram_timing_512mb = { + .ddrc_cfg = ddr_ddrc_cfg_512mb, + .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_512mb), +}; diff --git a/board/bsh/imx6ulz_smm_m2/spl.c b/board/bsh/imx6ulz_smm_m2/spl.c index 85fd9e133eb3..e8255b6d2a62 100644 --- a/board/bsh/imx6ulz_smm_m2/spl.c +++ b/board/bsh/imx6ulz_smm_m2/spl.c @@ -54,16 +54,19 @@ static void ddr_cfg_write(const struct dram_timing_info *dram_timing_info) static void spl_dram_init(void) { /* Configure memory to maximum supported size for detection */ - ddr_cfg_write(&bsh_dram_timing_256mb); + ddr_cfg_write(&bsh_dram_timing_512mb); /* Detect memory physically present */ - gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE, SZ_256M); + gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE, SZ_512M); /* Reconfigure memory for actual detected size */ switch (gd->ram_size) { - case SZ_256M: + case SZ_512M: /* Already configured, nothing to do */ break; + case SZ_256M: + ddr_cfg_write(&bsh_dram_timing_256mb); + break; case SZ_128M: default: ddr_cfg_write(&bsh_dram_timing_128mb); diff --git a/board/bsh/imx6ulz_smm_m2/spl_mtypes.h b/board/bsh/imx6ulz_smm_m2/spl_mtypes.h index 2b517c316e0f..8da59881c833 100644 --- a/board/bsh/imx6ulz_smm_m2/spl_mtypes.h +++ b/board/bsh/imx6ulz_smm_m2/spl_mtypes.h @@ -22,5 +22,6 @@ struct dram_timing_info { extern struct dram_timing_info bsh_dram_timing_128mb; extern struct dram_timing_info bsh_dram_timing_256mb; +extern struct dram_timing_info bsh_dram_timing_512mb; #endif /* SPL_MTYPES_H */ From patchwork Wed May 21 09:47:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4058 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 37C013F378 for ; Wed, 21 May 2025 11:47:44 +0200 (CEST) Received: by mail-ed1-f70.google.com with SMTP id 4fb4d7f45d1cf-601803587fcsf4834430a12.1 for ; Wed, 21 May 2025 02:47:44 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747820864; cv=pass; d=google.com; s=arc-20240605; b=DeSwbP95mvnzj6R5ReukSbeAVtL4qW4X8mudDaDrI4bMtK6AbBX13wLjqG3Utt0Wry Ffpy0AUU4BP7NdFx/1LwNPWBcLEb6DfcQrSRV8eO3TjXOJHmCqhoJlEK4t+kDVbswN0d ceEcQyTlsvHtExKRXqnXrTlTabxOlROnM4bNiSJMB8h0nUMU8E3tg1q2jMp6eIqepK47 bB9stJk6Kwq7fPeZJ4jGMX8KnN2/EBl1Oly9X4sB0hoxxZ/6CpuzWk8anGiYRd5fhPrB yzcwJT1vX9vVQcUH+ejtY8YIQB4mzuF6Yy5NQqiz5Q1HbQEpQRfmkssqEd5vFJYEv7nO 314w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=FObNyN58T5ygQtiLJZF+J8doUAalpG1GiKABzbkoopY=; fh=xyfjz3hFkNa7MbQtXQXpscU8tfSBhgcuu3D8y+VB1TY=; b=eU5jQkGan7H1b+1NcRh7mYv7/FSG9n4EYI4HYU5y5hk0+uVnK0w4lExm95iBYfaPj9 ZhEPwfLLvvQkH5nvi/XSMpFcYT4UnZFrSgx1mrLvubw/TlrNOUeCcM6juB8HbtBluFOw pM5c6p9MjPmIWR85zSmw/j7iVbhe9uxku3SgsqmSAXEOedO3lJ5qVDiv3S09jJRi5LFB OIVd7ggr2qdsDm+Zun3ZPvBXIiz/mqktmjuHfEDmMYrUNc+kx2MVrqZKnsvL6NKwWOK5 JCHkb3lqLjaBm6bp3G+bdCMzqV6SInEe48ufiDF7q+oSyguMrOKXi5rA8HKbVr22d9V+ V8gw==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=GM4+cJD3; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1747820864; x=1748425664; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=FObNyN58T5ygQtiLJZF+J8doUAalpG1GiKABzbkoopY=; b=RnFnW+I2Ei7e6u0L2jNz8Vz+4xzlqfmHw2NdUQ5q/sBriaoEO2OXKiJCASr7P+12Vk Sk+KkaL4FSmW479+g4MFboFmJb6gFVGkLsqaZSpZDLqMZ/8akEk9CDPArWVKKQL1DMcq 81QyFrejHDCjaOaWesgv7T5sM0kDm1IJlyyWU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747820864; x=1748425664; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=FObNyN58T5ygQtiLJZF+J8doUAalpG1GiKABzbkoopY=; b=AwfEzvL/ZE1VYJWr1UCsJNAH/t3Qe1Mbs6YvDqshwxMgjAMVv77ifxCyFRHZHKjTUP LH6jc1zbwFUyicUqZO+FMU9QpsEywOMbM2BBdlcS2lqW5vc1s6W41iq2mv80GykDAuOw iq/MWe/Dxso73EuiF9gILkDtbpn63yADHAHA0sYnV+4cfwBULD/Qc4HGv1RTIdNiWTdJ fl/SHHjXt98TLLguNUBImUoVDfCJ4uRdd4CTRy9XUf7gRNo5jOSykgEeqk2KQo7VzQOd zcqWKMi7VsKB7rC3JoOdG/yQLTQKUc370WLtHlWY4NnDOanJ9tFNWrdJ7yxHw/sqpNYv 7spw== X-Forwarded-Encrypted: i=2; AJvYcCW6t2LoIp9whXSnyzVncS2rX37gflaIIVSW+snJzmNrCO/FSw67HVxRrq1I9SubK+dJXp0KdaLA76/PgPaH@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YzIua7CIKPawu4Hq9QwdpqV0iHIe8gDgljIz/PhEjLb6hS9XMyP H6xlFHF8iXkTql1wXItEpIuDlqFKbtXCpnofJtY7vBzwnwpJjISLCINWrhTVYQRVXxqAJQ== X-Google-Smtp-Source: AGHT+IFbjBvaiW8XKJ5wOmB2/2d8oS9s0kiKVW4TC2M1NdMvfNyQz+1EzBYG78qjI2obAAl5Z7BmWw== X-Received: by 2002:a05:6402:2709:b0:601:9dc3:2796 with SMTP id 4fb4d7f45d1cf-6019dc32a0bmr12720492a12.6.1747820863847; Wed, 21 May 2025 02:47:43 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBFWqDDoTrjPx+ofHHqXJmvKhrgVhK8dn5cfG8sTTTxfzQ== Received: by 2002:a05:6402:2354:b0:601:956f:a0dc with SMTP id 4fb4d7f45d1cf-6022d1ec9ecls644335a12.0.-pod-prod-02-eu; Wed, 21 May 2025 02:47:42 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV6VWn4lGAvP05rX4KeUu2DnXz5ZpLxGsCut16prP8XfTcS+COz9IBney/NQ/PzVbihw9mxnBKkj4KOzyb2@amarulasolutions.com X-Received: by 2002:a17:907:708:b0:ad2:2417:12d2 with SMTP id a640c23a62f3a-ad52d5766c8mr1634301666b.42.1747820861802; Wed, 21 May 2025 02:47:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747820861; cv=none; d=google.com; s=arc-20240605; b=EQLVNSnvP/3NJ7qDt9Sh0KIEeLRCQ5Ja9gRm3bLo5axAUxKRXQf3C7DFQCUpG+7BvC DpLxt3/7zWpWSyxbPPaLtHE6Ye84MzQ1EZTBMtmSLPefl+EFTUs0ICSRhPGwkUVtZKTx qT0LQTU2f0mQcSsv6fVVeXXiqqz6FKLxi1296ys8YpGuG85cAlOqmMJPxuZMM6kiqBVI CXmP8ZQMzrh7Al2K8hF4Qg0JIgsvlG8XeBCN096ujHm/5yeuksrY+fTsYCrs3J0mI173 a/ktZGOwAWQs23uBZv2sR90oet3gH0wkKlK8dsV5Y+T6qHqSBsQ1ocjCtJuFCffeisGB SPSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=r7NL+y29KnispVsvW77N7C8ACwJH2kyHQysY3j8pf8k=; fh=fWHmUCXDq56deE0fRPANJZA0gz7MPnRap2VzNFS6Edc=; b=RTl/KunIa1NbFEUs4OVFqQBtEfrI0yLytbpyu589ocNGVv/HVJThvDZpT74xb5lboM YrREaf/pE+P2iAxEtV71ooMkWgMlucfxNLItOouHxSB7KcEsFru58Mwf+Pb3YkQm6ghP gr37dy9eF80GLseZQ8CMgMPC/JG9Yw75FNfJTXfnT5gSbJ3KV7opXvW8XTdcLqCIxrwn zFEgjM+rCGN/fnf/IJqIKSASdKKU3aERJdBpIMizViWpI1EzMzx2X6qQG99qhacQIeIT zYKflMdR26ONuB0POQWAARew4thpOt99E70FkmbJSi9P+AAlmvFbc5PFZuteBLAjQVz9 TtrQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=GM4+cJD3; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id a640c23a62f3a-ad52d062170sor576038166b.1.2025.05.21.02.47.41 for (Google Transport Security); Wed, 21 May 2025 02:47:41 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AJvYcCWxGJdjRx/GfM/cPDhmt1GXS2/tCuLNtF/5o92hTYxIP/YjsaGavXY/g6DthOUsIorEkKRCKJS5fM9G09wk@amarulasolutions.com X-Gm-Gg: ASbGncun7OrRoeGWP1YTW1PeuYtqBiXxOWehYWD/4MSxIWlNJTV+Qkm8M5uE06NBtLy 1xwqXcXV+P6IE0E+jyiC46ePoFMBCCxLGDRnJARcP5ERFsXLC5+AEis4Zk5tHj9+NKPGPjuwfOR 9WOGiCj6J5ME8HrwXuec26ShqmWkxihpwXjRh8L4CEXf/aSd+0EfEAUHpkbxvtPNR/6dXJRTx2t eBczFEU1KaCWShL12WfmDItLXqU/FlyfYo+oZXNVgdwBK1UzqDdhObgYSGXeyLWppHn/hPQBdNm VJDHvHgGUEmcLJJxY89oialXpXKh3EHkdwkH3EiKflLKmD57/Nk/h9rrc/RiQQvPvx+EOUMJKqq Bf4JMnLCLfiSU X-Received: by 2002:a17:907:6d11:b0:ad2:5198:d715 with SMTP id a640c23a62f3a-ad52d48ffb7mr1995205366b.19.1747820861279; Wed, 21 May 2025 02:47:41 -0700 (PDT) Received: from localhost.localdomain ([2001:b07:6474:ebbf:cfc5:5070:d6f4:1d86]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad52d06b497sm863951166b.42.2025.05.21.02.47.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 May 2025 02:47:40 -0700 (PDT) From: Dario Binacchi To: u-boot@lists.denx.de Cc: michael@amarulasolutions.com, Simon Holesch , linux-amarula@amarulasolutions.com, Michael Bode , Dario Binacchi , Tom Rini , Wolfgang Birkner Subject: [PATCH v3 4/4] board: bsh: imx6ulz_smm_m2: Add delay between DRAM read access Date: Wed, 21 May 2025 11:47:32 +0200 Message-ID: <20250521094735.1037146-4-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250521094735.1037146-1-dario.binacchi@amarulasolutions.com> References: <20250521094735.1037146-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=GM4+cJD3; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Michael Bode A small delay between DRAM read access with wrong parameters and reconfiguration is necessary. Without a delay between DRAM read access and a following reconfiguration this reconfiguration fails for certain DRAM chips (Nanya). Signed-off-by: Michael Bode Signed-off-by: Michael Trimarchi Signed-off-by: Dario Binacchi --- Changes in v3: - Drop changes on arch/arm/include/asm/arch-mx6/mx6-ddr.h and arch/arm/mach-imx/mx6/ddr.c files from patch [1/1] "board: bsh: imx6ulz_smm_m2: Match SPL DDR settings to DCD table" Changes in v2: - Add 'static struct' globally in the module where the definitions can mabe static. - Use standard C comment style - Remove unnecessary variable initializations board/bsh/imx6ulz_smm_m2/spl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/board/bsh/imx6ulz_smm_m2/spl.c b/board/bsh/imx6ulz_smm_m2/spl.c index e8255b6d2a62..c330e4d6d39d 100644 --- a/board/bsh/imx6ulz_smm_m2/spl.c +++ b/board/bsh/imx6ulz_smm_m2/spl.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -65,10 +66,12 @@ static void spl_dram_init(void) /* Already configured, nothing to do */ break; case SZ_256M: + udelay(1); ddr_cfg_write(&bsh_dram_timing_256mb); break; case SZ_128M: default: + udelay(1); ddr_cfg_write(&bsh_dram_timing_128mb); break; }