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>master
parent
d90385be7e
commit
70997d88c4
@ -0,0 +1,18 @@ |
||||
/*
|
||||
* (C) Copyright 2012,2015 Stephen Warren |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _BCM2835_MSG_H |
||||
#define _BCM2835_MSG_H |
||||
|
||||
/**
|
||||
* bcm2835_power_on_module() - power on an SoC module |
||||
* |
||||
* @module: ID of module to power on (BCM2835_MBOX_POWER_DEVID_...) |
||||
* @return 0 if OK, -EIO on error |
||||
*/ |
||||
int bcm2835_power_on_module(u32 module); |
||||
|
||||
#endif |
@ -0,0 +1,39 @@ |
||||
/*
|
||||
* (C) Copyright 2012 Stephen Warren |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <memalign.h> |
||||
#include <asm/arch/mbox.h> |
||||
|
||||
struct msg_set_power_state { |
||||
struct bcm2835_mbox_hdr hdr; |
||||
struct bcm2835_mbox_tag_set_power_state set_power_state; |
||||
u32 end_tag; |
||||
}; |
||||
|
||||
int bcm2835_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 -EIO; |
||||
} |
||||
|
||||
return 0; |
||||
} |
Loading…
Reference in new issue