]> git.sur5r.net Git - u-boot/blob - arch/arm/mach-bcm283x/msg.c
arm: rpi: Add a file to handle messages
[u-boot] / arch / arm / mach-bcm283x / msg.c
1 /*
2  * (C) Copyright 2012 Stephen Warren
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6
7 #include <common.h>
8 #include <memalign.h>
9 #include <asm/arch/mbox.h>
10
11 struct msg_set_power_state {
12         struct bcm2835_mbox_hdr hdr;
13         struct bcm2835_mbox_tag_set_power_state set_power_state;
14         u32 end_tag;
15 };
16
17 int bcm2835_power_on_module(u32 module)
18 {
19         ALLOC_CACHE_ALIGN_BUFFER(struct msg_set_power_state, msg_pwr, 1);
20         int ret;
21
22         BCM2835_MBOX_INIT_HDR(msg_pwr);
23         BCM2835_MBOX_INIT_TAG(&msg_pwr->set_power_state,
24                               SET_POWER_STATE);
25         msg_pwr->set_power_state.body.req.device_id = module;
26         msg_pwr->set_power_state.body.req.state =
27                 BCM2835_MBOX_SET_POWER_STATE_REQ_ON |
28                 BCM2835_MBOX_SET_POWER_STATE_REQ_WAIT;
29
30         ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN,
31                                      &msg_pwr->hdr);
32         if (ret) {
33                 printf("bcm2835: Could not set module %u power state\n",
34                        module);
35                 return -EIO;
36         }
37
38         return 0;
39 }