summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2018-07-23 10:51:13 -0400
committerTom Rini <trini@konsulko.com>2018-07-23 13:37:42 -0400
commitf0306a145b3234ae4bd3b46f2567b6f1ad7b8f4f (patch)
treebc633e8be8d1a34cd472e42d59e415e71fe1477a /drivers
parent9c5b00973bceb7c0192bd6b03672d69b092700b4 (diff)
parentf97f167107b33fc6596561dae1309571ade39055 (diff)
downloadu-boot-f0306a145b3234ae4bd3b46f2567b6f1ad7b8f4f.tar.gz
u-boot-f0306a145b3234ae4bd3b46f2567b6f1ad7b8f4f.tar.xz
u-boot-f0306a145b3234ae4bd3b46f2567b6f1ad7b8f4f.zip
Merge branch 'master' of git://git.denx.de/u-boot-imx
trini: Update colibri-imx6ull to use Kconfig for mtdparts related options. Signed-off-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/bootcount/bootcount.c3
-rw-r--r--drivers/mmc/mmc.c61
-rw-r--r--drivers/mtd/nand/mxs_nand_dt.c8
-rw-r--r--drivers/net/fec_mxc.c43
-rw-r--r--drivers/net/fec_mxc.h5
5 files changed, 87 insertions, 33 deletions
diff --git a/drivers/bootcount/bootcount.c b/drivers/bootcount/bootcount.c
index e00d81c934..a3162c97ed 100644
--- a/drivers/bootcount/bootcount.c
+++ b/drivers/bootcount/bootcount.c
@@ -18,6 +18,9 @@ __weak void bootcount_store(ulong a)
raw_bootcount_store(reg, a);
raw_bootcount_store(reg + 4, BOOTCOUNT_MAGIC);
#endif /* defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD */
+ flush_dcache_range(CONFIG_SYS_BOOTCOUNT_ADDR,
+ CONFIG_SYS_BOOTCOUNT_ADDR +
+ CONFIG_SYS_CACHELINE_SIZE);
}
__weak ulong bootcount_load(void)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index f7827f527a..ad429f49c9 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -2491,36 +2491,11 @@ static int mmc_power_cycle(struct mmc *mmc)
return mmc_power_on(mmc);
}
-int mmc_start_init(struct mmc *mmc)
+int mmc_get_op_cond(struct mmc *mmc)
{
- bool no_card;
bool uhs_en = supports_uhs(mmc->cfg->host_caps);
int err;
- /*
- * all hosts are capable of 1 bit bus-width and able to use the legacy
- * timings.
- */
- mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
- MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
-
-#if !defined(CONFIG_MMC_BROKEN_CD)
- /* we pretend there's no card when init is NULL */
- no_card = mmc_getcd(mmc) == 0;
-#else
- no_card = 0;
-#endif
-#if !CONFIG_IS_ENABLED(DM_MMC)
- no_card = no_card || (mmc->cfg->ops->init == NULL);
-#endif
- if (no_card) {
- mmc->has_init = 0;
-#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
- pr_err("MMC: no card present\n");
-#endif
- return -ENOMEDIUM;
- }
-
if (mmc->has_init)
return 0;
@@ -2597,6 +2572,40 @@ retry:
}
}
+ return err;
+}
+
+int mmc_start_init(struct mmc *mmc)
+{
+ bool no_card;
+ int err = 0;
+
+ /*
+ * all hosts are capable of 1 bit bus-width and able to use the legacy
+ * timings.
+ */
+ mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
+ MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
+
+#if !defined(CONFIG_MMC_BROKEN_CD)
+ /* we pretend there's no card when init is NULL */
+ no_card = mmc_getcd(mmc) == 0;
+#else
+ no_card = 0;
+#endif
+#if !CONFIG_IS_ENABLED(DM_MMC)
+ no_card = no_card || (mmc->cfg->ops->init == NULL);
+#endif
+ if (no_card) {
+ mmc->has_init = 0;
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+ pr_err("MMC: no card present\n");
+#endif
+ return -ENOMEDIUM;
+ }
+
+ err = mmc_get_op_cond(mmc);
+
if (!err)
mmc->init_in_progress = 1;
diff --git a/drivers/mtd/nand/mxs_nand_dt.c b/drivers/mtd/nand/mxs_nand_dt.c
index f89eb091a9..44dec5dedf 100644
--- a/drivers/mtd/nand/mxs_nand_dt.c
+++ b/drivers/mtd/nand/mxs_nand_dt.c
@@ -21,12 +21,20 @@ struct mxs_nand_dt_data {
unsigned int max_ecc_strength_supported;
};
+static const struct mxs_nand_dt_data mxs_nand_imx6q_data = {
+ .max_ecc_strength_supported = 40,
+};
+
static const struct mxs_nand_dt_data mxs_nand_imx7d_data = {
.max_ecc_strength_supported = 62,
};
static const struct udevice_id mxs_nand_dt_ids[] = {
{
+ .compatible = "fsl,imx6q-gpmi-nand",
+ .data = (unsigned long)&mxs_nand_imx6q_data,
+ },
+ {
.compatible = "fsl,imx7d-gpmi-nand",
.data = (unsigned long)&mxs_nand_imx7d_data,
},
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
index 694a0b2f7e..dac07b6e34 100644
--- a/drivers/net/fec_mxc.c
+++ b/drivers/net/fec_mxc.c
@@ -15,7 +15,6 @@
#include <miiphy.h>
#include <net.h>
#include <netdev.h>
-#include "fec_mxc.h"
#include <asm/io.h>
#include <linux/errno.h>
@@ -24,6 +23,9 @@
#include <asm/arch/clock.h>
#include <asm/arch/imx-regs.h>
#include <asm/mach-imx/sys_proto.h>
+#include <asm-generic/gpio.h>
+
+#include "fec_mxc.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -1245,6 +1247,19 @@ static int fec_phy_init(struct fec_priv *priv, struct udevice *dev)
return 0;
}
+#ifdef CONFIG_DM_GPIO
+/* FEC GPIO reset */
+static void fec_gpio_reset(struct fec_priv *priv)
+{
+ debug("fec_gpio_reset: fec_gpio_reset(dev)\n");
+ if (dm_gpio_is_valid(&priv->phy_reset_gpio)) {
+ dm_gpio_set_value(&priv->phy_reset_gpio, 1);
+ udelay(priv->reset_delay);
+ dm_gpio_set_value(&priv->phy_reset_gpio, 0);
+ }
+}
+#endif
+
static int fecmxc_probe(struct udevice *dev)
{
struct eth_pdata *pdata = dev_get_platdata(dev);
@@ -1257,6 +1272,9 @@ static int fecmxc_probe(struct udevice *dev)
if (ret)
return ret;
+#ifdef CONFIG_DM_GPIO
+ fec_gpio_reset(priv);
+#endif
/* Reset chip. */
writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET,
&priv->eth->ecntrl);
@@ -1314,6 +1332,7 @@ static int fecmxc_remove(struct udevice *dev)
static int fecmxc_ofdata_to_platdata(struct udevice *dev)
{
+ int ret = 0;
struct eth_pdata *pdata = dev_get_platdata(dev);
struct fec_priv *priv = dev_get_priv(dev);
const char *phy_mode;
@@ -1331,12 +1350,24 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev)
return -EINVAL;
}
- /* TODO
- * Need to get the reset-gpio and related properties from DT
- * and implemet the enet reset code on .probe call
- */
+#ifdef CONFIG_DM_GPIO
+ ret = gpio_request_by_name(dev, "phy-reset-gpios", 0,
+ &priv->phy_reset_gpio, GPIOD_IS_OUT);
+ if (ret == 0) {
+ ret = dev_read_u32_array(dev, "phy-reset-duration",
+ &priv->reset_delay, 1);
+ } else if (ret == -ENOENT) {
+ priv->reset_delay = 1000;
+ ret = 0;
+ }
- return 0;
+ if (priv->reset_delay > 1000) {
+ printf("FEX MXC: gpio reset timeout should be less the 1000\n");
+ priv->reset_delay = 1000;
+ }
+#endif
+
+ return ret;
}
static const struct udevice_id fecmxc_ids[] = {
diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
index 3b935afe2c..fd89443205 100644
--- a/drivers/net/fec_mxc.h
+++ b/drivers/net/fec_mxc.h
@@ -250,7 +250,10 @@ struct fec_priv {
int phy_id;
int (*mii_postcall)(int);
#endif
-
+#ifdef CONFIG_DM_GPIO
+ struct gpio_desc phy_reset_gpio;
+ uint32_t reset_delay;
+#endif
#ifdef CONFIG_DM_ETH
u32 interface;
#endif