From dc506f0c945e15b655e523948688d5a11d80bc5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20M=C3=BCller?= <philm@manjaro.org> Date: Fri, 21 Jan 2022 23:26:14 +0100 Subject: [PATCH] [pkg-upd] 2022.01-0 --- ...nd-add-HS400-Enhanced-Strobe-support.patch | 959 ++++++++++++++++++ PKGBUILD | 20 +- 2 files changed, 970 insertions(+), 9 deletions(-) create mode 100644 0004-rockchip-sdhci-Fix-reinit-and-add-HS400-Enhanced-Strobe-support.patch diff --git a/0004-rockchip-sdhci-Fix-reinit-and-add-HS400-Enhanced-Strobe-support.patch b/0004-rockchip-sdhci-Fix-reinit-and-add-HS400-Enhanced-Strobe-support.patch new file mode 100644 index 0000000..fdd0a71 --- /dev/null +++ b/0004-rockchip-sdhci-Fix-reinit-and-add-HS400-Enhanced-Strobe-support.patch @@ -0,0 +1,959 @@ +From patchwork Sun Jan 16 20:18:10 2022 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Alper Nebi Yasak <alpernebiyasak@gmail.com> +X-Patchwork-Id: 1580518 +X-Patchwork-Delegate: ykai007@gmail.com +Return-Path: <u-boot-bounces@lists.denx.de> +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@bilbo.ozlabs.org +Authentication-Results: bilbo.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 + header.s=20210112 header.b=pxD8XcKe; + dkim-atps=neutral +Authentication-Results: ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=85.214.62.61; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=<UNKNOWN>) +Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature RSA-PSS (4096 bits)) + (No client certificate requested) + by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JcRFN3hZCz9t0k + for <incoming@patchwork.ozlabs.org>; Mon, 17 Jan 2022 07:18:48 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id D991283565; + Sun, 16 Jan 2022 21:18:39 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.b="pxD8XcKe"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id CB61A81982; Sun, 16 Jan 2022 21:18:35 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, + SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com + [IPv6:2a00:1450:4864:20::533]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id 8194981982 + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 21:18:32 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=alpernebiyasak@gmail.com +Received: by mail-ed1-x533.google.com with SMTP id k15so56808471edk.13 + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 12:18:32 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; + h=from:to:cc:subject:date:message-id:in-reply-to:references + :mime-version:content-transfer-encoding; + bh=2C0Kn8ndmd1VI8hsfzZOWxonEJzD8EOw5DdhJ4lo2Cw=; + b=pxD8XcKexp3/3nZwWQc5Fzf8tr56kzXcBfjFBGpyPyY5uOW7lgPMG35P/hAmmRqjCt + Wtkc7/Iwv4kYPcSNyLGu1XSCz61QT5ebe5fvZSVoi89r0MxT//3PmMKSegvvCcgR3LHQ + Eq7BJanYguLYi+TH9A6f/9mNy1880LS0y+HZqtPP57t/IN5HTqLigVCpgY+Tip5Fbp2L + XCiQBcfUhgZgWvNK3TpbSl5c4BF2Zae8CwnjJ2KQnXgYre9P8VvDpqlZ/UvMNumtcgzE + vq855OrixSKXI3i8JvYTq2iYxfjbjvQ+wyYZJJRwMWvl2G684TOipwO/PiUIPzW7HVkR + lJ3Q== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20210112; + h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to + :references:mime-version:content-transfer-encoding; + bh=2C0Kn8ndmd1VI8hsfzZOWxonEJzD8EOw5DdhJ4lo2Cw=; + b=bkPYLiQAsc0W1z75zWZXWUMi6jkBfbRbj38s6luxcKEaCYdcW7uHy7LBDhgGbJkkcw + rRj95NVmrOlWy3I3LMN9HfFmiJRFAnRe0uWJQDDD/sDbbqTmXmpDZiR53sTdgOa5k/j5 + tykGRmAGRkuBBGVbSIN2Nx6lJNwqt7uQqQyC/2ZbV948EIQF79a3wY2h9Ew7oLkE1fcY + /5gB5GyZwH8AY9AuZl3oDIbI/zF7TFLE1rtkdyu5ut+r7Ns0t6LtMhtVUE5lJjCM2a7x + t/2c8DZ0Uicru+023yCnJyZIPRZ/w3G7e9K63mPJicdC3Ll2rPOVs0RZRIkA2UWiZ/hU + 9jTQ== +X-Gm-Message-State: AOAM530luCJvhPko2ejkD4MYe5YCCei3IQEUB0wAY4sz1ivzDFjKKlxy + v5M3nRdE4CFho2gC9F+l94uXfIZDnkQ= +X-Google-Smtp-Source: + ABdhPJx7y2/xLhbXxtzNtA2IFc/vo0kYP+2vbcwmSXb9Px8ofd4eyrBeCLlf/8uTj/A90mdA9GAqFA== +X-Received: by 2002:a17:907:9618:: with SMTP id + gb24mr14601890ejc.385.1642364312173; + Sun, 16 Jan 2022 12:18:32 -0800 (PST) +Received: from localhost.localdomain ([178.233.26.119]) + by smtp.gmail.com with ESMTPSA id b10sm4872469edu.42.2022.01.16.12.18.29 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Sun, 16 Jan 2022 12:18:31 -0800 (PST) +From: Alper Nebi Yasak <alpernebiyasak@gmail.com> +To: u-boot@lists.denx.de +Cc: Aswath Govindraju <a-govindraju@ti.com>, + Kever Yang <kever.yang@rock-chips.com>, + Philipp Tomsich <philipp.tomsich@vrull.eu>, + Samuel Dionne-Riel <samuel@dionne-riel.com>, + Stephen Carlson <stcarlso@linux.microsoft.com>, + Peter Robinson <pbrobinson@gmail.com>, Faiz Abbas <faiz_abbas@ti.com>, + Jack Mitchell <ml@embed.me.uk>, Simon Glass <sjg@chromium.org>, + Jaehoon Chung <jh80.chung@samsung.com>, + Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>, + Michal Simek <michal.simek@xilinx.com>, Peng Fan <peng.fan@nxp.com>, + Yifeng Zhao <yifeng.zhao@rock-chips.com>, + Jagan Teki <jagan@amarulasolutions.com>, + Alper Nebi Yasak <alpernebiyasak@gmail.com> +Subject: [PATCH v3 1/4] mmc: sdhci: Add HS400 Enhanced Strobe support +Date: Sun, 16 Jan 2022 23:18:10 +0300 +Message-Id: <20220116201814.11672-2-alpernebiyasak@gmail.com> +X-Mailer: git-send-email 2.34.1 +In-Reply-To: <20220116201814.11672-1-alpernebiyasak@gmail.com> +References: <20220116201814.11672-1-alpernebiyasak@gmail.com> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion <u-boot.lists.denx.de> +List-Unsubscribe: <https://lists.denx.de/options/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=unsubscribe> +List-Archive: <https://lists.denx.de/pipermail/u-boot/> +List-Post: <mailto:u-boot@lists.denx.de> +List-Help: <mailto:u-boot-request@lists.denx.de?subject=help> +List-Subscribe: <https://lists.denx.de/listinfo/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=subscribe> +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" <u-boot-bounces@lists.denx.de> +X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de +X-Virus-Status: Clean + +Delegate setting the Enhanced Strobe configuration to individual drivers +if they set a function for it. Return -ENOTSUPP if they do not, like +what the MMC uclass does. + +Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> +Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com> +--- + +(no changes since v2) + +Changes in v2: +- Add tag: "Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>" + + drivers/mmc/sdhci.c | 18 ++++++++++++++++++ + include/sdhci.h | 1 + + 2 files changed, 19 insertions(+) + +diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c +index 766e4a6b0c5e..bf989a594f7e 100644 +--- a/drivers/mmc/sdhci.c ++++ b/drivers/mmc/sdhci.c +@@ -513,6 +513,7 @@ void sdhci_set_uhs_timing(struct sdhci_host *host) + reg |= SDHCI_CTRL_UHS_SDR104; + break; + case MMC_HS_400: ++ case MMC_HS_400_ES: + reg |= SDHCI_CTRL_HS400; + break; + default: +@@ -666,6 +667,7 @@ static int sdhci_set_ios(struct mmc *mmc) + mmc->selected_mode == MMC_DDR_52 || + mmc->selected_mode == MMC_HS_200 || + mmc->selected_mode == MMC_HS_400 || ++ mmc->selected_mode == MMC_HS_400_ES || + mmc->selected_mode == UHS_SDR25 || + mmc->selected_mode == UHS_SDR50 || + mmc->selected_mode == UHS_SDR104 || +@@ -799,6 +801,19 @@ static int sdhci_wait_dat0(struct udevice *dev, int state, + return -ETIMEDOUT; + } + ++#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT) ++static int sdhci_set_enhanced_strobe(struct udevice *dev) ++{ ++ struct mmc *mmc = mmc_get_mmc_dev(dev); ++ struct sdhci_host *host = mmc->priv; ++ ++ if (host->ops && host->ops->set_enhanced_strobe) ++ return host->ops->set_enhanced_strobe(host); ++ ++ return -ENOTSUPP; ++} ++#endif ++ + const struct dm_mmc_ops sdhci_ops = { + .send_cmd = sdhci_send_command, + .set_ios = sdhci_set_ios, +@@ -808,6 +823,9 @@ const struct dm_mmc_ops sdhci_ops = { + .execute_tuning = sdhci_execute_tuning, + #endif + .wait_dat0 = sdhci_wait_dat0, ++#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT) ++ .set_enhanced_strobe = sdhci_set_enhanced_strobe, ++#endif + }; + #else + static const struct mmc_ops sdhci_ops = { +diff --git a/include/sdhci.h b/include/sdhci.h +index c718dd7206c1..7a65fdf95d30 100644 +--- a/include/sdhci.h ++++ b/include/sdhci.h +@@ -272,6 +272,7 @@ struct sdhci_ops { + int (*platform_execute_tuning)(struct mmc *host, u8 opcode); + int (*set_delay)(struct sdhci_host *host); + int (*deferred_probe)(struct sdhci_host *host); ++ int (*set_enhanced_strobe)(struct sdhci_host *host); + }; + + #define ADMA_MAX_LEN 65532 + +From patchwork Sun Jan 16 20:18:11 2022 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Alper Nebi Yasak <alpernebiyasak@gmail.com> +X-Patchwork-Id: 1580519 +X-Patchwork-Delegate: ykai007@gmail.com +Return-Path: <u-boot-bounces@lists.denx.de> +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@bilbo.ozlabs.org +Authentication-Results: bilbo.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 + header.s=20210112 header.b=paWh4v1l; + dkim-atps=neutral +Authentication-Results: ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=85.214.62.61; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=<UNKNOWN>) +Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature RSA-PSS (4096 bits)) + (No client certificate requested) + by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JcRFY230wz9ssD + for <incoming@patchwork.ozlabs.org>; Mon, 17 Jan 2022 07:18:57 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id DD7B7835B3; + Sun, 16 Jan 2022 21:18:44 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.b="paWh4v1l"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id B3BFB835B3; Sun, 16 Jan 2022 21:18:42 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, + SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com + [IPv6:2a00:1450:4864:20::52b]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id AB60181982 + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 21:18:36 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=alpernebiyasak@gmail.com +Received: by mail-ed1-x52b.google.com with SMTP id z22so56932906edd.12 + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 12:18:36 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; + h=from:to:cc:subject:date:message-id:in-reply-to:references + :mime-version:content-transfer-encoding; + bh=mFGD25E8/gXBhvYZrHJfWdRECSjkYQKAUcNX0UhwSxI=; + b=paWh4v1l6vK+NFDU+zjKX5QzmoIRCf1p8pIHZ9DxphdZmYVF0t+W0VhKHdSEu2fcTa + VfbDkUo+dayBL5Mmem6sWlB+GYSN/ZM+t8EpYYBe731sueNrDPkG8/QTwv7eWQyrtJz+ + Ib/u5b2iJMSzknDS92Soo/LXlpL4ZnkNuvfuWbKhnZ8fiG03Qez3k/NNrCszxN723b7F + EEoo3rfw0kz5bWBkalSNNN+9e4eKcfgLxBqRkauXZK274K0geaTpj4NMgDCl4tmVACCD + iEWhkHmU1Cv+pkp5dpq5T6mBDIcx1TqTtYC0oroxiSkR+kRmLxZdCGdZ0Pw+a56/5sMV + PEKA== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20210112; + h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to + :references:mime-version:content-transfer-encoding; + bh=mFGD25E8/gXBhvYZrHJfWdRECSjkYQKAUcNX0UhwSxI=; + b=NnwXsGusknZpOTk1WIs4OsN43EP2NyrGZ4So7kksQSUHMdcPRfEJ6YLFvVsbC05kDq + FqSirWS1MqtQiJBk97lSeBlxPgX0GkcWiG9PB9pjbgqXDVwSWCXnAzZa3Ks1eio5iO/S + wfBE0cBwR+zmmzy+SCIpxeWfObdQlaTeK3NVjNuZEZah/TdXwWkrMpCWTFy+tmwRK+cz + AjSqoHCICdL037739WTczcWLRY6FDVsiDqeWbHLtiz5reCZeUMubyNiA27Kou6DE6nf5 + NhCfiKGpGoZ1r7sTU+muwzM/SBWj4Ut71dRx3CKw7f33QaEXW8eFkalkDHVzqd4oJ8c6 + OpFg== +X-Gm-Message-State: AOAM530Ka9yN9AcNAYgPytKXI2GTyu3WkPgJJaY53WHdBINIBpimQ0cx + IpaomDT0bVH67PyBzE8qi7uIEIWHbaQ= +X-Google-Smtp-Source: + ABdhPJwrDIf7qEUFniBPQ35skp2YV6XYXTJAj98fJ3+VyQCMjeSu4pZ38v1eRXmIJU+m/Bp7lEuE1Q== +X-Received: by 2002:a17:907:971d:: with SMTP id + jg29mr14266557ejc.573.1642364316281; + Sun, 16 Jan 2022 12:18:36 -0800 (PST) +Received: from localhost.localdomain ([178.233.26.119]) + by smtp.gmail.com with ESMTPSA id b10sm4872469edu.42.2022.01.16.12.18.33 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Sun, 16 Jan 2022 12:18:35 -0800 (PST) +From: Alper Nebi Yasak <alpernebiyasak@gmail.com> +To: u-boot@lists.denx.de +Cc: Aswath Govindraju <a-govindraju@ti.com>, + Kever Yang <kever.yang@rock-chips.com>, + Philipp Tomsich <philipp.tomsich@vrull.eu>, + Samuel Dionne-Riel <samuel@dionne-riel.com>, + Stephen Carlson <stcarlso@linux.microsoft.com>, + Peter Robinson <pbrobinson@gmail.com>, Faiz Abbas <faiz_abbas@ti.com>, + Jack Mitchell <ml@embed.me.uk>, Simon Glass <sjg@chromium.org>, + Jaehoon Chung <jh80.chung@samsung.com>, + Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>, + Michal Simek <michal.simek@xilinx.com>, Peng Fan <peng.fan@nxp.com>, + Yifeng Zhao <yifeng.zhao@rock-chips.com>, + Jagan Teki <jagan@amarulasolutions.com>, + Alper Nebi Yasak <alpernebiyasak@gmail.com> +Subject: [PATCH v3 2/4] rockchip: sdhci: Fix RK3399 eMMC PHY power cycling +Date: Sun, 16 Jan 2022 23:18:11 +0300 +Message-Id: <20220116201814.11672-3-alpernebiyasak@gmail.com> +X-Mailer: git-send-email 2.34.1 +In-Reply-To: <20220116201814.11672-1-alpernebiyasak@gmail.com> +References: <20220116201814.11672-1-alpernebiyasak@gmail.com> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion <u-boot.lists.denx.de> +List-Unsubscribe: <https://lists.denx.de/options/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=unsubscribe> +List-Archive: <https://lists.denx.de/pipermail/u-boot/> +List-Post: <mailto:u-boot@lists.denx.de> +List-Help: <mailto:u-boot-request@lists.denx.de?subject=help> +List-Subscribe: <https://lists.denx.de/listinfo/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=subscribe> +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" <u-boot-bounces@lists.denx.de> +X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de +X-Virus-Status: Clean + +The Rockchip RK3399 eMMC PHY has to be power-cycled while changing its +clock speed to some higher speeds. This is dependent on the desired +SDHCI clock speed, and it looks like the PHY should be powered off while +setting the SDHCI clock in these cases. + +Commit ac804143cfd1 ("mmc: rockchip_sdhci: add phy and clock config for +rk3399") attempts to do this in the set_ios_post() hook by setting the +SDHCI clock once more while the PHY is turned off/on as necessary, as +the SDHCI framework does not provide a way to override how it sets its +clock. However, the commit breaks reinitializing the eMMC on a few +boards including chromebook_kevin and reportedly ROCKPro64. + +This patch reworks the power cycling to utilize the SDHCI framework +slightly better (using the set_control_reg() hook to power off the PHY +and set_ios_post() hook to power it back on) which happens to fix the +issue, at least on a chromebook_kevin. + +Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> +--- +RK3568 parts only build-tested as I don't have a RK3568 board. + +(no changes since v2) + +Changes in v2: +- Add this patch + + drivers/mmc/rockchip_sdhci.c | 53 +++++++++++++++++++++++++++++------- + 1 file changed, 43 insertions(+), 10 deletions(-) + +diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c +index 278473899c7c..f0d7ba4774d6 100644 +--- a/drivers/mmc/rockchip_sdhci.c ++++ b/drivers/mmc/rockchip_sdhci.c +@@ -90,9 +90,10 @@ struct rockchip_sdhc { + }; + + struct sdhci_data { +- int (*emmc_set_clock)(struct sdhci_host *host, unsigned int clock); + int (*emmc_phy_init)(struct udevice *dev); + int (*get_phy)(struct udevice *dev); ++ void (*set_control_reg)(struct sdhci_host *host); ++ int (*set_ios_post)(struct sdhci_host *host); + }; + + static int rk3399_emmc_phy_init(struct udevice *dev) +@@ -182,15 +183,28 @@ static int rk3399_emmc_get_phy(struct udevice *dev) + return 0; + } + +-static int rk3399_sdhci_emmc_set_clock(struct sdhci_host *host, unsigned int clock) ++static void rk3399_sdhci_set_control_reg(struct sdhci_host *host) + { + struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host); ++ struct mmc *mmc = host->mmc; ++ uint clock = mmc->tran_speed; + int cycle_phy = host->clock != clock && clock > EMMC_MIN_FREQ; + + if (cycle_phy) + rk3399_emmc_phy_power_off(priv->phy); + +- sdhci_set_clock(host->mmc, clock); ++ sdhci_set_control_reg(host); ++}; ++ ++static int rk3399_sdhci_set_ios_post(struct sdhci_host *host) ++{ ++ struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host); ++ struct mmc *mmc = host->mmc; ++ uint clock = mmc->tran_speed; ++ int cycle_phy = host->clock != clock && clock > EMMC_MIN_FREQ; ++ ++ if (!clock) ++ clock = mmc->clock; + + if (cycle_phy) + rk3399_emmc_phy_power_on(priv->phy, clock); +@@ -269,10 +283,8 @@ static int rk3568_emmc_get_phy(struct udevice *dev) + return 0; + } + +-static int rockchip_sdhci_set_ios_post(struct sdhci_host *host) ++static int rk3568_sdhci_set_ios_post(struct sdhci_host *host) + { +- struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host); +- struct sdhci_data *data = (struct sdhci_data *)dev_get_driver_data(priv->dev); + struct mmc *mmc = host->mmc; + uint clock = mmc->tran_speed; + u32 reg; +@@ -280,8 +292,7 @@ static int rockchip_sdhci_set_ios_post(struct sdhci_host *host) + if (!clock) + clock = mmc->clock; + +- if (data->emmc_set_clock) +- data->emmc_set_clock(host, clock); ++ rk3568_sdhci_emmc_set_clock(host, clock); + + if (mmc->selected_mode == MMC_HS_400 || mmc->selected_mode == MMC_HS_400_ES) { + reg = sdhci_readw(host, SDHCI_HOST_CONTROL2); +@@ -295,6 +306,26 @@ static int rockchip_sdhci_set_ios_post(struct sdhci_host *host) + return 0; + } + ++static void rockchip_sdhci_set_control_reg(struct sdhci_host *host) ++{ ++ struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host); ++ struct sdhci_data *data = (struct sdhci_data *)dev_get_driver_data(priv->dev); ++ ++ if (data->set_control_reg) ++ data->set_control_reg(host); ++} ++ ++static int rockchip_sdhci_set_ios_post(struct sdhci_host *host) ++{ ++ struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host); ++ struct sdhci_data *data = (struct sdhci_data *)dev_get_driver_data(priv->dev); ++ ++ if (data->set_ios_post) ++ return data->set_ios_post(host); ++ ++ return 0; ++} ++ + static int rockchip_sdhci_execute_tuning(struct mmc *mmc, u8 opcode) + { + struct sdhci_host *host = dev_get_priv(mmc->dev); +@@ -358,6 +389,7 @@ static int rockchip_sdhci_execute_tuning(struct mmc *mmc, u8 opcode) + static struct sdhci_ops rockchip_sdhci_ops = { + .set_ios_post = rockchip_sdhci_set_ios_post, + .platform_execute_tuning = &rockchip_sdhci_execute_tuning, ++ .set_control_reg = rockchip_sdhci_set_control_reg, + }; + + static int rockchip_sdhci_probe(struct udevice *dev) +@@ -436,15 +468,16 @@ static int rockchip_sdhci_bind(struct udevice *dev) + } + + static const struct sdhci_data rk3399_data = { +- .emmc_set_clock = rk3399_sdhci_emmc_set_clock, + .get_phy = rk3399_emmc_get_phy, + .emmc_phy_init = rk3399_emmc_phy_init, ++ .set_control_reg = rk3399_sdhci_set_control_reg, ++ .set_ios_post = rk3399_sdhci_set_ios_post, + }; + + static const struct sdhci_data rk3568_data = { +- .emmc_set_clock = rk3568_sdhci_emmc_set_clock, + .get_phy = rk3568_emmc_get_phy, + .emmc_phy_init = rk3568_emmc_phy_init, ++ .set_ios_post = rk3568_sdhci_set_ios_post, + }; + + static const struct udevice_id sdhci_ids[] = { + +From patchwork Sun Jan 16 20:18:12 2022 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Alper Nebi Yasak <alpernebiyasak@gmail.com> +X-Patchwork-Id: 1580520 +X-Patchwork-Delegate: ykai007@gmail.com +Return-Path: <u-boot-bounces@lists.denx.de> +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@bilbo.ozlabs.org +Authentication-Results: bilbo.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 + header.s=20210112 header.b=MPxROv5X; + dkim-atps=neutral +Authentication-Results: ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=<UNKNOWN>) +Received: from phobos.denx.de (phobos.denx.de + [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature RSA-PSS (4096 bits)) + (No client certificate requested) + by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JcRFk72GZz9ssD + for <incoming@patchwork.ozlabs.org>; Mon, 17 Jan 2022 07:19:06 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id E1DDF835A8; + Sun, 16 Jan 2022 21:18:50 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.b="MPxROv5X"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id 0CEF481982; Sun, 16 Jan 2022 21:18:46 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, + SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com + [IPv6:2a00:1450:4864:20::533]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id 846EA83595 + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 21:18:40 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=alpernebiyasak@gmail.com +Received: by mail-ed1-x533.google.com with SMTP id j7so8491628edr.4 + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 12:18:40 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; + h=from:to:cc:subject:date:message-id:in-reply-to:references + :mime-version:content-transfer-encoding; + bh=IlZzw+E0OT+BGbdF8CWorWOdtXvmJ819GqtIryKc/F4=; + b=MPxROv5X+yinvW9N5ljg0IXmhleqwy/8CWIJXP95X9wrlPX1TOvzKY5nWe70xm7Y+I + 7nMQIefe6zHQvgV4xCTc1qDCA8wG3b5PxLhSvppXPzdgWXp/uNy3NDX5LmqVghv0tAR1 + Sng/tUsjgEmOBDaQc0i5N7Qyk/uhfRyLzWNAAeyyLwAJQ7rxmc2ztmgrYbSf1z5AGaGT + JCiZ3Xl4P4pI2HAoHtxc9etfS5H//ixzlT/0A0j6ex2MKWW575z+xff3RtQZP6cW4DA2 + p65IvNbWE6v4dpn8/ZDW/UlHnUUh7kkuQzjH24nnfyXAQ849mlddRHYiHJL1QXthmVHP + uZ5g== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20210112; + h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to + :references:mime-version:content-transfer-encoding; + bh=IlZzw+E0OT+BGbdF8CWorWOdtXvmJ819GqtIryKc/F4=; + b=R/36NikWM0d8xGDVMAdPf5LXJJigL6ufDi7OS34JHcGembcNMWd3igBzxbsggi4PwJ + WfL3wxnf3c9hDyTfCWSNfEKgF9javl5lmZAbT/CkqLgiVoqcZExqwhTl1MFZe1veT6/a + 2ANmVjah9ojC9u0TY7TNt+uc9JyRNYIS0LUFAWiKGrxzuszAck4oteAIjjwPrnTx7cGH + blVEwilAEsj+afO3Naw78ROjDyms8xz7hG3Z/wkIinXKX5pAKUrsCi7oDZrXd/y1dm0J + r6A7uXJoY3dILJHSGmkh5Uggqyi7G3WYdkGvpsIRpon55qPpvscW13/poBVqRZOgG+G2 + TRLg== +X-Gm-Message-State: AOAM531I+EYaHH0CZPRXg/T+jNkigxhUfzY3AkzYTHLEULt9gEVJ5M69 + bu+4hXihyC2we1zKoC+wDwYK55T/RPQ= +X-Google-Smtp-Source: + ABdhPJyfUQzWaIKgS+YtvbvhgLDcG7oSCXEmGi3e99kyVmcTro/q3VIBnj/2yTABvTwavS98TPURSQ== +X-Received: by 2002:a05:6402:2548:: with SMTP id + l8mr18043640edb.119.1642364320222; + Sun, 16 Jan 2022 12:18:40 -0800 (PST) +Received: from localhost.localdomain ([178.233.26.119]) + by smtp.gmail.com with ESMTPSA id b10sm4872469edu.42.2022.01.16.12.18.37 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Sun, 16 Jan 2022 12:18:39 -0800 (PST) +From: Alper Nebi Yasak <alpernebiyasak@gmail.com> +To: u-boot@lists.denx.de +Cc: Aswath Govindraju <a-govindraju@ti.com>, + Kever Yang <kever.yang@rock-chips.com>, + Philipp Tomsich <philipp.tomsich@vrull.eu>, + Samuel Dionne-Riel <samuel@dionne-riel.com>, + Stephen Carlson <stcarlso@linux.microsoft.com>, + Peter Robinson <pbrobinson@gmail.com>, Faiz Abbas <faiz_abbas@ti.com>, + Jack Mitchell <ml@embed.me.uk>, Simon Glass <sjg@chromium.org>, + Jaehoon Chung <jh80.chung@samsung.com>, + Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>, + Michal Simek <michal.simek@xilinx.com>, Peng Fan <peng.fan@nxp.com>, + Yifeng Zhao <yifeng.zhao@rock-chips.com>, + Jagan Teki <jagan@amarulasolutions.com>, + Alper Nebi Yasak <alpernebiyasak@gmail.com> +Subject: [PATCH v3 3/4] rockchip: sdhci: Add HS400 Enhanced Strobe support for + RK3399 +Date: Sun, 16 Jan 2022 23:18:12 +0300 +Message-Id: <20220116201814.11672-4-alpernebiyasak@gmail.com> +X-Mailer: git-send-email 2.34.1 +In-Reply-To: <20220116201814.11672-1-alpernebiyasak@gmail.com> +References: <20220116201814.11672-1-alpernebiyasak@gmail.com> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion <u-boot.lists.denx.de> +List-Unsubscribe: <https://lists.denx.de/options/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=unsubscribe> +List-Archive: <https://lists.denx.de/pipermail/u-boot/> +List-Post: <mailto:u-boot@lists.denx.de> +List-Help: <mailto:u-boot-request@lists.denx.de?subject=help> +List-Subscribe: <https://lists.denx.de/listinfo/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=subscribe> +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" <u-boot-bounces@lists.denx.de> +X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de +X-Virus-Status: Clean + +On RK3399, a register bit must be set to enable Enhanced Strobe. +Let the Rockchip SDHCI driver set it when Enhanced Strobe configuration +is requested. However, having it set makes the lower-speed modes stop +working and makes reinitialization fail, so let it be unset as needed in +set_control_reg(). + +This is mostly ported from Linux's Arasan SDHCI driver which happens +to be the underlying IP. (drivers/mmc/host/sdhci-of-arasan.c in Linux +tree). + +Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> +--- + +(no changes since v2) + +Changes in v2: +- Unset ES bit in rk3399 set_control_reg() to fix a reinit issue +- Don't use unnecessary & for function pointer in ops struct +- Rename rk3399_set_enhanced_strobe -> rk3399_sdhci_set_enhanced_strobe +- Let set_enhanced_strobe() unset the ES bit if mode is not HS400_ES + + drivers/mmc/rockchip_sdhci.c | 41 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c +index f0d7ba4774d6..f920c5141142 100644 +--- a/drivers/mmc/rockchip_sdhci.c ++++ b/drivers/mmc/rockchip_sdhci.c +@@ -42,6 +42,9 @@ + ((((x) >> PHYCTRL_DLLRDY_SHIFT) & PHYCTRL_DLLRDY_MASK) ==\ + PHYCTRL_DLLRDY_DONE) + ++#define ARASAN_VENDOR_REGISTER 0x78 ++#define ARASAN_VENDOR_ENHANCED_STROBE BIT(0) ++ + /* Rockchip specific Registers */ + #define DWCMSHC_EMMC_DLL_CTRL 0x800 + #define DWCMSHC_EMMC_DLL_CTRL_RESET BIT(1) +@@ -94,6 +97,7 @@ struct sdhci_data { + int (*get_phy)(struct udevice *dev); + void (*set_control_reg)(struct sdhci_host *host); + int (*set_ios_post)(struct sdhci_host *host); ++ int (*set_enhanced_strobe)(struct sdhci_host *host); + }; + + static int rk3399_emmc_phy_init(struct udevice *dev) +@@ -183,6 +187,21 @@ static int rk3399_emmc_get_phy(struct udevice *dev) + return 0; + } + ++static int rk3399_sdhci_set_enhanced_strobe(struct sdhci_host *host) ++{ ++ struct mmc *mmc = host->mmc; ++ u32 vendor; ++ ++ vendor = sdhci_readl(host, ARASAN_VENDOR_REGISTER); ++ if (mmc->selected_mode == MMC_HS_400_ES) ++ vendor |= ARASAN_VENDOR_ENHANCED_STROBE; ++ else ++ vendor &= ~ARASAN_VENDOR_ENHANCED_STROBE; ++ sdhci_writel(host, vendor, ARASAN_VENDOR_REGISTER); ++ ++ return 0; ++} ++ + static void rk3399_sdhci_set_control_reg(struct sdhci_host *host) + { + struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host); +@@ -194,6 +213,15 @@ static void rk3399_sdhci_set_control_reg(struct sdhci_host *host) + rk3399_emmc_phy_power_off(priv->phy); + + sdhci_set_control_reg(host); ++ ++ /* ++ * Reinitializing the device tries to set it to lower-speed modes ++ * first, which fails if the Enhanced Strobe bit is set, making ++ * the device impossible to use. Set the correct value here to ++ * let reinitialization attempts succeed. ++ */ ++ if (CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT)) ++ rk3399_sdhci_set_enhanced_strobe(host); + }; + + static int rk3399_sdhci_set_ios_post(struct sdhci_host *host) +@@ -386,10 +414,22 @@ static int rockchip_sdhci_execute_tuning(struct mmc *mmc, u8 opcode) + return ret; + } + ++static int rockchip_sdhci_set_enhanced_strobe(struct sdhci_host *host) ++{ ++ struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host); ++ struct sdhci_data *data = (struct sdhci_data *)dev_get_driver_data(priv->dev); ++ ++ if (data->set_enhanced_strobe) ++ return data->set_enhanced_strobe(host); ++ ++ return -ENOTSUPP; ++} ++ + static struct sdhci_ops rockchip_sdhci_ops = { + .set_ios_post = rockchip_sdhci_set_ios_post, + .platform_execute_tuning = &rockchip_sdhci_execute_tuning, + .set_control_reg = rockchip_sdhci_set_control_reg, ++ .set_enhanced_strobe = rockchip_sdhci_set_enhanced_strobe, + }; + + static int rockchip_sdhci_probe(struct udevice *dev) +@@ -472,6 +512,7 @@ static const struct sdhci_data rk3399_data = { + .emmc_phy_init = rk3399_emmc_phy_init, + .set_control_reg = rk3399_sdhci_set_control_reg, + .set_ios_post = rk3399_sdhci_set_ios_post, ++ .set_enhanced_strobe = rk3399_sdhci_set_enhanced_strobe, + }; + + static const struct sdhci_data rk3568_data = { + +From patchwork Sun Jan 16 20:18:13 2022 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Alper Nebi Yasak <alpernebiyasak@gmail.com> +X-Patchwork-Id: 1580521 +X-Patchwork-Delegate: ykai007@gmail.com +Return-Path: <u-boot-bounces@lists.denx.de> +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@bilbo.ozlabs.org +Authentication-Results: bilbo.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 + header.s=20210112 header.b=TlnDdnYe; + dkim-atps=neutral +Authentication-Results: ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=85.214.62.61; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=<UNKNOWN>) +Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature RSA-PSS (4096 bits)) + (No client certificate requested) + by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JcRFw5lPTz9ssD + for <incoming@patchwork.ozlabs.org>; Mon, 17 Jan 2022 07:19:16 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id 04CCF835EA; + Sun, 16 Jan 2022 21:18:56 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=gmail.com header.i=@gmail.com header.b="TlnDdnYe"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id 1D64B81982; Sun, 16 Jan 2022 21:18:49 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, + SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com + [IPv6:2a00:1450:4864:20::536]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id 9F6E0835CB + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 21:18:45 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=gmail.com +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=alpernebiyasak@gmail.com +Received: by mail-ed1-x536.google.com with SMTP id z22so56933846edd.12 + for <u-boot@lists.denx.de>; Sun, 16 Jan 2022 12:18:45 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; + h=from:to:cc:subject:date:message-id:in-reply-to:references + :mime-version:content-transfer-encoding; + bh=TzASpsDhcAJy3DzV3mLZW8A/StILYbd31Wt4qZD/V0U=; + b=TlnDdnYe7zRWWM0427pGMHa2zhQg5KSHy7VkrzBlixDWHldbO2BfroUeTU9lFF5ncU + apgRl8Wjn9l7FMZ70raoqT9/FFjWX2ilvXPT+FfSTv3EmMIwK8FJYemNV1jEqbaULrzg + sXim83kmpLRN+bIkFNaJt5DxT7oJW5M6L20fGkf74gB7cH307+oubN7sLVq44m/SiLZO + S2e5OiKMIzRK+Ee9m6HNJkcz6DW7z+VnEoibMY9c7aSAuHHp0Y6zDOR2sfISEfleswk2 + u+LGvBh7Q26kz42DV0m6bkI1mHO5r7TSEvB7KrEMxgNeLB/tgHtYSE+vUy2Ccw3X89Dx + fM+w== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20210112; + h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to + :references:mime-version:content-transfer-encoding; + bh=TzASpsDhcAJy3DzV3mLZW8A/StILYbd31Wt4qZD/V0U=; + b=A1+tlAxHYXcYx8HS2Av38s3CQgXS4ID5bCQoXJIIvSR5QMkJwufZ6kL/DDqg/opLSu + MbZERATdQ4qz0YJ0by8XDaXu/73uCJTej3Yqr9pOFXpx+JTj8X6dNCzh/wBkdtOXHQXH + RaxKdqKMVMvPdS8+XkcJcVIAwtDTVpKfII9C+LO/ZEMoSovaLggKuSAqCiFROkA21MyT + PvdjA/zZtm0VJfD+3vP4JsueqiYJ3MFJKY5uJagQP7uuPPfLkV/yq1lq6vcUtwvF4E26 + FvYUcywGw0txId6JqlSETglpzciFK8g0Cr5S1P+CUvlN+qQ3ELFjlAxBCVy4cX7jIBQY + RYGQ== +X-Gm-Message-State: AOAM532CbQq0KAUNrgw1667qCgblsQY1XZL+psHwUB8C3ccyQothrzRK + vIlvOafJMtqwT+vgjG7BdwDNRY+Hrvs= +X-Google-Smtp-Source: + ABdhPJxtMQjrwuKFphsrXSA0P41IC3DuQvZ6mrS4e6pKcwKvqI8CD4SKp0JqOoqAoakhSZQ8hMKX5g== +X-Received: by 2002:a17:906:b24d:: with SMTP id + ce13mr14386681ejb.44.1642364325298; + Sun, 16 Jan 2022 12:18:45 -0800 (PST) +Received: from localhost.localdomain ([178.233.26.119]) + by smtp.gmail.com with ESMTPSA id b10sm4872469edu.42.2022.01.16.12.18.41 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Sun, 16 Jan 2022 12:18:44 -0800 (PST) +From: Alper Nebi Yasak <alpernebiyasak@gmail.com> +To: u-boot@lists.denx.de +Cc: Aswath Govindraju <a-govindraju@ti.com>, + Kever Yang <kever.yang@rock-chips.com>, + Philipp Tomsich <philipp.tomsich@vrull.eu>, + Samuel Dionne-Riel <samuel@dionne-riel.com>, + Stephen Carlson <stcarlso@linux.microsoft.com>, + Peter Robinson <pbrobinson@gmail.com>, Faiz Abbas <faiz_abbas@ti.com>, + Jack Mitchell <ml@embed.me.uk>, Simon Glass <sjg@chromium.org>, + Jaehoon Chung <jh80.chung@samsung.com>, + Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>, + Michal Simek <michal.simek@xilinx.com>, Peng Fan <peng.fan@nxp.com>, + Yifeng Zhao <yifeng.zhao@rock-chips.com>, + Jagan Teki <jagan@amarulasolutions.com>, + Alper Nebi Yasak <alpernebiyasak@gmail.com> +Subject: [PATCH v3 4/4] rockchip: sdhci: Add HS400 Enhanced Strobe support for + RK3568 +Date: Sun, 16 Jan 2022 23:18:13 +0300 +Message-Id: <20220116201814.11672-5-alpernebiyasak@gmail.com> +X-Mailer: git-send-email 2.34.1 +In-Reply-To: <20220116201814.11672-1-alpernebiyasak@gmail.com> +References: <20220116201814.11672-1-alpernebiyasak@gmail.com> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion <u-boot.lists.denx.de> +List-Unsubscribe: <https://lists.denx.de/options/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=unsubscribe> +List-Archive: <https://lists.denx.de/pipermail/u-boot/> +List-Post: <mailto:u-boot@lists.denx.de> +List-Help: <mailto:u-boot-request@lists.denx.de?subject=help> +List-Subscribe: <https://lists.denx.de/listinfo/u-boot>, + <mailto:u-boot-request@lists.denx.de?subject=subscribe> +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" <u-boot-bounces@lists.denx.de> +X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de +X-Virus-Status: Clean + +On RK3568, a register bit must be set to enable Enhanced Strobe. +However, it appears that the address of this register may differ from +vendor to vendor and should be read from the underlying MMC IP. Let the +Rockchip SDHCI driver read this address and set the relevant bit when +Enhanced Strobe configuration is requested. + +Additionally, a bit signifying that the connected hardware is an eMMC +chip must be set to enable Data Strobe for HS400 and HS400ES modes. Also +make the driver set this bit as appropriate. + +This is partly ported from Linux's Synopsys DWC MSHC driver which +happens to be the underlying IP. (drivers/mmc/host/sdhci-of-dwcmshc.c in +Linux tree). + +Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> +--- +Only build-tested as I don't have a RK3568 board. + +Changes in v3: +- Set DWCMSHC_CARD_IS_EMMC bit in rk3568_emmc_phy_init() + +Changes in v2: +- Rename rk3568_set_enhanced_strobe -> rk3568_sdhci_set_enhanced_strobe +- Let set_enhanced_strobe() unset the ES bit if mode is not HS400_ES + + drivers/mmc/rockchip_sdhci.c | 42 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + +diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c +index f920c5141142..4c7cc7535e2e 100644 +--- a/drivers/mmc/rockchip_sdhci.c ++++ b/drivers/mmc/rockchip_sdhci.c +@@ -45,6 +45,14 @@ + #define ARASAN_VENDOR_REGISTER 0x78 + #define ARASAN_VENDOR_ENHANCED_STROBE BIT(0) + ++/* DWC IP vendor area 1 pointer */ ++#define DWCMSHC_P_VENDOR_AREA1 0xe8 ++#define DWCMSHC_AREA1_MASK GENMASK(11, 0) ++/* Offset inside the vendor area 1 */ ++#define DWCMSHC_EMMC_CONTROL 0x2c ++#define DWCMSHC_CARD_IS_EMMC BIT(0) ++#define DWCMSHC_ENHANCED_STROBE BIT(8) ++ + /* Rockchip specific Registers */ + #define DWCMSHC_EMMC_DLL_CTRL 0x800 + #define DWCMSHC_EMMC_DLL_CTRL_RESET BIT(1) +@@ -244,11 +252,25 @@ static int rk3568_emmc_phy_init(struct udevice *dev) + { + struct rockchip_sdhc *prv = dev_get_priv(dev); + struct sdhci_host *host = &prv->host; ++ struct mmc *mmc = host->mmc; + u32 extra; ++ u32 vendor; ++ int reg; + + extra = DLL_RXCLK_NO_INVERTER << DWCMSHC_EMMC_DLL_RXCLK_SRCSEL; + sdhci_writel(host, extra, DWCMSHC_EMMC_DLL_RXCLK); + ++ /* set CARD_IS_EMMC bit to enable Data Strobe for HS400 and HS400ES */ ++ reg = (sdhci_readl(host, DWCMSHC_P_VENDOR_AREA1) & DWCMSHC_AREA1_MASK) ++ + DWCMSHC_EMMC_CONTROL; ++ ++ vendor = sdhci_readw(host, reg); ++ if (IS_MMC(mmc)) ++ vendor |= DWCMSHC_CARD_IS_EMMC; ++ else ++ vendor &= ~DWCMSHC_CARD_IS_EMMC; ++ sdhci_writew(host, vendor, reg); ++ + return 0; + } + +@@ -311,6 +333,25 @@ static int rk3568_emmc_get_phy(struct udevice *dev) + return 0; + } + ++static int rk3568_sdhci_set_enhanced_strobe(struct sdhci_host *host) ++{ ++ struct mmc *mmc = host->mmc; ++ u32 vendor; ++ int reg; ++ ++ reg = (sdhci_readl(host, DWCMSHC_P_VENDOR_AREA1) & DWCMSHC_AREA1_MASK) ++ + DWCMSHC_EMMC_CONTROL; ++ ++ vendor = sdhci_readl(host, reg); ++ if (mmc->selected_mode == MMC_HS_400_ES) ++ vendor |= DWCMSHC_ENHANCED_STROBE; ++ else ++ vendor &= ~DWCMSHC_ENHANCED_STROBE; ++ sdhci_writel(host, vendor, reg); ++ ++ return 0; ++} ++ + static int rk3568_sdhci_set_ios_post(struct sdhci_host *host) + { + struct mmc *mmc = host->mmc; +@@ -519,6 +560,7 @@ static const struct sdhci_data rk3568_data = { + .get_phy = rk3568_emmc_get_phy, + .emmc_phy_init = rk3568_emmc_phy_init, + .set_ios_post = rk3568_sdhci_set_ios_post, ++ .set_enhanced_strobe = rk3568_sdhci_set_enhanced_strobe, + }; + + static const struct udevice_id sdhci_ids[] = { diff --git a/PKGBUILD b/PKGBUILD index 5def72b..a9b3bf5 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,4 +1,5 @@ # U-Boot: Pinephone Pro based on PKGBUILD for RK3399 +# Maintainer: Philip Müller <philm@manjaro.org> # Contributor: Furkan Kardame <furkan@fkardame.com> # Contributor: Dan Johansen <strit@manjaro.org> # Contributor: Dragan Simic <dsimic@buserror.io> @@ -6,9 +7,8 @@ pkgname=uboot-pinephonepro pkgver=2022.01 pkgrel=0 -epoch=1 +epoch=3 _srcname=u-boot-pine64-pinephonepro -_commit=d637294e264adfeb29f390dfc393106fd4d41b17 _tfaver=2.6 pkgdesc="U-Boot for Pine64 PinePhone Pro" arch=('aarch64') @@ -19,7 +19,7 @@ depends=('uboot-tools') provides=('uboot') conflicts=('uboot') install=${pkgname}.install -source=("u-boot-$_commit.tar.gz::https://source.denx.de/u-boot/u-boot/-/archive/${_commit}/u-boot-${_commit}.tar.gz" +source=("ftp://ftp.denx.de/pub/u-boot/u-boot-${pkgver/rc/-rc}.tar.bz2" "https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/snapshot/trusted-firmware-a-$_tfaver.tar.gz" "boot.txt" "ppp-prepare-fstab" @@ -28,8 +28,9 @@ source=("u-boot-$_commit.tar.gz::https://source.denx.de/u-boot/u-boot/-/archive/ "ppp-uboot-mkscr" "0001-rockchip-Add-initial-support-for-the-PinePhone-Pro.patch" "0002-Correct-boot-order-to-be-USB-SD-eMMC.patch" - "0003-Configure-USB-power-settings-for-PinePhone-Pro.patch") -sha256sums=('d69b85ee6a153cd79e17085421c5f20c8d3037c57abe84f87d8402ce9d9b3131' + "0003-Configure-USB-power-settings-for-PinePhone-Pro.patch" + "0004-rockchip-sdhci-Fix-reinit-and-add-HS400-Enhanced-Strobe-support.patch") +sha256sums=('81b4543227db228c03f8a1bf5ddbc813b0bb8f6555ce46064ef721a6fc680413' '4e59f02ccb042d5d18c89c849701b96e6cf4b788709564405354b5d313d173f7' '4e356b3868c0c1ac061c2c15c7ba80c627e1743214680409f418f9b4c00eb3f7' 'de7e36cdc7ed2fb5abb9155c97f87926361aa5be87d794c9016776160f3430ec' @@ -38,10 +39,11 @@ sha256sums=('d69b85ee6a153cd79e17085421c5f20c8d3037c57abe84f87d8402ce9d9b3131' '05eaccb2e8ea1eba3e86a4e7fcf12fd232195b5018c049ddf36e5a82a968cc24' '7c3d76f4bee0e54900142043241248072e334387065212141e1f600afe0aafba' '017d33aac55f8a5ed22170c97b4792ba755a4dad04f6c0cdd85119bbc81e87b3' - 'b750ba47843defafd8be1cc2615983c93e9cde5a4f5a7b55308a6f00f3fe6611') + 'b750ba47843defafd8be1cc2615983c93e9cde5a4f5a7b55308a6f00f3fe6611' + 'eceafbaca3fc92e406bd5ff5e3cdf7f46b9be2426f94ce38eb5e5ce07f43f3b4') prepare() { - cd u-boot-${_commit} + cd u-boot-${pkgver/rc/-rc} local src for src in "${source[@]}"; do src="${src%%::*}" @@ -75,7 +77,7 @@ build() { make PLAT=rk3399 cp build/rk3399/release/bl31/bl31.elf ../u-boot-${_commit} - cd ../u-boot-${_commit} + cd ../u-boot-${pkgver/rc/-rc} echo -e "\nBuilding U-Boot for Pine64 PinePhone Pro...\n" make pinephone-pro-rk3399_defconfig @@ -93,7 +95,7 @@ build() { } package() { - cd u-boot-${_commit} + cd u-boot-${pkgver/rc/-rc} install -D -m 0644 idbloader.img u-boot.itb -t "${pkgdir}/boot" install -D -m 0644 "${srcdir}/boot.txt" -t "${pkgdir}/boot" -- GitLab