blob: 08b1beaa539d14b3a9d818b25ad4e7af23425cda [file] [log] [blame]
Simon Glass70997d82017-04-05 16:23:36 -06001/*
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
11struct 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
17int 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}