U-Boot
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2000 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
January 2015
- 188 participants
- 696 discussions

[U-Boot] [PATCH] spl: mmc: Fix raw boot mode (related to commit 4c5bbc2328a24f5e1ee990c9a9527e48e5fb3b5f)
by Guillaume GARDET 05 Jan '15
by Guillaume GARDET 05 Jan '15
05 Jan '15
As reported by Robert Nelson, commit 4c5bbc2328a24f5e1ee990c9a9527e48e5fb3b5f
may break MMC RAW boot mode.
This patch fixes the check path to fix MMC Raw boot mode.
Tested raw boot mode and FS boot mode on a pandaboard (rev. A3).
Reported-by: Robert Nelson <robertcnelson(a)gmail.com>
Signed-off-by: Guillaume GARDET <guillaume.gardet(a)free.fr>
Cc: Tom Rini <trini(a)ti.com>
Cc: Robert Nelson <robertcnelson(a)gmail.com>
---
common/spl/spl_mmc.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index 7bae16b..c2e596b 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -172,11 +172,24 @@ void spl_mmc_load_image(void)
err = mmc_load_image_raw_sector(mmc,
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR);
#endif
- } else {
+ }
+
+ switch(boot_mode){
+ case MMCSD_MODE_RAW:
+#if defined(CONFIG_SPL_FAT_SUPPORT) || defined(CONFIG_SPL_EXT_SUPPORT)
+ case MMCSD_MODE_FS:
+#endif
+#ifdef CONFIG_SUPPORT_EMMC_BOOT
+ case MMCSD_MODE_EMMCBOOT:
+#endif
+ /* Boot mode is ok. Nothing to do. */
+ break;
+ case MMCSD_MODE_UNDEFINED:
+ default:
#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
- puts("spl: wrong MMC boot mode\n");
+ puts("spl: wrong MMC boot mode\n");
#endif
- hang();
+ hang();
}
if (err)
--
1.8.4.5
4
5

