summaryrefslogtreecommitdiff
path: root/board/raspberrypi/rpi
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-04-05 16:23:36 -0600
committerTom Rini <trini@konsulko.com>2017-05-09 20:19:32 -0400
commit70997d88c40b4d74c4eac80c85f3a2676aa15d82 (patch)
treefb66d8fc644552c39ec79b8ca7b280571b92fbaf /board/raspberrypi/rpi
parentd90385be7ef79c75770b4630f4d16bc13c03c2dc (diff)
downloadu-boot-70997d88c40b4d74c4eac80c85f3a2676aa15d82.tar.gz
u-boot-70997d88c40b4d74c4eac80c85f3a2676aa15d82.tar.bz2
u-boot-70997d88c40b4d74c4eac80c85f3a2676aa15d82.zip
arm: rpi: Add a file to handle messages
The bcm283x chips provide a way for the ARM core to communicate with the graphics processor, which is in charge of many things. This is handled by way of a message prototcol. At present the code for sending message (and receiving a reply) is spread around U-Boot, primarily in the board file. This means that sending a message from a driver requires duplicating the code. Create a new message implementation with a function to support powering on a subsystem as a starting point. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'board/raspberrypi/rpi')
-rw-r--r--board/raspberrypi/rpi/rpi.c35
1 files changed, 3 insertions, 32 deletions
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index 2146534b36..d0d9a9739d 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -16,6 +16,7 @@
#include <mmc.h>
#include <asm/gpio.h>
#include <asm/arch/mbox.h>
+#include <asm/arch/msg.h>
#include <asm/arch/sdhci.h>
#include <asm/global_data.h>
#include <dm/platform_data/serial_bcm283x_mu.h>
@@ -53,12 +54,6 @@ struct msg_get_mac_address {
u32 end_tag;
};
-struct msg_set_power_state {
- struct bcm2835_mbox_hdr hdr;
- struct bcm2835_mbox_tag_set_power_state 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;
@@ -365,30 +360,6 @@ int misc_init_r(void)
return 0;
}
-static int power_on_module(u32 module)
-{
- ALLOC_CACHE_ALIGN_BUFFER(struct msg_set_power_state, msg_pwr, 1);
- int ret;
-
- BCM2835_MBOX_INIT_HDR(msg_pwr);
- BCM2835_MBOX_INIT_TAG(&msg_pwr->set_power_state,
- SET_POWER_STATE);
- msg_pwr->set_power_state.body.req.device_id = module;
- msg_pwr->set_power_state.body.req.state =
- BCM2835_MBOX_SET_POWER_STATE_REQ_ON |
- BCM2835_MBOX_SET_POWER_STATE_REQ_WAIT;
-
- ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN,
- &msg_pwr->hdr);
- if (ret) {
- printf("bcm2835: Could not set module %u power state\n",
- module);
- return -1;
- }
-
- return 0;
-}
-
static void get_board_rev(void)
{
ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_board_rev, msg, 1);
@@ -492,7 +463,7 @@ int board_init(void)
gd->bd->bi_boot_params = 0x100;
- return power_on_module(BCM2835_MBOX_POWER_DEVID_USB_HCD);
+ return bcm2835_power_on_module(BCM2835_MBOX_POWER_DEVID_USB_HCD);
}
int board_mmc_init(bd_t *bis)
@@ -500,7 +471,7 @@ int board_mmc_init(bd_t *bis)
ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_clock_rate, msg_clk, 1);
int ret;
- power_on_module(BCM2835_MBOX_POWER_DEVID_SDHCI);
+ 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);