From: Stephen Warren <swarren@wwwdotorg.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2] ARM: bcm2835: add mailbox driver
Date: Thu, 18 Oct 2012 14:34:27 -0600 [thread overview]
Message-ID: <508067D3.7060806@wwwdotorg.org> (raw)
In-Reply-To: <20121018222317.571d8d9d@lilith>
On 10/18/2012 02:23 PM, Albert ARIBAUD wrote:
> Hi Stephen,
>
> On Mon, 15 Oct 2012 23:10:35 -0600, Stephen Warren
> <swarren@wwwdotorg.org> wrote:
>
>> The BCM2835 SoC contains (at least) two CPUs; the VideoCore (a/k/a "GPU")
>> and the ARM CPU. The ARM CPU is often thought of as the main CPU.
>> However, the VideoCore actually controls the initial SoC boot, and hides
>> much of the hardware behind a protocol. This protocol is transported
>> using the SoC's mailbox hardware module. The mailbox supports two forms
>> of communication: Raw 28-bit values, and a so-called "property"
>> interface, where the 28-bit value is a physical pointer to a memory
>> buffer that contains various "tags".
>>
>> Here, we add a very simplistic driver for the mailbox module, and define
>> a few structures for the property messages.
>> +++ b/arch/arm/cpu/arm1176/bcm2835/mbox.c
>> +int bcm2835_mbox_call_raw(u32 chan, u32 send, u32 *recv)
>> + /* FIXME: timeout */
>
> Develop this FIXME to indicate what exactly should be fixed.
>
>> + for (;;) {
>> + val = readl(®s->status);
>> + if (!(val & BCM2835_MBOX_STATUS_WR_FULL))
>> + break;
>> + if (get_timer(0) >= endtime)
>> + return -1;
>> + }
The FIXME is actually already implemented by the last if test in the
loop; I simply forgot to remove the comment when I implemented it:-(
I'll repost with those removed. I've also learned a few things about
better constructing the message buffers while implementing a more
complex mbox client, so I might re-organize some of the tag structures
below a little too...
>> diff --git a/arch/arm/include/asm/arch-bcm2835/mbox.h b/arch/arm/include/asm/arch-bcm2835/mbox.h
>> +struct bcm2835_mbox_prop_hdr {
>> + u32 buf_size;
>> + u32 code;
>> +} __packed;
>
> Remove __packed here, as all fields are 32 bits and thus no padding
> would happen anyway.
I'd prefer to keep it for consistency; see below.
>> +struct bcm2835_mbox_buf_get_arm_mem {
>> + struct bcm2835_mbox_prop_hdr hdr;
>> + struct bcm2835_mbox_tag_hdr tag_hdr;
>> + union {
>> + struct bcm2835_mbox_req_get_arm_mem req;
>> + struct bcm2835_mbox_resp_get_arm_mem resp;
>> + } body;
>> + u32 end_tag;
>> +} __packed;
>
> Ditto.
Here, multiple structs are packed into another struct. Isn't the
alignment requirement for a struct larger than for a u32, such that
without __packed, gaps may be left between those component structs and
unions if __packed isn't specified? I certainly added __packed during
development in order to make the code work, although it's possible there
was actually some other bug and I could have gone back and reverted
adding __packed...
Assuming __packed is needed here, I'd prefer to specify it for all
message buffer structs for consistency; that way, if someone chooses the
"wrong" thing to cut/paste, they'll still pick up the required __packed
attribute.
> Also, what is the point of bcm2835_mbox_buf_get_arm_mem which is not
> referenced in the API below?
The idea is that you'll actually pass a struct
bcm2835_mbox_buf_get_arm_mem (or one of tens of other message-specific
struct types) to bcm2835_mbox_call_prop, rather than just a message
header. I could use void * in the prototype below, but chose struct
bcm2835_mbox_prop_hdr as it is at least a requirement that all message
buffers start with that header.
>> +int bcm2835_mbox_call_raw(u32 chan, u32 send, u32 *recv);
>> +int bcm2835_mbox_call_prop(u32 chan, struct bcm2835_mbox_prop_hdr *buffer);
next prev parent reply other threads:[~2012-10-18 20:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-16 5:10 [U-Boot] [PATCH 1/2] ARM: bcm2835: add mailbox driver Stephen Warren
2012-10-16 5:10 ` [U-Boot] [PATCH 2/2] ARM: rpi_b: use bcm2835 mbox driver to get memory size Stephen Warren
2012-10-18 20:28 ` Albert ARIBAUD
2012-10-18 21:51 ` Stephen Warren
2012-10-18 20:23 ` [U-Boot] [PATCH 1/2] ARM: bcm2835: add mailbox driver Albert ARIBAUD
2012-10-18 20:34 ` Stephen Warren [this message]
2012-10-18 23:21 ` Albert ARIBAUD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=508067D3.7060806@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.