1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2016 - 2020, Broadcom 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #include <stdint.h> 8*91f16700Schasinglulu 9*91f16700Schasinglulu #include <lib/mmio.h> 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <platform_def.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu #define ICFG_IPROC_IOPAD_CTRL_4 (IPROC_ROOT + 0x9c0) 14*91f16700Schasinglulu #define ICFG_IPROC_IOPAD_CTRL_5 (IPROC_ROOT + 0x9c4) 15*91f16700Schasinglulu #define ICFG_IPROC_IOPAD_CTRL_6 (IPROC_ROOT + 0x9c8) 16*91f16700Schasinglulu #define ICFG_IPROC_IOPAD_CTRL_7 (IPROC_ROOT + 0x9cc) 17*91f16700Schasinglulu 18*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CD_IND_R 30 19*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CD_SRC_R 31 20*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CD_HYS_R 29 21*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CD_PULL_R 28 22*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CD_DRIVE_R 24 23*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CLK_SDCARD_SRC_R 23 24*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CLK_SDCARD_HYS_R 21 25*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_CLK_SDCARD_DRIVE_R 17 26*91f16700Schasinglulu 27*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_DATA0_SRC_R 15 28*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_DATA0_HYS_R 13 29*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_DATA0_DRIVE_R 9 30*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_DATA1_SRC_R 7 31*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_DATA1_HYS_R 5 32*91f16700Schasinglulu #define IOPAD_CTRL4_SDIO0_DATA1_DRIVE_R 1 33*91f16700Schasinglulu 34*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA2_SRC_R 31 35*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA2_HYS_R 29 36*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA2_DRIVE_R 25 37*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA3_SRC_R 23 38*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA3_IND_R 22 39*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA3_HYS_R 21 40*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA3_DRIVE_R 17 41*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA4_SRC_R 15 42*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA4_HYS_R 13 43*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA4_DRIVE_R 9 44*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA5_SRC_R 7 45*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA5_HYS_R 5 46*91f16700Schasinglulu #define IOPAD_CTRL5_SDIO0_DATA5_DRIVE_R 1 47*91f16700Schasinglulu 48*91f16700Schasinglulu #define IOPAD_CTRL6_SDIO0_DATA6_SRC_R 31 49*91f16700Schasinglulu #define IOPAD_CTRL6_SDIO0_DATA6_HYS_R 29 50*91f16700Schasinglulu #define IOPAD_CTRL6_SDIO0_DATA6_DRIVE_R 25 51*91f16700Schasinglulu #define IOPAD_CTRL6_SDIO0_DATA7_SRC_R 23 52*91f16700Schasinglulu #define IOPAD_CTRL6_SDIO0_DATA7_HYS_R 21 53*91f16700Schasinglulu #define IOPAD_CTRL6_SDIO0_DATA7_DRIVE_R 17 54*91f16700Schasinglulu 55*91f16700Schasinglulu void emmc_soft_reset(void) 56*91f16700Schasinglulu { 57*91f16700Schasinglulu uint32_t val = 0; 58*91f16700Schasinglulu 59*91f16700Schasinglulu val = (BIT(IOPAD_CTRL6_SDIO0_DATA7_SRC_R) | 60*91f16700Schasinglulu BIT(IOPAD_CTRL6_SDIO0_DATA7_HYS_R) | 61*91f16700Schasinglulu BIT(IOPAD_CTRL6_SDIO0_DATA7_DRIVE_R) | 62*91f16700Schasinglulu BIT(IOPAD_CTRL6_SDIO0_DATA6_SRC_R) | 63*91f16700Schasinglulu BIT(IOPAD_CTRL6_SDIO0_DATA6_HYS_R) | 64*91f16700Schasinglulu BIT(IOPAD_CTRL6_SDIO0_DATA6_DRIVE_R)); 65*91f16700Schasinglulu 66*91f16700Schasinglulu mmio_write_32(ICFG_IPROC_IOPAD_CTRL_6, val); 67*91f16700Schasinglulu 68*91f16700Schasinglulu val = (BIT(IOPAD_CTRL5_SDIO0_DATA3_SRC_R) | 69*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA3_HYS_R) | 70*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA3_DRIVE_R) | 71*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA4_SRC_R) | 72*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA4_HYS_R) | 73*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA4_DRIVE_R) | 74*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA5_SRC_R) | 75*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA5_HYS_R) | 76*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA5_DRIVE_R)); 77*91f16700Schasinglulu 78*91f16700Schasinglulu mmio_write_32(ICFG_IPROC_IOPAD_CTRL_5, val); 79*91f16700Schasinglulu 80*91f16700Schasinglulu val = (BIT(IOPAD_CTRL4_SDIO0_DATA0_SRC_R) | 81*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_DATA0_HYS_R) | 82*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_DATA0_DRIVE_R) | 83*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_DATA1_SRC_R) | 84*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_DATA1_HYS_R) | 85*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_DATA1_DRIVE_R) | 86*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA2_SRC_R) | 87*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA2_HYS_R) | 88*91f16700Schasinglulu BIT(IOPAD_CTRL5_SDIO0_DATA2_DRIVE_R)); 89*91f16700Schasinglulu 90*91f16700Schasinglulu mmio_write_32(ICFG_IPROC_IOPAD_CTRL_6, val); 91*91f16700Schasinglulu 92*91f16700Schasinglulu val = (BIT(IOPAD_CTRL4_SDIO0_CLK_SDCARD_SRC_R) | 93*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_CLK_SDCARD_HYS_R) | 94*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_CLK_SDCARD_DRIVE_R) | 95*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_CD_SRC_R) | 96*91f16700Schasinglulu BIT(IOPAD_CTRL4_SDIO0_CD_HYS_R)); 97*91f16700Schasinglulu 98*91f16700Schasinglulu /* 99*91f16700Schasinglulu * set pull-down, clear pull-up=0 100*91f16700Schasinglulu * bit 12: pull-down bit 11: pull-up 101*91f16700Schasinglulu * Note: In emulation, this pull-down setting was not 102*91f16700Schasinglulu * sufficient. Board design likely requires pull down on 103*91f16700Schasinglulu * this pin for eMMC. 104*91f16700Schasinglulu */ 105*91f16700Schasinglulu 106*91f16700Schasinglulu val |= BIT(IOPAD_CTRL4_SDIO0_CD_PULL_R); 107*91f16700Schasinglulu 108*91f16700Schasinglulu mmio_write_32(ICFG_IPROC_IOPAD_CTRL_4, val); 109*91f16700Schasinglulu } 110