Merge branch 'common/serial-rework' into sh-latest
authorPaul Mundt <lethal@linux-sh.org>
Thu, 13 Jan 2011 06:21:27 +0000 (15:21 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Thu, 13 Jan 2011 06:21:27 +0000 (15:21 +0900)
34 files changed:
arch/sh/boards/board-edosk7705.c
arch/sh/boards/board-edosk7760.c
arch/sh/boards/board-sh7785lcr.c
arch/sh/boards/mach-ap325rxa/setup.c
arch/sh/boards/mach-cayman/setup.c
arch/sh/boards/mach-ecovec24/setup.c
arch/sh/boards/mach-kfr2r09/setup.c
arch/sh/boards/mach-landisk/irq.c
arch/sh/boards/mach-landisk/setup.c
arch/sh/boards/mach-migor/setup.c
arch/sh/boards/mach-r2d/setup.c
arch/sh/boards/mach-sdk7786/setup.c
arch/sh/boards/mach-se/7206/setup.c
arch/sh/boards/mach-se/7724/setup.c
arch/sh/boards/mach-se/7751/setup.c
arch/sh/boards/mach-sh03/setup.c
arch/sh/boot/romimage/mmcif-sh7724.c
arch/sh/configs/sh7757lcr_defconfig
arch/sh/drivers/pci/fixups-landisk.c
arch/sh/include/asm/io.h
arch/sh/include/asm/machvec.h
arch/sh/include/asm/pgtable_32.h
arch/sh/include/asm/processor.h
arch/sh/include/asm/processor_32.h
arch/sh/include/mach-landisk/mach/iodata_landisk.h
arch/sh/kernel/cpu/proc.c
arch/sh/kernel/cpu/sh4/probe.c
arch/sh/kernel/cpu/sh4a/setup-sh7343.c
arch/sh/kernel/cpu/sh4a/setup-sh7366.c
arch/sh/kernel/cpu/sh4a/setup-sh7722.c
arch/sh/kernel/cpu/sh4a/setup-sh7723.c
arch/sh/kernel/cpu/sh4a/setup-sh7724.c
arch/sh/mm/init.c
include/linux/mmc/sh_mmcif.h

index 4cb3bb74c36fbf3499f79a3f78aed06e68f831c1..541d8a28103538e2fa82706f9352a0875769e47c 100644 (file)
@@ -66,7 +66,7 @@ static int __init init_edosk7705_devices(void)
        return platform_add_devices(edosk7705_devices,
                                    ARRAY_SIZE(edosk7705_devices));
 }
-__initcall(init_edosk7705_devices);
+device_initcall(init_edosk7705_devices);
 
 /*
  * The Machine Vector
index 35dc0994875d5f0e1196a37e6015b971f311459f..f47ac82da87636d4993b65d4adc66acded83257c 100644 (file)
@@ -182,7 +182,7 @@ static int __init init_edosk7760_devices(void)
        return platform_add_devices(edosk7760_devices,
                                    ARRAY_SIZE(edosk7760_devices));
 }
-__initcall(init_edosk7760_devices);
+device_initcall(init_edosk7760_devices);
 
 /*
  * The Machine Vector
index fe7e686c94ac004fc19bc569df8ee271aad932f1..ee65ff05c558d401ce844fed329ee2cc24be683f 100644 (file)
@@ -284,7 +284,7 @@ static int __init sh7785lcr_devices_setup(void)
        return platform_add_devices(sh7785lcr_devices,
                                    ARRAY_SIZE(sh7785lcr_devices));
 }
-__initcall(sh7785lcr_devices_setup);
+device_initcall(sh7785lcr_devices_setup);
 
 /* Initialize IRQ setting */
 void __init init_sh7785lcr_IRQ(void)
index 07ea908c510d08b680704fca70dd4250264a9daf..3e5fc3bbf3ed08044a2cd71bc1da588910a16ea6 100644 (file)
@@ -14,6 +14,8 @@
 #include <linux/device.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
+#include <linux/mfd/sh_mobile_sdhi.h>
+#include <linux/mmc/host.h>
 #include <linux/mtd/physmap.h>
 #include <linux/mtd/sh_flctl.h>
 #include <linux/delay.h>
@@ -430,11 +432,18 @@ static struct resource sdhi0_cn3_resources[] = {
        },
 };
 
+static struct sh_mobile_sdhi_info sdhi0_cn3_data = {
+       .tmio_caps      = MMC_CAP_SDIO_IRQ,
+};
+
 static struct platform_device sdhi0_cn3_device = {
        .name           = "sh_mobile_sdhi",
        .id             = 0, /* "sdhi0" clock */
        .num_resources  = ARRAY_SIZE(sdhi0_cn3_resources),
        .resource       = sdhi0_cn3_resources,
+       .dev = {
+               .platform_data = &sdhi0_cn3_data,
+       },
        .archdata = {
                .hwblk_id = HWBLK_SDHI0,
        },
@@ -453,11 +462,18 @@ static struct resource sdhi1_cn7_resources[] = {
        },
 };
 
+static struct sh_mobile_sdhi_info sdhi1_cn7_data = {
+       .tmio_caps      = MMC_CAP_SDIO_IRQ,
+};
+
 static struct platform_device sdhi1_cn7_device = {
        .name           = "sh_mobile_sdhi",
        .id             = 1, /* "sdhi1" clock */
        .num_resources  = ARRAY_SIZE(sdhi1_cn7_resources),
        .resource       = sdhi1_cn7_resources,
+       .dev = {
+               .platform_data = &sdhi1_cn7_data,
+       },
        .archdata = {
                .hwblk_id = HWBLK_SDHI1,
        },
index 7e8216ac31bda3cf263faad31ab3105e7afd0b0f..e89e8e122a26850ab4ec4f31c0398b4d4973406e 100644 (file)
@@ -165,7 +165,7 @@ static int __init smsc_superio_setup(void)
 
        return 0;
 }
