提交 c6606515 编写于 作者: S Simon Glass 提交者: Tom Rini

arm: rpi: Add a function to obtain the MMC clock

Move this code into the new message handler file.
Signed-off-by: NSimon Glass <sjg@chromium.org>
上级 70997d88
......@@ -15,4 +15,11 @@
*/
int bcm2835_power_on_module(u32 module);
/**
* bcm2835_get_mmc_clock() - get the frequency of the MMC clock
*
* @return clock frequency, or -ve on error
*/
int bcm2835_get_mmc_clock(void);
#endif
......@@ -14,6 +14,12 @@ struct msg_set_power_state {
u32 end_tag;
};
struct msg_get_clock_rate {
struct bcm2835_mbox_hdr hdr;
struct bcm2835_mbox_tag_get_clock_rate get_clock_rate;
u32 end_tag;
};
int bcm2835_power_on_module(u32 module)
{
ALLOC_CACHE_ALIGN_BUFFER(struct msg_set_power_state, msg_pwr, 1);
......@@ -37,3 +43,25 @@ int bcm2835_power_on_module(u32 module)
return 0;
}
int bcm2835_get_mmc_clock(void)
{
ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_clock_rate, msg_clk, 1);
int ret;
ret = bcm2835_power_on_module(BCM2835_MBOX_POWER_DEVID_SDHCI);
if (ret)
return ret;
BCM2835_MBOX_INIT_HDR(msg_clk);
BCM2835_MBOX_INIT_TAG(&msg_clk->get_clock_rate, GET_CLOCK_RATE);
msg_clk->get_clock_rate.body.req.clock_id = BCM2835_MBOX_CLOCK_ID_EMMC;
ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg_clk->hdr);
if (ret) {
printf("bcm2835: Could not query eMMC clock rate\n");
return -EIO;
}
return msg_clk->get_clock_rate.body.resp.rate_hz;
}
......@@ -468,23 +468,15 @@ int board_init(void)
int board_mmc_init(bd_t *bis)
{
ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_clock_rate, msg_clk, 1);
int ret;
bcm2835_power_on_module(BCM2835_MBOX_POWER_DEVID_SDHCI);
BCM2835_MBOX_INIT_HDR(msg_clk);
BCM2835_MBOX_INIT_TAG(&msg_clk->get_clock_rate, GET_CLOCK_RATE);
msg_clk->get_clock_rate.body.req.clock_id = BCM2835_MBOX_CLOCK_ID_EMMC;
ret = bcm2835_get_mmc_clock();
if (ret)
return ret;
ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg_clk->hdr);
if (ret) {
printf("bcm2835: Could not query eMMC clock rate\n");
return -1;
}
return bcm2835_sdhci_init(BCM2835_SDHCI_BASE,
msg_clk->get_clock_rate.body.resp.rate_hz);
return bcm2835_sdhci_init(BCM2835_SDHCI_BASE, ret);
}
int ft_board_setup(void *blob, bd_t *bd)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册