1*56f86e39SMasahiro Yamada /* 2*56f86e39SMasahiro Yamada * (C) Copyright 2009 3*56f86e39SMasahiro Yamada * Marvell Semiconductor <www.marvell.com> 4*56f86e39SMasahiro Yamada * Written-by: Prafulla Wadaskar <prafulla@marvell.com> 5*56f86e39SMasahiro Yamada * 6*56f86e39SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 7*56f86e39SMasahiro Yamada */ 8*56f86e39SMasahiro Yamada 9*56f86e39SMasahiro Yamada #include <common.h> 10*56f86e39SMasahiro Yamada #include <netdev.h> 11*56f86e39SMasahiro Yamada #include <asm/cache.h> 12*56f86e39SMasahiro Yamada #include <asm/io.h> 13*56f86e39SMasahiro Yamada #include <asm/arch/cpu.h> 14*56f86e39SMasahiro Yamada #include <asm/arch/soc.h> 15*56f86e39SMasahiro Yamada #include <mvebu_mmc.h> 16*56f86e39SMasahiro Yamada 17*56f86e39SMasahiro Yamada void reset_cpu(unsigned long ignored) 18*56f86e39SMasahiro Yamada { 19*56f86e39SMasahiro Yamada struct kwcpu_registers *cpureg = 20*56f86e39SMasahiro Yamada (struct kwcpu_registers *)KW_CPU_REG_BASE; 21*56f86e39SMasahiro Yamada 22*56f86e39SMasahiro Yamada writel(readl(&cpureg->rstoutn_mask) | (1 << 2), 23*56f86e39SMasahiro Yamada &cpureg->rstoutn_mask); 24*56f86e39SMasahiro Yamada writel(readl(&cpureg->sys_soft_rst) | 1, 25*56f86e39SMasahiro Yamada &cpureg->sys_soft_rst); 26*56f86e39SMasahiro Yamada while (1) ; 27*56f86e39SMasahiro Yamada } 28*56f86e39SMasahiro Yamada 29*56f86e39SMasahiro Yamada /* 30*56f86e39SMasahiro Yamada * Window Size 31*56f86e39SMasahiro Yamada * Used with the Base register to set the address window size and location. 32*56f86e39SMasahiro Yamada * Must be programmed from LSB to MSB as sequence of ones followed by 33*56f86e39SMasahiro Yamada * sequence of zeros. The number of ones specifies the size of the window in 34*56f86e39SMasahiro Yamada * 64 KByte granularity (e.g., a value of 0x00FF specifies 256 = 16 MByte). 35*56f86e39SMasahiro Yamada * NOTE: A value of 0x0 specifies 64-KByte size. 36*56f86e39SMasahiro Yamada */ 37*56f86e39SMasahiro Yamada unsigned int kw_winctrl_calcsize(unsigned int sizeval) 38*56f86e39SMasahiro Yamada { 39*56f86e39SMasahiro Yamada int i; 40*56f86e39SMasahiro Yamada unsigned int j = 0; 41*56f86e39SMasahiro Yamada u32 val = sizeval >> 1; 42*56f86e39SMasahiro Yamada 43*56f86e39SMasahiro Yamada for (i = 0; val >= 0x10000; i++) { 44*56f86e39SMasahiro Yamada j |= (1 << i); 45*56f86e39SMasahiro Yamada val = val >> 1; 46*56f86e39SMasahiro Yamada } 47*56f86e39SMasahiro Yamada return (0x0000ffff & j); 48*56f86e39SMasahiro Yamada } 49*56f86e39SMasahiro Yamada 50*56f86e39SMasahiro Yamada /* 51*56f86e39SMasahiro Yamada * kw_config_adr_windows - Configure address Windows 52*56f86e39SMasahiro Yamada * 53*56f86e39SMasahiro Yamada * There are 8 address windows supported by Kirkwood Soc to addess different 54*56f86e39SMasahiro Yamada * devices. Each window can be configured for size, BAR and remap addr 55*56f86e39SMasahiro Yamada * Below configuration is standard for most of the cases 56*56f86e39SMasahiro Yamada * 57*56f86e39SMasahiro Yamada * If remap function not used, remap_lo must be set as base 58*56f86e39SMasahiro Yamada * 59*56f86e39SMasahiro Yamada * Reference Documentation: 60*56f86e39SMasahiro Yamada * Mbus-L to Mbus Bridge Registers Configuration. 61*56f86e39SMasahiro Yamada * (Sec 25.1 and 25.3 of Datasheet) 62*56f86e39SMasahiro Yamada */ 63*56f86e39SMasahiro Yamada int kw_config_adr_windows(void) 64*56f86e39SMasahiro Yamada { 65*56f86e39SMasahiro Yamada struct kwwin_registers *winregs = 66*56f86e39SMasahiro Yamada (struct kwwin_registers *)KW_CPU_WIN_BASE; 67*56f86e39SMasahiro Yamada 68*56f86e39SMasahiro Yamada /* Window 0: PCIE MEM address space */ 69*56f86e39SMasahiro Yamada writel(KWCPU_WIN_CTRL_DATA(1024 * 1024 * 256, KWCPU_TARGET_PCIE, 70*56f86e39SMasahiro Yamada KWCPU_ATTR_PCIE_MEM, KWCPU_WIN_ENABLE), &winregs[0].ctrl); 71*56f86e39SMasahiro Yamada 72*56f86e39SMasahiro Yamada writel(KW_DEFADR_PCI_MEM, &winregs[0].base); 73*56f86e39SMasahiro Yamada writel(KW_DEFADR_PCI_MEM, &winregs[0].remap_lo); 74*56f86e39SMasahiro Yamada writel(0x0, &winregs[0].remap_hi); 75*56f86e39SMasahiro Yamada 76*56f86e39SMasahiro Yamada /* Window 1: PCIE IO address space */ 77*56f86e39SMasahiro Yamada writel(KWCPU_WIN_CTRL_DATA(1024 * 64, KWCPU_TARGET_PCIE, 78*56f86e39SMasahiro Yamada KWCPU_ATTR_PCIE_IO, KWCPU_WIN_ENABLE), &winregs[1].ctrl); 79*56f86e39SMasahiro Yamada writel(KW_DEFADR_PCI_IO, &winregs[1].base); 80*56f86e39SMasahiro Yamada writel(KW_DEFADR_PCI_IO_REMAP, &winregs[1].remap_lo); 81*56f86e39SMasahiro Yamada writel(0x0, &winregs[1].remap_hi); 82*56f86e39SMasahiro Yamada 83*56f86e39SMasahiro Yamada /* Window 2: NAND Flash address space */ 84*56f86e39SMasahiro Yamada writel(KWCPU_WIN_CTRL_DATA(1024 * 1024 * 128, KWCPU_TARGET_MEMORY, 85*56f86e39SMasahiro Yamada KWCPU_ATTR_NANDFLASH, KWCPU_WIN_ENABLE), &winregs[2].ctrl); 86*56f86e39SMasahiro Yamada writel(KW_DEFADR_NANDF, &winregs[2].base); 87*56f86e39SMasahiro Yamada writel(KW_DEFADR_NANDF, &winregs[2].remap_lo); 88*56f86e39SMasahiro Yamada writel(0x0, &winregs[2].remap_hi); 89*56f86e39SMasahiro Yamada 90*56f86e39SMasahiro Yamada /* Window 3: SPI Flash address space */ 91*56f86e39SMasahiro Yamada writel(KWCPU_WIN_CTRL_DATA(1024 * 1024 * 128, KWCPU_TARGET_MEMORY, 92*56f86e39SMasahiro Yamada KWCPU_ATTR_SPIFLASH, KWCPU_WIN_ENABLE), &winregs[3].ctrl); 93*56f86e39SMasahiro Yamada writel(KW_DEFADR_SPIF, &winregs[3].base); 94*56f86e39SMasahiro Yamada writel(KW_DEFADR_SPIF, &winregs[3].remap_lo); 95*56f86e39SMasahiro Yamada writel(0x0, &winregs[3].remap_hi); 96*56f86e39SMasahiro Yamada 97*56f86e39SMasahiro Yamada /* Window 4: BOOT Memory address space */ 98*56f86e39SMasahiro Yamada writel(KWCPU_WIN_CTRL_DATA(1024 * 1024 * 128, KWCPU_TARGET_MEMORY, 99*56f86e39SMasahiro Yamada KWCPU_ATTR_BOOTROM, KWCPU_WIN_ENABLE), &winregs[4].ctrl); 100*56f86e39SMasahiro Yamada writel(KW_DEFADR_BOOTROM, &winregs[4].base); 101*56f86e39SMasahiro Yamada 102*56f86e39SMasahiro Yamada /* Window 5: Security SRAM address space */ 103*56f86e39SMasahiro Yamada writel(KWCPU_WIN_CTRL_DATA(1024 * 64, KWCPU_TARGET_SASRAM, 104*56f86e39SMasahiro Yamada KWCPU_ATTR_SASRAM, KWCPU_WIN_ENABLE), &winregs[5].ctrl); 105*56f86e39SMasahiro Yamada writel(KW_DEFADR_SASRAM, &winregs[5].base); 106*56f86e39SMasahiro Yamada 107*56f86e39SMasahiro Yamada /* Window 6-7: Disabled */ 108*56f86e39SMasahiro Yamada writel(KWCPU_WIN_DISABLE, &winregs[6].ctrl); 109*56f86e39SMasahiro Yamada writel(KWCPU_WIN_DISABLE, &winregs[7].ctrl); 110*56f86e39SMasahiro Yamada 111*56f86e39SMasahiro Yamada return 0; 112*56f86e39SMasahiro Yamada } 113*56f86e39SMasahiro Yamada 114*56f86e39SMasahiro Yamada /* 115*56f86e39SMasahiro Yamada * SYSRSTn Duration Counter Support 116*56f86e39SMasahiro Yamada * 117*56f86e39SMasahiro Yamada * Kirkwood SoC implements a hardware-based SYSRSTn duration counter. 118*56f86e39SMasahiro Yamada * When SYSRSTn is asserted low, a SYSRSTn duration counter is running. 119*56f86e39SMasahiro Yamada * The SYSRSTn duration counter is useful for implementing a manufacturer 120*56f86e39SMasahiro Yamada * or factory reset. Upon a long reset assertion that is greater than a 121*56f86e39SMasahiro Yamada * pre-configured environment variable value for sysrstdelay, 122*56f86e39SMasahiro Yamada * The counter value is stored in the SYSRSTn Length Counter Register 123*56f86e39SMasahiro Yamada * The counter is based on the 25-MHz reference clock (40ns) 124*56f86e39SMasahiro Yamada * It is a 29-bit counter, yielding a maximum counting duration of 125*56f86e39SMasahiro Yamada * 2^29/25 MHz (21.4 seconds). When the counter reach its maximum value, 126*56f86e39SMasahiro Yamada * it remains at this value until counter reset is triggered by setting 127*56f86e39SMasahiro Yamada * bit 31 of KW_REG_SYSRST_CNT 128*56f86e39SMasahiro Yamada */ 129*56f86e39SMasahiro Yamada static void kw_sysrst_action(void) 130*56f86e39SMasahiro Yamada { 131*56f86e39SMasahiro Yamada int ret; 132*56f86e39SMasahiro Yamada char *s = getenv("sysrstcmd"); 133*56f86e39SMasahiro Yamada 134*56f86e39SMasahiro Yamada if (!s) { 135*56f86e39SMasahiro Yamada debug("Error.. %s failed, check sysrstcmd\n", 136*56f86e39SMasahiro Yamada __FUNCTION__); 137*56f86e39SMasahiro Yamada return; 138*56f86e39SMasahiro Yamada } 139*56f86e39SMasahiro Yamada 140*56f86e39SMasahiro Yamada debug("Starting %s process...\n", __FUNCTION__); 141*56f86e39SMasahiro Yamada ret = run_command(s, 0); 142*56f86e39SMasahiro Yamada if (ret != 0) 143*56f86e39SMasahiro Yamada debug("Error.. %s failed\n", __FUNCTION__); 144*56f86e39SMasahiro Yamada else 145*56f86e39SMasahiro Yamada debug("%s process finished\n", __FUNCTION__); 146*56f86e39SMasahiro Yamada } 147*56f86e39SMasahiro Yamada 148*56f86e39SMasahiro Yamada static void kw_sysrst_check(void) 149*56f86e39SMasahiro Yamada { 150*56f86e39SMasahiro Yamada u32 sysrst_cnt, sysrst_dly; 151*56f86e39SMasahiro Yamada char *s; 152*56f86e39SMasahiro Yamada 153*56f86e39SMasahiro Yamada /* 154*56f86e39SMasahiro Yamada * no action if sysrstdelay environment variable is not defined 155*56f86e39SMasahiro Yamada */ 156*56f86e39SMasahiro Yamada s = getenv("sysrstdelay"); 157*56f86e39SMasahiro Yamada if (s == NULL) 158*56f86e39SMasahiro Yamada return; 159*56f86e39SMasahiro Yamada 160*56f86e39SMasahiro Yamada /* read sysrstdelay value */ 161*56f86e39SMasahiro Yamada sysrst_dly = (u32) simple_strtoul(s, NULL, 10); 162*56f86e39SMasahiro Yamada 163*56f86e39SMasahiro Yamada /* read SysRst Length counter register (bits 28:0) */ 164*56f86e39SMasahiro Yamada sysrst_cnt = (0x1fffffff & readl(KW_REG_SYSRST_CNT)); 165*56f86e39SMasahiro Yamada debug("H/w Rst hold time: %d.%d secs\n", 166*56f86e39SMasahiro Yamada sysrst_cnt / SYSRST_CNT_1SEC_VAL, 167*56f86e39SMasahiro Yamada sysrst_cnt % SYSRST_CNT_1SEC_VAL); 168*56f86e39SMasahiro Yamada 169*56f86e39SMasahiro Yamada /* clear the counter for next valid read*/ 170*56f86e39SMasahiro Yamada writel(1 << 31, KW_REG_SYSRST_CNT); 171*56f86e39SMasahiro Yamada 172*56f86e39SMasahiro Yamada /* 173*56f86e39SMasahiro Yamada * sysrst_action: 174*56f86e39SMasahiro Yamada * if H/w Reset key is pressed and hold for time 175*56f86e39SMasahiro Yamada * more than sysrst_dly in seconds 176*56f86e39SMasahiro Yamada */ 177*56f86e39SMasahiro Yamada if (sysrst_cnt >= SYSRST_CNT_1SEC_VAL * sysrst_dly) 178*56f86e39SMasahiro Yamada kw_sysrst_action(); 179*56f86e39SMasahiro Yamada } 180*56f86e39SMasahiro Yamada 181*56f86e39SMasahiro Yamada #if defined(CONFIG_DISPLAY_CPUINFO) 182*56f86e39SMasahiro Yamada int print_cpuinfo(void) 183*56f86e39SMasahiro Yamada { 184*56f86e39SMasahiro Yamada char *rev = "??"; 185*56f86e39SMasahiro Yamada u16 devid = (readl(KW_REG_PCIE_DEVID) >> 16) & 0xffff; 186*56f86e39SMasahiro Yamada u8 revid = readl(KW_REG_PCIE_REVID) & 0xff; 187*56f86e39SMasahiro Yamada 188*56f86e39SMasahiro Yamada if ((readl(KW_REG_DEVICE_ID) & 0x03) > 2) { 189*56f86e39SMasahiro Yamada printf("Error.. %s:Unsupported Kirkwood SoC 88F%04x\n", __FUNCTION__, devid); 190*56f86e39SMasahiro Yamada return -1; 191*56f86e39SMasahiro Yamada } 192*56f86e39SMasahiro Yamada 193*56f86e39SMasahiro Yamada switch (revid) { 194*56f86e39SMasahiro Yamada case 0: 195*56f86e39SMasahiro Yamada if (devid == 0x6281) 196*56f86e39SMasahiro Yamada rev = "Z0"; 197*56f86e39SMasahiro Yamada else if (devid == 0x6282) 198*56f86e39SMasahiro Yamada rev = "A0"; 199*56f86e39SMasahiro Yamada break; 200*56f86e39SMasahiro Yamada case 1: 201*56f86e39SMasahiro Yamada rev = "A1"; 202*56f86e39SMasahiro Yamada break; 203*56f86e39SMasahiro Yamada case 2: 204*56f86e39SMasahiro Yamada rev = "A0"; 205*56f86e39SMasahiro Yamada break; 206*56f86e39SMasahiro Yamada case 3: 207*56f86e39SMasahiro Yamada rev = "A1"; 208*56f86e39SMasahiro Yamada break; 209*56f86e39SMasahiro Yamada default: 210*56f86e39SMasahiro Yamada break; 211*56f86e39SMasahiro Yamada } 212*56f86e39SMasahiro Yamada 213*56f86e39SMasahiro Yamada printf("SoC: Kirkwood 88F%04x_%s\n", devid, rev); 214*56f86e39SMasahiro Yamada return 0; 215*56f86e39SMasahiro Yamada } 216*56f86e39SMasahiro Yamada #endif /* CONFIG_DISPLAY_CPUINFO */ 217*56f86e39SMasahiro Yamada 218*56f86e39SMasahiro Yamada #ifdef CONFIG_ARCH_CPU_INIT 219*56f86e39SMasahiro Yamada int arch_cpu_init(void) 220*56f86e39SMasahiro Yamada { 221*56f86e39SMasahiro Yamada u32 reg; 222*56f86e39SMasahiro Yamada struct kwcpu_registers *cpureg = 223*56f86e39SMasahiro Yamada (struct kwcpu_registers *)KW_CPU_REG_BASE; 224*56f86e39SMasahiro Yamada 225*56f86e39SMasahiro Yamada /* Linux expects` the internal registers to be at 0xf1000000 */ 226*56f86e39SMasahiro Yamada writel(KW_REGS_PHY_BASE, KW_OFFSET_REG); 227*56f86e39SMasahiro Yamada 228*56f86e39SMasahiro Yamada /* Enable and invalidate L2 cache in write through mode */ 229*56f86e39SMasahiro Yamada writel(readl(&cpureg->l2_cfg) | 0x18, &cpureg->l2_cfg); 230*56f86e39SMasahiro Yamada invalidate_l2_cache(); 231*56f86e39SMasahiro Yamada 232*56f86e39SMasahiro Yamada kw_config_adr_windows(); 233*56f86e39SMasahiro Yamada 234*56f86e39SMasahiro Yamada #ifdef CONFIG_KIRKWOOD_RGMII_PAD_1V8 235*56f86e39SMasahiro Yamada /* 236*56f86e39SMasahiro Yamada * Configures the I/O voltage of the pads connected to Egigabit 237*56f86e39SMasahiro Yamada * Ethernet interface to 1.8V 238*56f86e39SMasahiro Yamada * By default it is set to 3.3V 239*56f86e39SMasahiro Yamada */ 240*56f86e39SMasahiro Yamada reg = readl(KW_REG_MPP_OUT_DRV_REG); 241*56f86e39SMasahiro Yamada reg |= (1 << 7); 242*56f86e39SMasahiro Yamada writel(reg, KW_REG_MPP_OUT_DRV_REG); 243*56f86e39SMasahiro Yamada #endif 244*56f86e39SMasahiro Yamada #ifdef CONFIG_KIRKWOOD_EGIGA_INIT 245*56f86e39SMasahiro Yamada /* 246*56f86e39SMasahiro Yamada * Set egiga port0/1 in normal functional mode 247*56f86e39SMasahiro Yamada * This is required becasue on kirkwood by default ports are in reset mode 248*56f86e39SMasahiro Yamada * OS egiga driver may not have provision to set them in normal mode 249*56f86e39SMasahiro Yamada * and if u-boot is build without network support, network may fail at OS level 250*56f86e39SMasahiro Yamada */ 251*56f86e39SMasahiro Yamada reg = readl(KWGBE_PORT_SERIAL_CONTROL1_REG(0)); 252*56f86e39SMasahiro Yamada reg &= ~(1 << 4); /* Clear PortReset Bit */ 253*56f86e39SMasahiro Yamada writel(reg, (KWGBE_PORT_SERIAL_CONTROL1_REG(0))); 254*56f86e39SMasahiro Yamada reg = readl(KWGBE_PORT_SERIAL_CONTROL1_REG(1)); 255*56f86e39SMasahiro Yamada reg &= ~(1 << 4); /* Clear PortReset Bit */ 256*56f86e39SMasahiro Yamada writel(reg, (KWGBE_PORT_SERIAL_CONTROL1_REG(1))); 257*56f86e39SMasahiro Yamada #endif 258*56f86e39SMasahiro Yamada #ifdef CONFIG_KIRKWOOD_PCIE_INIT 259*56f86e39SMasahiro Yamada /* 260*56f86e39SMasahiro Yamada * Enable PCI Express Port0 261*56f86e39SMasahiro Yamada */ 262*56f86e39SMasahiro Yamada reg = readl(&cpureg->ctrl_stat); 263*56f86e39SMasahiro Yamada reg |= (1 << 0); /* Set PEX0En Bit */ 264*56f86e39SMasahiro Yamada writel(reg, &cpureg->ctrl_stat); 265*56f86e39SMasahiro Yamada #endif 266*56f86e39SMasahiro Yamada return 0; 267*56f86e39SMasahiro Yamada } 268*56f86e39SMasahiro Yamada #endif /* CONFIG_ARCH_CPU_INIT */ 269*56f86e39SMasahiro Yamada 270*56f86e39SMasahiro Yamada /* 271*56f86e39SMasahiro Yamada * SOC specific misc init 272*56f86e39SMasahiro Yamada */ 273*56f86e39SMasahiro Yamada #if defined(CONFIG_ARCH_MISC_INIT) 274*56f86e39SMasahiro Yamada int arch_misc_init(void) 275*56f86e39SMasahiro Yamada { 276*56f86e39SMasahiro Yamada volatile u32 temp; 277*56f86e39SMasahiro Yamada 278*56f86e39SMasahiro Yamada /*CPU streaming & write allocate */ 279*56f86e39SMasahiro Yamada temp = readfr_extra_feature_reg(); 280*56f86e39SMasahiro Yamada temp &= ~(1 << 28); /* disable wr alloc */ 281*56f86e39SMasahiro Yamada writefr_extra_feature_reg(temp); 282*56f86e39SMasahiro Yamada 283*56f86e39SMasahiro Yamada temp = readfr_extra_feature_reg(); 284*56f86e39SMasahiro Yamada temp &= ~(1 << 29); /* streaming disabled */ 285*56f86e39SMasahiro Yamada writefr_extra_feature_reg(temp); 286*56f86e39SMasahiro Yamada 287*56f86e39SMasahiro Yamada /* L2Cache settings */ 288*56f86e39SMasahiro Yamada temp = readfr_extra_feature_reg(); 289*56f86e39SMasahiro Yamada /* Disable L2C pre fetch - Set bit 24 */ 290*56f86e39SMasahiro Yamada temp |= (1 << 24); 291*56f86e39SMasahiro Yamada /* enable L2C - Set bit 22 */ 292*56f86e39SMasahiro Yamada temp |= (1 << 22); 293*56f86e39SMasahiro Yamada writefr_extra_feature_reg(temp); 294*56f86e39SMasahiro Yamada 295*56f86e39SMasahiro Yamada icache_enable(); 296*56f86e39SMasahiro Yamada /* Change reset vector to address 0x0 */ 297*56f86e39SMasahiro Yamada temp = get_cr(); 298*56f86e39SMasahiro Yamada set_cr(temp & ~CR_V); 299*56f86e39SMasahiro Yamada 300*56f86e39SMasahiro Yamada /* checks and execute resset to factory event */ 301*56f86e39SMasahiro Yamada kw_sysrst_check(); 302*56f86e39SMasahiro Yamada 303*56f86e39SMasahiro Yamada return 0; 304*56f86e39SMasahiro Yamada } 305*56f86e39SMasahiro Yamada #endif /* CONFIG_ARCH_MISC_INIT */ 306*56f86e39SMasahiro Yamada 307*56f86e39SMasahiro Yamada #ifdef CONFIG_MVGBE 308*56f86e39SMasahiro Yamada int cpu_eth_init(bd_t *bis) 309*56f86e39SMasahiro Yamada { 310*56f86e39SMasahiro Yamada mvgbe_initialize(bis); 311*56f86e39SMasahiro Yamada return 0; 312*56f86e39SMasahiro Yamada } 313*56f86e39SMasahiro Yamada #endif 314*56f86e39SMasahiro Yamada 315*56f86e39SMasahiro Yamada #ifdef CONFIG_MVEBU_MMC 316*56f86e39SMasahiro Yamada int board_mmc_init(bd_t *bis) 317*56f86e39SMasahiro Yamada { 318*56f86e39SMasahiro Yamada mvebu_mmc_init(bis); 319*56f86e39SMasahiro Yamada return 0; 320*56f86e39SMasahiro Yamada } 321*56f86e39SMasahiro Yamada #endif /* CONFIG_MVEBU_MMC */ 322