-__initcall(smsc_superio_setup);
+device_initcall(smsc_superio_setup);
 
 static void __iomem *cayman_ioport_map(unsigned long port, unsigned int len)
 {
index f48c492a68d3824158828e820175446eb7ecc44a..33b662999fc66b68b8fbe5f1893aa5ce675e5d0c 100644 (file)
@@ -473,6 +473,7 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
        .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
        .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
        .set_pwr        = sdhi0_set_pwr,
+       .tmio_caps      = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD,
 };
 
 static struct resource sdhi0_resources[] = {
@@ -511,6 +512,7 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state)
 static struct sh_mobile_sdhi_info sdhi1_info = {
        .dma_slave_tx   = SHDMA_SLAVE_SDHI1_TX,
        .dma_slave_rx   = SHDMA_SLAVE_SDHI1_RX,
+       .tmio_caps      = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD,
        .set_pwr        = sdhi1_set_pwr,
 };
 
index 9b60eaabf8f3d40c508c39589634370e8cbb1811..7504daaa85da72b26139f7930605e4f5ea8a813d 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/platform_device.h>
 #include <linux/interrupt.h>
 #include <linux/mfd/sh_mobile_sdhi.h>
+#include <linux/mmc/host.h>
 #include <linux/mfd/tmio.h>
 #include <linux/mtd/physmap.h>
 #include <linux/mtd/onenand.h>
