All of lore.kernel.org
 help / color / mirror / Atom feed
From: Faiz Abbas <faiz_abbas@ti.com>
To: u-boot@lists.denx.de
Subject: [PATCH 06/13] arm: mach-k3: am6_init: Do USB fixups to facilitate host and device boot modes
Date: Thu, 2 Jul 2020 13:32:26 +0530	[thread overview]
Message-ID: <20200702080233.27582-7-faiz_abbas@ti.com> (raw)
In-Reply-To: <20200702080233.27582-1-faiz_abbas@ti.com>

U-boot only supports either USB host or device mode for a node at a time in dts
To support both host and dfu bootmodes, set "peripheral" as the default dr_mode
but fixup property to "host" if host bootmode is detected

This needs to happen before the dwc3 generic layer binds the usb device to a host
or device driver. Therefore, open code the configurations in spl_early_init()
and add the fixup after the fdtdec_setup() and before the dm_init_scan()

Also use the same fixup function to set the USB-PCIe Serdes mux to PCIe in both the
host and device cases. This is required for accessing the interface at USB 2.0 speeds

Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
---
 arch/arm/mach-k3/am6_init.c | 68 +++++++++++++++++++++++++++++++++++--
 1 file changed, 66 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-k3/am6_init.c b/arch/arm/mach-k3/am6_init.c
index 42d13a39f8..b65860fef3 100644
--- a/arch/arm/mach-k3/am6_init.c
+++ b/arch/arm/mach-k3/am6_init.c
@@ -7,6 +7,7 @@
  */
 
 #include <common.h>
+#include <fdt_support.h>
 #include <init.h>
 #include <asm/io.h>
 #include <spl.h>
@@ -17,11 +18,15 @@
 #include <dm.h>
 #include <dm/uclass-internal.h>
 #include <dm/pinctrl.h>
+#include <dm/root.h>
+#include <linux/compiler.h>
 #include <linux/soc/ti/ti_sci_protocol.h>
 #include <log.h>
 #include <mmc.h>
 #include <stdlib.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #ifdef CONFIG_SPL_BUILD
 #ifdef CONFIG_K3_LOAD_SYSFW
 #ifdef CONFIG_TI_SECURE_DEVICE
@@ -119,7 +124,67 @@ void k3_mmc_restart_clock(void)
 void k3_mmc_stop_clock(void) {}
 void k3_mmc_restart_clock(void) {}
 #endif
+#if CONFIG_IS_ENABLED(DFU) || CONFIG_IS_ENABLED(USB_STORAGE)
+#define CTRLMMR_SERDES0_CTRL	0x00104080
+#define PCIE_LANE0		0x1
+void fixup_usb_boot(void)
+{
+	int ret;
 
+	switch (spl_boot_device()) {
+	case BOOT_DEVICE_USB:
+		/*
+		 * If bootmode is Host bootmode, fixup the dr_mode to host
+		 * before the dwc3 bind takes place
+		 */
+		ret = fdt_find_and_setprop((void *)gd->fdt_blob,
+				"/interconnect at 100000/dwc3 at 4000000/usb at 10000",
+				"dr_mode", "host", 11, 0);
+		if (ret)
+			printf("%s: fdt_find_and_setprop() failed:%d\n", __func__,
+			       ret);
+		/* fallthrough */
+	case BOOT_DEVICE_DFU:
+		/*
+		 * The serdes mux between PCIe and USB3 needs to be set to PCIe for
+		 * accessing the interface at USB 2.0
+		 */
+		writel(PCIE_LANE0, CTRLMMR_SERDES0_CTRL);
+	default:
+		;
+	}
+}
+#endif
+int am6_spl_early_init(void)
+{
+	int ret;
+#if CONFIG_VAL(SYS_MALLOC_F_LEN)
+#ifdef CONFIG_MALLOC_F_ADDR
+	gd->malloc_base = CONFIG_MALLOC_F_ADDR;
+#endif
+	gd->malloc_limit = CONFIG_VAL(SYS_MALLOC_F_LEN);
+	gd->malloc_ptr = 0;
+#endif
+	ret = fdtdec_setup();
+	if (ret) {
+		printf("fdtdec_setup() returned error %d\n", ret);
+		return ret;
+	}
+
+#if CONFIG_IS_ENABLED(DFU) || CONFIG_IS_ENABLED(USB_STORAGE)
+	fixup_usb_boot();
+#endif
+	/* With CONFIG_SPL_OF_PLATDATA, bring in all devices */
+	ret = dm_init_and_scan(!CONFIG_IS_ENABLED(OF_PLATDATA));
+	if (ret) {
+		printf("dm_init_and_scan() returned error %d\n", ret);
+		return ret;
+	}
+
+	gd->flags |= GD_FLG_SPL_EARLY_INIT;
+
+	return 0;
+}
 void board_init_f(ulong dummy)
 {
 #if defined(CONFIG_K3_LOAD_SYSFW) || defined(CONFIG_K3_AM654_DDRSS)
@@ -141,9 +206,8 @@ void board_init_f(ulong dummy)
 	disable_linefill_optimization();
 	setup_k3_mpu_regions();
 #endif
-
 	/* Init DM early in-order to invoke system controller */
-	spl_early_init();
+	am6_spl_early_init();
 
 #ifdef CONFIG_K3_EARLY_CONS
 	/*
-- 
2.17.1

  parent reply	other threads:[~2020-07-02  8:02 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-02  8:02 [PATCH 00/13] Add support for USB host and peripheral bootmodes on am65x-idk Faiz Abbas
2020-07-02  8:02 ` [PATCH 01/13] spl: usb: Create an API spl_usb_load() Faiz Abbas
2020-07-02  8:02 ` [PATCH 02/13] spl: usb: Only init usb once Faiz Abbas
2020-07-02  8:02 ` [PATCH 03/13] armv7R: K3: am654: Use full malloc in SPL both pre and post reloc Faiz Abbas
2020-07-02  8:02 ` [PATCH 04/13] arm: mach-k3: sysfw-loader: Add support to load SYSFW from USB Faiz Abbas
2020-07-02  8:02 ` [PATCH 05/13] arm: mach-k3: am6_init: Gate mmc related configurations with the appropriate config Faiz Abbas
2020-07-02  8:02 ` Faiz Abbas [this message]
2020-07-03  7:34   ` [PATCH 06/13] arm: mach-k3: am6_init: Do USB fixups to facilitate host and device boot modes Vignesh Raghavendra
2020-08-03  6:06     ` Faiz Abbas
2020-07-08  8:01   ` Lokesh Vutla
2020-07-02  8:02 ` [PATCH 07/13] arm: mach-k3: am6_init: Add support for USB boot mode Faiz Abbas
2020-07-02  8:02 ` [PATCH 08/13] arm: dts: k3-am654-r5-base-board: Add USB0 nodes Faiz Abbas
2020-07-02  8:02 ` [PATCH 09/13] arm: dts: k3-am654-base-board: Add support for USB0 in SPL Faiz Abbas
2020-07-02  8:02 ` [PATCH 10/13] configs: am65x_evm: Add support for DFU related configs Faiz Abbas
2020-07-02  8:02 ` [PATCH 11/13] configs: am65x_evm_a53: Enable USB Mass storage and DFU boot modes Faiz Abbas
2020-07-02  8:02 ` [PATCH 12/13] configs: Add new config for supporting USB mass storage boot Faiz Abbas
2020-07-02  8:02 ` [PATCH 13/13] configs: Add defconfig for USB DFU bootmode Faiz Abbas

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=20200702080233.27582-7-faiz_abbas@ti.com \
    --to=faiz_abbas@ti.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.