[U-Boot] [PATCH v2] mmc: rmobile: Add SDHC support for Renesas rmobile ARM SoC
by Nobuhiro Iwamatsu 05 Jan '15
by Nobuhiro Iwamatsu 05 Jan '15
05 Jan '15
This adds Renesas rmobile ARM SoC's SD/MMC host support.
This drivers tested with Gose board and Koelsch board.
Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj(a)renesas.com>
---
v2: - Remove global variable, and move to sh_sdhi_host.
- Remove define for each SoCs, use instead of quirks.
- Add timeout control for loop.
- Change printf to debug for some debug messages.
- Remove volatile declaration.
arch/arm/include/asm/arch-rmobile/r8a7790.h | 6 +
arch/arm/include/asm/arch-rmobile/r8a7791.h | 5 +
arch/arm/include/asm/arch-rmobile/r8a7793.h | 5 +
arch/arm/include/asm/arch-rmobile/r8a7794.h | 5 +
arch/arm/include/asm/arch-rmobile/rcar-base.h | 3 +
arch/arm/include/asm/arch-rmobile/sh_sdhi.h | 168 +++++++
drivers/mmc/Kconfig | 9 +
drivers/mmc/Makefile | 1 +
drivers/mmc/sh_sdhi.c | 696 ++++++++++++++++++++++++++
9 files changed, 898 insertions(+)
create mode 100644 arch/arm/include/asm/arch-rmobile/sh_sdhi.h
create mode 100644 drivers/mmc/sh_sdhi.c
diff --git a/arch/arm/include/asm/arch-rmobile/r8a7790.h b/arch/arm/include/asm/arch-rmobile/r8a7790.h
index de14869..a70adc6 100644
--- a/arch/arm/include/asm/arch-rmobile/r8a7790.h
+++ b/arch/arm/include/asm/arch-rmobile/r8a7790.h
@@ -15,6 +15,12 @@
#define CONFIG_SYS_I2C_SH_BASE2 0xE6520000
#define CONFIG_SYS_I2C_SH_BASE3 0xE60B0000
+/* SDHI */
+#define CONFIG_SYS_SH_SDHI1_BASE 0xEE120000
+#define CONFIG_SYS_SH_SDHI2_BASE 0xEE140000
+#define CONFIG_SYS_SH_SDHI3_BASE 0xEE160000
+#define CONFIG_SYS_SH_SDHI_NR_CHANNEL 4
+
#define R8A7790_CUT_ES2X 2
#define IS_R8A7790_ES2() \
(rmobile_get_cpu_rev_integer() == R8A7790_CUT_ES2X)
diff --git a/arch/arm/include/asm/arch-rmobile/r8a7791.h b/arch/arm/include/asm/arch-rmobile/r8a7791.h
index 26a0bd5..658d435 100644
--- a/arch/arm/include/asm/arch-rmobile/r8a7791.h
+++ b/arch/arm/include/asm/arch-rmobile/r8a7791.h
@@ -17,6 +17,11 @@
/* SH-I2C */
#define CONFIG_SYS_I2C_SH_BASE2 0xE60B0000
+/* SDHI */
+#define CONFIG_SYS_SH_SDHI1_BASE 0xEE140000
+#define CONFIG_SYS_SH_SDHI2_BASE 0xEE160000
+#define CONFIG_SYS_SH_SDHI_NR_CHANNEL 3
+
#define DBSC3_1_QOS_R0_BASE 0xE67A1000
#define DBSC3_1_QOS_R1_BASE 0xE67A1100
#define DBSC3_1_QOS_R2_BASE 0xE67A1200
diff --git a/arch/arm/include/asm/arch-rmobile/r8a7793.h b/arch/arm/include/asm/arch-rmobile/r8a7793.h
index 778812e..505c812 100644
--- a/arch/arm/include/asm/arch-rmobile/r8a7793.h
+++ b/arch/arm/include/asm/arch-rmobile/r8a7793.h
@@ -18,6 +18,11 @@
/* SH-I2C */
#define CONFIG_SYS_I2C_SH_BASE2 0xE60B0000
+/* SDHI */
+#define CONFIG_SYS_SH_SDHI1_BASE 0xEE140000
+#define CONFIG_SYS_SH_SDHI2_BASE 0xEE160000
+#define CONFIG_SYS_SH_SDHI_NR_CHANNEL 3
+
#define DBSC3_1_QOS_R0_BASE 0xE67A1000
#define DBSC3_1_QOS_R1_BASE 0xE67A1100
#define DBSC3_1_QOS_R2_BASE 0xE67A1200
diff --git a/arch/arm/include/asm/arch-rmobile/r8a7794.h b/arch/arm/include/asm/arch-rmobile/r8a7794.h
index 66d5a29..e8f1d1d 100644
--- a/arch/arm/include/asm/arch-rmobile/r8a7794.h
+++ b/arch/arm/include/asm/arch-rmobile/r8a7794.h
@@ -14,4 +14,9 @@
/* SH-I2C */
#define CONFIG_SYS_I2C_SH_BASE2 0xE60B0000
+/* SDHI */
+#define CONFIG_SYS_SH_SDHI1_BASE 0xEE140000
+#define CONFIG_SYS_SH_SDHI2_BASE 0xEE160000
+#define CONFIG_SYS_SH_SDHI_NR_CHANNEL 3
+
#endif /* __ASM_ARCH_R8A7794_H */
diff --git a/arch/arm/include/asm/arch-rmobile/rcar-base.h b/arch/arm/include/asm/arch-rmobile/rcar-base.h
index dbbebcf..0bae173 100644
--- a/arch/arm/include/asm/arch-rmobile/rcar-base.h
+++ b/arch/arm/include/asm/arch-rmobile/rcar-base.h
@@ -43,6 +43,9 @@
#define CONFIG_SYS_RCAR_I2C2_BASE 0xE6530000
#define CONFIG_SYS_RCAR_I2C3_BASE 0xE6540000
+/* SDHI */
+#define CONFIG_SYS_SH_SDHI0_BASE 0xEE100000
+
#define S3C_BASE 0xE6784000
#define S3C_INT_BASE 0xE6784A00
#define S3C_MEDIA_BASE 0xE6784B00
diff --git a/arch/arm/include/asm/arch-rmobile/sh_sdhi.h b/arch/arm/include/asm/arch-rmobile/sh_sdhi.h
new file mode 100644
index 0000000..057bf3f
--- /dev/null
+++ b/arch/arm/include/asm/arch-rmobile/sh_sdhi.h
@@ -0,0 +1,168 @@
+/*
+ * drivers/mmc/sh-sdhi.h
+ *
+ * SD/MMC driver for Reneas rmobile ARM SoCs
+ *
+ * Copyright (C) 2013-2014 Renesas Electronics Corporation
+ * Copyright (C) 2008-2009 Renesas Solutions Corp.
+ *
+ * SPDX-License-Identifier: GPL-2.0
+ */
+
+#ifndef _SH_SDHI_H
+#define _SH_SDHI_H
+
+#define SDHI_CMD (0x0000 >> 1)
+#define SDHI_PORTSEL (0x0004 >> 1)
+#define SDHI_ARG0 (0x0008 >> 1)
+#define SDHI_ARG1 (0x000C >> 1)
+#define SDHI_STOP (0x0010 >> 1)
+#define SDHI_SECCNT (0x0014 >> 1)
+#define SDHI_RSP00 (0x0018 >> 1)
+#define SDHI_RSP01 (0x001C >> 1)
+#define SDHI_RSP02 (0x0020 >> 1)
+#define SDHI_RSP03 (0x0024 >> 1)
+#define SDHI_RSP04 (0x0028 >> 1)
+#define SDHI_RSP05 (0x002C >> 1)
+#define SDHI_RSP06 (0x0030 >> 1)
+#define SDHI_RSP07 (0x0034 >> 1)
+#define SDHI_INFO1 (0x0038 >> 1)
+#define SDHI_INFO2 (0x003C >> 1)
+#define SDHI_INFO1_MASK (0x0040 >> 1)
+#define SDHI_INFO2_MASK (0x0044 >> 1)
+#define SDHI_CLK_CTRL (0x0048 >> 1)
+#define SDHI_SIZE (0x004C >> 1)
+#define SDHI_OPTION (0x0050 >> 1)
+#define SDHI_ERR_STS1 (0x0058 >> 1)
+#define SDHI_ERR_STS2 (0x005C >> 1)
+#define SDHI_BUF0 (0x0060 >> 1)
+#define SDHI_SDIO_MODE (0x0068 >> 1)
+#define SDHI_SDIO_INFO1 (0x006C >> 1)
+#define SDHI_SDIO_INFO1_MASK (0x0070 >> 1)
+#define SDHI_CC_EXT_MODE (0x01B0 >> 1)
+#define SDHI_SOFT_RST (0x01C0 >> 1)
+#define SDHI_VERSION (0x01C4 >> 1)
+#define SDHI_HOST_MODE (0x01C8 >> 1)
+#define SDHI_SDIF_MODE (0x01CC >> 1)
+#define SDHI_EXT_SWAP (0x01E0 >> 1)
+#define SDHI_SD_DMACR (0x0324 >> 1)
+
+/* SDHI CMD VALUE */
+#define CMD_MASK 0x0000ffff
+#define SDHI_APP 0x0040
+#define SDHI_SD_APP_SEND_SCR 0x0073
+#define SDHI_SD_SWITCH 0x1C06
+
+/* SDHI_PORTSEL */
+#define USE_1PORT (1 << 8) /* 1 port */
+
+/* SDHI_ARG */
+#define ARG0_MASK 0x0000ffff
+#define ARG1_MASK 0x0000ffff
+
+/* SDHI_STOP */
+#define STOP_SEC_ENABLE (1 << 8)
+
+/* SDHI_INFO1 */
+#define INFO1_RESP_END (1 << 0)
+#define INFO1_ACCESS_END (1 << 2)
+#define INFO1_CARD_RE (1 << 3)
+#define INFO1_CARD_IN (1 << 4)
+#define INFO1_ISD0CD (1 << 5)
+#define INFO1_WRITE_PRO (1 << 7)
+#define INFO1_DATA3_CARD_RE (1 << 8)
+#define INFO1_DATA3_CARD_IN (1 << 9)
+#define INFO1_DATA3 (1 << 10)
+
+/* SDHI_INFO2 */
+#define INFO2_CMD_ERROR (1 << 0)
+#define INFO2_CRC_ERROR (1 << 1)
+#define INFO2_END_ERROR (1 << 2)
+#define INFO2_TIMEOUT (1 << 3)
+#define INFO2_BUF_ILL_WRITE (1 << 4)
+#define INFO2_BUF_ILL_READ (1 << 5)
+#define INFO2_RESP_TIMEOUT (1 << 6)
+#define INFO2_SDDAT0 (1 << 7)
+#define INFO2_BRE_ENABLE (1 << 8)
+#define INFO2_BWE_ENABLE (1 << 9)
+#define INFO2_CBUSY (1 << 14)
+#define INFO2_ILA (1 << 15)
+#define INFO2_ALL_ERR (0x807f)
+
+/* SDHI_INFO1_MASK */
+#define INFO1M_RESP_END (1 << 0)
+#define INFO1M_ACCESS_END (1 << 2)
+#define INFO1M_CARD_RE (1 << 3)
+#define INFO1M_CARD_IN (1 << 4)
+#define INFO1M_DATA3_CARD_RE (1 << 8)
+#define INFO1M_DATA3_CARD_IN (1 << 9)
+#define INFO1M_ALL (0xffff)
+#define INFO1M_SET (INFO1M_RESP_END | \
+ INFO1M_ACCESS_END | \
+ INFO1M_DATA3_CARD_RE | \
+ INFO1M_DATA3_CARD_IN)
+
+/* SDHI_INFO2_MASK */
+#define INFO2M_CMD_ERROR (1 << 0)
+#define INFO2M_CRC_ERROR (1 << 1)
+#define INFO2M_END_ERROR (1 << 2)
+#define INFO2M_TIMEOUT (1 << 3)
+#define INFO2M_BUF_ILL_WRITE (1 << 4)
+#define INFO2M_BUF_ILL_READ (1 << 5)
+#define INFO2M_RESP_TIMEOUT (1 << 6)
+#define INFO2M_BRE_ENABLE (1 << 8)
+#define INFO2M_BWE_ENABLE (1 << 9)
+#define INFO2M_ILA (1 << 15)
+#define INFO2M_ALL (0xffff)
+#define INFO2M_ALL_ERR (0x807f)
+
+/* SDHI_CLK_CTRL */
+#define CLK_ENABLE (1 << 8)
+
+/* SDHI_OPTION */
+#define OPT_BUS_WIDTH_1 (1 << 15) /* bus width = 1 bit */
+
+/* SDHI_ERR_STS1 */
+#define ERR_STS1_CRC_ERROR ((1 << 11) | (1 << 10) | (1 << 9) | \
+ (1 << 8) | (1 << 5))
+#define ERR_STS1_CMD_ERROR ((1 << 4) | (1 << 3) | (1 << 2) | \
+ (1 << 1) | (1 << 0))
+
+/* SDHI_ERR_STS2 */
+#define ERR_STS2_RES_TIMEOUT (1 << 0)
+#define ERR_STS2_RES_STOP_TIMEOUT ((1 << 0) | (1 << 1))
+#define ERR_STS2_SYS_ERROR ((1 << 6) | (1 << 5) | (1 << 4) | \
+ (1 << 3) | (1 << 2) | (1 << 1) | \
+ (1 << 0))
+
+/* SDHI_SDIO_MODE */
+#define SDIO_MODE_ON (1 << 0)
+#define SDIO_MODE_OFF (0 << 0)
+
+/* SDHI_SDIO_INFO1 */
+#define SDIO_INFO1_IOIRQ (1 << 0)
+#define SDIO_INFO1_EXPUB52 (1 << 14)
+#define SDIO_INFO1_EXWT (1 << 15)
+
+/* SDHI_SDIO_INFO1_MASK */
+#define SDIO_INFO1M_CLEAR ((1 << 1) | (1 << 2))
+#define SDIO_INFO1M_ON ((1 << 15) | (1 << 14) | (1 << 2) | \
+ (1 << 1) | (1 << 0))
+
+/* SDHI_EXT_SWAP */
+#define SET_SWAP ((1 << 6) | (1 << 7)) /* SWAP */
+
+/* SDHI_SOFT_RST */
+#define SOFT_RST_ON (0 << 0)
+#define SOFT_RST_OFF (1 << 0)
+
+#define CLKDEV_SD_DATA 25000000 /* 25 MHz */
+#define CLKDEV_HS_DATA 50000000 /* 50 MHz */
+#define CLKDEV_MMC_DATA 20000000 /* 20MHz */
+#define CLKDEV_INIT 400000 /* 100 - 400 KHz */
+
+/* For quirk */
+#define SH_SDHI_QUIRK_16BIT_BUF (1)
+int sh_sdhi_init(unsigned long addr, int ch, unsigned long quirks);
+
+#endif /* _SH_SDHI_H */
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index e69de29..7ba85a2 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -0,0 +1,9 @@
+menu "MMC Host controller Support"
+
+config SH_SDHI
+ bool "SuperH/Renesas ARM SoCs on-chip SDHI host controller support"
+ depends on RMOBILE
+ help
+ Support for the on-chip SDHI host controller on SuperH/Renesas ARM SoCs platform
+
+endmenu
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index 461d7d8..4ba5878 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_S3C_SDI) += s3c_sdi.o
obj-$(CONFIG_S5P_SDHCI) += s5p_sdhci.o
obj-$(CONFIG_SDHCI) += sdhci.o
obj-$(CONFIG_SH_MMCIF) += sh_mmcif.o
+obj-$(CONFIG_SH_SDHI) += sh_sdhi.o
obj-$(CONFIG_SOCFPGA_DWMMC) += socfpga_dw_mmc.o
obj-$(CONFIG_SPEAR_SDHCI) += spear_sdhci.o
obj-$(CONFIG_TEGRA_MMC) += tegra_mmc.o
diff --git a/drivers/mmc/sh_sdhi.c b/drivers/mmc/sh_sdhi.c
new file mode 100644
index 0000000..51b6d92
--- /dev/null
+++ b/drivers/mmc/sh_sdhi.c
@@ -0,0 +1,696 @@
+/*
+ * drivers/mmc/sh_sdhi.c
+ *
+ * SD/MMC driver for Renesas rmobile ARM SoCs.
+ *
+ * Copyright (C) 2011,2013-2014 Renesas Electronics Corporation
+ * Copyright (C) 2014 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj(a)renesas.com>
+ * Copyright (C) 2008-2009 Renesas Solutions Corp.
+ *
+ * SPDX-License-Identifier: GPL-2.0
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <mmc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/rmobile.h>
+#include <asm/arch/sh_sdhi.h>
+
+#define DRIVER_NAME "sh-sdhi"
+
+struct sh_sdhi_host {
+ unsigned long addr;
+ int ch;
+ int bus_shift;
+ unsigned long quirks;
+ unsigned char wait_int;
+ unsigned char sd_error;
+ unsigned char detect_waiting;
+};
+static inline void sh_sdhi_writew(struct sh_sdhi_host *host, int reg, u16 val)
+{
+ writew(val, host->addr + (reg << host->bus_shift));
+}
+
+static inline u16 sh_sdhi_readw(struct sh_sdhi_host *host, int reg)
+{
+ return readw(host->addr + (reg << host->bus_shift));
+}
+
+static void *mmc_priv(struct mmc *mmc)
+{
+ return (void *)mmc->priv;
+}
+
+static void sh_sdhi_detect(struct sh_sdhi_host *host)
+{
+ sh_sdhi_writew(host, SDHI_OPTION,
+ OPT_BUS_WIDTH_1 | sh_sdhi_readw(host, SDHI_OPTION));
+
+ host->detect_waiting = 0;
+}
+
+static int sh_sdhi_intr(void *dev_id)
+{
+ struct sh_sdhi_host *host = dev_id;
+ int state1 = 0, state2 = 0;
+
+ state1 = sh_sdhi_readw(host, SDHI_INFO1);
+ state2 = sh_sdhi_readw(host, SDHI_INFO2);
+
+ debug("%s: state1 = %x, state2 = %x\n", __func__, state1, state2);
+
+ /* CARD Insert */
+ if (state1 & INFO1_CARD_IN) {
+ sh_sdhi_writew(host, SDHI_INFO1, ~INFO1_CARD_IN);
+ if (!host->detect_waiting) {
+ host->detect_waiting = 1;
+ sh_sdhi_detect(host);
+ }
+ sh_sdhi_writew(host, SDHI_INFO1_MASK, INFO1M_RESP_END |
+ INFO1M_ACCESS_END | INFO1M_CARD_IN |
+ INFO1M_DATA3_CARD_RE | INFO1M_DATA3_CARD_IN);
+ return -EAGAIN;
+ }
+ /* CARD Removal */
+ if (state1 & INFO1_CARD_RE) {
+ sh_sdhi_writew(host, SDHI_INFO1, ~INFO1_CARD_RE);
+ if (!host->detect_waiting) {
+ host->detect_waiting = 1;
+ sh_sdhi_detect(host);
+ }
+ sh_sdhi_writew(host, SDHI_INFO1_MASK, INFO1M_RESP_END |
+ INFO1M_ACCESS_END | INFO1M_CARD_RE |
+ INFO1M_DATA3_CARD_RE | INFO1M_DATA3_CARD_IN);
+ sh_sdhi_writew(host, SDHI_SDIO_INFO1_MASK, SDIO_INFO1M_ON);
+ sh_sdhi_writew(host, SDHI_SDIO_MODE, SDIO_MODE_OFF);
+ return -EAGAIN;
+ }
+
+ if (state2 & INFO2_ALL_ERR) {
+ sh_sdhi_writew(host, SDHI_INFO2,
+ (unsigned short)~(INFO2_ALL_ERR));
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ INFO2M_ALL_ERR |
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+ host->sd_error = 1;
+ host->wait_int = 1;
+ return 0;
+ }
+ /* Respons End */
+ if (state1 & INFO1_RESP_END) {
+ sh_sdhi_writew(host, SDHI_INFO1, ~INFO1_RESP_END);
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ INFO1M_RESP_END |
+ sh_sdhi_readw(host, SDHI_INFO1_MASK));
+ host->wait_int = 1;
+ return 0;
+ }
+ /* SD_BUF Read Enable */
+ if (state2 & INFO2_BRE_ENABLE) {
+ sh_sdhi_writew(host, SDHI_INFO2, ~INFO2_BRE_ENABLE);
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ INFO2M_BRE_ENABLE | INFO2M_BUF_ILL_READ |
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+ host->wait_int = 1;
+ return 0;
+ }
+ /* SD_BUF Write Enable */
+ if (state2 & INFO2_BWE_ENABLE) {
+ sh_sdhi_writew(host, SDHI_INFO2, ~INFO2_BWE_ENABLE);
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ INFO2_BWE_ENABLE | INFO2M_BUF_ILL_WRITE |
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+ host->wait_int = 1;
+ return 0;
+ }
+ /* Access End */
+ if (state1 & INFO1_ACCESS_END) {
+ sh_sdhi_writew(host, SDHI_INFO1, ~INFO1_ACCESS_END);
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ INFO1_ACCESS_END |
+ sh_sdhi_readw(host, SDHI_INFO1_MASK));
+ host->wait_int = 1;
+ return 0;
+ }
+ return -EAGAIN;
+}
+
+static int sh_sdhi_wait_interrupt_flag(struct sh_sdhi_host *host)
+{
+ int timeout = 10000000;
+
+ while (1) {
+ timeout--;
+ if (timeout < 0) {
+ debug(DRIVER_NAME": %s timeout\n", __func__);
+ return 0;
+ }
+
+ if (!sh_sdhi_intr(host))
+ break;
+
+ udelay(1); /* 1 usec */
+ }
+
+ return 1; /* Return value: NOT 0 = complete waiting */
+}
+
+static int sh_sdhi_clock_control(struct sh_sdhi_host *host, unsigned long clk)
+{
+ u32 clkdiv, i, timeout;
+
+ if (sh_sdhi_readw(host, SDHI_INFO2) & (1 << 14)) {
+ printf(DRIVER_NAME": Busy state ! Cannot change the clock\n");
+ return -EBUSY;
+ }
+
+ sh_sdhi_writew(host, SDHI_CLK_CTRL,
+ ~CLK_ENABLE & sh_sdhi_readw(host, SDHI_CLK_CTRL));
+
+ if (clk == 0)
+ return -EIO;
+
+ clkdiv = 0x80;
+ i = CONFIG_SH_SDHI_FREQ >> (0x8 + 1);
+ for (; clkdiv && clk >= (i << 1); (clkdiv >>= 1))
+ i <<= 1;
+
+ sh_sdhi_writew(host, SDHI_CLK_CTRL, clkdiv);
+
+ timeout = 100000;
+ /* Waiting for SD Bus busy to be cleared */
+ while (timeout--) {
+ if ((sh_sdhi_readw(host, SDHI_INFO2) & 0x2000))
+ break;
+ }
+
+ if (timeout)
+ sh_sdhi_writew(host, SDHI_CLK_CTRL,
+ CLK_ENABLE | sh_sdhi_readw(host, SDHI_CLK_CTRL));
+ else
+ return -EBUSY;
+
+ return 0;
+}
+
+static int sh_sdhi_sync_reset(struct sh_sdhi_host *host)
+{
+ u32 timeout;
+ sh_sdhi_writew(host, SDHI_SOFT_RST, SOFT_RST_ON);
+ sh_sdhi_writew(host, SDHI_SOFT_RST, SOFT_RST_OFF);
+ sh_sdhi_writew(host, SDHI_CLK_CTRL,
+ CLK_ENABLE | sh_sdhi_readw(host, SDHI_CLK_CTRL));
+
+ timeout = 100000;
+ while (timeout--) {
+ if (!(sh_sdhi_readw(host, SDHI_INFO2) & INFO2_CBUSY))
+ break;
+ udelay(100);
+ }
+
+ if (!timeout)
+ return -EBUSY;
+
+ if (host->quirks & SH_SDHI_QUIRK_16BIT_BUF)
+ sh_sdhi_writew(host, SDHI_HOST_MODE, 1);
+
+ return 0;
+}
+
+static int sh_sdhi_error_manage(struct sh_sdhi_host *host)
+{
+ unsigned short e_state1, e_state2;
+ int ret;
+
+ host->sd_error = 0;
+ host->wait_int = 0;
+
+ e_state1 = sh_sdhi_readw(host, SDHI_ERR_STS1);
+ e_state2 = sh_sdhi_readw(host, SDHI_ERR_STS2);
+ if (e_state2 & ERR_STS2_SYS_ERROR) {
+ if (e_state2 & ERR_STS2_RES_STOP_TIMEOUT)
+ ret = TIMEOUT;
+ else
+ ret = -EILSEQ;
+ debug("%s: ERR_STS2 = %04x\n",
+ DRIVER_NAME, sh_sdhi_readw(host, SDHI_ERR_STS2));
+ sh_sdhi_sync_reset(host);
+
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ INFO1M_DATA3_CARD_RE | INFO1M_DATA3_CARD_IN);
+ return ret;
+ }
+ if (e_state1 & ERR_STS1_CRC_ERROR || e_state1 & ERR_STS1_CMD_ERROR)
+ ret = -EILSEQ;
+ else
+ ret = TIMEOUT;
+
+ debug("%s: ERR_STS1 = %04x\n",
+ DRIVER_NAME, sh_sdhi_readw(host, SDHI_ERR_STS1));
+ sh_sdhi_sync_reset(host);
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ INFO1M_DATA3_CARD_RE | INFO1M_DATA3_CARD_IN);
+ return ret;
+}
+
+static int sh_sdhi_single_read(struct sh_sdhi_host *host, struct mmc_data *data)
+{
+ long time;
+ unsigned short blocksize, i;
+ unsigned short *p = (unsigned short *)data->dest;
+
+ if ((unsigned long)p & 0x00000001) {
+ debug(DRIVER_NAME": %s: The data pointer is unaligned.",
+ __func__);
+ return -EIO;
+ }
+
+ host->wait_int = 0;
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ ~(INFO2M_BRE_ENABLE | INFO2M_BUF_ILL_READ) &
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ ~INFO1M_ACCESS_END &
+ sh_sdhi_readw(host, SDHI_INFO1_MASK));
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (time == 0 || host->sd_error != 0)
+ return sh_sdhi_error_manage(host);
+
+ host->wait_int = 0;
+ blocksize = sh_sdhi_readw(host, SDHI_SIZE);
+ for (i = 0; i < blocksize / 2; i++)
+ *p++ = sh_sdhi_readw(host, SDHI_BUF0);
+
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (time == 0 || host->sd_error != 0)
+ return sh_sdhi_error_manage(host);
+
+ host->wait_int = 0;
+ return 0;
+}
+
+static int sh_sdhi_multi_read(struct sh_sdhi_host *host, struct mmc_data *data)
+{
+ long time;
+ unsigned short blocksize, i, sec;
+ unsigned short *p = (unsigned short *)data->dest;
+
+ if ((unsigned long)p & 0x00000001) {
+ debug(DRIVER_NAME": %s: The data pointer is unaligned.",
+ __func__);
+ return -EIO;
+ }
+
+ debug("%s: blocks = %d, blocksize = %d\n",
+ __func__, data->blocks, data->blocksize);
+
+ host->wait_int = 0;
+ for (sec = 0; sec < data->blocks; sec++) {
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ ~(INFO2M_BRE_ENABLE | INFO2M_BUF_ILL_READ) &
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (time == 0 || host->sd_error != 0)
+ return sh_sdhi_error_manage(host);
+
+ host->wait_int = 0;
+ blocksize = sh_sdhi_readw(host, SDHI_SIZE);
+ for (i = 0; i < blocksize / 2; i++)
+ *p++ = sh_sdhi_readw(host, SDHI_BUF0);
+ }
+
+ return 0;
+}
+
+static int sh_sdhi_single_write(struct sh_sdhi_host *host,
+ struct mmc_data *data)
+{
+ long time;
+ unsigned short blocksize, i;
+ const unsigned short *p = (const unsigned short *)data->src;
+
+ if ((unsigned long)p & 0x00000001) {
+ debug(DRIVER_NAME": %s: The data pointer is unaligned.",
+ __func__);
+ return -EIO;
+ }
+
+ debug("%s: blocks = %d, blocksize = %d\n",
+ __func__, data->blocks, data->blocksize);
+
+ host->wait_int = 0;
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ ~(INFO2M_BWE_ENABLE | INFO2M_BUF_ILL_WRITE) &
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ ~INFO1M_ACCESS_END &
+ sh_sdhi_readw(host, SDHI_INFO1_MASK));
+
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (time == 0 || host->sd_error != 0)
+ return sh_sdhi_error_manage(host);
+
+ host->wait_int = 0;
+ blocksize = sh_sdhi_readw(host, SDHI_SIZE);
+ for (i = 0; i < blocksize / 2; i++)
+ sh_sdhi_writew(host, SDHI_BUF0, *p++);
+
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (time == 0 || host->sd_error != 0)
+ return sh_sdhi_error_manage(host);
+
+ host->wait_int = 0;
+ return 0;
+}
+
+static int sh_sdhi_multi_write(struct sh_sdhi_host *host, struct mmc_data *data)
+{
+ long time;
+ unsigned short i, sec, blocksize;
+ const unsigned short *p = (const unsigned short *)data->src;
+
+ debug("%s: blocks = %d, blocksize = %d\n",
+ __func__, data->blocks, data->blocksize);
+
+ host->wait_int = 0;
+ for (sec = 0; sec < data->blocks; sec++) {
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ ~(INFO2M_BWE_ENABLE | INFO2M_BUF_ILL_WRITE) &
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (time == 0 || host->sd_error != 0)
+ return sh_sdhi_error_manage(host);
+
+ host->wait_int = 0;
+ blocksize = sh_sdhi_readw(host, SDHI_SIZE);
+ for (i = 0; i < blocksize / 2; i++)
+ sh_sdhi_writew(host, SDHI_BUF0, *p++);
+ }
+
+ return 0;
+}
+
+static void sh_sdhi_get_response(struct sh_sdhi_host *host, struct mmc_cmd *cmd)
+{
+ unsigned short i, j, cnt = 1;
+ unsigned short resp[8];
+ unsigned long *p1, *p2;
+
+ if (cmd->resp_type & MMC_RSP_136) {
+ cnt = 4;
+ resp[0] = sh_sdhi_readw(host, SDHI_RSP00);
+ resp[1] = sh_sdhi_readw(host, SDHI_RSP01);
+ resp[2] = sh_sdhi_readw(host, SDHI_RSP02);
+ resp[3] = sh_sdhi_readw(host, SDHI_RSP03);
+ resp[4] = sh_sdhi_readw(host, SDHI_RSP04);
+ resp[5] = sh_sdhi_readw(host, SDHI_RSP05);
+ resp[6] = sh_sdhi_readw(host, SDHI_RSP06);
+ resp[7] = sh_sdhi_readw(host, SDHI_RSP07);
+
+ /* SDHI REGISTER SPECIFICATION */
+ for (i = 7, j = 6; i > 0; i--) {
+ resp[i] = (resp[i] << 8) & 0xff00;
+ resp[i] |= (resp[j--] >> 8) & 0x00ff;
+ }
+ resp[0] = (resp[0] << 8) & 0xff00;
+
+ /* SDHI REGISTER SPECIFICATION */
+ p1 = ((unsigned long *)resp) + 3;
+
+ } else {
+ resp[0] = sh_sdhi_readw(host, SDHI_RSP00);
+ resp[1] = sh_sdhi_readw(host, SDHI_RSP01);
+
+ p1 = ((unsigned long *)resp);
+ }
+
+ p2 = (unsigned long *)cmd->response;
+#if defined(__BIG_ENDIAN_BITFIELD)
+ for (i = 0; i < cnt; i++) {
+ *p2++ = ((*p1 >> 16) & 0x0000ffff) |
+ ((*p1 << 16) & 0xffff0000);
+ p1--;
+ }
+#else
+ for (i = 0; i < cnt; i++)
+ *p2++ = *p1--;
+#endif /* __BIG_ENDIAN_BITFIELD */
+}
+
+static unsigned short sh_sdhi_set_cmd(struct sh_sdhi_host *host,
+ struct mmc_data *data, unsigned short opc)
+{
+ switch (opc) {
+ case SD_CMD_APP_SEND_OP_COND:
+ case SD_CMD_APP_SEND_SCR:
+ opc |= SDHI_APP;
+ break;
+ case SD_CMD_APP_SET_BUS_WIDTH:
+ /* SD_APP_SET_BUS_WIDTH*/
+ if (!data)
+ opc |= SDHI_APP;
+ else /* SD_SWITCH */
+ opc = SDHI_SD_SWITCH;
+ break;
+ default:
+ break;
+ }
+ return opc;
+}
+
+static unsigned short sh_sdhi_data_trans(struct sh_sdhi_host *host,
+ struct mmc_data *data, unsigned short opc)
+{
+ unsigned short ret;
+
+ switch (opc) {
+ case MMC_CMD_READ_MULTIPLE_BLOCK:
+ ret = sh_sdhi_multi_read(host, data);
+ break;
+ case MMC_CMD_WRITE_MULTIPLE_BLOCK:
+ ret = sh_sdhi_multi_write(host, data);
+ break;
+ case MMC_CMD_WRITE_SINGLE_BLOCK:
+ ret = sh_sdhi_single_write(host, data);
+ break;
+ case MMC_CMD_READ_SINGLE_BLOCK:
+ case SDHI_SD_APP_SEND_SCR:
+ case SDHI_SD_SWITCH: /* SD_SWITCH */
+ ret = sh_sdhi_single_read(host, data);
+ break;
+ default:
+ printf(DRIVER_NAME": SD: NOT SUPPORT CMD = d'%04d\n", opc);
+ ret = -EINVAL;
+ break;
+ }
+ return ret;
+}
+
+static int sh_sdhi_start_cmd(struct sh_sdhi_host *host,
+ struct mmc_data *data, struct mmc_cmd *cmd)
+{
+ long time;
+ unsigned short opc = cmd->cmdidx;
+ int ret = 0;
+ unsigned long timeout;
+
+ debug("opc = %d, arg = %x, resp_type = %x\n",
+ opc, cmd->cmdarg, cmd->resp_type);
+
+ if (opc == MMC_CMD_STOP_TRANSMISSION) {
+ /* SDHI sends the STOP command automatically by STOP reg */
+ sh_sdhi_writew(host, SDHI_INFO1_MASK, ~INFO1M_ACCESS_END &
+ sh_sdhi_readw(host, SDHI_INFO1_MASK));
+
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (time == 0 || host->sd_error != 0)
+ return sh_sdhi_error_manage(host);
+
+ sh_sdhi_get_response(host, cmd);
+ return 0;
+ }
+
+ if (data) {
+ if ((opc == MMC_CMD_READ_MULTIPLE_BLOCK) ||
+ opc == MMC_CMD_WRITE_MULTIPLE_BLOCK) {
+ sh_sdhi_writew(host, SDHI_STOP, STOP_SEC_ENABLE);
+ sh_sdhi_writew(host, SDHI_SECCNT, data->blocks);
+ }
+ sh_sdhi_writew(host, SDHI_SIZE, data->blocksize);
+ }
+ opc = sh_sdhi_set_cmd(host, data, opc);
+
+ /*
+ * U-boot cannot use interrupt.
+ * So this flag may not be clear by timing
+ */
+ sh_sdhi_writew(host, SDHI_INFO1, ~INFO1_RESP_END);
+
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ INFO1M_RESP_END | sh_sdhi_readw(host, SDHI_INFO1_MASK));
+ sh_sdhi_writew(host, SDHI_ARG0,
+ (unsigned short)(cmd->cmdarg & ARG0_MASK));
+ sh_sdhi_writew(host, SDHI_ARG1,
+ (unsigned short)((cmd->cmdarg >> 16) & ARG1_MASK));
+
+ timeout = 100000;
+ /* Waiting for SD Bus busy to be cleared */
+ while (timeout--) {
+ if ((sh_sdhi_readw(host, SDHI_INFO2) & 0x2000))
+ break;
+ }
+
+ sh_sdhi_writew(host, SDHI_CMD, (unsigned short)(opc & CMD_MASK));
+
+ host->wait_int = 0;
+ sh_sdhi_writew(host, SDHI_INFO1_MASK,
+ ~INFO1M_RESP_END & sh_sdhi_readw(host, SDHI_INFO1_MASK));
+ sh_sdhi_writew(host, SDHI_INFO2_MASK,
+ ~(INFO2M_CMD_ERROR | INFO2M_CRC_ERROR |
+ INFO2M_END_ERROR | INFO2M_TIMEOUT |
+ INFO2M_RESP_TIMEOUT | INFO2M_ILA) &
+ sh_sdhi_readw(host, SDHI_INFO2_MASK));
+
+ time = sh_sdhi_wait_interrupt_flag(host);
+ if (!time)
+ return sh_sdhi_error_manage(host);
+
+ if (host->sd_error) {
+ switch (cmd->cmdidx) {
+ case MMC_CMD_ALL_SEND_CID:
+ case MMC_CMD_SELECT_CARD:
+ case SD_CMD_SEND_IF_COND:
+ case MMC_CMD_APP_CMD:
+ ret = TIMEOUT;
+ break;
+ default:
+ debug(DRIVER_NAME": Cmd(d'%d) err\n", opc);
+ debug(DRIVER_NAME": cmdidx = %d\n", cmd->cmdidx);
+ ret = sh_sdhi_error_manage(host);
+ break;
+ }
+ host->sd_error = 0;
+ host->wait_int = 0;
+ return ret;
+ }
+ if (sh_sdhi_readw(host, SDHI_INFO1) & INFO1_RESP_END)
+ return -EINVAL;
+
+ if (host->wait_int) {
+ sh_sdhi_get_response(host, cmd);
+ host->wait_int = 0;
+ }
+ if (data)
+ ret = sh_sdhi_data_trans(host, data, opc);
+
+ debug("ret = %d, resp = %08x, %08x, %08x, %08x\n",
+ ret, cmd->response[0], cmd->response[1],
+ cmd->response[2], cmd->response[3]);
+ return ret;
+}
+
+static int sh_sdhi_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
+ struct mmc_data *data)
+{
+ struct sh_sdhi_host *host = mmc_priv(mmc);
+ int ret;
+
+ host->sd_error = 0;
+
+ ret = sh_sdhi_start_cmd(host, data, cmd);
+
+ return ret;
+}
+
+static void sh_sdhi_set_ios(struct mmc *mmc)
+{
+ int ret;
+ struct sh_sdhi_host *host = mmc_priv(mmc);
+
+ ret = sh_sdhi_clock_control(host, mmc->clock);
+ if (ret)
+ return;
+
+ if (mmc->bus_width == 4)
+ sh_sdhi_writew(host, SDHI_OPTION, ~OPT_BUS_WIDTH_1 &
+ sh_sdhi_readw(host, SDHI_OPTION));
+ else
+ sh_sdhi_writew(host, SDHI_OPTION, OPT_BUS_WIDTH_1 |
+ sh_sdhi_readw(host, SDHI_OPTION));
+
+ debug("clock = %d, buswidth = %d\n", mmc->clock, mmc->bus_width);
+}
+
+static int sh_sdhi_initialize(struct mmc *mmc)
+{
+ struct sh_sdhi_host *host = mmc_priv(mmc);
+ int ret = sh_sdhi_sync_reset(host);
+
+ sh_sdhi_writew(host, SDHI_PORTSEL, USE_1PORT);
+
+#if defined(__BIG_ENDIAN_BITFIELD)
+ sh_sdhi_writew(host, SDHI_EXT_SWAP, SET_SWAP);
+#endif
+
+ sh_sdhi_writew(host, SDHI_INFO1_MASK, INFO1M_RESP_END |
+ INFO1M_ACCESS_END | INFO1M_CARD_RE |
+ INFO1M_DATA3_CARD_RE | INFO1M_DATA3_CARD_IN);
+
+ return ret;
+}
+
+static const struct mmc_ops sh_sdhi_ops = {
+ .send_cmd = sh_sdhi_send_cmd,
+ .set_ios = sh_sdhi_set_ios,
+ .init = sh_sdhi_initialize,
+};
+
+static struct mmc_config sh_sdhi_cfg = {
+ .name = DRIVER_NAME,
+ .ops = &sh_sdhi_ops,
+ .f_min = CLKDEV_INIT,
+ .f_max = CLKDEV_HS_DATA,
+ .voltages = MMC_VDD_32_33 | MMC_VDD_33_34,
+ .host_caps = MMC_MODE_4BIT | MMC_MODE_HS,
+ .part_type = PART_TYPE_DOS,
+ .b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT,
+};
+
+int sh_sdhi_init(unsigned long addr, int ch, unsigned long quirks)
+{
+ int ret = 0;
+ struct mmc *mmc;
+ struct sh_sdhi_host *host = NULL;
+
+ if (ch >= CONFIG_SYS_SH_SDHI_NR_CHANNEL)
+ return -ENODEV;
+
+ host = malloc(sizeof(struct sh_sdhi_host));
+ if (!host)
+ return -ENOMEM;
+
+ mmc = mmc_create(&sh_sdhi_cfg, host);
+ if (!mmc) {
+ ret = -1;
+ goto error;
+ }
+
+ host->ch = ch;
+ host->addr = addr;
+ host->quirks = quirks;
+
+ if (host->quirks & SH_SDHI_QUIRK_16BIT_BUF)
+ host->bus_shift = 1;
+
+ return ret;
+error:
+ if (host)
+ free(host);
+ return ret;
+}
+
--
2.1.3
2
1

