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