@@ -366,6 +367,7 @@ static struct sh_mobile_sdhi_info sh7724_sdhi0_data = {
        .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
        .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
        .tmio_flags     = TMIO_MMC_WRPROTECT_DISABLE,
+       .tmio_caps      = MMC_CAP_SDIO_IRQ,
 };
 
 static struct platform_device kfr2r09_sh_sdhi0_device = {
index e79412a4049094a2610dbefc554da89384cfbce8..c00ace38db3f6e0913e35ac218a7731dcc522870 100644 (file)
@@ -1,9 +1,10 @@
 /*
- * arch/sh/boards/landisk/irq.c
+ * arch/sh/boards/mach-landisk/irq.c
  *
  * I-O DATA Device, Inc. LANDISK Support
  *
  * Copyright (C) 2005-2007 kogiidena
+ * Copyright (C) 2011 Nobuhiro Iwamatsu
  *
  * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
  * Based largely on io_se.c.
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  */
+
 #include <linux/init.h>
 #include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <mach-landisk/mach/iodata_landisk.h>
 
-static void disable_landisk_irq(struct irq_data *data)
-{
-       unsigned char mask = 0xff ^ (0x01 << (data->irq - 5));
+enum {
+       UNUSED = 0,
 
-       __raw_writeb(__raw_readb(PA_IMASK) & mask, PA_IMASK);
-}
-
-static void enable_landisk_irq(struct irq_data *data)
-{
-       unsigned char value = (0x01 << (data->irq - 5));
+       PCI_INTA, /* PCI int A */
+       PCI_INTB, /* PCI int B */
+       PCI_INTC, /* PCI int C */
+       PCI_INTD, /* PCI int D */
+       ATA,      /* ATA */
+       FATA,     /* CF */
+       POWER,    /* Power swtich */
+       BUTTON,   /* Button swtich */
+};
 
-       __raw_writeb(__raw_readb(PA_IMASK) | value, PA_IMASK);
-}
+/* Vectors for LANDISK */
+static struct intc_vect vectors_landisk[] __initdata = {
+       INTC_IRQ(PCI_INTA, IRQ_PCIINTA),
+       INTC_IRQ(PCI_INTB, IRQ_PCIINTB),
+       INTC_IRQ(PCI_INTC, IRQ_PCIINTC),
+       INTC_IRQ(PCI_INTD, IRQ_PCIINTD),
+       INTC_IRQ(ATA, IRQ_ATA),
+       INTC_IRQ(FATA, IRQ_FATA),
+       INTC_IRQ(POWER, IRQ_POWER),
+       INTC_IRQ(BUTTON, IRQ_BUTTON),
+};
 
-static struct irq_chip landisk_irq_chip __read_mostly = {
-       .name           = "LANDISK",
-       .irq_mask       = disable_landisk_irq,
-       .irq_unmask     = enable_landisk_irq,
+/* IRLMSK mask register layout for LANDISK */
+static struct intc_mask_reg mask_registers_landisk[] __initdata = {
+       { PA_IMASK, 0, 8, /* IRLMSK */
+         {  BUTTON, POWER, FATA, ATA,
+            PCI_INTD, PCI_INTC, PCI_INTB, PCI_INTA,
+         }
+       },
 };
 
+static DECLARE_INTC_DESC(intc_desc_landisk, "landisk", vectors_landisk, NULL,
+                       mask_registers_landisk, NULL, NULL);
 /*
  * Initialize IRQ setting
  */
 void __init init_landisk_IRQ(void)
 {
-       int i;
-
-       for (i = 5; i < 14; i++) {
-               disable_irq_nosync(i);
-               set_irq_chip_and_handler_name(i, &landisk_irq_chip,
-                                             handle_level_irq, "level");
-               enable_landisk_irq(irq_get_irq_data(i));
-       }
+       register_intc_controller(&intc_desc_landisk);
        __raw_writeb(0x00, PA_PWRINT_CLR);
 }
index 50337acc18c5aa9d80b9e0fa832c7c9da57a7487..94186cf079b635a882620eadb1e3ce88b4359a30 100644 (file)
@@ -21,8 +21,6 @@
 #include <mach-landisk/mach/iodata_landisk.h>
 #include <asm/io.h>
 
-void init_landisk_IRQ(void);
-
 static void landisk_power_off(void)
 {
         __raw_writeb(0x01, PA_SHUTDOWN);
@@ -83,7 +81,7 @@ static int __init landisk_devices_setup(void)
                                    ARRAY_SIZE(landisk_devices));
 }
 
-__initcall(landisk_devices_setup);
+device_initcall(landisk_devices_setup);
 
 static void __init landisk_setup(char **cmdline_p)
 {
index c8acfec986955046db7b22cf7615f769a3613b07..03a7ffe729d534b61efd0cf7f3e8d23ae920fca3 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/input.h>
 #include <linux/input/sh_keysc.h>
 #include <linux/mfd/sh_mobile_sdhi.h>
+#include <linux/mmc/host.h>
 #include <linux/mtd/physmap.h>
 #include <linux/mtd/nand.h>
 #include <linux/i2c.h>
@@ -410,6 +411,7 @@ static struct resource sdhi_cn9_resources[] = {
 static struct sh_mobile_sdhi_info sh7724_sdhi_data = {
        .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
        .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
+       .tmio_caps      = MMC_CAP_SDIO_IRQ,
 };
 
 static struct platform_device sdhi_cn9_device = {
index b84df6a3a93c3af0c225c21fb3a3e594c4bffa6c..4b98a5251f833f5e2eda2013e656a95a5fb3c81a 100644 (file)
@@ -258,7 +258,7 @@ static int __init rts7751r2d_devices_setup(void)
        return platform_add_devices(rts7751r2d_devices,
                                    ARRAY_SIZE(rts7751r2d_devices));
 }
-__initcall(rts7751r2d_devices_setup);
+device_initcall(rts7751r2d_devices_setup);
 
 static void rts7751r2d_power_off(void)
 {
index 75e4ddbbec3e238c0c04caf91ab745e2552d7ef6..1521aa75ee3ac0517a2094c27bb448e31ccbbd99 100644 (file)
 #include <linux/i2c.h>
 #include <linux/irq.h>
 #include <linux/clk.h>
+#include <linux/clkdev.h>
 #include <mach/fpga.h>
 #include <mach/irq.h>
 #include <asm/machvec.h>
 #include <asm/heartbeat.h>
 #include <asm/sizes.h>
 #include <asm/clock.h>
-#include <asm/clkdev.h>
 #include <asm/reboot.h>
 #include <asm/smp-ops.h>
 
@@ -135,7 +135,7 @@ static int __init sdk7786_devices_setup(void)
 
        return sdk7786_i2c_setup();
 }
-__initcall(sdk7786_devices_setup);
+device_initcall(sdk7786_devices_setup);
 
 static int sdk7786_mode_pins(void)
 {
index 33039e0dc5680f24de1b07e9107639bc1b63c116..8ab8330e3fd12f2551a6166e743c78b4ae3f3bfb 100644 (file)
@@ -77,7 +77,7 @@ static int __init se7206_devices_setup(void)
 {
        return platform_add_devices(se7206_devices, ARRAY_SIZE(se7206_devices));
 }
-__initcall(se7206_devices_setup);
+device_initcall(se7206_devices_setup);
 
 static int se7206_mode_pins(void)
 {
index 527a0cd956b55e87cf785fbc885d1b39dcffac55..6dc7407f2cd0a616a79c788644a74ee6d260cb93 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/mfd/sh_mobile_sdhi.h>
+#include <linux/mmc/host.h>
 #include <linux/mtd/physmap.h>
 #include <linux/delay.h>
 #include <linux/smc91x.h>
@@ -467,6 +468,7 @@ static struct resource sdhi0_cn7_resources[] = {
 static struct sh_mobile_sdhi_info sh7724_sdhi0_data = {
        .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
        .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
+       .tmio_caps      = MMC_CAP_SDIO_IRQ,
 };
 
 static struct platform_device sdhi0_cn7_device = {
@@ -498,6 +500,7 @@ static struct resource sdhi1_cn8_resources[] = {
 static struct sh_mobile_sdhi_info sh7724_sdhi1_data = {
        .dma_slave_tx   = SHDMA_SLAVE_SDHI1_TX,
        .dma_slave_rx   = SHDMA_SLAVE_SDHI1_RX,
+       .tmio_caps      = MMC_CAP_SDIO_IRQ,
 };
 
 static struct platform_device sdhi1_cn8_device = {
index 9fbc51beb1812dfafd10a91cf7b6c02c1cabfdce..4ed60c5e221f07a03e5a1df5124fcaec7fe29922 100644 (file)
@@ -48,7 +48,7 @@ static int __init se7751_devices_setup(void)
 {
        return platform_add_devices(se7751_devices, ARRAY_SIZE(se7751_devices));
 }
-__initcall(se7751_devices_setup);
+device_initcall(se7751_devices_setup);
 
 /*
  * The Machine Vector
index af4a0c012a9648e6d01954a8c3cb1069081d4cc5..d4f79b2a6514a6a04dca6c45edccdb855c8054e9 100644 (file)
@@ -96,7 +96,7 @@ static int __init sh03_devices_setup(void)
 
        return platform_add_devices(sh03_devices, ARRAY_SIZE(sh03_devices));
 }
-__initcall(sh03_devices_setup);
+device_initcall(sh03_devices_setup);
 
 static struct sh_machine_vector mv_sh03 __initmv = {
        .mv_name                = "Interface (CTP/PCI-SH03)",
index 14863d7292cb7d81035fcc692c844412717fdff5..c84e7831018dc12023a1f5a316b7ac9444be3598 100644 (file)
@@ -21,9 +21,6 @@
 #define HIZCRC         0xa405015c
 #define DRVCRA         0xa405018a
 
-enum { MMCIF_PROGRESS_ENTER, MMCIF_PROGRESS_INIT,
-       MMCIF_PROGRESS_LOAD, MMCIF_PROGRESS_DONE };
-
 /* SH7724 specific MMCIF loader
  *
  * loads the romImage from an MMC card starting from block 512
@@ -63,7 +60,9 @@ asmlinkage void mmcif_loader(unsigned char *buf, unsigned long no_bytes)
        mmcif_update_progress(MMCIF_PROGRESS_LOAD);
 
        /* load kernel via MMCIF interface */
-       sh_mmcif_boot_slurp(MMCIF_BASE, buf, no_bytes);
+       sh_mmcif_boot_do_read(MMCIF_BASE, 512,
+                             (no_bytes + SH_MMCIF_BBS - 1) / SH_MMCIF_BBS,
+                             buf);
 
        /* disable clock to the MMCIF hardware block */
        __raw_writel(__raw_readl(MSTPCR2) | 0x20000000, MSTPCR2);
index 273f3fa198f74004f17b438b13b6b7f1fea5ef17..5f7f667b9f3b94e49e3a5ccb13cd911369629500 100644 (file)
@@ -39,21 +39,15 @@ CONFIG_IPV6=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 # CONFIG_FW_LOADER is not set
 CONFIG_BLK_DEV_RAM=y
-# CONFIG_MISC_DEVICES is not set
 CONFIG_NETDEVICES=y
-CONFIG_PHYLIB=y
 CONFIG_VITESSE_PHY=y
-CONFIG_MDIO_BITBANG=y
 CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
+CONFIG_SH_ETH=y
 # CONFIG_NETDEV_10000 is not set
 # CONFIG_WLAN is not set
 # CONFIG_KEYBOARD_ATKBD is not set
 # CONFIG_MOUSE_PS2 is not set
 # CONFIG_SERIO is not set
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=2
 CONFIG_SERIAL_SH_SCI=y
 CONFIG_SERIAL_SH_SCI_NR_UARTS=3
 CONFIG_SERIAL_SH_SCI_CONSOLE=y
@@ -63,7 +57,6 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y
 # CONFIG_USB_SUPPORT is not set
 CONFIG_EXT2_FS=y
 CONFIG_EXT3_FS=y
-CONFIG_INOTIFY=y
 CONFIG_ISO9660_FS=y
 CONFIG_VFAT_FS=y
 CONFIG_PROC_KCORE=y
@@ -76,10 +69,8 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_932=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_DEBUG_KERNEL=y
-# CONFIG_DETECT_SOFTLOCKUP is not set
 # CONFIG_SCHED_DEBUG is not set
 # CONFIG_DEBUG_BUGVERBOSE is not set
 CONFIG_DEBUG_INFO=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
 # CONFIG_FTRACE is not set
 # CONFIG_CRYPTO_ANSI_CPRNG is not set
index bb1a6bb5149edac820e6714256e94acae4001085..95c6e2d94a0a2b283568b5090b0d92be6dfa1da3 100644 (file)
@@ -1,9 +1,10 @@
 /*
- * arch/sh/drivers/pci/ops-landisk.c
+ * arch/sh/drivers/pci/fixups-landisk.c
  *
  * PCI initialization for the I-O DATA Device, Inc. LANDISK board
  *
  * Copyright (C) 2006 kogiidena
+ * Copyright (C) 2010 Nobuhiro Iwamatsu
  *
  * May be copied or modified under the terms of the GNU General Public
  * License.  See linux/COPYING for more information.
@@ -15,6 +16,9 @@
 #include <linux/pci.h>
 #include "pci-sh4.h"
 
+#define PCIMCR_MRSET_OFF       0xBFFFFFFF
+#define PCIMCR_RFSH_OFF                0xFFFFFFFB
+
 int pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
 {
        /*
@@ -26,9 +30,29 @@ int pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
        int irq = ((slot + pin - 1) & 0x3) + 5;
 
        if ((slot | (pin - 1)) > 0x3) {
-               printk("PCI: Bad IRQ mapping request for slot %d pin %c\n",
+               printk(KERN_WARNING "PCI: Bad IRQ mapping request for slot %d pin %c\n",
                       slot, pin - 1 + 'A');
                return -1;
        }
        return irq;
 }
+
+int pci_fixup_pcic(struct pci_channel *chan)
+{
+       unsigned long bcr1, mcr;
+
+       bcr1 = __raw_readl(SH7751_BCR1);
+       bcr1 |= 0x40080000;     /* Enable Bit 19 BREQEN, set PCIC to slave */
+       pci_write_reg(chan, bcr1, SH4_PCIBCR1);
+
+       mcr = __raw_readl(SH7751_MCR);
+       mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF;
+       pci_write_reg(chan, mcr, SH4_PCIMCR);
+
+       pci_write_reg(chan, 0x0c000000, SH7751_PCICONF5);
+       pci_write_reg(chan, 0xd0000000, SH7751_PCICONF6);
+       pci_write_reg(chan, 0x0c000000, SH4_PCILAR0);
+       pci_write_reg(chan, 0x00000000, SH4_PCILAR1);
+
+       return 0;
+}
index 89ab2c57a4c284f9b450ed4e0b95675f373e72d3..28c5aa58bb45ec73edd45a3d878704f25eb6564b 100644 (file)
  *
  * While read{b,w,l,q} and write{b,w,l,q} contain memory barriers
  * automatically, there are also __raw versions, which do not.
- *
- * Historically, we have also had ctrl_in{b,w,l,q}/ctrl_out{b,w,l,q} for
- * SuperH specific I/O (raw I/O to on-chip CPU peripherals). In practice
- * these have the same semantics as the __raw variants, and as such, all
- * new code should be using the __raw versions.
  */
 #include <linux/errno.h>
 #include <asm/cache.h>
@@ -231,52 +226,6 @@ __BUILD_IOPORT_STRING(q, u64)
 
 #endif
 
-/*
- * Legacy SuperH on-chip I/O functions
- *
- * These are all deprecated, all new (and especially cross-platform) code
- * should be using the __raw_xxx() routines directly.
- */
-static inline u8 __deprecated ctrl_inb(unsigned long addr)
-{
-       return __raw_readb(addr);
-}
-
-static inline u16 __deprecated ctrl_inw(unsigned long addr)
-{
-       return __raw_readw(addr);
-}
-
-static inline u32 __deprecated ctrl_inl(unsigned long addr)
-{
-       return __raw_readl(addr);
-}
-
-static inline u64 __deprecated ctrl_inq(unsigned long addr)
-{
-       return __raw_readq(addr);
-}
-
-static inline void __deprecated ctrl_outb(u8 v, unsigned long addr)
-{
-       __raw_writeb(v, addr);
-}
-
-static inline void __deprecated ctrl_outw(u16 v, unsigned long addr)
-{
-       __raw_writew(v, addr);
-}
-
-static inline void __deprecated ctrl_outl(u32 v, unsigned long addr)
-{
-       __raw_writel(v, addr);
-}
-
-static inline void __deprecated ctrl_outq(u64 v, unsigned long addr)
-{
-       __raw_writeq(v, addr);
-}
-
 #define IO_SPACE_LIMIT 0xffffffff
 
 /* synco on SH-4A, otherwise a nop */
@@ -341,7 +290,15 @@ __ioremap_29bit(phys_addr_t offset, unsigned long size, pgprot_t prot)
         * mapping must be done by the PMB or by using page tables.
         */
        if (likely(PXSEG(offset) < P3SEG && PXSEG(last_addr) < P3SEG)) {
-               if (unlikely(pgprot_val(prot) & _PAGE_CACHABLE))
+               u64 flags = pgprot_val(prot);
+
+               /*
+                * Anything using the legacy PTEA space attributes needs
+                * to be kicked down to page table mappings.
+                */
+               if (unlikely(flags & _PAGE_PCC_MASK))
+                       return NULL;
+               if (unlikely(flags & _PAGE_CACHABLE))
                        return (void __iomem *)P1SEGADDR(offset);
 
                return (void __iomem *)P2SEGADDR(offset);
index dd5d6e5bf204a74ced7056fe13719abcbe661d59..57c5c3d0f39fe4b1bfdff174b544045a9c8baac8 100644 (file)
@@ -31,6 +31,7 @@ struct sh_machine_vector {
        int (*mv_mode_pins)(void);
 
        void (*mv_mem_init)(void);
+       void (*mv_mem_reserve)(void);
 };
 
 extern struct sh_machine_vector sh_mv;
index 43528ec656bad5fc13db8d8c359d88c100969d57..b799fe71114cf3fece0043a95a5eb45c505d578a 100644 (file)
 /* Wrapper for extended mode pgprot twiddling */
 #define _PAGE_EXT(x)           ((unsigned long long)(x) << 32)
 
+#ifdef CONFIG_X2TLB
+#define _PAGE_PCC_MASK 0x00000000      /* No legacy PTEA support */
+#else
+
 /* software: moves to PTEA.TC (Timing Control) */
 #define _PAGE_PCC_AREA5        0x00000000      /* use BSC registers for area5 */
 #define _PAGE_PCC_AREA6        0x80000000      /* use BSC registers for area6 */
@@ -89,7 +93,8 @@
 #define _PAGE_PCC_ATR8 0x60000000      /* Attribute Memory space, 8 bit bus */
 #define _PAGE_PCC_ATR16        0x60000001      /* Attribute Memory space, 6 bit bus */
 
-#ifndef CONFIG_X2TLB
+#define _PAGE_PCC_MASK 0xe0000001
+
 /* copy the ptea attributes */
 static inline unsigned long copy_ptea_attributes(unsigned long x)
 {
@@ -231,13 +236,7 @@ static inline unsigned long copy_ptea_attributes(unsigned long x)
                                           _PAGE_EXT_KERN_EXEC))
 
 #define PAGE_KERNEL_PCC(slot, type) \
-                       __pgprot(_PAGE_PRESENT | _PAGE_DIRTY | \
-                                _PAGE_ACCESSED | _PAGE_FLAGS_HARD | \
-                                _PAGE_EXT(_PAGE_EXT_KERN_READ | \
-                                          _PAGE_EXT_KERN_WRITE | \
-                                          _PAGE_EXT_KERN_EXEC) \
-                                (slot ? _PAGE_PCC_AREA5 : _PAGE_PCC_AREA6) | \
-                                (type))
+                       __pgprot(0)
 
 #elif defined(CONFIG_MMU) /* SH-X TLB */
 #define PAGE_NONE      __pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE | \
index c9e7cbc4768a6428f5a7cf4696cf69333175dfd9..9c7bdfcaebbd9642a490de3ca011e53c0d9a85ec 100644 (file)
@@ -35,7 +35,7 @@ enum cpu_type {
        CPU_SH7723, CPU_SH7724, CPU_SH7757, CPU_SHX3,
 
        /* SH4AL-DSP types */
-       CPU_SH7343, CPU_SH7722, CPU_SH7366,
+       CPU_SH7343, CPU_SH7722, CPU_SH7366, CPU_SH7372,
 
        /* SH-5 types */
         CPU_SH5_101, CPU_SH5_103,
index e3c73cdd8c909444fa64865e24bffc5b7ed8a0d9..900f8d72ffe2d86e902e590d53b180d73871da7a 100644 (file)
@@ -194,15 +194,17 @@ extern unsigned long get_wchan(struct task_struct *p);
 #define KSTK_ESP(tsk)  (task_pt_regs(tsk)->regs[15])
 
 #if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4)
+
 #define PREFETCH_STRIDE                L1_CACHE_BYTES
 #define ARCH_HAS_PREFETCH
 #define ARCH_HAS_PREFETCHW
-static inline void prefetch(void *x)
+
+static inline void prefetch(const void *x)
 {
        __builtin_prefetch(x, 0, 3);
 }
 
-static inline void prefetchw(void *x)
+static inline void prefetchw(const void *x)
 {
        __builtin_prefetch(x, 1, 3);
 }
index 6fb04ab38b9f2283ebd672f10f51f4a0ab5cc613..f432773a957187e93524ca2b5222056632d26f3c 100644 (file)
@@ -2,7 +2,7 @@
 #define __ASM_SH_IODATA_LANDISK_H
 
 /*
- * linux/include/asm-sh/landisk/iodata_landisk.h
+ * arch/sh/include/mach-landisk/mach/iodata_landisk.h
  *
  * Copyright (C) 2000  Atom Create Engineering Co., Ltd.
  *
@@ -27,7 +27,7 @@
 
 #define IRQ_PCIINTA    5               /* PCI INTA IRQ */
 #define IRQ_PCIINTB    6               /* PCI INTB IRQ */
-#define IRQ_PCIINDC    7               /* PCI INTC IRQ */
+#define IRQ_PCIINTC    7               /* PCI INTC IRQ */
 #define IRQ_PCIINTD    8               /* PCI INTD IRQ */
 #define IRQ_ATA                9               /* ATA IRQ */
 #define IRQ_FATA       10              /* FATA IRQ */
@@ -35,6 +35,8 @@
 #define IRQ_BUTTON     12              /* USL-5P Button IRQ */
 #define IRQ_FAULT      13              /* USL-5P Fault  IRQ */
 
+void init_landisk_IRQ(void);
+
 #define __IO_PREFIX landisk
 #include <asm/io_generic.h>
 
index e80a936f409a1743d16bff1c88749b840abb0b85..f47be8727b3bc9b41f930ea7938679df2e21f001 100644 (file)
@@ -25,7 +25,7 @@ static const char *cpu_name[] = {
        [CPU_SH5_101]   = "SH5-101",    [CPU_SH5_103]   = "SH5-103",
        [CPU_MXG]       = "MX-G",       [CPU_SH7723]    = "SH7723",
        [CPU_SH7366]    = "SH7366",     [CPU_SH7724]    = "SH7724",
-       [CPU_SH_NONE]   = "Unknown"
+       [CPU_SH7372]    = "SH7372",     [CPU_SH_NONE]   = "Unknown"
 };
 
 const char *get_cpu_subtype(struct sh_cpuinfo *c)
index b93458f33b74bad99e7a29721a0f2c25e78194a5..971cf0fce4f5ce7988f0f0aee831f6a6c38ee27b 100644 (file)
@@ -151,8 +151,14 @@ void __cpuinit cpu_probe(void)
                        boot_cpu_data.flags |= CPU_HAS_L2_CACHE;
                        break;
                case 0x10:
+               case 0x11:
                        boot_cpu_data.type = CPU_SH7757;
                        break;
+               case 0xd0:
+               case 0x40: /* yon-ten-go */
+                       boot_cpu_data.type = CPU_SH7372;
+                       break;
+
                }
                break;
        case 0x4000:    /* 1st cut */
index 0d1be5d1fb86976612474f860e044f4efc78dd84..1b8848317e9c1bc65b90b7aa101215f9592f30f6 100644 (file)
@@ -368,6 +368,8 @@ void __init plat_early_device_setup(void)
 
 enum {
        UNUSED = 0,
+       ENABLED,
+       DISABLED,
 
        /* interrupt sources */
        IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
@@ -383,15 +385,13 @@ enum {
        I2C0_ALI, I2C0_TACKI, I2C0_WAITI, I2C0_DTEI,
        I2C1_ALI, I2C1_TACKI, I2C1_WAITI, I2C1_DTEI,
        SIM_TEI, SIM_TXI, SIM_RXI, SIM_ERI,
-       IRDA,
-       SDHI0, SDHI1, SDHI2, SDHI3,
-       CMT, TSIF, SIU,
+       IRDA, SDHI, CMT, TSIF, SIU,
        TMU0, TMU1, TMU2,
        JPU, LCDC,
 
        /* interrupt groups */
 
-       DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C0, I2C1, SIM, SDHI, USB,
+       DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C0, I2C1, SIM, USB,
 };
 
 static struct intc_vect vectors[] __initdata = {
@@ -420,8 +420,8 @@ static struct intc_vect vectors[] __initdata = {
        INTC_VECT(FLCTL_FLTREQ0I, 0xdc0), INTC_VECT(FLCTL_FLTREQ1I, 0xde0),
        INTC_VECT(I2C0_ALI, 0xe00), INTC_VECT(I2C0_TACKI, 0xe20),
        INTC_VECT(I2C0_WAITI, 0xe40), INTC_VECT(I2C0_DTEI, 0xe60),
-       INTC_VECT(SDHI0, 0xe80), INTC_VECT(SDHI1, 0xea0),
-       INTC_VECT(SDHI2, 0xec0), INTC_VECT(SDHI3, 0xee0),
+       INTC_VECT(SDHI, 0xe80), INTC_VECT(SDHI, 0xea0),
+       INTC_VECT(SDHI, 0xec0), INTC_VECT(SDHI, 0xee0),
        INTC_VECT(CMT, 0xf00), INTC_VECT(TSIF, 0xf20),
        INTC_VECT(SIU, 0xf80),
        INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
@@ -439,7 +439,6 @@ static struct intc_group groups[] __initdata = {
        INTC_GROUP(I2C0, I2C0_ALI, I2C0_TACKI, I2C0_WAITI, I2C0_DTEI),
        INTC_GROUP(I2C1, I2C1_ALI, I2C1_TACKI, I2C1_WAITI, I2C1_DTEI),
        INTC_GROUP(SIM, SIM_TEI, SIM_TXI, SIM_RXI, SIM_ERI),
-       INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3),
        INTC_GROUP(USB, USBI0, USBI1),
 };
 
@@ -460,7 +459,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {
          { I2C0_DTEI, I2C0_WAITI, I2C0_TACKI, I2C0_ALI,
            FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },
        { 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */
-         { SDHI3, SDHI2, SDHI1, SDHI0, 0, 0, 0, SIU } },
+         { DISABLED, ENABLED, ENABLED, ENABLED, 0, 0, 0, SIU } },
        { 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */
          { 0, 0, 0, CMT, 0, USBI1, USBI0 } },
        { 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */
@@ -496,9 +495,13 @@ static struct intc_mask_reg ack_registers[] __initdata = {
          { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
 };
 
-static DECLARE_INTC_DESC_ACK(intc_desc, "sh7343", vectors, groups,
-                            mask_registers, prio_registers, sense_registers,
-                            ack_registers);
+static struct intc_desc intc_desc __initdata = {
+       .name = "sh7343",
+       .force_enable = ENABLED,
+       .force_disable = DISABLED,
+       .hw = INTC_HW_DESC(vectors, groups, mask_registers,
+                          prio_registers, sense_registers, ack_registers),
+};
 
 void __init plat_irq_setup(void)
 {
index f96b7eeb21ebf4b5f22ddf6cb18e68dd66814913..82616af64d62279465402d4d296171ee8f34e6be 100644 (file)
@@ -321,6 +321,8 @@ void __init plat_early_device_setup(void)
 
 enum {
        UNUSED=0,
+       ENABLED,
+       DISABLED,
 
        /* interrupt sources */
        IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
@@ -334,14 +336,13 @@ enum {
        DENC, MSIOF,
        FLCTL_FLSTEI, FLCTL_FLENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I,
        I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI,
-       SDHI0, SDHI1, SDHI2, SDHI3,
-       CMT, TSIF, SIU,
+       SDHI, CMT, TSIF, SIU,
        TMU0, TMU1, TMU2,
        VEU2, LCDC,
 
        /* interrupt groups */
 
-       DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C, SDHI,
+       DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C,
 };
 
 static struct intc_vect vectors[] __initdata = {
@@ -366,8 +367,8 @@ static struct intc_vect vectors[] __initdata = {
        INTC_VECT(FLCTL_FLTREQ0I, 0xdc0), INTC_VECT(FLCTL_FLTREQ1I, 0xde0),
        INTC_VECT(I2C_ALI, 0xe00), INTC_VECT(I2C_TACKI, 0xe20),
        INTC_VECT(I2C_WAITI, 0xe40), INTC_VECT(I2C_DTEI, 0xe60),
-       INTC_VECT(SDHI0, 0xe80), INTC_VECT(SDHI1, 0xea0),
-       INTC_VECT(SDHI2, 0xec0), INTC_VECT(SDHI3, 0xee0),
+       INTC_VECT(SDHI, 0xe80), INTC_VECT(SDHI, 0xea0),
+       INTC_VECT(SDHI, 0xec0), INTC_VECT(SDHI, 0xee0),
        INTC_VECT(CMT, 0xf00), INTC_VECT(TSIF, 0xf20),
        INTC_VECT(SIU, 0xf80),
        INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
@@ -383,7 +384,6 @@ static struct intc_group groups[] __initdata = {
        INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLENDI,
                   FLCTL_FLTREQ0I, FLCTL_FLTREQ1I),
        INTC_GROUP(I2C, I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI),
-       INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3),
 };
 
 static struct intc_mask_reg mask_registers[] __initdata = {
@@ -405,7 +405,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {
          { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,
            FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },
        { 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */
-         { SDHI3, SDHI2, SDHI1, SDHI0, 0, 0, 0, SIU } },
+         { DISABLED, ENABLED, ENABLED, ENABLED, 0, 0, 0, SIU } },
        { 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */
          { 0, 0, 0, CMT, 0, USB, } },
        { 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */
@@ -443,9 +443,13 @@ static struct intc_mask_reg ack_registers[] __initdata = {
          { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
 };
 
-static DECLARE_INTC_DESC_ACK(intc_desc, "sh7366", vectors, groups,
-                            mask_registers, prio_registers, sense_registers,
-                            ack_registers);
+static struct intc_desc intc_desc __initdata = {
+       .name = "sh7366",
+       .force_enable = ENABLED,
+       .force_disable = DISABLED,
+       .hw = INTC_HW_DESC(vectors, groups, mask_registers,
+                          prio_registers, sense_registers, ack_registers),
+};
 
 void __init plat_irq_setup(void)
 {
index 73737d00e2e761a668e131b6075404b50a6253ee..5813d8023619d1f0e0da06bb51808017d30f2d97 100644 (file)
@@ -705,7 +705,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {
          { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,
            FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },
        { 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */
-         { DISABLED, DISABLED, ENABLED, ENABLED, 0, 0, TWODG, SIU } },
+         { DISABLED, ENABLED, ENABLED, ENABLED, 0, 0, TWODG, SIU } },
        { 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */
          { 0, 0, 0, CMT, 0, USB_USBI1, USB_USBI0, } },
        { 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */
index 264983ddc8da299ba9fc8cb0a01cb1056fb50ab0..072382280f96b8650c6f565bc181c60275152a53 100644 (file)
@@ -731,7 +731,7 @@ static struct intc_group groups[] __initdata = {
 static struct intc_mask_reg mask_registers[] __initdata = {
        { 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */
          { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0,
-           0, DISABLED, ENABLED, ENABLED } },
+           0, ENABLED, ENABLED, ENABLED } },
        { 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */
          { VIO_VOUI, VIO_VEU2HI,VIO_BEUI,VIO_CEUI,DMAC0A_DEI3,DMAC0A_DEI2,DMAC0A_DEI1,DMAC0A_DEI0 } },
        { 0xa4080088, 0xa40800c8, 8, /* IMR2 / IMCR2 */
@@ -748,7 +748,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {
          { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,
            FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } },
        { 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */
-         { 0, DISABLED, ENABLED, ENABLED,
+         { 0, ENABLED, ENABLED, ENABLED,
            0, 0, SCIFA_SCIFA2, SIU_SIUI } },
        { 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */
          { 0, 0, 0, CMT_CMTI, 0, 0, USB_USI0,0 } },
index 4a8b751c5f17aaeadab6468f583985fda58554bf..0333fe9e3881913e82c5458b45e4f6aef5d867dd 100644 (file)
@@ -1156,7 +1156,7 @@ static struct intc_group groups[] __initdata = {
 static struct intc_mask_reg mask_registers[] __initdata = {
        { 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */
          { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0,
-           0, DISABLED, ENABLED, ENABLED } },
+           0, ENABLED, ENABLED, ENABLED } },
        { 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */
          { VIO_VOU, VIO_VEU1, VIO_BEU0, VIO_CEU0,
            DMAC0A_DEI3, DMAC0A_DEI2, DMAC0A_DEI1, DMAC0A_DEI0 } },
@@ -1178,7 +1178,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {
          { I2C0_DTEI, I2C0_WAITI, I2C0_TACKI, I2C0_ALI,
            I2C1_DTEI, I2C1_WAITI, I2C1_TACKI, I2C1_ALI } },
        { 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */
-         { DISABLED, DISABLED, ENABLED, ENABLED,
+         { DISABLED, ENABLED, ENABLED, ENABLED,
            0, 0, SCIFA5, FSI } },
        { 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */
          { 0, 0, 0, CMT, 0, USB1, USB0, 0 } },
index 3385b28acaac5f072b8b773c810b6ad5a4e7ae5b..0d3f912e3334b1ecd07e5ec7c34b9ee84326bb56 100644 (file)
@@ -2,7 +2,7 @@
  * linux/arch/sh/mm/init.c
  *
  *  Copyright (C) 1999  Niibe Yutaka
- *  Copyright (C) 2002 - 2010  Paul Mundt
+ *  Copyright (C) 2002 - 2011  Paul Mundt
  *
  *  Based on linux/arch/i386/mm/init.c:
  *   Copyright (C) 1995  Linus Torvalds
@@ -325,11 +325,17 @@ void __init paging_init(void)
        int nid;
 
        memblock_init();
-
        sh_mv.mv_mem_init();
 
        early_reserve_mem();
 
+       /*
+        * Once the early reservations are out of the way, give the
+        * platforms a chance to kick out some memory.
+        */
+       if (sh_mv.mv_mem_reserve)
+               sh_mv.mv_mem_reserve();
+
        memblock_enforce_memory_limit(memory_limit);
        memblock_analyze();
 
index 44fc5348fd5d7c33dec9f28f1c3227904f8776c1..bf173502d74418784c0c12128b43419a1242ceb3 100644 (file)
@@ -104,6 +104,9 @@ static inline void sh_mmcif_writel(void __iomem *addr, int reg, u32 val)
 
 #define SH_MMCIF_BBS 512 /* boot block size */
 
+enum { MMCIF_PROGRESS_ENTER, MMCIF_PROGRESS_INIT,
+       MMCIF_PROGRESS_LOAD, MMCIF_PROGRESS_DONE };
+
 static inline void sh_mmcif_boot_cmd_send(void __iomem *base,
                                          unsigned long cmd, unsigned long arg)
 {
@@ -166,6 +169,17 @@ static inline int sh_mmcif_boot_do_read(void __iomem *base,
        unsigned long k;
        int ret = 0;
 
+       /* In data transfer mode: Set clock to Bus clock/4 (about 20Mhz) */
+       sh_mmcif_writel(base, MMCIF_CE_CLK_CTRL,
+                       CLK_ENABLE | CLKDIV_4 | SRSPTO_256 |
+                       SRBSYTO_29 | SRWDTO_29 | SCCSTO_29);
+
+       /* CMD9 - Get CSD */
+       sh_mmcif_boot_cmd(base, 0x09806000, 0x00010000);
+
+       /* CMD7 - Select the card */
+       sh_mmcif_boot_cmd(base, 0x07400000, 0x00010000);
+
        /* CMD16 - Set the block size */
        sh_mmcif_boot_cmd(base, 0x10400000, SH_MMCIF_BBS);
 
@@ -209,27 +223,4 @@ static inline void sh_mmcif_boot_init(void __iomem *base)
        sh_mmcif_boot_cmd(base, 0x03400040, 0x00010000);
 }
 
-static inline void sh_mmcif_boot_slurp(void __iomem *base,
-                                      unsigned char *buf,
-                                      unsigned long no_bytes)
-{
-       unsigned long tmp;
-
-       /* In data transfer mode: Set clock to Bus clock/4 (about 20Mhz) */
-       sh_mmcif_writel(base, MMCIF_CE_CLK_CTRL,
-                       CLK_ENABLE | CLKDIV_4 | SRSPTO_256 |
-                       SRBSYTO_29 | SRWDTO_29 | SCCSTO_29);
-
-       /* CMD9 - Get CSD */
-       sh_mmcif_boot_cmd(base, 0x09806000, 0x00010000);
-
-       /* CMD7 - Select the card */
-       sh_mmcif_boot_cmd(base, 0x07400000, 0x00010000);
-
-       tmp = no_bytes / SH_MMCIF_BBS;
-       tmp += (no_bytes % SH_MMCIF_BBS) ? 1 : 0;
-
-       sh_mmcif_boot_do_read(base, 512, tmp, buf);
-}
-
 #endif /* __SH_MMCIF_H__ */