05 Jan '15
Review delays and timeouts.
Get around 20 x faster access on Sheevaplug tests.
Changes in v2:
- increase number of loops
- remove initial delay
Changes in v1:
- review all loops, delays and timeouts
Signed-off-by: Gérald Kerma <drEagle(a)doukki.net>
---
drivers/mmc/mvebu_mmc.c | 66 +++++++++++++++++++++++++++++--------------------
1 file changed, 39 insertions(+), 27 deletions(-)
diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 9f98c3f..b636be6 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -23,6 +23,10 @@ DECLARE_GLOBAL_DATA_PTR;
#define MVEBU_TARGET_DRAM 0
+#define TIMEOUT_LOOP 1000000000000000000 /* maximum loops */
+#define TIMEOUT_WAIT 100 /* wait 100 us */
+#define TIMEOUT_START 100 /* wait 100 us */
+
static void mvebu_mmc_write(u32 offs, u32 val)
{
writel(val, CONFIG_SYS_MMC_BASE + (offs));
@@ -63,7 +67,7 @@ static int mvebu_mmc_setup_data(struct mmc_data *data)
static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
struct mmc_data *data)
{
- int timeout = 10;
+ u64 timeout = TIMEOUT_LOOP;
ushort waittype = 0;
ushort resptype = 0;
ushort xfertype = 0;
@@ -72,27 +76,32 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
debug("cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
- udelay(10*1000);
-
debug("%s: cmd %d (hw state 0x%04x)\n", DRIVER_NAME,
cmd->cmdidx, mvebu_mmc_read(SDIO_HW_STATE));
+ /* Clear status */
+ mvebu_mmc_write(SDIO_NOR_INTR_STATUS, SDIO_POLL_MASK);
+ mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
+
/* Checking if card is busy */
while ((mvebu_mmc_read(SDIO_HW_STATE) & CARD_BUSY)) {
+ timeout--;
+ udelay(TIMEOUT_START);
if (timeout == 0) {
printf("%s: card busy!\n", DRIVER_NAME);
return -1;
}
- timeout--;
- udelay(1000);
}
/* Set up for a data transfer if we have one */
if (data) {
int err = mvebu_mmc_setup_data(data);
- if (err)
+ if (err){
+ debug("%s: command DATA error :%x\n",
+ DRIVER_NAME, err);
return err;
+ }
}
resptype = SDIO_CMD_INDEX(cmd->cmdidx);
@@ -148,7 +157,7 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
mvebu_mmc_write(SDIO_ERR_INTR_EN, SDIO_POLL_MASK);
/* Waiting for completion */
- timeout = 1000000;
+ timeout = TIMEOUT_LOOP;
while (!((mvebu_mmc_read(SDIO_NOR_INTR_STATUS)) & waittype)) {
if (mvebu_mmc_read(SDIO_NOR_INTR_STATUS) & SDIO_NOR_ERROR) {
@@ -156,21 +165,22 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
DRIVER_NAME, cmd->cmdidx,
mvebu_mmc_read(SDIO_ERR_INTR_STATUS));
if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
- (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
+ (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT)){
+ debug("%s: command READ timed out\n",
+ DRIVER_NAME);
return TIMEOUT;
+ }
+ debug("%s: command READ error\n", DRIVER_NAME);
return COMM_ERR;
}
timeout--;
- udelay(1);
- if (timeout <= 0) {
- printf("%s: command timed out\n", DRIVER_NAME);
+ udelay(TIMEOUT_WAIT);
+ if (timeout == 0) {
+ debug("%s: command timed out\n", DRIVER_NAME);
return TIMEOUT;
}
}
- if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
- (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
- return TIMEOUT;
/* Handling response */
if (cmd->resp_type & MMC_RSP_136) {
@@ -213,6 +223,11 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
debug("[0x%x] ", cmd->response[3]);
debug("\n");
+ if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) & SDIO_ERR_CMD_TIMEOUT){
+ debug("%s: command STATUS timed out\n", DRIVER_NAME);
+ return TIMEOUT;
+ }
+
return 0;
}
@@ -236,33 +251,30 @@ static void mvebu_mmc_power_up(void)
/* enable interrupts status */
mvebu_mmc_write(SDIO_NOR_INTR_STATUS, SDIO_POLL_MASK);
mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
+
+ udelay(10*1000);
}
static void mvebu_mmc_set_clk(unsigned int clock)
{
- unsigned int m;
-
if (clock == 0) {
debug("%s: clock off\n", DRIVER_NAME);
mvebu_mmc_write(SDIO_XFER_MODE, SDIO_XFER_MODE_STOP_CLK);
mvebu_mmc_write(SDIO_CLK_DIV, MVEBU_MMC_BASE_DIV_MAX);
} else {
- m = MVEBU_MMC_BASE_FAST_CLOCK/(2*clock) - 1;
+ u32 m = DIV_ROUND_UP(MVEBU_MMC_BASE_FAST_CLOCK,
+ (2 * clock)) - 1;
if (m > MVEBU_MMC_BASE_DIV_MAX)
m = MVEBU_MMC_BASE_DIV_MAX;
- mvebu_mmc_write(SDIO_CLK_DIV, m & MVEBU_MMC_BASE_DIV_MAX);
+ mvebu_mmc_write(SDIO_CLK_DIV, m);
+ debug("%s: clock (%d) div : %d\n", DRIVER_NAME, clock, m);
}
-
- udelay(10*1000);
}
static void mvebu_mmc_set_bus(unsigned int bus)
{
u32 ctrl_reg = 0;
- ctrl_reg = mvebu_mmc_read(SDIO_HOST_CTRL);
- ctrl_reg &= ~SDIO_HOST_CTRL_DATA_WIDTH_4_BITS;
-
switch (bus) {
case 4:
ctrl_reg |= SDIO_HOST_CTRL_DATA_WIDTH_4_BITS;
@@ -277,7 +289,7 @@ static void mvebu_mmc_set_bus(unsigned int bus)
ctrl_reg &= ~SDIO_HOST_CTRL_LSB_FIRST;
/* default to maximum timeout */
- ctrl_reg |= SDIO_HOST_CTRL_TMOUT(SDIO_HOST_CTRL_TMOUT_MAX);
+ ctrl_reg |= SDIO_HOST_CTRL_TMOUT_MAX;
ctrl_reg |= SDIO_HOST_CTRL_TMOUT_EN;
ctrl_reg |= SDIO_HOST_CTRL_PUSH_PULL_EN;
@@ -293,7 +305,6 @@ static void mvebu_mmc_set_bus(unsigned int bus)
"high-speed" : "");
mvebu_mmc_write(SDIO_HOST_CTRL, ctrl_reg);
- udelay(10*1000);
}
static void mvebu_mmc_set_ios(struct mmc *mmc)
@@ -355,7 +366,7 @@ static void mvebu_window_setup(void)
static int mvebu_mmc_initialize(struct mmc *mmc)
{
- debug("%s: mvebu_mmc_initialize", DRIVER_NAME);
+ debug("%s: mvebu_mmc_initialize\n", DRIVER_NAME);
/*
* Setting host parameters
@@ -398,7 +409,8 @@ static const struct mmc_ops mvebu_mmc_ops = {
static struct mmc_config mvebu_mmc_cfg = {
.name = DRIVER_NAME,
.ops = &mvebu_mmc_ops,
- .f_min = MVEBU_MMC_BASE_FAST_CLOCK / MVEBU_MMC_BASE_DIV_MAX,
+ .f_min = DIV_ROUND_UP(MVEBU_MMC_BASE_FAST_CLOCK,
+ MVEBU_MMC_BASE_DIV_MAX),
.f_max = MVEBU_MMC_CLOCKRATE_MAX,
.voltages = MMC_VDD_32_33 | MMC_VDD_33_34,
.host_caps = MMC_MODE_4BIT | MMC_MODE_HS | MMC_MODE_HC |
--
2.1.3
4
19
As doc/README.generic-board says, the dead line has already expired
and we are supposed to remove all the non-generic boards by the
end of this year.
This series removes non-generic boards of mpc8xx, mpc8260, mpc824x
platform.
Masahiro Yamada (26):
mpc8xx: remove FPS{850,860}L, NSCU, SM850, TK885D, virtlab2 support
powerpc: manroland: remove uc100, uc101, mucmc52, hmi1001 support
mpc8xx: remove ELPT860 board support
mpc8xx: remove KUP4X, KUP4K board support
mpc8xx: remove SPD823TS board support
mpc8xx: remove RRvision board support
mpc8xx: remove R360MPI board support
mpc8xx: remove NETVIA board support
mpc8xx: remove lwmon board support
mpc8xx: remove IVMS8, IVML24 board support
mpc8xx: remove IP860 board support
mpc8xx: remove ESTEEM192E board support
powerpc: remove cogent_8xx, cogent_mpc8260 board support
mpc8260: remove sacsng board support
mpc8260: remove ppmc8260 board support
mpc8260: remove ep8260 board support
mpc8260: remove VoVPN-GW board support
mpc8260: remove MPC8266ADS board support
mpc8260: remove PM825, PM826, PM828 board support
mpc8260: remove muas3001 board support
mpc8260: remove IPHASE4539 board support
mpc8260: remove gw8260 board support
mpc8260: remove ep82xxm board support
mpc8260: remove CPU86, CPU87 board support
mpc8260: remove atc board support
powerpc: mpc824x: remove MPC824X cpu support
MAKEALL | 6 -
README | 5 -
arch/powerpc/Kconfig | 4 -
arch/powerpc/cpu/mpc5xxx/Kconfig | 12 -
arch/powerpc/cpu/mpc5xxx/ide.c | 8 -
arch/powerpc/cpu/mpc824x/Kconfig | 48 -
arch/powerpc/cpu/mpc824x/Makefile | 11 -
arch/powerpc/cpu/mpc824x/config.mk | 8 -
arch/powerpc/cpu/mpc824x/cpu.c | 262 -----
arch/powerpc/cpu/mpc824x/cpu_init.c | 311 ------
arch/powerpc/cpu/mpc824x/drivers/epic.h | 1 -
arch/powerpc/cpu/mpc824x/drivers/epic/README | 102 --
arch/powerpc/cpu/mpc824x/drivers/epic/epic.h | 163 ----
arch/powerpc/cpu/mpc824x/drivers/epic/epic1.c | 517 ----------
arch/powerpc/cpu/mpc824x/drivers/epic/epic2.S | 196 ----
arch/powerpc/cpu/mpc824x/drivers/epic/epicutil.S | 57 --
arch/powerpc/cpu/mpc824x/drivers/errors.h | 212 ----
arch/powerpc/cpu/mpc824x/drivers/i2c/i2c.c | 254 -----
arch/powerpc/cpu/mpc824x/interrupts.c | 77 --
arch/powerpc/cpu/mpc824x/pci.c | 75 --
arch/powerpc/cpu/mpc824x/speed.c | 102 --
arch/powerpc/cpu/mpc824x/start.S | 724 --------------
arch/powerpc/cpu/mpc824x/traps.c | 194 ----
arch/powerpc/cpu/mpc824x/u-boot.lds | 76 --
arch/powerpc/cpu/mpc8260/Kconfig | 60 --
arch/powerpc/cpu/mpc8260/cpu_init.c | 4 -
arch/powerpc/cpu/mpc8260/pci.c | 64 --
arch/powerpc/cpu/mpc8260/start.S | 61 --
arch/powerpc/cpu/mpc8xx/Kconfig | 73 --
arch/powerpc/cpu/mpc8xx/cpu.c | 57 +-
arch/powerpc/cpu/mpc8xx/cpu_init.c | 15 -
arch/powerpc/cpu/mpc8xx/i2c.c | 7 -
arch/powerpc/cpu/mpc8xx/scc.c | 24 -
arch/powerpc/cpu/mpc8xx/serial.c | 23 +-
arch/powerpc/cpu/mpc8xx/video.c | 148 ---
arch/powerpc/include/asm/global_data.h | 2 +-
arch/powerpc/include/asm/processor.h | 2 -
board/LEOX/elpt860/Kconfig | 12 -
board/LEOX/elpt860/MAINTAINERS | 6 -
board/LEOX/elpt860/Makefile | 21 -
board/LEOX/elpt860/README.LEOX | 423 --------
board/LEOX/elpt860/elpt860.c | 336 -------
board/LEOX/elpt860/flash.c | 602 ------------
board/LEOX/elpt860/u-boot.lds | 103 --
board/LEOX/elpt860/u-boot.lds.debug | 126 ---
board/RRvision/Kconfig | 9 -
board/RRvision/MAINTAINERS | 7 -
board/RRvision/Makefile | 8 -
board/RRvision/RRvision.c | 222 -----
board/RRvision/flash.c | 506 ----------
board/RRvision/u-boot.lds | 87 --
board/RRvision/video_ad7179.h | 52 -
board/a3000/Kconfig | 9 -
board/a3000/MAINTAINERS | 6 -
board/a3000/Makefile | 8 -
board/a3000/README | 17 -
board/a3000/a3000.c | 101 --
board/a3000/flash.c | 438 ---------
board/atc/Kconfig | 9 -
board/atc/MAINTAINERS | 6 -
board/atc/Makefile | 8 -
board/atc/atc.c | 382 --------
board/atc/flash.c | 647 -------------
board/atc/ti113x.c | 620 ------------
board/cogent/Kconfig | 19 -
board/cogent/MAINTAINERS | 8 -
board/cogent/Makefile | 8 -
board/cogent/README | 118 ---
board/cogent/README.cma286 | 69 --
board/cogent/dipsw.c | 50 -
board/cogent/dipsw.h | 3 -
board/cogent/flash.c | 633 ------------
board/cogent/flash.h | 305 ------
board/cogent/kbm.c | 3 -
board/cogent/lcd.c | 245 -----
board/cogent/lcd.h | 84 --
board/cogent/mb.c | 280 ------
board/cogent/mb.h | 513 ----------
board/cogent/par.c | 3 -
board/cogent/par.h | 3 -
board/cogent/pci.c | 3 -
board/cogent/pci.h | 3 -
board/cogent/rtc.c | 3 -
board/cogent/rtc.h | 3 -
board/cogent/serial.c | 189 ----
board/cogent/serial.h | 15 -
board/cogent/u-boot.lds | 86 --
board/cogent/u-boot.lds.debug | 121 ---
board/cpc45/Kconfig | 9 -
board/cpc45/MAINTAINERS | 7 -
board/cpc45/Makefile | 8 -
board/cpc45/cpc45.c | 250 -----
board/cpc45/flash.c | 506 ----------
board/cpc45/ide.c | 128 ---
board/cpc45/pd67290.c | 797 ---------------
board/cpc45/plx9030.c | 156 ---
board/cpu86/Kconfig | 9 -
board/cpu86/MAINTAINERS | 7 -
board/cpu86/Makefile | 8 -
board/cpu86/cpu86.c | 304 ------
board/cpu86/cpu86.h | 27 -
board/cpu86/flash.c | 599 ------------
board/cpu87/Kconfig | 9 -
board/cpu87/MAINTAINERS | 7 -
board/cpu87/Makefile | 8 -
board/cpu87/cpu87.c | 330 -------
board/cpu87/cpu87.h | 27 -
board/cpu87/flash.c | 608 ------------
board/cu824/Kconfig | 9 -
board/cu824/MAINTAINERS | 6 -
board/cu824/Makefile | 8 -
board/cu824/README | 453 ---------
board/cu824/cu824.c | 83 --
board/cu824/flash.c | 470 ---------
board/eXalion/Kconfig | 9 -
board/eXalion/MAINTAINERS | 6 -
board/eXalion/Makefile | 8 -
board/eXalion/eXalion.c | 283 ------
board/eXalion/eXalion.h | 36 -
board/eXalion/piix_pci.h | 156 ---
board/ep8260/Kconfig | 9 -
board/ep8260/MAINTAINERS | 6 -
board/ep8260/Makefile | 8 -
board/ep8260/ep8260.c | 304 ------
board/ep8260/ep8260.h | 24 -
board/ep8260/flash.c | 395 --------
board/ep8260/mii_phy.c | 107 ---
board/ep82xxm/Kconfig | 9 -
board/ep82xxm/MAINTAINERS | 6 -
board/ep82xxm/Makefile | 8 -
board/ep82xxm/ep82xxm.c | 274 ------
board/esteem192e/Kconfig | 9 -
board/esteem192e/MAINTAINERS | 6 -
board/esteem192e/Makefile | 8 -
board/esteem192e/esteem192e.c | 225 -----
board/esteem192e/flash.c | 1119 ----------------------
board/esteem192e/u-boot.lds | 90 --
board/freescale/mpc8266ads/Kconfig | 12 -
board/freescale/mpc8266ads/MAINTAINERS | 6 -
board/freescale/mpc8266ads/Makefile | 8 -
board/freescale/mpc8266ads/flash.c | 493 ----------
board/freescale/mpc8266ads/mpc8266ads.c | 582 -----------
board/funkwerk/vovpn-gw/Kconfig | 12 -
board/funkwerk/vovpn-gw/MAINTAINERS | 6 -
board/funkwerk/vovpn-gw/Makefile | 8 -
board/funkwerk/vovpn-gw/flash.c | 436 ---------
board/funkwerk/vovpn-gw/m88e6060.c | 249 -----
board/funkwerk/vovpn-gw/m88e6060.h | 75 --
board/funkwerk/vovpn-gw/vovpn-gw.c | 363 -------
board/gw8260/Kconfig | 9 -
board/gw8260/MAINTAINERS | 6 -
board/gw8260/Makefile | 8 -
board/gw8260/flash.c | 502 ----------
board/gw8260/gw8260.c | 639 ------------
board/ip860/Kconfig | 9 -
board/ip860/MAINTAINERS | 6 -
board/ip860/Makefile | 8 -
board/ip860/flash.c | 440 ---------
board/ip860/ip860.c | 340 -------
board/ip860/u-boot.lds.debug | 122 ---
board/iphase4539/Kconfig | 9 -
board/iphase4539/MAINTAINERS | 6 -
board/iphase4539/Makefile | 10 -
board/iphase4539/README | 358 -------
board/iphase4539/flash.c | 474 ---------
board/iphase4539/iphase4539.c | 408 --------
board/ivm/Kconfig | 19 -
board/ivm/MAINTAINERS | 12 -
board/ivm/Makefile | 8 -
board/ivm/flash.c | 582 -----------
board/ivm/ivm.c | 382 --------
board/ivm/u-boot.lds.debug | 122 ---
board/kup/common/flash.c | 499 ----------
board/kup/common/kup.c | 68 --
board/kup/common/kup.h | 40 -
board/kup/common/load_sernum_ethaddr.c | 78 --
board/kup/common/pcmcia.c | 221 -----
board/kup/kup4k/Kconfig | 12 -
board/kup/kup4k/MAINTAINERS | 6 -
board/kup/kup4k/Makefile | 8 -
board/kup/kup4k/kup4k.c | 289 ------
board/kup/kup4k/u-boot.lds.debug | 121 ---
board/kup/kup4x/Kconfig | 12 -
board/kup/kup4x/MAINTAINERS | 6 -
board/kup/kup4x/Makefile | 8 -
board/kup/kup4x/kup4x.c | 185 ----
board/kup/kup4x/u-boot.lds | 82 --
board/kup/kup4x/u-boot.lds.debug | 121 ---
board/lwmon/Kconfig | 9 -
board/lwmon/MAINTAINERS | 6 -
board/lwmon/Makefile | 8 -
board/lwmon/README.keybd | 126 ---
board/lwmon/flash.c | 632 ------------
board/lwmon/lwmon.c | 1071 ---------------------
board/lwmon/pcmcia.c | 234 -----
board/lwmon/u-boot.lds.debug | 122 ---
board/manroland/hmi1001/Kconfig | 12 -
board/manroland/hmi1001/MAINTAINERS | 6 -
board/manroland/hmi1001/Makefile | 8 -
board/manroland/hmi1001/hmi1001.c | 301 ------
board/manroland/mucmc52/Kconfig | 12 -
board/manroland/mucmc52/MAINTAINERS | 6 -
board/manroland/mucmc52/Makefile | 11 -
board/manroland/mucmc52/mucmc52.c | 394 --------
board/manroland/uc100/Kconfig | 12 -
board/manroland/uc100/MAINTAINERS | 6 -
board/manroland/uc100/Makefile | 8 -
board/manroland/uc100/pcmcia.c | 192 ----
board/manroland/uc100/uc100.c | 254 -----
board/manroland/uc101/Kconfig | 12 -
board/manroland/uc101/MAINTAINERS | 6 -
board/manroland/uc101/Makefile | 8 -
board/manroland/uc101/uc101.c | 367 -------
board/muas3001/Kconfig | 9 -
board/muas3001/MAINTAINERS | 7 -
board/muas3001/Makefile | 8 -
board/muas3001/muas3001.c | 335 -------
board/musenki/Kconfig | 9 -
board/musenki/MAINTAINERS | 6 -
board/musenki/Makefile | 8 -
board/musenki/README | 298 ------
board/musenki/flash.c | 496 ----------
board/musenki/musenki.c | 94 --
board/mvblue/Kconfig | 9 -
board/mvblue/MAINTAINERS | 6 -
board/mvblue/Makefile | 8 -
board/mvblue/flash.c | 570 -----------
board/mvblue/mvblue.c | 253 -----
board/mvblue/u-boot.lds | 86 --
board/netvia/Kconfig | 9 -
board/netvia/MAINTAINERS | 7 -
board/netvia/Makefile | 8 -
board/netvia/flash.c | 495 ----------
board/netvia/netvia.c | 401 --------
board/netvia/u-boot.lds.debug | 121 ---
board/pm826/Kconfig | 9 -
board/pm826/MAINTAINERS | 13 -
board/pm826/Makefile | 8 -
board/pm826/flash.c | 370 -------
board/pm826/pm826.c | 319 ------
board/pm828/Kconfig | 9 -
board/pm828/MAINTAINERS | 9 -
board/pm828/Makefile | 8 -
board/pm828/flash.c | 370 -------
board/pm828/pm828.c | 352 -------
board/ppmc8260/Kconfig | 9 -
board/ppmc8260/MAINTAINERS | 6 -
board/ppmc8260/Makefile | 8 -
board/ppmc8260/ppmc8260.c | 291 ------
board/r360mpi/Kconfig | 9 -
board/r360mpi/MAINTAINERS | 6 -
board/r360mpi/Makefile | 8 -
board/r360mpi/flash.c | 468 ---------
board/r360mpi/pcmcia.c | 232 -----
board/r360mpi/r360mpi.c | 403 --------
board/r360mpi/u-boot.lds | 89 --
board/sacsng/Kconfig | 9 -
board/sacsng/MAINTAINERS | 6 -
board/sacsng/Makefile | 8 -
board/sacsng/clkinit.c | 1009 -------------------
board/sacsng/clkinit.h | 103 --
board/sacsng/flash.c | 507 ----------
board/sacsng/ioconfig.h | 217 -----
board/sacsng/sacsng.c | 848 ----------------
board/sandpoint/Kconfig | 19 -
board/sandpoint/MAINTAINERS | 12 -
board/sandpoint/Makefile | 8 -
board/sandpoint/README | 411 --------
board/sandpoint/dinkdl | 2 -
board/sandpoint/flash.c | 748 ---------------
board/sandpoint/sandpoint.c | 91 --
board/sandpoint/u-boot.lds | 84 --
board/spd8xx/Kconfig | 9 -
board/spd8xx/MAINTAINERS | 6 -
board/spd8xx/Makefile | 8 -
board/spd8xx/flash.c | 41 -
board/spd8xx/spd8xx.c | 278 ------
board/spd8xx/u-boot.lds | 91 --
board/spd8xx/u-boot.lds.debug | 122 ---
board/tqc/tqm8xx/Kconfig | 78 --
board/tqc/tqm8xx/MAINTAINERS | 16 -
board/tqc/tqm8xx/tqm8xx.c | 58 +-
board/utx8245/Kconfig | 9 -
board/utx8245/MAINTAINERS | 6 -
board/utx8245/Makefile | 13 -
board/utx8245/flash.c | 544 -----------
board/utx8245/utx8245.c | 119 ---
common/cmd_pcmcia.c | 3 -
common/flash.c | 6 -
configs/A3000_defconfig | 3 -
configs/CPC45_ROMBOOT_defconfig | 4 -
configs/CPC45_defconfig | 3 -
configs/CPU86_ROMBOOT_defconfig | 4 -
configs/CPU86_defconfig | 3 -
configs/CPU87_ROMBOOT_defconfig | 4 -
configs/CPU87_defconfig | 3 -
configs/CU824_defconfig | 3 -
configs/ELPT860_defconfig | 3 -
configs/ESTEEM192E_defconfig | 3 -
configs/FPS850L_defconfig | 3 -
configs/FPS860L_defconfig | 3 -
configs/IP860_defconfig | 3 -
configs/IPHASE4539_defconfig | 3 -
configs/IVML24_128_defconfig | 4 -
configs/IVML24_256_defconfig | 4 -
configs/IVML24_defconfig | 4 -
configs/IVMS8_128_defconfig | 4 -
configs/IVMS8_256_defconfig | 4 -
configs/IVMS8_defconfig | 4 -
configs/KUP4K_defconfig | 3 -
configs/KUP4X_defconfig | 3 -
configs/MPC8266ADS_defconfig | 3 -
configs/MUSENKI_defconfig | 3 -
configs/MVBLUE_defconfig | 3 -
configs/NETVIA_V2_defconfig | 4 -
configs/NETVIA_defconfig | 4 -
configs/NSCU_defconfig | 3 -
configs/PM825_BIGFLASH_defconfig | 4 -
configs/PM825_ROMBOOT_BIGFLASH_defconfig | 4 -
configs/PM825_ROMBOOT_defconfig | 4 -
configs/PM825_defconfig | 4 -
configs/PM826_BIGFLASH_defconfig | 4 -
configs/PM826_ROMBOOT_BIGFLASH_defconfig | 4 -
configs/PM826_ROMBOOT_defconfig | 4 -
configs/PM826_defconfig | 4 -
configs/PM828_PCI_defconfig | 4 -
configs/PM828_ROMBOOT_PCI_defconfig | 4 -
configs/PM828_ROMBOOT_defconfig | 4 -
configs/PM828_defconfig | 3 -
configs/R360MPI_defconfig | 3 -
configs/RRvision_LCD_defconfig | 4 -
configs/RRvision_defconfig | 3 -
configs/SM850_defconfig | 3 -
configs/SPD823TS_defconfig | 3 -
configs/Sandpoint8240_defconfig | 3 -
configs/Sandpoint8245_defconfig | 3 -
configs/TK885D_defconfig | 3 -
configs/VoVPN-GW_66MHz_defconfig | 4 -
configs/atc_defconfig | 3 -
configs/cogent_mpc8260_defconfig | 3 -
configs/cogent_mpc8xx_defconfig | 3 -
configs/eXalion_defconfig | 3 -
configs/ep8260_defconfig | 3 -
configs/ep82xxm_defconfig | 3 -
configs/gw8260_defconfig | 3 -
configs/hmi1001_defconfig | 3 -
configs/lwmon_defconfig | 3 -
configs/muas3001_defconfig | 3 -
configs/muas3001_dev_defconfig | 4 -
configs/mucmc52_defconfig | 3 -
configs/ppmc8260_defconfig | 3 -
configs/sacsng_defconfig | 3 -
configs/uc100_defconfig | 3 -
configs/uc101_defconfig | 3 -
configs/utx8245_defconfig | 3 -
configs/virtlab2_defconfig | 3 -
doc/README.scrapyard | 50 +-
drivers/net/mpc5xxx_fec.c | 5 -
drivers/pcmcia/Makefile | 1 -
drivers/pcmcia/i82365.c | 989 -------------------
drivers/pcmcia/mpc8xx_pcmcia.c | 6 -
drivers/pcmcia/tqm8xx_pcmcia.c | 51 +-
drivers/rtc/Makefile | 1 -
drivers/rtc/ds12887.c | 217 -----
drivers/video/mpc8xx_lcd.c | 53 -
drivers/video/smiLynxEM.c | 3 -
examples/standalone/test_burst.c | 19 -
include/common.h | 4 -
include/commproc.h | 293 +-----
include/configs/A3000.h | 293 ------
include/configs/CPC45.h | 489 ----------
include/configs/CPU86.h | 629 ------------
include/configs/CPU87.h | 676 -------------
include/configs/CU824.h | 286 ------
include/configs/ELPT860.h | 374 --------
include/configs/ESTEEM192E.h | 292 ------
include/configs/FPS850L.h | 413 --------
include/configs/FPS860L.h | 415 --------
include/configs/IP860.h | 438 ---------
include/configs/IPHASE4539.h | 328 -------
include/configs/IVML24.h | 458 ---------
include/configs/IVMS8.h | 441 ---------
include/configs/KUP4K.h | 488 ----------
include/configs/KUP4X.h | 440 ---------
include/configs/MPC8266ADS.h | 563 -----------
include/configs/MUSENKI.h | 275 ------
include/configs/MVBLUE.h | 325 -------
include/configs/NETVIA.h | 435 ---------
include/configs/NSCU.h | 463 ---------
include/configs/PM826.h | 534 -----------
include/configs/PM828.h | 528 ----------
include/configs/R360MPI.h | 464 ---------
include/configs/RRvision.h | 450 ---------
include/configs/SM850.h | 351 -------
include/configs/SPD823TS.h | 402 --------
include/configs/Sandpoint8240.h | 398 --------
include/configs/Sandpoint8245.h | 376 --------
include/configs/TK885D.h | 490 ----------
include/configs/VoVPN-GW.h | 399 --------
include/configs/atc.h | 489 ----------
include/configs/cogent_common.h | 192 ----
include/configs/cogent_mpc8260.h | 392 --------
include/configs/cogent_mpc8xx.h | 349 -------
include/configs/eXalion.h | 433 ---------
include/configs/ep8260.h | 744 --------------
include/configs/ep82xxm.h | 383 --------
include/configs/gw8260.h | 800 ----------------
include/configs/hmi1001.h | 339 -------
include/configs/lwmon.h | 587 ------------
include/configs/muas3001.h | 391 --------
include/configs/mucmc52.h | 126 ---
include/configs/ppmc8260.h | 986 -------------------
include/configs/sacsng.h | 1038 --------------------
include/configs/uc100.h | 482 ----------
include/configs/uc101.h | 103 --
include/configs/utx8245.h | 408 --------
include/configs/virtlab2.h | 469 ---------
include/mpc824x.h | 523 ----------
include/pci.h | 4 -
include/pcmcia.h | 12 -
include/pcmcia/cirrus.h | 180 ----
include/pcmcia/i82365.h | 154 ---
include/pcmcia/ss.h | 133 ---
include/pcmcia/ti113x.h | 234 -----
include/ppc_asm.tmpl | 4 +-
include/status_led.h | 97 --
include/video_ad7176.h | 89 --
include/video_ad7177.h | 133 ---
include/video_ad7179.h | 20 -
post/drivers/memory.c | 2 +-
430 files changed, 59 insertions(+), 68545 deletions(-)
delete mode 100644 arch/powerpc/cpu/mpc824x/Kconfig
delete mode 100644 arch/powerpc/cpu/mpc824x/Makefile
delete mode 100644 arch/powerpc/cpu/mpc824x/config.mk
delete mode 100644 arch/powerpc/cpu/mpc824x/cpu.c
delete mode 100644 arch/powerpc/cpu/mpc824x/cpu_init.c
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/epic.h
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/epic/README
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/epic/epic.h
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/epic/epic1.c
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/epic/epic2.S
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/epic/epicutil.S
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/errors.h
delete mode 100644 arch/powerpc/cpu/mpc824x/drivers/i2c/i2c.c
delete mode 100644 arch/powerpc/cpu/mpc824x/interrupts.c
delete mode 100644 arch/powerpc/cpu/mpc824x/pci.c
delete mode 100644 arch/powerpc/cpu/mpc824x/speed.c
delete mode 100644 arch/powerpc/cpu/mpc824x/start.S
delete mode 100644 arch/powerpc/cpu/mpc824x/traps.c
delete mode 100644 arch/powerpc/cpu/mpc824x/u-boot.lds
delete mode 100644 board/LEOX/elpt860/Kconfig
delete mode 100644 board/LEOX/elpt860/MAINTAINERS
delete mode 100644 board/LEOX/elpt860/Makefile
delete mode 100644 board/LEOX/elpt860/README.LEOX
delete mode 100644 board/LEOX/elpt860/elpt860.c
delete mode 100644 board/LEOX/elpt860/flash.c
delete mode 100644 board/LEOX/elpt860/u-boot.lds
delete mode 100644 board/LEOX/elpt860/u-boot.lds.debug
delete mode 100644 board/RRvision/Kconfig
delete mode 100644 board/RRvision/MAINTAINERS
delete mode 100644 board/RRvision/Makefile
delete mode 100644 board/RRvision/RRvision.c
delete mode 100644 board/RRvision/flash.c
delete mode 100644 board/RRvision/u-boot.lds
delete mode 100644 board/RRvision/video_ad7179.h
delete mode 100644 board/a3000/Kconfig
delete mode 100644 board/a3000/MAINTAINERS
delete mode 100644 board/a3000/Makefile
delete mode 100644 board/a3000/README
delete mode 100644 board/a3000/a3000.c
delete mode 100644 board/a3000/flash.c
delete mode 100644 board/atc/Kconfig
delete mode 100644 board/atc/MAINTAINERS
delete mode 100644 board/atc/Makefile
delete mode 100644 board/atc/atc.c
delete mode 100644 board/atc/flash.c
delete mode 100644 board/atc/ti113x.c
delete mode 100644 board/cogent/Kconfig
delete mode 100644 board/cogent/MAINTAINERS
delete mode 100644 board/cogent/Makefile
delete mode 100644 board/cogent/README
delete mode 100644 board/cogent/README.cma286
delete mode 100644 board/cogent/dipsw.c
delete mode 100644 board/cogent/dipsw.h
delete mode 100644 board/cogent/flash.c
delete mode 100644 board/cogent/flash.h
delete mode 100644 board/cogent/kbm.c
delete mode 100644 board/cogent/lcd.c
delete mode 100644 board/cogent/lcd.h
delete mode 100644 board/cogent/mb.c
delete mode 100644 board/cogent/mb.h
delete mode 100644 board/cogent/par.c
delete mode 100644 board/cogent/par.h
delete mode 100644 board/cogent/pci.c
delete mode 100644 board/cogent/pci.h
delete mode 100644 board/cogent/rtc.c
delete mode 100644 board/cogent/rtc.h
delete mode 100644 board/cogent/serial.c
delete mode 100644 board/cogent/serial.h
delete mode 100644 board/cogent/u-boot.lds
delete mode 100644 board/cogent/u-boot.lds.debug
delete mode 100644 board/cpc45/Kconfig
delete mode 100644 board/cpc45/MAINTAINERS
delete mode 100644 board/cpc45/Makefile
delete mode 100644 board/cpc45/cpc45.c
delete mode 100644 board/cpc45/flash.c
delete mode 100644 board/cpc45/ide.c
delete mode 100644 board/cpc45/pd67290.c
delete mode 100644 board/cpc45/plx9030.c
delete mode 100644 board/cpu86/Kconfig
delete mode 100644 board/cpu86/MAINTAINERS
delete mode 100644 board/cpu86/Makefile
delete mode 100644 board/cpu86/cpu86.c
delete mode 100644 board/cpu86/cpu86.h
delete mode 100644 board/cpu86/flash.c
delete mode 100644 board/cpu87/Kconfig
delete mode 100644 board/cpu87/MAINTAINERS
delete mode 100644 board/cpu87/Makefile
delete mode 100644 board/cpu87/cpu87.c
delete mode 100644 board/cpu87/cpu87.h
delete mode 100644 board/cpu87/flash.c
delete mode 100644 board/cu824/Kconfig
delete mode 100644 board/cu824/MAINTAINERS
delete mode 100644 board/cu824/Makefile
delete mode 100644 board/cu824/README
delete mode 100644 board/cu824/cu824.c
delete mode 100644 board/cu824/flash.c
delete mode 100644 board/eXalion/Kconfig
delete mode 100644 board/eXalion/MAINTAINERS
delete mode 100644 board/eXalion/Makefile
delete mode 100644 board/eXalion/eXalion.c
delete mode 100644 board/eXalion/eXalion.h
delete mode 100644 board/eXalion/piix_pci.h
delete mode 100644 board/ep8260/Kconfig
delete mode 100644 board/ep8260/MAINTAINERS
delete mode 100644 board/ep8260/Makefile
delete mode 100644 board/ep8260/ep8260.c
delete mode 100644 board/ep8260/ep8260.h
delete mode 100644 board/ep8260/flash.c
delete mode 100644 board/ep8260/mii_phy.c
delete mode 100644 board/ep82xxm/Kconfig
delete mode 100644 board/ep82xxm/MAINTAINERS
delete mode 100644 board/ep82xxm/Makefile
delete mode 100644 board/ep82xxm/ep82xxm.c
delete mode 100644 board/esteem192e/Kconfig
delete mode 100644 board/esteem192e/MAINTAINERS
delete mode 100644 board/esteem192e/Makefile
delete mode 100644 board/esteem192e/esteem192e.c
delete mode 100644 board/esteem192e/flash.c
delete mode 100644 board/esteem192e/u-boot.lds
delete mode 100644 board/freescale/mpc8266ads/Kconfig
delete mode 100644 board/freescale/mpc8266ads/MAINTAINERS
delete mode 100644 board/freescale/mpc8266ads/Makefile
delete mode 100644 board/freescale/mpc8266ads/flash.c
delete mode 100644 board/freescale/mpc8266ads/mpc8266ads.c
delete mode 100644 board/funkwerk/vovpn-gw/Kconfig
delete mode 100644 board/funkwerk/vovpn-gw/MAINTAINERS
delete mode 100644 board/funkwerk/vovpn-gw/Makefile
delete mode 100644 board/funkwerk/vovpn-gw/flash.c
delete mode 100644 board/funkwerk/vovpn-gw/m88e6060.c
delete mode 100644 board/funkwerk/vovpn-gw/m88e6060.h
delete mode 100644 board/funkwerk/vovpn-gw/vovpn-gw.c
delete mode 100644 board/gw8260/Kconfig
delete mode 100644 board/gw8260/MAINTAINERS
delete mode 100644 board/gw8260/Makefile
delete mode 100644 board/gw8260/flash.c
delete mode 100644 board/gw8260/gw8260.c
delete mode 100644 board/ip860/Kconfig
delete mode 100644 board/ip860/MAINTAINERS
delete mode 100644 board/ip860/Makefile
delete mode 100644 board/ip860/flash.c
delete mode 100644 board/ip860/ip860.c
delete mode 100644 board/ip860/u-boot.lds.debug
delete mode 100644 board/iphase4539/Kconfig
delete mode 100644 board/iphase4539/MAINTAINERS
delete mode 100644 board/iphase4539/Makefile
delete mode 100644 board/iphase4539/README
delete mode 100644 board/iphase4539/flash.c
delete mode 100644 board/iphase4539/iphase4539.c
delete mode 100644 board/ivm/Kconfig
delete mode 100644 board/ivm/MAINTAINERS
delete mode 100644 board/ivm/Makefile
delete mode 100644 board/ivm/flash.c
delete mode 100644 board/ivm/ivm.c
delete mode 100644 board/ivm/u-boot.lds.debug
delete mode 100644 board/kup/common/flash.c
delete mode 100644 board/kup/common/kup.c
delete mode 100644 board/kup/common/kup.h
delete mode 100644 board/kup/common/load_sernum_ethaddr.c
delete mode 100644 board/kup/common/pcmcia.c
delete mode 100644 board/kup/kup4k/Kconfig
delete mode 100644 board/kup/kup4k/MAINTAINERS
delete mode 100644 board/kup/kup4k/Makefile
delete mode 100644 board/kup/kup4k/kup4k.c
delete mode 100644 board/kup/kup4k/u-boot.lds.debug
delete mode 100644 board/kup/kup4x/Kconfig
delete mode 100644 board/kup/kup4x/MAINTAINERS
delete mode 100644 board/kup/kup4x/Makefile
delete mode 100644 board/kup/kup4x/kup4x.c
delete mode 100644 board/kup/kup4x/u-boot.lds
delete mode 100644 board/kup/kup4x/u-boot.lds.debug
delete mode 100644 board/lwmon/Kconfig
delete mode 100644 board/lwmon/MAINTAINERS
delete mode 100644 board/lwmon/Makefile
delete mode 100644 board/lwmon/README.keybd
delete mode 100644 board/lwmon/flash.c
delete mode 100644 board/lwmon/lwmon.c
delete mode 100644 board/lwmon/pcmcia.c
delete mode 100644 board/lwmon/u-boot.lds.debug
delete mode 100644 board/manroland/hmi1001/Kconfig
delete mode 100644 board/manroland/hmi1001/MAINTAINERS
delete mode 100644 board/manroland/hmi1001/Makefile
delete mode 100644 board/manroland/hmi1001/hmi1001.c
delete mode 100644 board/manroland/mucmc52/Kconfig
delete mode 100644 board/manroland/mucmc52/MAINTAINERS
delete mode 100644 board/manroland/mucmc52/Makefile
delete mode 100644 board/manroland/mucmc52/mucmc52.c
delete mode 100644 board/manroland/uc100/Kconfig
delete mode 100644 board/manroland/uc100/MAINTAINERS
delete mode 100644 board/manroland/uc100/Makefile
delete mode 100644 board/manroland/uc100/pcmcia.c
delete mode 100644 board/manroland/uc100/uc100.c
delete mode 100644 board/manroland/uc101/Kconfig
delete mode 100644 board/manroland/uc101/MAINTAINERS
delete mode 100644 board/manroland/uc101/Makefile
delete mode 100644 board/manroland/uc101/uc101.c
delete mode 100644 board/muas3001/Kconfig
delete mode 100644 board/muas3001/MAINTAINERS
delete mode 100644 board/muas3001/Makefile
delete mode 100644 board/muas3001/muas3001.c
delete mode 100644 board/musenki/Kconfig
delete mode 100644 board/musenki/MAINTAINERS
delete mode 100644 board/musenki/Makefile
delete mode 100644 board/musenki/README
delete mode 100644 board/musenki/flash.c
delete mode 100644 board/musenki/musenki.c
delete mode 100644 board/mvblue/Kconfig
delete mode 100644 board/mvblue/MAINTAINERS
delete mode 100644 board/mvblue/Makefile
delete mode 100644 board/mvblue/flash.c
delete mode 100644 board/mvblue/mvblue.c
delete mode 100644 board/mvblue/u-boot.lds
delete mode 100644 board/netvia/Kconfig
delete mode 100644 board/netvia/MAINTAINERS
delete mode 100644 board/netvia/Makefile
delete mode 100644 board/netvia/flash.c
delete mode 100644 board/netvia/netvia.c
delete mode 100644 board/netvia/u-boot.lds.debug
delete mode 100644 board/pm826/Kconfig
delete mode 100644 board/pm826/MAINTAINERS
delete mode 100644 board/pm826/Makefile
delete mode 100644 board/pm826/flash.c
delete mode 100644 board/pm826/pm826.c
delete mode 100644 board/pm828/Kconfig
delete mode 100644 board/pm828/MAINTAINERS
delete mode 100644 board/pm828/Makefile
delete mode 100644 board/pm828/flash.c
delete mode 100644 board/pm828/pm828.c
delete mode 100644 board/ppmc8260/Kconfig
delete mode 100644 board/ppmc8260/MAINTAINERS
delete mode 100644 board/ppmc8260/Makefile
delete mode 100644 board/ppmc8260/ppmc8260.c
delete mode 100644 board/r360mpi/Kconfig
delete mode 100644 board/r360mpi/MAINTAINERS
delete mode 100644 board/r360mpi/Makefile
delete mode 100644 board/r360mpi/flash.c
delete mode 100644 board/r360mpi/pcmcia.c
delete mode 100644 board/r360mpi/r360mpi.c
delete mode 100644 board/r360mpi/u-boot.lds
delete mode 100644 board/sacsng/Kconfig
delete mode 100644 board/sacsng/MAINTAINERS
delete mode 100644 board/sacsng/Makefile
delete mode 100644 board/sacsng/clkinit.c
delete mode 100644 board/sacsng/clkinit.h
delete mode 100644 board/sacsng/flash.c
delete mode 100644 board/sacsng/ioconfig.h
delete mode 100644 board/sacsng/sacsng.c
delete mode 100644 board/sandpoint/Kconfig
delete mode 100644 board/sandpoint/MAINTAINERS
delete mode 100644 board/sandpoint/Makefile
delete mode 100644 board/sandpoint/README
delete mode 100644 board/sandpoint/dinkdl
delete mode 100644 board/sandpoint/flash.c
delete mode 100644 board/sandpoint/sandpoint.c
delete mode 100644 board/sandpoint/u-boot.lds
delete mode 100644 board/spd8xx/Kconfig
delete mode 100644 board/spd8xx/MAINTAINERS
delete mode 100644 board/spd8xx/Makefile
delete mode 100644 board/spd8xx/flash.c
delete mode 100644 board/spd8xx/spd8xx.c
delete mode 100644 board/spd8xx/u-boot.lds
delete mode 100644 board/spd8xx/u-boot.lds.debug
delete mode 100644 board/utx8245/Kconfig
delete mode 100644 board/utx8245/MAINTAINERS
delete mode 100644 board/utx8245/Makefile
delete mode 100644 board/utx8245/flash.c
delete mode 100644 board/utx8245/utx8245.c
delete mode 100644 configs/A3000_defconfig
delete mode 100644 configs/CPC45_ROMBOOT_defconfig
delete mode 100644 configs/CPC45_defconfig
delete mode 100644 configs/CPU86_ROMBOOT_defconfig
delete mode 100644 configs/CPU86_defconfig
delete mode 100644 configs/CPU87_ROMBOOT_defconfig
delete mode 100644 configs/CPU87_defconfig
delete mode 100644 configs/CU824_defconfig
delete mode 100644 configs/ELPT860_defconfig
delete mode 100644 configs/ESTEEM192E_defconfig
delete mode 100644 configs/FPS850L_defconfig
delete mode 100644 configs/FPS860L_defconfig
delete mode 100644 configs/IP860_defconfig
delete mode 100644 configs/IPHASE4539_defconfig
delete mode 100644 configs/IVML24_128_defconfig
delete mode 100644 configs/IVML24_256_defconfig
delete mode 100644 configs/IVML24_defconfig
delete mode 100644 configs/IVMS8_128_defconfig
delete mode 100644 configs/IVMS8_256_defconfig
delete mode 100644 configs/IVMS8_defconfig
delete mode 100644 configs/KUP4K_defconfig
delete mode 100644 configs/KUP4X_defconfig
delete mode 100644 configs/MPC8266ADS_defconfig
delete mode 100644 configs/MUSENKI_defconfig
delete mode 100644 configs/MVBLUE_defconfig
delete mode 100644 configs/NETVIA_V2_defconfig
delete mode 100644 configs/NETVIA_defconfig
delete mode 100644 configs/NSCU_defconfig
delete mode 100644 configs/PM825_BIGFLASH_defconfig
delete mode 100644 configs/PM825_ROMBOOT_BIGFLASH_defconfig
delete mode 100644 configs/PM825_ROMBOOT_defconfig
delete mode 100644 configs/PM825_defconfig
delete mode 100644 configs/PM826_BIGFLASH_defconfig
delete mode 100644 configs/PM826_ROMBOOT_BIGFLASH_defconfig
delete mode 100644 configs/PM826_ROMBOOT_defconfig
delete mode 100644 configs/PM826_defconfig
delete mode 100644 configs/PM828_PCI_defconfig
delete mode 100644 configs/PM828_ROMBOOT_PCI_defconfig
delete mode 100644 configs/PM828_ROMBOOT_defconfig
delete mode 100644 configs/PM828_defconfig
delete mode 100644 configs/R360MPI_defconfig
delete mode 100644 configs/RRvision_LCD_defconfig
delete mode 100644 configs/RRvision_defconfig
delete mode 100644 configs/SM850_defconfig
delete mode 100644 configs/SPD823TS_defconfig
delete mode 100644 configs/Sandpoint8240_defconfig
delete mode 100644 configs/Sandpoint8245_defconfig
delete mode 100644 configs/TK885D_defconfig
delete mode 100644 configs/VoVPN-GW_66MHz_defconfig
delete mode 100644 configs/atc_defconfig
delete mode 100644 configs/cogent_mpc8260_defconfig
delete mode 100644 configs/cogent_mpc8xx_defconfig
delete mode 100644 configs/eXalion_defconfig
delete mode 100644 configs/ep8260_defconfig
delete mode 100644 configs/ep82xxm_defconfig
delete mode 100644 configs/gw8260_defconfig
delete mode 100644 configs/hmi1001_defconfig
delete mode 100644 configs/lwmon_defconfig
delete mode 100644 configs/muas3001_defconfig
delete mode 100644 configs/muas3001_dev_defconfig
delete mode 100644 configs/mucmc52_defconfig
delete mode 100644 configs/ppmc8260_defconfig
delete mode 100644 configs/sacsng_defconfig
delete mode 100644 configs/uc100_defconfig
delete mode 100644 configs/uc101_defconfig
delete mode 100644 configs/utx8245_defconfig
delete mode 100644 configs/virtlab2_defconfig
delete mode 100644 drivers/pcmcia/i82365.c
delete mode 100644 drivers/rtc/ds12887.c
delete mode 100644 include/configs/A3000.h
delete mode 100644 include/configs/CPC45.h
delete mode 100644 include/configs/CPU86.h
delete mode 100644 include/configs/CPU87.h
delete mode 100644 include/configs/CU824.h
delete mode 100644 include/configs/ELPT860.h
delete mode 100644 include/configs/ESTEEM192E.h
delete mode 100644 include/configs/FPS850L.h
delete mode 100644 include/configs/FPS860L.h
delete mode 100644 include/configs/IP860.h
delete mode 100644 include/configs/IPHASE4539.h
delete mode 100644 include/configs/IVML24.h
delete mode 100644 include/configs/IVMS8.h
delete mode 100644 include/configs/KUP4K.h
delete mode 100644 include/configs/KUP4X.h
delete mode 100644 include/configs/MPC8266ADS.h
delete mode 100644 include/configs/MUSENKI.h
delete mode 100644 include/configs/MVBLUE.h
delete mode 100644 include/configs/NETVIA.h
delete mode 100644 include/configs/NSCU.h
delete mode 100644 include/configs/PM826.h
delete mode 100644 include/configs/PM828.h
delete mode 100644 include/configs/R360MPI.h
delete mode 100644 include/configs/RRvision.h
delete mode 100644 include/configs/SM850.h
delete mode 100644 include/configs/SPD823TS.h
delete mode 100644 include/configs/Sandpoint8240.h
delete mode 100644 include/configs/Sandpoint8245.h
delete mode 100644 include/configs/TK885D.h
delete mode 100644 include/configs/VoVPN-GW.h
delete mode 100644 include/configs/atc.h
delete mode 100644 include/configs/cogent_common.h
delete mode 100644 include/configs/cogent_mpc8260.h
delete mode 100644 include/configs/cogent_mpc8xx.h
delete mode 100644 include/configs/eXalion.h
delete mode 100644 include/configs/ep8260.h
delete mode 100644 include/configs/ep82xxm.h
delete mode 100644 include/configs/gw8260.h
delete mode 100644 include/configs/hmi1001.h
delete mode 100644 include/configs/lwmon.h
delete mode 100644 include/configs/muas3001.h
delete mode 100644 include/configs/mucmc52.h
delete mode 100644 include/configs/ppmc8260.h
delete mode 100644 include/configs/sacsng.h
delete mode 100644 include/configs/uc100.h
delete mode 100644 include/configs/uc101.h
delete mode 100644 include/configs/utx8245.h
delete mode 100644 include/configs/virtlab2.h
delete mode 100644 include/mpc824x.h
delete mode 100644 include/pcmcia/cirrus.h
delete mode 100644 include/pcmcia/i82365.h
delete mode 100644 include/pcmcia/ss.h
delete mode 100644 include/pcmcia/ti113x.h
delete mode 100644 include/video_ad7176.h
delete mode 100644 include/video_ad7177.h
delete mode 100644 include/video_ad7179.h
--
1.9.1
4
54
One of the four items left to fix up for bare ivybridge support in U-Boot
is MTRRs. These are an important part of the x86 platform since they provide
a means to control the cache behaviour for areas of memory.
Memory areas can be marked as uncacheable or cacheable. For cacheable the
write behaviour can be controlled:
- write-back: data is not written back from the cache until evicted
- write-though: data goes into the cache but is also written to memory
- write-protect: data cannot be written to this area
- write-combining: multiple writes to this area can be combined
This series adds support for deciding the MTRR setup that should be used,
commiting it to registers before relocation, updating it for the video frame
buffer, disabling CAR (cache-as-RAM) when needed and making sure that the
faster possible execution speed is provided. In addition an 'mtrr' command
is added to permit inspection and adjustment of MTRR registers from the
command line.
Simon Glass (22):
x86: Correct XIP_ROM_SIZE
x86: Drop RAMTOP Kconfig
x86: Correct ifdtool microcode calculation
x86: video: Add support for CONFIG_CONSOLE_SCROLL_LINES
x86: config: Always scroll the display by 5 lines, for speed
x86: video: Add a debug() to display the frame buffer address
x86: pci: Don't return a vesa mode when there is not video
x86: video: Add debug option to time the BIOS copy
x86: ivybridge: Only run the Video BIOS when video is enabled
x86: Use cache, don't clear the display in video BIOS
x86: Tidy up VESA mode numbers
x86: pci: Display vesa modes in hex
x86: ivybridge: Drop support for ROM caching
x86: Add support for MTRRs
x86: ivybridge: Set up an MTRR for the video frame buffer
x86: board_f: Adjust x86 boot order for performance
x86: ivybridge: Request MTRRs for DRAM regions
x86: Commit the current MTRRs before relocation
x86: ivybridge: Add a way to turn off the CAR
x86: Disable CAR before relocation on platforms that need it
x86: ivybridge: Update microcode early in boot
x86: Add an 'mtrr' command to list and adjust MTRRs
arch/x86/Kconfig | 6 +-
arch/x86/cpu/Makefile | 1 +
arch/x86/cpu/coreboot/coreboot.c | 22 ++---
arch/x86/cpu/ivybridge/car.S | 78 +++++++++++++--
arch/x86/cpu/ivybridge/cpu.c | 27 +----
arch/x86/cpu/ivybridge/gma.c | 25 ++++-
arch/x86/cpu/ivybridge/microcode_intel.c | 9 +-
arch/x86/cpu/ivybridge/sdram.c | 10 ++
arch/x86/cpu/mtrr.c | 81 +++++++++++++++
arch/x86/cpu/start.S | 10 ++
arch/x86/dts/link.dts | 3 -
arch/x86/include/asm/global_data.h | 15 +++
arch/x86/include/asm/mtrr.h | 163 ++++++++++++++-----------------
arch/x86/lib/bios.c | 14 +--
arch/x86/lib/init_helpers.c | 8 ++
common/Makefile | 1 +
common/board_f.c | 8 +-
common/cmd_mtrr.c | 138 ++++++++++++++++++++++++++
doc/README.x86 | 18 +++-
drivers/pci/pci_rom.c | 9 +-
drivers/video/cfb_console.c | 26 +++--
drivers/video/x86_fb.c | 1 +
include/configs/x86-common.h | 1 +
tools/ifdtool.c | 4 +-
24 files changed, 509 insertions(+), 169 deletions(-)
create mode 100644 arch/x86/cpu/mtrr.c
create mode 100644 common/cmd_mtrr.c
--
2.2.0.rc0.207.ga3a616c
4
45
From: Oliver Schinagl <oliver(a)schinagl.nl>
The A31 uses the AXP221 pmic for various voltages.
Signed-off-by: Oliver Schinagl <oliver(a)schinagl.nl>
Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
--
Changes in v2:
-Rebase
Changes in v3:
-Add support for all dldo and aldo-s
-Add Kconfig option to select building AXP221 and to select voltage of
dldo and aldo-s
Changes in v4:
-Add axp221_setbits helper function
-Use symbolic names for enabled bits in CTRL1 - CTRL3 registers
---
board/sunxi/board.c | 26 +++++++
drivers/power/Kconfig | 47 +++++++++++++
drivers/power/Makefile | 1 +
drivers/power/axp221.c | 186 +++++++++++++++++++++++++++++++++++++++++++++++++
include/axp221.h | 50 +++++++++++++
5 files changed, 310 insertions(+)
create mode 100644 drivers/power/axp221.c
create mode 100644 include/axp221.h
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 03890c8..e6ec5b8 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -19,6 +19,9 @@
#ifdef CONFIG_AXP209_POWER
#include <axp209.h>
#endif
+#ifdef CONFIG_AXP221_POWER
+#include <axp221.h>
+#endif
#include <asm/arch/clock.h>
#include <asm/arch/cpu.h>
#include <asm/arch/dram.h>
@@ -169,6 +172,29 @@ void sunxi_board_init(void)
power_failed |= axp209_set_ldo3(2800);
power_failed |= axp209_set_ldo4(2800);
#endif
+#ifdef CONFIG_AXP221_POWER
+ power_failed = axp221_init();
+ power_failed |= axp221_set_dcdc1(3000);
+ power_failed |= axp221_set_dcdc2(1200);
+ power_failed |= axp221_set_dcdc3(1200);
+ power_failed |= axp221_set_dcdc4(1200);
+ power_failed |= axp221_set_dcdc5(1500);
+#if CONFIG_AXP221_DLDO1_VOLT != -1
+ power_failed |= axp221_set_dldo1(CONFIG_AXP221_DLDO1_VOLT);
+#endif
+#if CONFIG_AXP221_DLDO4_VOLT != -1
+ power_failed |= axp221_set_dldo4(CONFIG_AXP221_DLDO4_VOLT);
+#endif
+#if CONFIG_AXP221_ALDO1_VOLT != -1
+ power_failed |= axp221_set_aldo1(CONFIG_AXP221_ALDO1_VOLT);
+#endif
+#if CONFIG_AXP221_ALDO2_VOLT != -1
+ power_failed |= axp221_set_aldo2(CONFIG_AXP221_ALDO2_VOLT);
+#endif
+#if CONFIG_AXP221_ALDO3_VOLT != -1
+ power_failed |= axp221_set_aldo3(CONFIG_AXP221_ALDO3_VOLT);
+#endif
+#endif
printf("DRAM:");
ramsize = sunxi_dram_init();
diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
index e69de29..1ec7c0e 100644
--- a/drivers/power/Kconfig
+++ b/drivers/power/Kconfig
@@ -0,0 +1,47 @@
+config AXP221_POWER
+ boolean "axp221 pmic support"
+ depends on MACH_SUN6I
+ default y
+ ---help---
+ Say y here to enable support for the axp221 pmic found on most sun6i
+ (A31) boards.
+
+config AXP221_DLDO1_VOLT
+ int "axp221 dldo1 voltage"
+ depends on AXP221_POWER
+ default -1
+ ---help---
+ Set the voltage (mV) to program the axp221 dldo1 at, set to -1 to
+ disable dldo1.
+
+config AXP221_DLDO4_VOLT
+ int "axp221 dldo4 voltage"
+ depends on AXP221_POWER
+ default -1
+ ---help---
+ Set the voltage (mV) to program the axp221 dldo4 at, set to -1 to
+ disable dldo4.
+
+config AXP221_ALDO1_VOLT
+ int "axp221 aldo1 voltage"
+ depends on AXP221_POWER
+ default -1
+ ---help---
+ Set the voltage (mV) to program the axp221 aldo1 at, set to -1 to
+ disable aldo1.
+
+config AXP221_ALDO2_VOLT
+ int "axp221 aldo2 voltage"
+ depends on AXP221_POWER
+ default -1
+ ---help---
+ Set the voltage (mV) to program the axp221 aldo2 at, set to -1 to
+ disable aldo2.
+
+config AXP221_ALDO3_VOLT
+ int "axp221 aldo3 voltage"
+ depends on AXP221_POWER
+ default -1
+ ---help---
+ Set the voltage (mV) to program the axp221 aldo3 at, set to -1 to
+ disable aldo3.
diff --git a/drivers/power/Makefile b/drivers/power/Makefile
index dc64e4d..04bd996 100644
--- a/drivers/power/Makefile
+++ b/drivers/power/Makefile
@@ -7,6 +7,7 @@
obj-$(CONFIG_AXP152_POWER) += axp152.o
obj-$(CONFIG_AXP209_POWER) += axp209.o
+obj-$(CONFIG_AXP221_POWER) += axp221.o
obj-$(CONFIG_EXYNOS_TMU) += exynos-tmu.o
obj-$(CONFIG_FTPMU010_POWER) += ftpmu010.o
obj-$(CONFIG_TPS6586X_POWER) += tps6586x.o
diff --git a/drivers/power/axp221.c b/drivers/power/axp221.c
new file mode 100644
index 0000000..941193a
--- /dev/null
+++ b/drivers/power/axp221.c
@@ -0,0 +1,186 @@
+/*
+ * (C) Copyright 2013 Oliver Schinagl <oliver(a)schinagl.nl>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/p2wi.h>
+#include <axp221.h>
+
+static u8 axp221_mvolt_to_cfg(int mvolt, int min, int max, int div)
+{
+ if (mvolt < min)
+ mvolt = min;
+ else if (mvolt > max)
+ mvolt = max;
+
+ return (mvolt - min) / div;
+}
+
+static int axp221_setbits(u8 reg, u8 bits)
+{
+ int ret;
+ u8 val;
+
+ ret = p2wi_read(reg, &val);
+ if (ret)
+ return ret;
+
+ val |= bits;
+ return p2wi_write(reg, val);
+}
+
+int axp221_set_dcdc1(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 1600, 3400, 100);
+
+ ret = p2wi_write(AXP221_DCDC1_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL2,
+ AXP221_OUTPUT_CTRL2_DCDC1_EN);
+}
+
+int axp221_set_dcdc2(unsigned int mvolt)
+{
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 600, 1540, 20);
+
+ return p2wi_write(AXP221_DCDC2_CTRL, cfg);
+}
+
+int axp221_set_dcdc3(unsigned int mvolt)
+{
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 600, 1860, 20);
+
+ return p2wi_write(AXP221_DCDC3_CTRL, cfg);
+}
+
+int axp221_set_dcdc4(unsigned int mvolt)
+{
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 600, 1540, 20);
+
+ return p2wi_write(AXP221_DCDC4_CTRL, cfg);
+}
+
+int axp221_set_dcdc5(unsigned int mvolt)
+{
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 1000, 2550, 50);
+
+ return p2wi_write(AXP221_DCDC5_CTRL, cfg);
+}
+
+int axp221_set_dldo1(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+
+ ret = p2wi_write(AXP221_DLDO1_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL2,
+ AXP221_OUTPUT_CTRL2_DLDO1_EN);
+}
+
+int axp221_set_dldo2(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+
+ ret = p2wi_write(AXP221_DLDO2_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL2,
+ AXP221_OUTPUT_CTRL2_DLDO2_EN);
+}
+
+int axp221_set_dldo3(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+
+ ret = p2wi_write(AXP221_DLDO3_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL2,
+ AXP221_OUTPUT_CTRL2_DLDO3_EN);
+}
+
+int axp221_set_dldo4(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+
+ ret = p2wi_write(AXP221_DLDO4_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL2,
+ AXP221_OUTPUT_CTRL2_DLDO4_EN);
+}
+
+int axp221_set_aldo1(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+
+ ret = p2wi_write(AXP221_ALDO1_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL1,
+ AXP221_OUTPUT_CTRL1_ALDO1_EN);
+}
+
+int axp221_set_aldo2(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+
+ ret = p2wi_write(AXP221_ALDO2_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL1,
+ AXP221_OUTPUT_CTRL1_ALDO2_EN);
+}
+
+int axp221_set_aldo3(unsigned int mvolt)
+{
+ int ret;
+ u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+
+ ret = p2wi_write(AXP221_ALDO3_CTRL, cfg);
+ if (ret)
+ return ret;
+
+ return axp221_setbits(AXP221_OUTPUT_CTRL3,
+ AXP221_OUTPUT_CTRL3_ALDO3_EN);
+}
+
+int axp221_init(void)
+{
+ u8 axp_chip_id;
+ int ret;
+
+ p2wi_init();
+ ret = p2wi_change_to_p2wi_mode(AXP221_CHIP_ADDR, AXP221_CTRL_ADDR,
+ AXP221_INIT_DATA);
+ if (ret)
+ return ret;
+
+ ret = p2wi_read(AXP221_CHIP_ID, &axp_chip_id);
+ if (ret)
+ return ret;
+
+ if (!(axp_chip_id == 0x6 || axp_chip_id == 0x7 || axp_chip_id == 0x17))
+ return -ENODEV;
+
+ return 0;
+}
diff --git a/include/axp221.h b/include/axp221.h
new file mode 100644
index 0000000..e3b4409
--- /dev/null
+++ b/include/axp221.h
@@ -0,0 +1,50 @@
+/*
+ * (C) Copyright 2013 Oliver Schinagl <oliver(a)schinagl.nl>
+ *
+ * X-Powers AXP221 Power Management IC driver
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#define AXP221_CHIP_ADDR 0x68
+#define AXP221_CTRL_ADDR 0x3e
+#define AXP221_INIT_DATA 0x3e
+
+#define AXP221_CHIP_ID 0x03
+#define AXP221_OUTPUT_CTRL1 0x10
+#define AXP221_OUTPUT_CTRL1_ALDO1_EN (1 << 6)
+#define AXP221_OUTPUT_CTRL1_ALDO2_EN (1 << 7)
+#define AXP221_OUTPUT_CTRL2 0x12
+#define AXP221_OUTPUT_CTRL2_DLDO1_EN (1 << 3)
+#define AXP221_OUTPUT_CTRL2_DLDO2_EN (1 << 4)
+#define AXP221_OUTPUT_CTRL2_DLDO3_EN (1 << 5)
+#define AXP221_OUTPUT_CTRL2_DLDO4_EN (1 << 6)
+#define AXP221_OUTPUT_CTRL2_DCDC1_EN (1 << 7)
+#define AXP221_OUTPUT_CTRL3 0x13
+#define AXP221_OUTPUT_CTRL3_ALDO3_EN (1 << 7)
+#define AXP221_DLDO1_CTRL 0x15
+#define AXP221_DLDO2_CTRL 0x16
+#define AXP221_DLDO3_CTRL 0x17
+#define AXP221_DLDO4_CTRL 0x18
+#define AXP221_DCDC1_CTRL 0x21
+#define AXP221_DCDC2_CTRL 0x22
+#define AXP221_DCDC3_CTRL 0x23
+#define AXP221_DCDC4_CTRL 0x24
+#define AXP221_DCDC5_CTRL 0x25
+#define AXP221_ALDO1_CTRL 0x28
+#define AXP221_ALDO2_CTRL 0x28
+#define AXP221_ALDO3_CTRL 0x2a
+
+int axp221_set_dcdc1(unsigned int mvolt);
+int axp221_set_dcdc2(unsigned int mvolt);
+int axp221_set_dcdc3(unsigned int mvolt);
+int axp221_set_dcdc4(unsigned int mvolt);
+int axp221_set_dcdc5(unsigned int mvolt);
+int axp221_set_dldo1(unsigned int mvolt);
+int axp221_set_dldo2(unsigned int mvolt);
+int axp221_set_dldo3(unsigned int mvolt);
+int axp221_set_dldo4(unsigned int mvolt);
+int axp221_set_aldo1(unsigned int mvolt);
+int axp221_set_aldo2(unsigned int mvolt);
+int axp221_set_aldo3(unsigned int mvolt);
+int axp221_init(void);
--
2.1.0
3
6

05 Jan '15
Hello,
when using a hardfloat toolchain linking u-boot fails.
LD u-boot
ld.bfd: error: /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a(bpabi.o)
uses VFP register arguments, u-boot does not
ld.bfd: failed to merge target specific data of file
/usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a(bpabi.o)
ld.bfd: error: /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a(_divdi3.o)
uses VFP register arguments, u-boot does not
ld.bfd: failed to merge target specific data of file
/usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a(_divdi3.o)
ld.bfd: error: /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a(_udivdi3.o)
uses VFP register arguments, u-boot does not
ld.bfd: failed to merge target specific data of file
/usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a(_udivdi3.o)
Makefile:1065: recipe for target 'u-boot' failed
make: *** [u-boot] Error 1
Removing the softfloat option fixes the issue:
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -16,7 +16,7 @@ endif
LDFLAGS_FINAL += --gc-sections
PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections \
-fno-common -ffixed-r9
-PLATFORM_RELFLAGS += $(call cc-option, -msoft-float) \
+PLATFORM_RELFLAGS += \
$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
# Support generic board on ARM
Did u-boot start using floating point calculations?
Or are these objects superfluous?
Or neither of that but addition of the softfloat option sometime last
year just needlessly breaks builds?
Thanks
Michal
5
9
Hi Tom,
Please pull this PR.
thanks!
Jagan.
The following changes since commit e3bf81b1e841ecabe7c8b3d48621256db8b8623e:
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx (2014-12-16 15:20:02 -0500)
are available in the git repository at:
git://git.denx.de/u-boot-spi.git master
for you to fetch changes up to babe6994ca28e5a354ee32b33b7a54b0276d9df1:
sf: sf_params: Add S25FL164K flash identifier info (2014-12-18 18:48:30 +0530)
----------------------------------------------------------------
Adnan Ali (2):
sf: sf_params: Add S25FL116K flash support
sf: sf_params: Add S25FL164K flash identifier info
Jagannadha Sutradharudu Teki (1):
mtd: sf: Zap ramtron driver
Shengzhou Liu (1):
mtd/spi: Add support for SST25WF040B
drivers/mtd/spi/Makefile | 1 -
drivers/mtd/spi/ramtron.c | 404 --------------------------------------------
drivers/mtd/spi/sf_params.c | 3 +
3 files changed, 3 insertions(+), 405 deletions(-)
delete mode 100644 drivers/mtd/spi/ramtron.c
2
1
Hi Tom,
The following changes since commit e3bf81b1e841ecabe7c8b3d48621256db8b8623e:
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx (2014-12-16 15:20:02 -0500)
are available in the git repository at:
git://git.denx.de/u-boot-arm master
for you to fetch changes up to ed710457a52ff09880af52540c997615adbc91ee:
ARM: Implement non-cached memory support (2014-12-18 21:18:43 +0100)
----------------------------------------------------------------
Thierry Reding (1):
ARM: Implement non-cached memory support
README | 19 +++++++++++++++++++
arch/arm/include/asm/system.h | 5 +++++
arch/arm/lib/cache.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
common/board_r.c | 11 +++++++++++
4 files changed, 79 insertions(+)
Amicalement,
--
Albert.
2
1
Hi Tom,
Please pull this PR.
thanks!
Jagan.
The following changes since commit babe6994ca28e5a354ee32b33b7a54b0276d9df1:
sf: sf_params: Add S25FL164K flash identifier info (2014-12-18 18:48:30 +0530)
are available in the git repository at:
git://git.denx.de/u-boot-spi.git master
for you to fetch changes up to be2fde60b0de7723d29035ba952a970d9e1ca94d:
imx:mx6slevk add spi nor boot support (2014-12-31 14:54:01 +0530)
----------------------------------------------------------------
Peng Fan (6):
QuadSPI: use QSPI_CMD_xx instead of flash opcodes
QuadSPI: use correct amba_base
arm:mx6sx add QSPI support
imx:qspi add 4K erase support
imx:mx6sxsabresd add qspi support
imx:mx6slevk add spi nor boot support
arch/arm/cpu/armv7/mx6/clock.c | 50 ++++++++++
arch/arm/include/asm/arch-mx6/clock.h | 1 +
arch/arm/include/asm/arch-mx6/imx-regs.h | 12 +--
board/freescale/mx6slevk/MAINTAINERS | 1 +
board/freescale/mx6sxsabresd/mx6sxsabresd.c | 40 ++++++++
configs/mx6slevk_spinor_defconfig | 3 +
drivers/spi/fsl_qspi.c | 137 +++++++++++++++++++---------
include/configs/mx6slevk.h | 13 ++-
include/configs/mx6sxsabresd.h | 12 +++
9 files changed, 221 insertions(+), 48 deletions(-)
create mode 100644 configs/mx6slevk_spinor_defconfig
2
1