From patchwork Fri Feb 1 16:29:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Ziswiler X-Patchwork-Id: 1034946 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=ziswiler.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 43rjWF2h2Cz9sDX for ; Sat, 2 Feb 2019 03:39:53 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 01019C21DB6; Fri, 1 Feb 2019 16:36:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 77FA5C21D8A; Fri, 1 Feb 2019 16:30:14 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A0ED5C21E7E; Fri, 1 Feb 2019 16:29:53 +0000 (UTC) Received: from mout.perfora.net (mout.perfora.net [74.208.4.197]) by lists.denx.de (Postfix) with ESMTPS id E2FD4C21DFF for ; Fri, 1 Feb 2019 16:29:47 +0000 (UTC) Received: from localhost.localdomain ([81.221.68.199]) by mrelay.perfora.net (mreueus001 [74.208.5.2]) with ESMTPSA (Nemesis) id 0Lu5Nw-1hFUUz41Oo-011RVG; Fri, 01 Feb 2019 17:29:44 +0100 From: Marcel Ziswiler To: u-boot@lists.denx.de Date: Fri, 1 Feb 2019 17:29:08 +0100 Message-Id: <20190201162920.32067-12-marcel@ziswiler.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201162920.32067-1-marcel@ziswiler.com> References: <20190201162920.32067-1-marcel@ziswiler.com> MIME-Version: 1.0 X-Provags-ID: V03:K1:ugffkjofF9wmsgWNZoZPRfP2vkFjSzOW359aGI5TyaTll9FclAi NdevyYGGKmicoUgK6exXgNlDjpIJdnSHDDqKisnVIJ/aw304VL7zKq4njsy4ACbdhQMG8DI HYDr0W4TzGWcR6NFK1qzfjjH/aql5jtw4U06Wp8t1TnNImAQmVs+On1u2BkWYwKXVXsq1YH V89xswDRv2bwbYNQSToHw== X-UI-Out-Filterresults: notjunk:1; V03:K0:F1NslYA7bFk=:+2TMvC3cOsMpOt7srO0w2n P8ElsZh5GBHqicBqOWo5L5mWS3vBA763Gb0651mkE0yRhrEeweBL9yjzdUMI6Wu5Zhor0fKvw hpJsEcrSryCyi3bA8dFrF6SCJFmIvcWQ3xlT9Iypb7iwirud/+GXco8QvX4WHR2TIvyIDiMFF g3Vez2TwY65idCd/FmYmV/AyinfHEtf9DSWExgqwIbbLD8dCzQ+qLPGPo23BqqXG0pNRQ2vGn 4mbY1Rx7OJjbzMx8UB626V+eCmurhDm+5XZLfVIoxnRFA9MhBGObEsviko3yH+XCDcXAgiIMA U614fAw0uEgMV/xYVemECIE5YBlL9cj7tEgiJt4HfgIXgY849jMb03WZebbxNeNNXlSC1FbaR Fp4WubDyCmYMpne8un2WAE5Hi3W2P3cCnJfEYCJusWDACQh8DgaUoSxZBED78QWDJ0xcWOP3V 5P7i7BRzQqOPH544HpZhFW3dHXYsDUJYg4onQFXUFd57i6kSnMYaRqyhbYZk0qWICY002NEIt dfxX4uwPcTvyPfmOH2w19kbHKSNHszKdKQtc+BuDPRszz0gXLz9+1ryQ9nWCuUj46PZyS/mBY gJVNATYwnFVL2Tv63Z1QcfyWnHyWkKhRUZ9GYym+lhV2PsZGJc2Zdub/gMSE0d8p1ZXLgIAxc bdeLFxr757gOoAllkzlc67xpbkN1cWfW1DuHF1XllpGB2CPSNWKvdZ4WU3GEa1a2Vz7rhMqdk XWedv7+yE8Ss8daW5g/5IlpxrdamforfkSmxDg== Cc: Marcel Ziswiler , Max Krummenacher Subject: [U-Boot] [PATCH v1 11/23] apalis_imx6: migrate mmc and sata to using driver model X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Marcel Ziswiler Migrate MMC and SATA to using driver model. While at it also enable SCSI driver model. Signed-off-by: Marcel Ziswiler --- board/toradex/apalis_imx6/apalis_imx6.c | 102 ++++++++++++++---------- configs/apalis_imx6_defconfig | 3 + include/configs/apalis_imx6.h | 3 - 3 files changed, 64 insertions(+), 44 deletions(-) diff --git a/board/toradex/apalis_imx6/apalis_imx6.c b/board/toradex/apalis_imx6/apalis_imx6.c index 2c9a7db931..95ee39d09e 100644 --- a/board/toradex/apalis_imx6/apalis_imx6.c +++ b/board/toradex/apalis_imx6/apalis_imx6.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -24,17 +25,21 @@ #include #include #include +#include #include #include +#include #include #include #include #include #include -#include #include #include +#include #include +#include +#include #include "../common/tdx-cfg-block.h" #ifdef CONFIG_TDX_CMD_IMX_MFGR @@ -66,6 +71,8 @@ DECLARE_GLOBAL_DATA_PTR; #define OUTPUT_RGB (PAD_CTL_SPEED_MED|PAD_CTL_DSE_60ohm|PAD_CTL_SRE_FAST) +#define APALIS_IMX6_SATA_INIT_RETRIES 10 + int dram_init(void) { /* use the DDR controllers configured size */ @@ -85,6 +92,7 @@ iomux_v3_cfg_t const uart1_pads_dte[] = { MX6_PAD_CSI0_DAT11__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), }; +#if defined(CONFIG_FSL_ESDHC) && defined(CONFIG_SPL_BUILD) /* Apalis MMC1 */ iomux_v3_cfg_t const usdhc1_pads[] = { MX6_PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), @@ -127,6 +135,7 @@ iomux_v3_cfg_t const usdhc3_pads[] = { MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL), MX6_PAD_SD3_RST__GPIO7_IO08 | MUX_PAD_CTRL(WEAK_PULLUP), }; +#endif /* CONFIG_FSL_ESDHC & CONFIG_SPL_BUILD */ int mx6_rgmii_rework(struct phy_device *phydev) { @@ -285,7 +294,7 @@ int board_ehci_power(int port, int on) } #endif -#ifdef CONFIG_FSL_ESDHC +#if defined(CONFIG_FSL_ESDHC) && defined(CONFIG_SPL_BUILD) /* use the following sequence: eMMC, MMC, SD */ struct fsl_esdhc_cfg usdhc_cfg[CONFIG_SYS_FSL_USDHC_NUM] = { {USDHC3_BASE_ADDR}, @@ -314,43 +323,6 @@ int board_mmc_getcd(struct mmc *mmc) int board_mmc_init(bd_t *bis) { -#ifndef CONFIG_SPL_BUILD - s32 status = 0; - u32 index = 0; - - usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); - usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); - usdhc_cfg[2].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); - - usdhc_cfg[0].max_bus_width = 8; - usdhc_cfg[1].max_bus_width = 8; - usdhc_cfg[2].max_bus_width = 4; - - for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) { - switch (index) { - case 0: - imx_iomux_v3_setup_multiple_pads( - usdhc3_pads, ARRAY_SIZE(usdhc3_pads)); - break; - case 1: - imx_iomux_v3_setup_multiple_pads( - usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); - break; - case 2: - imx_iomux_v3_setup_multiple_pads( - usdhc2_pads, ARRAY_SIZE(usdhc2_pads)); - break; - default: - printf("Warning: you configured more USDHC controllers (%d) then supported by the board (%d)\n", - index + 1, CONFIG_SYS_FSL_USDHC_NUM); - return status; - } - - status |= fsl_esdhc_initialize(bis, &usdhc_cfg[index]); - } - - return status; -#else /* CONFIG_SPL_BUILD */ struct src *psrc = (struct src *)SRC_BASE_ADDR; unsigned reg = readl(&psrc->sbmr1) >> 11; /* @@ -389,9 +361,8 @@ int board_mmc_init(bd_t *bis) } return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); -#endif /* CONFIG_SPL_BUILD */ } -#endif /* CONFIG_FSL_ESDHC */ +#endif /* CONFIG_FSL_ESDHC & CONFIG_SPL_BUILD */ int board_phy_config(struct phy_device *phydev) { @@ -1150,3 +1121,52 @@ U_BOOT_DEVICE(mxc_serial) = { .name = "serial_mxc", .platdata = &mxc_serial_plat, }; + +#if CONFIG_IS_ENABLED(AHCI) +static int sata_imx_probe(struct udevice *dev) +{ + int i, err; + + for (i = 0; i < APALIS_IMX6_SATA_INIT_RETRIES; i++) { + err = setup_sata(); + if (err) { + printf("SATA setup failed: %d\n", err); + return err; + } + + udelay(100); + + err = dwc_ahsata_probe(dev); + if (!err) + break; + + /* There is no device on the SATA port */ + if (sata_dm_port_status(0, 0) == 0) + break; + + /* There's a device, but link not established. Retry */ + device_remove(dev, DM_REMOVE_NORMAL); + } + + return 0; +} + +struct ahci_ops sata_imx_ops = { + .port_status = dwc_ahsata_port_status, + .reset = dwc_ahsata_bus_reset, + .scan = dwc_ahsata_scan, +}; + +static const struct udevice_id sata_imx_ids[] = { + { .compatible = "fsl,imx6q-ahci" }, + { } +}; + +U_BOOT_DRIVER(sata_imx) = { + .name = "dwc_ahci", + .id = UCLASS_AHCI, + .of_match = sata_imx_ids, + .ops = &sata_imx_ops, + .probe = sata_imx_probe, +}; +#endif /* AHCI */ diff --git a/configs/apalis_imx6_defconfig b/configs/apalis_imx6_defconfig index 7e973ded74..510161ad32 100644 --- a/configs/apalis_imx6_defconfig +++ b/configs/apalis_imx6_defconfig @@ -9,6 +9,7 @@ CONFIG_SPL_MMC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL=y CONFIG_CMD_HDMIDETECT=y +CONFIG_AHCI=y CONFIG_DISTRO_DEFAULTS=y CONFIG_NR_DRAM_BANKS=1 CONFIG_FIT=y @@ -55,6 +56,7 @@ CONFIG_DWC_AHSATA=y CONFIG_DFU_MMC=y CONFIG_DM_GPIO=y CONFIG_DM_I2C=y +CONFIG_DM_MMC=y CONFIG_FSL_ESDHC=y CONFIG_PHYLIB=y CONFIG_PHY_MICREL=y @@ -67,6 +69,7 @@ CONFIG_DM_PMIC_PFUZE100=y CONFIG_DM_REGULATOR=y CONFIG_DM_REGULATOR_PFUZE100=y CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DM_SCSI=y CONFIG_IMX_THERMAL=y CONFIG_USB=y CONFIG_USB_KEYBOARD=y diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h index 5ab009c8f3..6b20d1e104 100644 --- a/include/configs/apalis_imx6.h +++ b/include/configs/apalis_imx6.h @@ -57,9 +57,6 @@ * SATA Configs */ #ifdef CONFIG_CMD_SATA -#define CONFIG_SYS_SATA_MAX_DEVICE 1 -#define CONFIG_DWC_AHSATA_PORT_ID 0 -#define CONFIG_DWC_AHSATA_BASE_ADDR SATA_ARB_BASE_ADDR #define CONFIG_LBA48 #endif