Other Parts Discussed in Thread: SYSCONFIG, TPS65218
使用AM4376 ,把eMMC设备挂载在MMC2总线上,在系统阶段读写emmc设备ok,由于SDK的boot代码中没有MMC2相关的配置,自己添加配置,当操作到MMC2总线的基地址时,设备会重启,
相关配置如下:
1、在dts配置如下
mmc3_pins_default: pinmux_mmc3_pins_default {
pinctrl-single,pins = <
0x1f0 ( PIN_INPUT_PULLUP | MUX_MODE3 ) /* (B15) mii1_txd0.mmc1_clk */
0x1f4 ( PIN_INPUT_PULLUP | MUX_MODE3 ) /* (A14) mii1_txd1.mmc1_cmd */
0x1f8 ( PIN_INPUT_PULLUP | MUX_MODE3 ) /* (D14) mii1_tx_clk.mmc1_dat0 * /
0x1fc ( PIN_INPUT_PULLUP | MUX_MODE3 ) /* (D13) mii1_rx_clk.mmc1_dat1 * /
0x200 ( PIN_INPUT_PULLUP | MUX_MODE3 ) /* (C14) mii1_rxd3.mmc1_dat2 */
0x204 ( PIN_INPUT_PULLUP | MUX_MODE3 ) /* (E16) mii1_rxd2.mmc1_dat3 */
>;
};
mmc3_pins_sleep: pinmux_mmc3_pins_Sleep {
pinctrl-single,pins = <
0x1f0 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (B15) mii1_txd0.mmc1_clk */
0x1f4 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (A14) mii1_txd1.mmc1_cmd */
0x1f8 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (D14) mii1_tx_clk.mmc1_dat0 */
0x1fc ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (D13) mii1_rx_clk.mmc1_dat1 */
0x200 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (C14) mii1_rxd3.mmc1_dat2 * /
0x204 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (E16) mii1_rxd2.mmc1_dat3 * /
>;
};
&mmc3 {
status = "okay";
dmas = <&edma 3
&edma 31>
dma-names = "tx", "rx";
vmmc-supply = <&vmmcsd_fixed>;
bus-width = <4>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&mmc3_pins_default>;
pinctrl-1 = <&mmc3_pins_sleep>;
cap-power-off-card;
keep-power-in-suspend;
ti,non-removable;
#address-cells = <1>;
#size-cells = <0>;
};
2、在board/ti/am43xx/mux.c中,配置管脚复用
static struct module_pin_mux mmc2_pin_mux[] = {
{OFFSET(cam1_data2), (MODE(3) | PULLUDDIS | RXACTIVE)},
{OFFSET(cam1_data3), (MODE(3) | PULLUP_EN | RXACTIVE)},
{OFFSET(cam1_data4), (MODE(3) | PULLUP_EN | RXACTIVE)},
{OFFSET(cam1_data5), (MODE(3) | PULLUP_EN | RXACTIVE)},
{OFFSET(cam1_data6), (MODE(3) | PULLUP_EN | RXACTIVE)},
{OFFSET(cam1_data7), (MODE(3) | PULLUP_EN | RXACTIVE)},
};
在函数void enable_board_pin_mux(void)中,添加
configure_module_pin_mux( mmc2_pin_mux );
3、在arch/arm/include/asm/arch-am33xx/mmc_host_def.h中,添加
#define OMAP_HSMMC3_BASE 0x47810100
4、在arch/arm/include/asm/arch-am33xx/spl.h中,添加
#define BOOT_DEVICE_MMC3 0x09
5、在/arch/arm/mach-omap2/am33xx/board.c的int cpu_mmc_init(bd_t *bis)函数中,添加
omap_mmc_init(2, 0, 0, -1, -1);
设置完以上后,在boot能看见mmc2设备,但是当执行初始化函数时,设备会重启
static int omap_hsmmc_init_setup(struct mmc *mmc)
{
struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
struct hsmmc *mmc_base;
unsigned int reg_val;
unsigned int dsor;
ulong start;
mmc_base = priv->base_addr;
mmc_board_init(mmc);
writel(readl(&mmc_base->sysconfig) | MMC_SOFTRESET, &mmc_base->sysconfig); //程序执行到这儿会重启i
现在,我想知道什么地方遗漏了,没有配置完全,导致设备重启