From patchwork Tue May 13 12:30:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4001 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 7FE4D3F049 for ; Tue, 13 May 2025 14:31:08 +0200 (CEST) Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a0bd4b4afdsf1608589f8f.0 for ; Tue, 13 May 2025 05:31:08 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747139468; cv=pass; d=google.com; s=arc-20240605; b=AzOlF2TLavkdmnhIyJA0OfN8TRwa1d/kEEsoje2W4m3EMMaKwPxKRIOlq9qAS9LVW4 W/O2GXupDP8CcPHnnGk/dc6F3+b9E7LF1rKLtJm9R8KcHKQeGkxjK5bDA6nw46z9YYGn NmTbq1ODODIbfo5pCWeAkWwusk2K6nI73kC+W6msgMJLyX0wgPpC1Qx6ZcIe6LtPQef1 V9Lon0fyiSOHBH+DjC04JENtLE0vhTPpA4SNOvuahbOCp31ERs9lcQZEJ/0k5UKsbzHN k58+TFwEWg74cRf7ZStHmcRgPNBWi3gTpp5TStQfZB40s6MYgbHo7KDy2ymuvKBn1ftq It0Q== 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=U5g9kVyeT8FRbKXHoReSexp0WTUD2/pRHcc35tfR5Bk=; fh=6nEqTs7jT3ON0VJRC9HvQp2X0qYSbDnkhMxnAVa+QPM=; b=Iz1UEIc7Lf0hrCvwSv9vx/IjnPToLu3oIvLM9djOy9kWP4ChdRdlBbPHmj+Wu7uxs4 6Pzds8I0vFwlBSZQIZifzOlDaXENzDf8rp8uksPC6m36JAB6+pXF5y77KXVuKg19ABG0 r5JGgp6QUF4hmzQuVc236OfzJwoAE6zJIfl88NP6q0rt4OnIy5qa4H/BHpfyGxOWS0la G++fEGhiK7AG0qhjUMyF7m47qEvFGYu1v7LqKJIqHnjPTcKzWSWTaZxXW6/MhchMu/rL ieN3js26lS55mhxdMBbI36oqz1Xikk7JiGnhkCg0heJEzEQKrG8QM7o8pGivuCvUPhgY k+3g==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=KsEcXvT2; 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=1747139468; x=1747744268; 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=U5g9kVyeT8FRbKXHoReSexp0WTUD2/pRHcc35tfR5Bk=; b=lcHRy9NVx3MvF1Ysl702Wa1/sGAAZC5+DdV/X8/NgymFQkUEFId7Rb+cbMKZyDVg0a H7yBNP56Z/ESwRclYlBTBYeT6rlqbsacWyQNpxrwTLmubsybb+eM+wR9K+U0trQ43YVa 3VZWQKxs4Amyob44gNGHMSvhDx1KnWKss5MZw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747139468; x=1747744268; 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=U5g9kVyeT8FRbKXHoReSexp0WTUD2/pRHcc35tfR5Bk=; b=gpOlt7KfVYIPZkAsZlda7wBotr/X2va0bmYaDnoXzUGNPIWUlYUqAtLtD69TKsltHw rQz6Bda63AteFgIp4BLpdmYtOt92Im/3UAAF6yCV6j//exKLh85e09LZ0XrZ3RVfMmvD ANa4sxarxov8QWWVn+aWo4D5D4VTXyaqz1ZpqRQxozJaQB4bFWRx5RTwtqkhdo0VATEX +UvYU4TqgpqE9yXERvb7KHkrh2QYBG3YYx9VPPIcne4lW4crLbmA9SJOsOg7Hp8cALiC 9srQ31zSzbKz/Wfnqi05sXYKur9vvEDGhHhQUpRK94KgnCbDc+fflAokbmh3/mVw9+4F OWZw== X-Forwarded-Encrypted: i=2; AJvYcCVc0AKdk3YIRCsgPm13SCfdHCzNWjn6fPgiyrbDpAJwrRmAm7MumY4UtoB/01e4N9E+KWOuLKw19ckzHMu9@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YwcqWa+TJreLXtxOw167s/jbNa8OrmDqjXptwJffiL8A9yDp6Wj HHJbY02B9I4bvIWBV/H8lrTlXLxUDx+s2BmINqZKgfTiibqm66Co4FsaE6F566eymA== X-Google-Smtp-Source: AGHT+IGbznDQxSimLSNIvTm1qkt3284uiqxJ15iVvmvFvEyZpHYx6Ydr3O7fB0V8DUpOiYPHlXW2xA== X-Received: by 2002:a5d:5f51:0:b0:3a1:1227:149f with SMTP id ffacd0b85a97d-3a1f6421c7emr14699780f8f.2.1747139467787; Tue, 13 May 2025 05:31:07 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBH+EMPoyrdQnWMzor16S3nKPBkASSQB8GxEgnb21WRsDA== Received: by 2002:a05:6000:22c2:b0:38e:dccf:edc2 with SMTP id ffacd0b85a97d-3a0b96ed8b6ls535015f8f.1.-pod-prod-08-eu; Tue, 13 May 2025 05:31:05 -0700 (PDT) X-Received: by 2002:a05:6000:2088:b0:390:d6b0:b89 with SMTP id ffacd0b85a97d-3a1f64ab604mr13065703f8f.50.1747139465292; Tue, 13 May 2025 05:31:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747139465; cv=none; d=google.com; s=arc-20240605; b=e+4zVAyfnFeIti0mBba+pY80Ac3zpnYCYgfd5KPcy/l2WuMHzf0ngEtTn3O8FBKt7u Q58rA1Vp2fpJKl1/P/ugnBCPu7q+wvOZ+CRqzBfEINtpX581NmOBuIghAzGvn4L1pnbg 9TIh3M7LPcJUoOy9xH8dUuJGI1dLDU+E95KO+qtUDfawETxnaO+x+KJJq7FD0FrsabCk qGFAn+0zvitOOle0B5+yXI2m9NOsUwA4Ca9DF4nBmlhwzkifWv8ExmvLzPvIIvj1uS69 AlQ0orSMZdKY3YJrZ7DKZfLf3JzEM8ZsRJHTRMR9axgqGIN7ulRe2dxVwsUMWSIRROR3 qolA== 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=/LQRbYwJIpKgMCHZCYbBh5C5gxUDaQ9e/iyikBh5lZ0=; fh=M7saD4gwuSwN/q9omWarauPu+laQHwN68KciGi2hat8=; b=eTPFYZAChPSvGuJVocBipbOEVfMRr9VkGB0MZMRsWrLWSmPbZxF+QWma5JUGMY9X8m YDl8irywuJaAsC7PowsrhPjxkDq5js2nAtwsHpI4hgfoZk+gSrFOKX3qRijGqHpz+UAc tOdF5c9r7r1zsuSQdxbdsAureHxFy1lk6Y8+PfZVBcaOgW/7HAU9j3haN0SF410ZAy6R 8V+JhTVtl5rWz/n/L44RDt+Am0BSNiBud4fz2JhVF7luBS/WnuceNuH8dGXePJh2H+Bh 2CeYp8hjRGK8XfmJJtVjCRteLIBG2bRH4vVyb8689qNhZ9Gd0dTOKIzVekf/4FCFAYOj 9jiw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=KsEcXvT2; 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 ffacd0b85a97d-3a1f5a7b949sor3657824f8f.5.2025.05.13.05.31.05 for (Google Transport Security); Tue, 13 May 2025 05:31:05 -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-Gm-Gg: ASbGnctTuZ4ROBMLzHnlYQlUVNzjW8E/6O5KZScG1Vyckf/KfbIgUXdZa3qZFHFSqlz Xw1cww9oJymSRk2yFYSDr39k1metcbM6eJqpXWYTZZJO8CbUXXSx1fHePCLBAt3F1oLHoohmisv OYq36ptVxy9nUibrfK0BPfiYJl2nkN9ptMkXE8Fer075nKY3b12GR+es12pfC9baVGNut0hqjCd 9MibNrWZjJLnEBeJDIkHI9WTtKWlm3Kp+asDppuuw8JUL5FV51mh1MRwKN9YbrCsX76+tUBnu6/ lMnKolSgGS55f5IpA9rk/EYt2eu73ka3ZY0p1VgIh3Ny0lL4hT5qB1pyj8GQbXahoyUG/64Xa9a G2yVqQKEHuMt9W4gVg7Ooe+r6bXzbsDwMKDdg+9Cd/A== X-Received: by 2002:a5d:4fc7:0:b0:39c:1257:dbaa with SMTP id ffacd0b85a97d-3a1f64b5a66mr11310810f8f.58.1747139464575; Tue, 13 May 2025 05:31:04 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.amarulasolutions.com ([46.189.28.50]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a4c5f6sm15935972f8f.86.2025.05.13.05.31.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 May 2025 05:31:04 -0700 (PDT) From: Dario Binacchi To: linux-amarula@amarulasolutions.com Cc: michael@amarulasolutions.com, dario.binacchi@amarulasolutions.com, Michael Bode , Simon Holesch Subject: [PATCH 1/4] board: bsh: imx6ulz_smm_m2: Match SPL DDR settings to DCD table Date: Tue, 13 May 2025 14:30:36 +0200 Message-ID: <20250513123039.1676913-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=KsEcXvT2; 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 --- arch/arm/include/asm/arch-mx6/mx6-ddr.h | 2 + arch/arm/mach-imx/mx6/ddr.c | 3 + board/bsh/imx6ulz_smm_m2/spl.c | 235 +++++++++++++++++------- 3 files changed, 178 insertions(+), 62 deletions(-) diff --git a/arch/arm/include/asm/arch-mx6/mx6-ddr.h b/arch/arm/include/asm/arch-mx6/mx6-ddr.h index ad9c1ac906a3..bd3ff65bcd96 100644 --- a/arch/arm/include/asm/arch-mx6/mx6-ddr.h +++ b/arch/arm/include/asm/arch-mx6/mx6-ddr.h @@ -457,6 +457,8 @@ struct mx6_mmdc_calibration { u32 p1_mpwrdlctl; /* lpddr2 zq hw calibration */ u32 mpzqlp2ctl; + /* MDC Duty Cycle Control Register */ + u32 mpdccr; }; /* configure iomux (pinctl/padctl) */ diff --git a/arch/arm/mach-imx/mx6/ddr.c b/arch/arm/mach-imx/mx6/ddr.c index 5a1258e002d2..749ceee0cdbf 100644 --- a/arch/arm/mach-imx/mx6/ddr.c +++ b/arch/arm/mach-imx/mx6/ddr.c @@ -1444,6 +1444,9 @@ void mx6_ddr3_cfg(const struct mx6_ddr_sysinfo *sysinfo, mmdc0->mpdgctrl1 = calib->p0_mpdgctrl1; mmdc0->mprddlctl = calib->p0_mprddlctl; mmdc0->mpwrdlctl = calib->p0_mpwrdlctl; + if (calib->mpdccr) + mmdc0->mpdccr = calib->mpdccr; + if (sysinfo->dsize > 1) { MMDC1(mpwldectrl0, calib->p1_mpwldectrl0); MMDC1(mpwldectrl1, calib->p1_mpwldectrl1); diff --git a/board/bsh/imx6ulz_smm_m2/spl.c b/board/bsh/imx6ulz_smm_m2/spl.c index 724841b57456..0fa510446813 100644 --- a/board/bsh/imx6ulz_smm_m2/spl.c +++ b/board/bsh/imx6ulz_smm_m2/spl.c @@ -31,70 +31,184 @@ 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 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, 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 performence improvment + { 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 -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, + { 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 + + // {0x021b001c,0x0200803A}, // MMDC0_MDSCR, MR2 write, CS1 + // {0x021b001c,0x0000803B}, // MMDC0_MDSCR, MR3 write, CS1 + // {0x021b001c,0x00048039}, // MMDC0_MDSCR, MR1 write, CS1 + // {0x021b001c,0x15208038}, // MMDC0_MDSCR, MR0write, CS1 + // {0x021b001c,0x04008048}, // MMDC0_MDSCR, ZQ calibration command sent to device on CS1 + + { 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, +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 = 0; + 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 +222,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 Tue May 13 12:30:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4002 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 35F8E3F049 for ; Tue, 13 May 2025 14:31:23 +0200 (CEST) Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3a2046b5e75sf833263f8f.1 for ; Tue, 13 May 2025 05:31:23 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747139483; cv=pass; d=google.com; s=arc-20240605; b=Nsl79Rr+Dvmm4SCXSI2nysFxeGWyxEElr3EbbTQZFt1ygTsaAnGZr2F0jBjW6AFxpw kZqme055NZDgXqKPyBDlTHSGGyyQmxm+yQ9sW8Z6nZxR7kOaV0jihZQgOPhnfbudDuT8 +AmVO3lHaguMsvHlsGylRQ2fWswr79ZuZqaXRxwLogyfjoTqr6/YFJg7fgVlv5heDW98 USUC0NQmgh4yBWYQb4bxB1jl9zwWvL6XmWOoJ2TMn6eVFtcX9NVv22+YDWZfAn9vql3z 0FlfAUxgamrTpu+P9RIdc8SziBk/j+0tG7RDBF6C/LIHjLDxo6t7G/iys3KaL8WYaId0 fq4A== 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=WvFCEXZ/7Tag/KMruxYe9ukiBmmV7mpZmpThXlslYqA=; fh=MInt78l2JyR1AgsVB5C8/pXAoF0W/ki5NgvNhB7EBmQ=; b=gxRuEuAQ+JUdAri8B1KR7IuqsYLKM91Pk5ifFwIynulsrmBynmsMry73RhAY0MvBqA AOMtRQT0nEVziClHfh4JOQiW0wC7YoF+dzKxiIYLGW+nq4d2LSaXeI/WHbnBD81v+3eU UAPrySgTT69POi2ZwIdEgOtf2CyrT3lLakoTw9YP6lJ093Poe2IZDeYcL+J2F/zcJn5J rYB+77PwmZT9gwNt9DVOgRFil0L4B/JbId4nNuXDj2LWglDvKcdA6ErUNAiE8MEng38Y s2P6Z4V7aShM294Djoyv5AsKrqrgi1EW+IhHpM6Q2/4rpPglRn6zDPhnOVlIRuEFHHZ+ rqMQ==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Enc0D8wO; 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=1747139483; x=1747744283; 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=WvFCEXZ/7Tag/KMruxYe9ukiBmmV7mpZmpThXlslYqA=; b=i1Uqk9JOaNiSpf7ruqjPV4Vk1VaY/DPNz+bOvvM6GurY6KP8qh/dPUH0XUTsWTz9Tr eeYjTR4vFgCk/O7110jVX4UetlxGE01P+T+IlfS1BmHqpxk/BXTwPcYCipy2s8GKwbxn YUQtuPKRHGj933+rXriXBIxEz7xSH84MLg9Sw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747139483; x=1747744283; 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=WvFCEXZ/7Tag/KMruxYe9ukiBmmV7mpZmpThXlslYqA=; b=k66ShBM+DSWsGSBrs8hSun0WDXDbx7A7vZGhcLIfIxZUcr5Acm/XK5j8iZnuMqVZru il3ZaxysAMeUz1Ji92KzavYpdyh7TlEjMvpjjOk3mp+4dXFhBhzoPrywhVpjB0p1qGJQ 1YmfGbIwsBei2aI3PZ5YbyXJJiOuAQYElTnZsZRgUQx5RV6qpbJUF5eQUcLrLy8ns52N jVAqAbT6CtLqbaWGePbEnusJ9fejIHW5ANc927+49GvTJzIEHD9EvMLhpeq806oYKYuF nuzgfUxkpowPQRy4Fb2EkVtk/NVJPqwu2CKlbBBA8UmX39eSTnugNxcYsVYfx3XNJXnM GG3A== X-Forwarded-Encrypted: i=2; AJvYcCVZThcBrqRM1lX8DjEI8cBaIOiWOxIipC7LmumeObIH22qTZEm+b8MLeFl9u/spEPBUZzxx3UwcgFxmAWza@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YyuWXy64rsJRqHWanz3rT9loLRBOICQd+yak27OERyxK6ev6Pow Id2iUuyQKBWy2x36uUvq7M7uhxdllXCDk3Mv2AE9NA4s7X8D0lMdedXNTOkecNL/sw== X-Google-Smtp-Source: AGHT+IE5wmnrRFUyuu0yiLTN6ck817cooYijkDFo+1UTfbJ61SCCWyHcAMw1Ne4NPozXEL3ufwxLZA== X-Received: by 2002:a05:6000:200d:b0:3a0:be75:1bb1 with SMTP id ffacd0b85a97d-3a1f647ffe8mr11864688f8f.42.1747139482552; Tue, 13 May 2025 05:31:22 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBGBQXdDSd4GmtPGyqDfYQRAjV2+rgO6t1ykHO1D8oSkfQ== Received: by 2002:a5d:5f85:0:b0:3a0:b2e4:10d with SMTP id ffacd0b85a97d-3a0b971e2c7ls1603599f8f.0.-pod-prod-06-eu; Tue, 13 May 2025 05:31:20 -0700 (PDT) X-Received: by 2002:a5d:584b:0:b0:38d:de45:bf98 with SMTP id ffacd0b85a97d-3a1f6421ca5mr13260630f8f.8.1747139480028; Tue, 13 May 2025 05:31:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747139480; cv=none; d=google.com; s=arc-20240605; b=JwKiWw7hkzAaaDKIRwvsTDvzzEsE/GbMsSOxpTbWdNIxpQprGgKbjdqR0EJvTrQMHV RmrzzQhJ0rj559SqC7JNvR0lTi0ttuHmrKIeUSRQpU9FYb+8tTwQsn66WlmEZa0GxSb2 yEnDLVGOEBmQ/Y62QT9Jnze8Xer7gggGY/9NPf6aPMERu5Eco8rz+pGWhAxj2RI14FCz xnbuRf3PgAu58/TCw/HV5ByKZZUUjJQfszEdn3Q5kOnJNqjODrqlZ23BEpfajXIIz/ch ErArLwicq2VtfFSm96e9Ibn/IF91tnJWbF+3oPk5etAldWFaphNiy8BxMhZsSTpiKHQD vA0g== 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=pD+rwNmUJnt88sF+cAKZI16EUTi6O3TlFzMvmLHD078=; fh=dnPft8Od+jdTrIisV7kUcEv4J69uhTjILCBlI96fYwU=; b=evkt5G/cbMRkH2ZWVxvv621SAWhXCwQtvmBHcXeztZmcElwVl2xVUgudJkR00UB2wk rOrr6i1al176mc756KzGbM8RbVpwU9EfoLv0eGjZrcO0BmqtloB2MsMVXIQPtnA3kKY5 FUUeGzu5D0j6oOGNVrE75Aa466t+QH+D4pCJAwd+gr4Reh32iRvs4KT2rLRE+D54EO06 3R3h6dagjFq2vxKQ8FH3hc94jRNDeDply3Thlnf5xVW+IGBRNYP0o2F/0cwqBG5OqOlY znLBBCgcedOyR8Ql3B/OjJHlGk2aahW034itIUHg/ug3AyhdGigwKoYDxAUWYWu7fTgN 3XxQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Enc0D8wO; 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 ffacd0b85a97d-3a1f5bf7a5esor3883990f8f.5.2025.05.13.05.31.19 for (Google Transport Security); Tue, 13 May 2025 05:31:20 -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-Gm-Gg: ASbGncsTKYYYX7UqUQqC9AF2xCcvtVUR2SMdX+f/s1hiuhyzDZePRAIyPulaFmGfuZr UwSiiqjHO06DqYKlQe6lqDCiAPMThxWR2iF0zpZPboiVuw/5UcD4FKx0i8hIk8hd+A2/+/34psL RxCs7OvVtskx3cWVsJBsH9197N7D27jfAgZOwsFGVCueBFXOpPosyKRK8NoGhqVXy+5p1I42GV2 HdoQkuY6GJWhQgDpTgzMXksbH18X6JB6yV6PaKwYn+WZiflVZAG/jhr+PYY8+N/4Lyt2uLAnu3S lFZ4biVMNEmsbKeADZVdXXz3I2RkKdzEmaFh/d8d4j30KmGovM1/LQBvw+ieF8HdzUCpI/QUbk3 CRw4V5lEIEA1814C12KeePZrxzhvvX5aBBvH1JyiKuQ== X-Received: by 2002:a05:6000:4021:b0:3a0:bad4:1247 with SMTP id ffacd0b85a97d-3a1f6431166mr11525919f8f.15.1747139479247; Tue, 13 May 2025 05:31:19 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.amarulasolutions.com ([46.189.28.50]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a4c5f6sm15935972f8f.86.2025.05.13.05.31.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 May 2025 05:31:18 -0700 (PDT) From: Dario Binacchi To: linux-amarula@amarulasolutions.com Cc: michael@amarulasolutions.com, dario.binacchi@amarulasolutions.com, Michael Bode , Simon Holesch , Wolfgang Birkner Subject: [PATCH 2/4] board: bsh: imx6ulz_smm_m2: Add support for 256 MiB DRAM Date: Tue, 13 May 2025 14:30:37 +0200 Message-ID: <20250513123039.1676913-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250513123039.1676913-1-dario.binacchi@amarulasolutions.com> References: <20250513123039.1676913-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=Enc0D8wO; 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 --- board/bsh/imx6ulz_smm_m2/Makefile | 2 +- board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c | 147 +++++++++++++++ board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c | 141 ++++++++++++++ board/bsh/imx6ulz_smm_m2/spl.c | 182 +++---------------- board/bsh/imx6ulz_smm_m2/spl_mtypes.h | 26 +++ include/configs/imx6ulz_smm_m2.h | 6 +- 6 files changed, 339 insertions(+), 165 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..b1df7e7ada6f --- /dev/null +++ b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c @@ -0,0 +1,147 @@ +// 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 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, 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 performence improvment + { 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 + + // {0x021b001c,0x0200803A}, // MMDC0_MDSCR, MR2 write, CS1 + // {0x021b001c,0x0000803B}, // MMDC0_MDSCR, MR3 write, CS1 + // {0x021b001c,0x00048039}, // MMDC0_MDSCR, MR1 write, CS1 + // {0x021b001c,0x15208038}, // MMDC0_MDSCR, MR0write, CS1 + // {0x021b001c,0x04008048}, // MMDC0_MDSCR, ZQ calibration command sent to device on CS1 + + { 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..d7737f7b5b13 --- /dev/null +++ b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c @@ -0,0 +1,141 @@ +// 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 0fa510446813..3b3b295d9ca7 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,165 +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 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, 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 performence improvment - { 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 - - // {0x021b001c,0x0200803A}, // MMDC0_MDSCR, MR2 write, CS1 - // {0x021b001c,0x0000803B}, // MMDC0_MDSCR, MR3 write, CS1 - // {0x021b001c,0x00048039}, // MMDC0_MDSCR, MR1 write, CS1 - // {0x021b001c,0x15208038}, // MMDC0_MDSCR, MR0write, CS1 - // {0x021b001c,0x04008048}, // MMDC0_MDSCR, ZQ calibration command sent to device on CS1 - - { 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 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 = 0; 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, @@ -201,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..f8dba6fb13f1 --- /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_BOARD__ +#define __SPL_BOARD__ + +#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_256mb; +extern struct dram_timing_info bsh_dram_timing_128mb; + +#endif 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 Tue May 13 12:30:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4004 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 F226F3F049 for ; Tue, 13 May 2025 14:31:39 +0200 (CEST) Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-5fc86ce3c54sf4370144a12.0 for ; Tue, 13 May 2025 05:31:39 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747139499; cv=pass; d=google.com; s=arc-20240605; b=jjUoBqwJFg6hPf/QYgbl61k7s7Xuk+OZ6IxjF7kyoELaJR4kDH/2jOY/PcL63BQzJ5 0z5A2bInf8VSMT/f3tsfozWrsop+LcXFiDteQrHxj38E9FeOLyvlzGK3VTEZT8CrGCZy qfxIB297A/RO1gG2t/zMS5sVG9/95om1Nv2IGnZRXGGkHYCPEyA7cA9ZF4uMYflyw+v1 Luj+oQ2wOklowLpn576X0uJ8BsaczPIbwdi4ax1y15w5rKBJXZi6WnkZeZcSYPG/PEpG dXeE40HehobjkCtTH/PotbUVPGdNByNTFsQL/7N6OaDMivjgZFTRJ4khRTiXueJr0Jrl sbmQ== 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=3rsD1Sb8mmPCU3q3/qyjwc+b2wMglVLJqOIp2HFEeJ8=; fh=ixnu+vU++25QvJj9a7sBLgtTKa2iuXEQCv69zwFxzJY=; b=lHLltZvi70l1uRlyzjDsA1Cg8lCf73ysRf8qmDnpuWSlsfjmZapwDGhc/xZAkL1ZxD 5OhDYUucHxmYTdx3ij4PgxqrS6rTPdiXw/nXPr+xD1ZEk7cudGVg0KQ6vOdO/ZiffQZd JaI6ZWZKgTq6uOoZqkKKQMaaZLqm2Dewi3tCMJmJCNXz17xynUU2ZhVMgp9duzHr4RSb qk/RZvZSWW/dRlcjbEKgzaWprGM9lBlbzxSyD1DlZAto+6G/lEyYqUhYiwbFM8P0i62c gaSlwbUEoqCFhNWHKwCDlcg45LFMZguA62nq1U1DMUWiz+gbLxXltSuhsr0COjCYDmXm Nq4g==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="ByOcjrv/"; 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=1747139499; x=1747744299; 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=3rsD1Sb8mmPCU3q3/qyjwc+b2wMglVLJqOIp2HFEeJ8=; b=XjtA4mZQ41pP1JCj3PHPQq6ZNjUPINbqbtrAk9IKD+uRDlopWe8+u4T4lx+l/xJRac QMQfISveDArY/bDHu2acCP9rNhh95oI37+Br08kCNnt3EkX4tdeOWUZ7c7eOgaQiVu2O qonzXV9BnpV+sQEIwaYKh1G/8vqZ3MFpQRqDU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747139499; x=1747744299; 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=3rsD1Sb8mmPCU3q3/qyjwc+b2wMglVLJqOIp2HFEeJ8=; b=fJMxetF7JXUoLWb2NNjvWN8E0ZQJGziJLKqskThExjH8chS52o/ptt4odqTyhfyg8f SCTuCLTvImvSA9ioRduHol+35sHiB3nJGmx7Jt8HbRZERcAC+6H8uoitMEjdMks1vT5h +K5WEBkGOtuAvPQH+4UVdhZa2WM4HS3FZBLEKqDiMdGxkmK9gBa0CaqARC3KfZ9r0Ana tIIYAi4U/fygEmizDPxYFtxfBjc0gy8+QxcFnehCwuWhAgcL7zPEXAiXr5Jk52ZEg0HL 2+eXG9mHo/Wyxn5zv1ZBHNieNd6lfL2PogwwEEK1ISKdReNTb8TQUEzJ+Ht2a6Ra8TKr c2KA== X-Forwarded-Encrypted: i=2; AJvYcCWfRdwp6LA2+LvR9DCGGcprM7ys9PqP4SoS2dq55v3aG21zAH2V/YwsSdWgwE43mwWSXjg3SpGGT/cMTbdY@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YwcWS+0bqVFE+YxNXB8a+gOGUFDV6MsscdN43RnZViuulSuXY+G O0so4SZ/fcHe3splyksMWMz0lzwor0olIzkIcvX4mZb7JNJYLxlKv5BH7QIvLQbfUA== X-Google-Smtp-Source: AGHT+IEtEMAaOb3cgujUllz5Kh1rSagLnvXlQV6B3EMQlVgAAThAi3fvZHHR8VnLR5LhpBi4piC8Xw== X-Received: by 2002:a05:6402:2686:b0:5f6:218d:34f3 with SMTP id 4fb4d7f45d1cf-5fca11dd3b6mr16979363a12.28.1747139499441; Tue, 13 May 2025 05:31:39 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBEzx5KbfzBwzTKGysHz7mV/aIPfGyOD+5LwBPbdPUmvBA== Received: by 2002:a05:6402:26d2:b0:5f6:38a5:a5db with SMTP id 4fb4d7f45d1cf-5fee62c105cls156486a12.2.-pod-prod-07-eu; Tue, 13 May 2025 05:31:37 -0700 (PDT) X-Received: by 2002:a05:600c:3d05:b0:43d:ac5:11e8 with SMTP id 5b1f17b1804b1-442d6db8d28mr130155345e9.21.1747139486027; Tue, 13 May 2025 05:31:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747139486; cv=none; d=google.com; s=arc-20240605; b=GugTuJxm5sgKtjEWOiXy35QIqn2eQk633hgBAs26lRKJKX+T0+FX0PywC2Rae9sMOU MK/uyJ/DDPL/MW8c81WbDkGeg8gF5r24wOgbplh4Z+LNKN64+iqL6Rurm0I+FxBV48RA 0WkoJEojupMzSG8OirGrfCye9YZSi6bAIbyjBQ0dLhlL9vO9j3tB9Z+mxOWcnGobAnbo BXinS+JE0aIgmjdmkH7Tx6SSMHs8tG1l0ugQnIBkRqC26Yme2KrMfJFbUwYL0SYzhTRv 5Sh8G5+ZQ+9OhVoBTP7DOsdqxPQU3P6HpHCA33FfN5z3aQYwd/VL4VfeuQ58A72DMrFD jfxg== 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=5Ad10CMyChHY9O3VHneZdzIVtsOp/XyYiKdM1xZOr/U=; fh=M7saD4gwuSwN/q9omWarauPu+laQHwN68KciGi2hat8=; b=DrAloR32QmrqsCBqA3Ryi61Kx03RA18rbvTjujv4BTgcrlg8OboCifHWmNNV6jQUVn eB2ZH9DhPggan48FHjP4iVQrcX4dKzGvEnFASp6KUvaRgD+fXEnswyZajk0kmjJdnqLa ABIbb8Clzy4vHp2f4e48fsUeqp69CunTqF+/Q4QdIVJO9IlDu2r2KEnETw8TJOtdSfc6 NaVs2hOQ8z24CqQjIR/P2K13lwUM4vsOXxh9HWDUfOYK15x1ESJFnRdICNbXYxNXrcZm +QQc1+SPHvp7EJWRIXJUd5R8JT6BYouxp+oA70N+CtJ/C1SuCpFhnguz4LDxmQXxyy4S hVPQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="ByOcjrv/"; 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 ffacd0b85a97d-3a1f57ef5e6sor5248779f8f.1.2025.05.13.05.31.25 for (Google Transport Security); Tue, 13 May 2025 05:31:26 -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-Gm-Gg: ASbGnctMfld04oS312SWyaQ8gl0mhdKGbSII2fzTzB76yswbhSdVrCkFK3auI28RI23 By1rDoZElXTuphFynsVCKzMYb8bEf387J8ZFeVsnc6a5IMPa5064nm5HKSmfevXcXs/DwUiVMQx wQWMDkmQDT8aab6eANhwH3V7rEBPEhqJI76Tmt48t8imVWiVakkxhJMuTaZq7VRtxhUOH5Eo37J S/rL6bZmAO7nKghvg3M+1+f89OkTu9wXcC8w9UX0AdkrPgYQHo5flkyx1TWYI9f1BLgg2tRxQ/r GWYDuPneNwq3aASJYuD3R6l+hPU48rcY+X6soRatxgm/cp1/dKTc3w2MYwECbsdwyVeGkyqjZkw hsklcKZGNOovbB+wwDuT5IdrO/KYAfem+B1LZKcWaSg== X-Received: by 2002:a05:6000:2ab:b0:3a0:8a13:3244 with SMTP id ffacd0b85a97d-3a1f6445c2bmr15174452f8f.27.1747139485300; Tue, 13 May 2025 05:31:25 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.amarulasolutions.com ([46.189.28.50]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a4c5f6sm15935972f8f.86.2025.05.13.05.31.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 May 2025 05:31:25 -0700 (PDT) From: Dario Binacchi To: linux-amarula@amarulasolutions.com Cc: michael@amarulasolutions.com, dario.binacchi@amarulasolutions.com, Michael Bode , Simon Holesch Subject: [PATCH 3/4] board: bsh: imx6ulz_smm_m2: Add support for 512 MiB DRAM Date: Tue, 13 May 2025 14:30:38 +0200 Message-ID: <20250513123039.1676913-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250513123039.1676913-1-dario.binacchi@amarulasolutions.com> References: <20250513123039.1676913-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="ByOcjrv/"; 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 --- board/bsh/imx6ulz_smm_m2/Makefile | 3 +- board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c | 139 +++++++++++++++++++ board/bsh/imx6ulz_smm_m2/spl.c | 9 +- board/bsh/imx6ulz_smm_m2/spl_mtypes.h | 1 + 4 files changed, 147 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..e59247dce0a1 --- /dev/null +++ b/board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c @@ -0,0 +1,139 @@ +// 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 3b3b295d9ca7..dba5982d0865 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 f8dba6fb13f1..0d79b9758f31 100644 --- a/board/bsh/imx6ulz_smm_m2/spl_mtypes.h +++ b/board/bsh/imx6ulz_smm_m2/spl_mtypes.h @@ -20,6 +20,7 @@ struct dram_timing_info { unsigned int ddrc_cfg_num; }; +extern struct dram_timing_info bsh_dram_timing_512mb; extern struct dram_timing_info bsh_dram_timing_256mb; extern struct dram_timing_info bsh_dram_timing_128mb; From patchwork Tue May 13 12:30:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4003 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 76C6A3F049 for ; Tue, 13 May 2025 14:31:34 +0200 (CEST) Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43cf172ffe1sf38690345e9.3 for ; Tue, 13 May 2025 05:31:34 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747139494; cv=pass; d=google.com; s=arc-20240605; b=bc11zhP9pPxNAU4GGLU+qguoRe3NGOOumuvj2nOXlWit6sXAK0qoAWUrGMSjYkO+Uk Q+g3pXh7qtT238TQ30YMRISEaZSJGo6CCFKLYYA9O1bg3NwtkhqAs44GUabAI/f/bU00 0ndAsAxKiFQdVnAN5MyUDuWzs36213cpjty9tOjtSxzGWCP0r1jU+7itOa69jvZWPaN8 eyxxVIQH1mxYIOq4QvrDrSoeIWsFGm4DB6xLugkmfCD5YoNwnD4MeWi4Spzh4EkbU9NT ImLiNO97vfhW+5kJa3LRodtps+CszCztvz6SP2N0LeZe2UysTmJHceU59U013kuY2Pc8 NDxQ== 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=NAZM3fD9Vsx3lEqhatqOi7DVpMYEUUKLZ3jAyexG4OA=; fh=Z0fREcyzjGFdymCMRFFeScuSfOWbUdB10zNots3QIMM=; b=Y6UfuvLmhpjz1GRSi1o15gKYgSlfhrVj4hVUY/NnJVwwCMpNX6ehSEaKjAZmRn8KR2 +QFApm02kpl5PtKM2IsFMq004yz1xcxx0spLDrPEeDm7vAQLSVz1DliiTfIne9AEL8yz xbUKWGG4hzHFEPgoVVHxT37mZz6fcSJusMSZJNfbCJbOjd53suV63u6Xsqs9kJq6lJ// V2E7vYY/0yi7rtG4OZYvQ8NnPLu7l6wq361BKg2NLXXsX9sTVbLcshMGdhQdJs2Oyr4k vPyEFDpQh27MRYtsVPjTRmIUmpm4ZuC9XfZDJFmN8rLz8O3IV/b6e3fbmyDg3HHIxO4/ nfaA==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=L4RcG3y9; 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=1747139494; x=1747744294; 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=NAZM3fD9Vsx3lEqhatqOi7DVpMYEUUKLZ3jAyexG4OA=; b=D2QOUMCMHAqsUIDPS7EpviaBjCK2JHPS3ELPeJJBIg6YvTvLMoWO7CmPLbQQgvfsX+ Us1LNM1UrGYKkbuCxdzzVukZ+g7uGkl1N5jAshVCLJEMX0be8uiYsOdz6yVdD7KRivI2 iQtWQ8Yb61lU2zWwnlmJJ3Gl57eqv/qd7xhA0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747139494; x=1747744294; 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=NAZM3fD9Vsx3lEqhatqOi7DVpMYEUUKLZ3jAyexG4OA=; b=i3mVujqwZnS77VAWPAjRjHG90Jxegb9mTWmvGUTeMTOGdfOo7tE3Y+lPQwyZCOlfiY FRzk/gdgRq34IvPiW15F0WeQ4QgpSse7mYAYcFkX1oI43lG2ZqcYMjbtvvWC6FnygRvj 6EfWx2yeXgjkuh56l5LOWRV3x52kGI/t79j1U4VNlxvgD+SqGL/Uw0hORXnas63JA8rG DX+LtbOfqrkFb5fw3i7MXBkOiBca9DOzK3wo3SdJlaS41utlvBbhxNJmiJvnD6S6Itrr bcL8R4RGieyXEoClA0IVhwQ13A0iADAT2kA6uLj/wsdqpWETp0/7yAmMU+ffirP7JEb6 GZOQ== X-Forwarded-Encrypted: i=2; AJvYcCUq5IyPdMhWbyOzsMQfJRzGUA6T6aUvv6B9sYKAoXSAXd+D2d7Uw/W+YKfSv9tawJAv6dgeeQCdy1fxgypK@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YwUS8/4x/fzOH1k2zCHynzH5SE7NOlHrz2Tv94JlYWNRlh+rI83 J6OsjO2BL8LEZyDlZU34//4CvAF+kk+ErTi+8WoHpdsbdibNI9zYPf24i6StpP3LPg== X-Google-Smtp-Source: AGHT+IFtTOlyT1+tiCr8DNr405l1g7NhlM6xt2KPyU/q8OSxjWgXTaGtxG96oCQB6sL7BPW2gzEgLA== X-Received: by 2002:a05:600c:628c:b0:43c:f8fe:dd82 with SMTP id 5b1f17b1804b1-442d6d6ad9dmr146615445e9.18.1747139493756; Tue, 13 May 2025 05:31:33 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBFDPzp9NtxTJisdHfFwUtjlmjq5GcxmNHWoqWuma9TRjA== Received: by 2002:a5d:5f49:0:b0:3a0:8097:f42d with SMTP id ffacd0b85a97d-3a0b96ef345ls638781f8f.1.-pod-prod-05-eu; Tue, 13 May 2025 05:31:31 -0700 (PDT) X-Received: by 2002:a05:6000:4201:b0:3a1:fc5c:dec7 with SMTP id ffacd0b85a97d-3a1fc5ce05amr9001020f8f.21.1747139491286; Tue, 13 May 2025 05:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747139491; cv=none; d=google.com; s=arc-20240605; b=gWyeU3QRvVuvmlf6sOrN2xsi7kiHHzFIA/lKvAtP8YX12VoF60GSvtAEqpXYEzoZx/ dseI/vXeMv6bIBOmj0srUbmmJijpUW6QnIZ3EtBopE6Dwrb5/y34/E3Zv5TpyZcCDxO7 O8KsS0A5oOeUk5B/d76iB10ei+5FASHztpYrFphidyx3FMqpRs70E0QEHNs/ztFXAimS PTv2Y6dMvIMZJ3IX8INUu3/iBQmr8+0mKfkcleMaYeuOyV+Z5+x/o1ClUAvsESh4GKGT v+sP37LRvY6HGgG75t6+3YINev7J/TyOHflCIlvPPriAYSPR8gCyAX1LW9kJQE2o6YQi E5Sg== 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=dblZZpeCGQzzJdnMiEbY/ejd4sxMd0kOgEZcB7pfKTI=; fh=M7saD4gwuSwN/q9omWarauPu+laQHwN68KciGi2hat8=; b=HdYHJkI5ghu64wWtsUhBAlQCyiri/e+UHEchJlGQMxAB8u+noBIx08JTg3g7DdnTNf GP2uiado7ehWVF6ahlvUwddlPQAgO1vvRrxZ1MbTesP7kL5uWajLLGbzYOQVr6IQjjOp uEXdrTcwMc3nByGYEuGjVmZndfpiB+B8iw1Hxk+0RCUgO8F6vo4n0XnARWUJom9exY68 W9SswYXEpvZb2HsJraBBjV3aDlJEBKvhXKrbV6oPqkfYuyqqMllH+6X3P96KJTEDc3uR QtGoErCwwIDtkSHh2GicdZTn7Iuz+0mDwyMBz7L8C9Zlpl8u1SD78/vNUv0Q79OOFGBv 8rJw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=L4RcG3y9; 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 ffacd0b85a97d-3a207c70314sor2139220f8f.3.2025.05.13.05.31.31 for (Google Transport Security); Tue, 13 May 2025 05:31:31 -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-Gm-Gg: ASbGncsmEF7My/lCsEODwv3mjGlY9cHaKkusQ87OCELnHqcapeZZTGVbUP9PO5tvdfU Msmsew1efXBe3+CCo11D6wuPoXUHwtmebcWeRsyumBkAmDz/NT+m65k8JyIO2L+nVwi0kjxDLPw sAVLBP+JiJZ2QH6huaEBafFBGdf759IxV8T5DdtqlLzE0C8ul7dYh+e1YZkO7EuJTahtEiZM4LS ssDMUmBelHETSgKnahDFJEpP0MRLflsnF01B7UgGeVkCInOWjNsw40f7XG9NCsYqe6inhIfLo9w 62NamdfTG26GqN+ARulS4+5z3z2vU+0cke3RrLXl+3+j5UKdn+dagM3YZ52lzUhV+Bml+TFy+Io vx+pg/uPNq+zlMkFjVD09/n8wB7Tz4CimSMvJAiK8ZQ== X-Received: by 2002:a5d:64e7:0:b0:39c:2665:2c13 with SMTP id ffacd0b85a97d-3a1f64c0a16mr12562938f8f.54.1747139490657; Tue, 13 May 2025 05:31:30 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.amarulasolutions.com ([46.189.28.50]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a4c5f6sm15935972f8f.86.2025.05.13.05.31.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 May 2025 05:31:30 -0700 (PDT) From: Dario Binacchi To: linux-amarula@amarulasolutions.com Cc: michael@amarulasolutions.com, dario.binacchi@amarulasolutions.com, Michael Bode , Simon Holesch Subject: [PATCH 4/4] board: bsh: imx6ulz_smm_m2: Add delay between DRAM read access Date: Tue, 13 May 2025 14:30:39 +0200 Message-ID: <20250513123039.1676913-4-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250513123039.1676913-1-dario.binacchi@amarulasolutions.com> References: <20250513123039.1676913-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=L4RcG3y9; 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 --- 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 dba5982d0865..d1d38163ec19 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; }