From: Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>
To: <u-boot@lists.denx.de>
Cc: <peng.fan@nxp.com>, <jh80.chung@samsung.com>, <faiz_abbas@ti.com>,
<sjg@chromium.org>, <michael@walle.cc>, <git@xilinx.com>,
<monstr@monstr.eu>, <somaashokreddy@gmail.com>,
Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>
Subject: [PATCH v3 5/7] mmc: zynq_sdhci: Move setting tapdelay code to driver
Date: Fri, 30 Jul 2021 06:28:40 -0600 [thread overview]
Message-ID: <20210730122842.3264-6-ashok.reddy.soma@xilinx.com> (raw)
In-Reply-To: <20210730122842.3264-1-ashok.reddy.soma@xilinx.com>
Move tapdelay function calls to zynq_sdhci.c and make them static
inline. zynqmp_tap_delay.h has function prototypes for the functions
defined in tap_delays.c, which will not be needed anymore.
Remove tap_delays.c and zynqmp_tap_delay.h files.
Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>
---
Changes in v3:
- Make the changes on top of patch 4/7 to move the code to zynq_sdhci.c
board/xilinx/zynqmp/Makefile | 2 -
board/xilinx/zynqmp/tap_delays.c | 115 -------------------------------
drivers/mmc/zynq_sdhci.c | 108 ++++++++++++++++++++++++++++-
include/zynqmp_tap_delay.h | 34 ---------
4 files changed, 107 insertions(+), 152 deletions(-)
delete mode 100644 board/xilinx/zynqmp/tap_delays.c
delete mode 100644 include/zynqmp_tap_delay.h
diff --git a/board/xilinx/zynqmp/Makefile b/board/xilinx/zynqmp/Makefile
index 7d8277ca40..a914028753 100644
--- a/board/xilinx/zynqmp/Makefile
+++ b/board/xilinx/zynqmp/Makefile
@@ -44,8 +44,6 @@ $(obj)/pm_cfg_obj.o: $(shell cd $(srctree); readlink -f $(CONFIG_ZYNQMP_SPL_PM_C
endif
endif
-obj-$(CONFIG_MMC_SDHCI_ZYNQ) += tap_delays.o
-
ifndef CONFIG_SPL_BUILD
obj-$(CONFIG_CMD_ZYNQMP) += cmds.o
endif
diff --git a/board/xilinx/zynqmp/tap_delays.c b/board/xilinx/zynqmp/tap_delays.c
deleted file mode 100644
index 514f86a29a..0000000000
--- a/board/xilinx/zynqmp/tap_delays.c
+++ /dev/null
@@ -1,115 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Xilinx ZynqMP SoC Tap Delay Programming
- *
- * Copyright (C) 2018 Xilinx, Inc.
- */
-
-#include <common.h>
-#include <zynqmp_tap_delay.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/cache.h>
-#include <linux/delay.h>
-#include <mmc.h>
-#include <zynqmp_firmware.h>
-
-#define SD_DLL_CTRL 0xFF180358
-#define SD_ITAP_DLY 0xFF180314
-#define SD_OTAP_DLY 0xFF180318
-#define SD0_DLL_RST BIT(2)
-#define SD1_DLL_RST BIT(18)
-#define SD0_ITAPCHGWIN BIT(9)
-#define SD1_ITAPCHGWIN BIT(25)
-#define SD0_ITAPDLYENA BIT(8)
-#define SD1_ITAPDLYENA BIT(24)
-#define SD0_ITAPDLYSEL_MASK GENMASK(7, 0)
-#define SD1_ITAPDLYSEL_MASK GENMASK(23, 16)
-#define SD0_OTAPDLYSEL_MASK GENMASK(5, 0)
-#define SD1_OTAPDLYSEL_MASK GENMASK(21, 16)
-
-int zynqmp_dll_reset(u8 node_id, u32 type)
-{
- if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
- if (node_id == NODE_SD_0)
- return zynqmp_mmio_write(SD_DLL_CTRL, SD0_DLL_RST,
- type == PM_DLL_RESET_ASSERT ?
- SD0_DLL_RST : 0);
-
- return zynqmp_mmio_write(SD_DLL_CTRL, SD1_DLL_RST,
- type == PM_DLL_RESET_ASSERT ?
- SD1_DLL_RST : 0);
- } else {
- return xilinx_pm_request(PM_IOCTL, (u32)node_id,
- IOCTL_SD_DLL_RESET, type, 0, NULL);
- }
-}
-
-int arasan_zynqmp_set_in_tapdelay(u8 node_id, u32 itap_delay)
-{
- int ret;
-
- if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
- if (node_id == NODE_SD_0) {
- ret = zynqmp_mmio_write(SD_ITAP_DLY, SD0_ITAPCHGWIN,
- SD0_ITAPCHGWIN);
- if (ret)
- return ret;
-
- ret = zynqmp_mmio_write(SD_ITAP_DLY, SD0_ITAPDLYENA,
- SD0_ITAPDLYENA);
- if (ret)
- return ret;
-
- ret = zynqmp_mmio_write(SD_ITAP_DLY,
- SD0_ITAPDLYSEL_MASK,
- itap_delay);
- if (ret)
- return ret;
-
- ret = zynqmp_mmio_write(SD_ITAP_DLY, SD0_ITAPCHGWIN, 0);
- if (ret)
- return ret;
- }
- ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPCHGWIN,
- SD1_ITAPCHGWIN);
- if (ret)
- return ret;
-
- ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPDLYENA,
- SD1_ITAPDLYENA);
- if (ret)
- return ret;
-
- ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPDLYSEL_MASK,
- (itap_delay << 16));
- if (ret)
- return ret;
-
- ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPCHGWIN, 0);
- if (ret)
- return ret;
- } else {
- return xilinx_pm_request(PM_IOCTL, (u32)node_id,
- IOCTL_SET_SD_TAPDELAY,
- PM_TAPDELAY_INPUT, itap_delay, NULL);
- }
-
- return 0;
-}
-
-int arasan_zynqmp_set_out_tapdelay(u8 node_id, u32 otap_delay)
-{
- if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
- if (node_id == NODE_SD_0)
- return zynqmp_mmio_write(SD_OTAP_DLY,
- SD0_OTAPDLYSEL_MASK,
- otap_delay);
-
- return zynqmp_mmio_write(SD_OTAP_DLY, SD1_OTAPDLYSEL_MASK,
- (otap_delay << 16));
- } else {
- return xilinx_pm_request(PM_IOCTL, (u32)node_id,
- IOCTL_SET_SD_TAPDELAY,
- PM_TAPDELAY_OUTPUT, otap_delay, NULL);
- }
-}
diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c
index 8397f24255..9a1693940a 100644
--- a/drivers/mmc/zynq_sdhci.c
+++ b/drivers/mmc/zynq_sdhci.c
@@ -15,9 +15,9 @@
#include <dm/device_compat.h>
#include <linux/err.h>
#include <linux/libfdt.h>
+#include <asm/cache.h>
#include <malloc.h>
#include <sdhci.h>
-#include <zynqmp_tap_delay.h>
#include <zynqmp_firmware.h>
#define SDHCI_ARASAN_ITAPDLY_REGISTER 0xF0F8
@@ -31,6 +31,20 @@
#define SDHCI_TUNING_LOOP_COUNT 40
#define MMC_BANK2 0x2
+#define SD_DLL_CTRL 0xFF180358
+#define SD_ITAP_DLY 0xFF180314
+#define SD_OTAP_DLY 0xFF180318
+#define SD0_DLL_RST BIT(2)
+#define SD1_DLL_RST BIT(18)
+#define SD0_ITAPCHGWIN BIT(9)
+#define SD1_ITAPCHGWIN BIT(25)
+#define SD0_ITAPDLYENA BIT(8)
+#define SD1_ITAPDLYENA BIT(24)
+#define SD0_ITAPDLYSEL_MASK GENMASK(7, 0)
+#define SD1_ITAPDLYSEL_MASK GENMASK(23, 16)
+#define SD0_OTAPDLYSEL_MASK GENMASK(5, 0)
+#define SD1_OTAPDLYSEL_MASK GENMASK(21, 16)
+
struct arasan_sdhci_clk_data {
int clk_phase_in[MMC_TIMING_MMC_HS400 + 1];
int clk_phase_out[MMC_TIMING_MMC_HS400 + 1];
@@ -49,6 +63,12 @@ struct arasan_sdhci_priv {
u8 no_1p8;
};
+/* For Versal platforms zynqmp_mmio_write() won't be available */
+__weak int zynqmp_mmio_write(const u32 address, const u32 mask, const u32 value)
+{
+ return 0;
+}
+
#if defined(CONFIG_ARCH_ZYNQMP) || defined(CONFIG_ARCH_VERSAL)
/* Default settings for ZynqMP Clock Phases */
static const u32 zynqmp_iclk_phases[] = {0, 63, 63, 0, 63, 0,
@@ -76,6 +96,92 @@ static const u8 mode2timing[] = {
[MMC_HS_200] = MMC_TIMING_MMC_HS200,
};
+static inline int arasan_zynqmp_set_in_tapdelay(u8 node_id, u32 itap_delay)
+{
+ int ret;
+
+ if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
+ if (node_id == NODE_SD_0) {
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD0_ITAPCHGWIN,
+ SD0_ITAPCHGWIN);
+ if (ret)
+ return ret;
+
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD0_ITAPDLYENA,
+ SD0_ITAPDLYENA);
+ if (ret)
+ return ret;
+
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD0_ITAPDLYSEL_MASK,
+ itap_delay);
+ if (ret)
+ return ret;
+
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD0_ITAPCHGWIN, 0);
+ if (ret)
+ return ret;
+ }
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPCHGWIN,
+ SD1_ITAPCHGWIN);
+ if (ret)
+ return ret;
+
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPDLYENA,
+ SD1_ITAPDLYENA);
+ if (ret)
+ return ret;
+
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPDLYSEL_MASK,
+ (itap_delay << 16));
+ if (ret)
+ return ret;
+
+ ret = zynqmp_mmio_write(SD_ITAP_DLY, SD1_ITAPCHGWIN, 0);
+ if (ret)
+ return ret;
+ } else {
+ return xilinx_pm_request(PM_IOCTL, (u32)node_id,
+ IOCTL_SET_SD_TAPDELAY,
+ PM_TAPDELAY_INPUT, itap_delay, NULL);
+ }
+
+ return 0;
+}
+
+static inline int arasan_zynqmp_set_out_tapdelay(u8 node_id, u32 otap_delay)
+{
+ if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
+ if (node_id == NODE_SD_0)
+ return zynqmp_mmio_write(SD_OTAP_DLY,
+ SD0_OTAPDLYSEL_MASK,
+ otap_delay);
+
+ return zynqmp_mmio_write(SD_OTAP_DLY, SD1_OTAPDLYSEL_MASK,
+ (otap_delay << 16));
+ } else {
+ return xilinx_pm_request(PM_IOCTL, (u32)node_id,
+ IOCTL_SET_SD_TAPDELAY,
+ PM_TAPDELAY_OUTPUT, otap_delay, NULL);
+ }
+}
+
+static inline int zynqmp_dll_reset(u8 node_id, u32 type)
+{
+ if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
+ if (node_id == NODE_SD_0)
+ return zynqmp_mmio_write(SD_DLL_CTRL, SD0_DLL_RST,
+ type == PM_DLL_RESET_ASSERT ?
+ SD0_DLL_RST : 0);
+
+ return zynqmp_mmio_write(SD_DLL_CTRL, SD1_DLL_RST,
+ type == PM_DLL_RESET_ASSERT ?
+ SD1_DLL_RST : 0);
+ } else {
+ return xilinx_pm_request(PM_IOCTL, (u32)node_id,
+ IOCTL_SD_DLL_RESET, type, 0, NULL);
+ }
+}
+
static int arasan_zynqmp_dll_reset(struct sdhci_host *host, u8 node_id)
{
struct mmc *mmc = (struct mmc *)host->mmc;
diff --git a/include/zynqmp_tap_delay.h b/include/zynqmp_tap_delay.h
deleted file mode 100644
index 7ef172f0fa..0000000000
--- a/include/zynqmp_tap_delay.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Xilinx ZynqMP SoC Tap Delay Programming
- *
- * Copyright (C) 2018 Xilinx, Inc.
- */
-
-#ifndef __ZYNQMP_TAP_DELAY_H__
-#define __ZYNQMP_TAP_DELAY_H__
-
-#include <zynqmp_firmware.h>
-
-#ifdef CONFIG_ARCH_ZYNQMP
-int zynqmp_dll_reset(u8 node_id, u32 type);
-int arasan_zynqmp_set_in_tapdelay(u8 device_id, u32 itap_delay);
-int arasan_zynqmp_set_out_tapdelay(u8 device_id, u32 otap_delay);
-#else
-inline int zynqmp_dll_reset(u8 deviceid, u32 type)
-{
- return 0;
-}
-
-inline int arasan_zynqmp_set_in_tapdelay(u8 device_id, u32 itap_delay)
-{
- return 0;
-}
-
-inline int arasan_zynqmp_set_out_tapdelay(u8 device_id, u32 otap_delay)
-{
- return 0;
-}
-#endif
-
-#endif
--
2.17.1
next prev parent reply other threads:[~2021-07-30 12:30 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-30 12:28 [PATCH v3 0/7] Arasan sdhci driver updates Ashok Reddy Soma
2021-07-30 12:28 ` [PATCH v3 1/7] mmc: zynq_sdhci: Return errors from arasan_sdhci_set_tapdelay Ashok Reddy Soma
2021-08-01 23:08 ` Jaehoon Chung
2021-07-30 12:28 ` [PATCH v3 2/7] mmc: sdhci: Change prototype of set_delay to return errors Ashok Reddy Soma
2021-08-01 23:09 ` Jaehoon Chung
2021-07-30 12:28 ` [PATCH v3 3/7] zynqmp_firmware: Add zynqmp firmware related enums Ashok Reddy Soma
2021-07-30 12:28 ` [PATCH v3 4/7] mmc: zynq_sdhci: Add xilinx_pm_request() method to set tapdelays Ashok Reddy Soma
2021-07-30 12:28 ` Ashok Reddy Soma [this message]
2021-07-30 12:28 ` [PATCH v3 6/7] mmc: zynq_sdhci: Wait till sd card detect state is stable Ashok Reddy Soma
2021-07-30 12:28 ` [PATCH v3 7/7] mmc: zynq_sdhci: Use set_control_reg from sdhci.c Ashok Reddy Soma
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210730122842.3264-6-ashok.reddy.soma@xilinx.com \
--to=ashok.reddy.soma@xilinx.com \
--cc=faiz_abbas@ti.com \
--cc=git@xilinx.com \
--cc=jh80.chung@samsung.com \
--cc=michael@walle.cc \
--cc=monstr@monstr.eu \
--cc=peng.fan@nxp.com \
--cc=sjg@chromium.org \
--cc=somaashokreddy@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.