arm: rpi: Add a function to obtain the MMC clock
Move this code into the new message handler file. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
70997d88c4
commit
c6606515f1
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user