Error while using Mailbox in RPI

Mudit Jain muditjain18011995 at gmail.com
Mon Jun 20 13:50:19 UTC 2016


Hi Pavel,

I cherry-picked your patch and for some reason I still get this error.

-------------------------------------------------------------------------------------------------------
*** SDHCI 01 TEST ***
nexus0: <RTEMS Nexus device>
bcm_dma0: <BCM2835 DMA Controller> on nexus0
sdhci_bcm0: <Broadcom 2708 SDHCI controller> on nexus0
Enable the power returns -2
sdhci_bcm0: Unable to enable the power
device_attach: sdhci_bcm0 attach returned -2

RTEMS Shell on /dev/console. Use 'help' to list commands.
[/] #
---------------------------------------------------------------------------------------------------------

I have used the same code as mentioned by you.

Mudit



On Sun, Jun 19, 2016 at 7:14 PM, Pavel Pisa <ppisa4lists at pikron.com> wrote:

> Hello Mudit Jain ,
>
> On Sunday 19 of June 2016 10:51:37 Mudit Jain wrote:
> > Hi all,
> >
> > I am getting an error in setting the power using the mailbox.
> >
> > This is how I am calling the function in the bcm_sdhci_attach as follows.
> >
> >
> ---------------------------------------------------------------------------
> >-------------------------------------
> > bcm2835_set_power_state_entries* power_state_sd;
> > power_state_sd->dev_id=bcm2835_mailbox_power_udid_sd_card;
> > power_state_sd->state=BCM2835_MAILBOX_SET_POWER_STATE_REQ_ON ;
> > err = bcm2835_mailbox_set_power_state(power_state_sd);
> > if (err != 0) {
> >     device_printf(dev, "Unable to enable the power\n");
> >     return (err);
> > }
> >
> ---------------------------------------------------------------------------
> >---------------------------------------
> >
> > RTEMS on RPi gives a err = -2, indicating the
> > *bcm2835_mailbox_buffer_suceeded *fails
> >
> > I have been stuck here from quite some time.Can someone help me with
> this ?
>
> I see serious problem in your code.
>
> You declare power_state_sd as pointer but do not fill it by location
> (malloc or reference) so the following lines use random location in memory.
>
> But it is possible that there could be some other problem so I analyzed
> U-boot and Linux kernel how they communicate with VideoCore firmware
> when they need to control power.
>
> Linux kernel implements this part in.
>
>
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/soc/bcm2835/raspberrypi-firmware.h
>
>
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/soc/bcm/raspberrypi-power.c
>
> Generally RTEMS code looks similar, the same channel
> is used for property set. There is difference that
> newer RPi firmware versions add support for domains functions.
>
> #define BCM2835_MAILBOX_TAG_GET_DOMAIN_STATE    0x00030030
> #define BCM2835_MAILBOX_TAG_SET_DOMAIN_STATE    0x00038030
>
> But even in the case of newer firmware old
>
> #define BCM2835_MAILBOX_TAG_SET_POWER_STATE  0x00028001
>
> is used at least for USB, so I expect that old power
> state control should work with new firmware.
>
> On the other hand, Linux seems to not count SD card power
> domain ID 0 into account. Linux IDs are defined as HW IDs - 1.
> I would expect that it is already set by firware because
> it uses SD card to boot the system.
>
> But anyway, I have updated VideoCore access code to be sure that
> data are correctly propagated to main memory after ARM caches are
> enabled. Original Yang Qiao code does not care about that
> (it is not required during startup before MMU is enabled)
> and there could be difference that RPi2 Cortex-A7 data cache line
> length is 64 bytes instead of 32 for RPi1 so without explicit
> cache management there could be more problems on RPi2.
>
> I am sending my patch as followup. If there is no objection,
> I push it to RTEMS mainline. Patch is applied to my
> personal RTEMS repo as well
>
> https://github.com/ppisa/rtems/tree/rtems-rpi-devel
>
> I have tested next code after VC cache flush update
> with current RTEMS mainline and I get correct result
>
>   int err;
>
>   bcm2835_set_power_state_entries power_state_sd;
>   power_state_sd.dev_id=bcm2835_mailbox_power_udid_sd_card;
>   power_state_sd.state=BCM2835_MAILBOX_SET_POWER_STATE_REQ_ON ;
>   err = bcm2835_mailbox_set_power_state(&power_state_sd);
>   printk("Enable the power returns %d\n", err);
>
> I have not tested before cache clarification because I have
> noticed problem with pointer later.
>
> All tested on RPi1 with U-boot based load.
> I have tested with both serial and graphics console.
> Testing on RPi2 would be appreciated.
>
> Best wishes,
>
>              Pavel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20160620/0af152e9/attachment.html>


More information about the devel mailing list