Possible bug and lacking feature in BBB bsp, GPIO API hooks

Federico Garcia Cruz federico.garciacruz at tallertechnologies.com
Wed Nov 11 20:34:22 UTC 2015


You're welcome Ketul,
I'll continue testing the gpio API for the beaglebone now and the i2c api
in the near future so I'll write you if I found anything weird =).
Best regards.

2015-11-11 17:09 GMT-03:00 Ketul Shah <ketulshah1993 at gmail.com>:

> Dear Federico Garcia,
>
> Yes, I got the point. So  "A read of the GPIO_CLEARDATAOUT register returns
> the value of the data output register (GPIO_DATAOUT)" is the key point
> behind this bug.
>
> Thanks for reporting and debugging.
>
> Ben, I think we should add the patch after proper test.
> Also we should use mmio_write() in rtems_gpio_bsp_multi_set()
> and rtems_gpio_bsp_set() too that uses GPIO_SETDATAOUT register.
>
> Regards,
> Ketul
>
> On 12 November 2015 at 01:08, Federico Garcia Cruz <
> federico.garciacruz at tallertechnologies.com> wrote:
>
>> Ketul,
>> you should use the mmio_write() in the gpio clear bit register, if you
>> mantain the value of the complete bank you would clear not just the gpio
>> number that you want but all the gpios that current value is 1.
>> Here's what the data sheet says about this register:
>>
>> GPIO_CLEARDATAOUT is shown in Figure 25-31 and described in Table 25-30.
>> Writing a 1 to a bit in the GPIO_CLEARDATAOUT register clears to 0 the
>> corresponding bit in the
>> GPIO_DATAOUT register; writing a 0 has no effect. A read of the
>> GPIO_CLEARDATAOUT register
>> returns the value of the data output register (GPIO_DATAOUT).
>>
>> It's described in the section 25.4.1.25 GPIO_CLEARDATAOUT of the
>> AM335x_technical_reference_manual.pdf.
>>
>> 2015-11-11 16:29 GMT-03:00 Ketul Shah <ketulshah1993 at gmail.com>:
>>
>>> Hi All,
>>>
>>> Dear Federico Garcia,
>>>
>>> I really appreciate your great efforts. My views on this are :-
>>>
>>> Following are the macros from bsp.h
>>>
>>> #define mmio_write(a,v) (*(volatile uint32_t *)(a) = (v))
>>> #define mmio_set(a,v) mmio_write((a), mmio_read((a)) | (v))
>>>
>>> So purpose of using mmio_set() is to make change on the desired bit only
>>> (not the whole bank).
>>> While using of mmio_write() will always make change on 32 bits (Value of
>>> desired bit would be 1 and rest would be forced to 1), the bank.
>>>
>>> However I will try to test your code too on my BBB after a small Diwali
>>> vacation.
>>>
>>> Latest RTEMS was tested OK by me as well as Ben.
>>>
>>> Thanks & Regards,
>>> Ketul
>>>
>>> On 12 November 2015 at 00:21, Federico Garcia Cruz <
>>> federico.garciacruz at tallertechnologies.com> wrote:
>>>
>>>> Hi all,
>>>> we've been working with the latest rtems on the Beaglebone and we've
>>>> seen the same behavior Steve B describes.
>>>> Finally we've found what is the source of this unexpected behavior.
>>>> As you could see in bbb-gpio.c, "rtems_gpio_bsp_multi_clear" and
>>>> "rtems_gpio_bsp_clear" they both use "mmio_set" on
>>>> the AM335X_GPIO_CLEARDATAOUT register of the beaglebone.
>>>> The problem is that" mmio_set" reads the current value of the register,
>>>> then it sets the bit of interest and then it writes this new value in the
>>>> AM335X_GPIO_CLEARDATAOUT, but according the datasheet of the AM355X, every
>>>> bit set in this register will produce a clear of the corresponding GPIO so
>>>> that every GPIO in 1 will be cleared.
>>>> We changed the "mmio_set" for "mmio_write" and then tested
>>>> "rtems_gpio_clear" and "rtems_gpio_multi_clear" and they are working fine.
>>>> Attached is the diff file.
>>>> Steve, could you please check if this fixes your problem too?
>>>> Thanks.
>>>>
>>>> 2015-11-07 16:33 GMT-03:00 Gedare Bloom <gedare at rtems.org>:
>>>>
>>>>> On Sat, Nov 7, 2015 at 4:26 AM, André Marques
>>>>> <andre.lousa.marques at gmail.com> wrote:
>>>>> > Hello
>>>>> >
>>>>> > Às 17:31 de 02-11-2015, Steve B escreveu:
>>>>> >
>>>>> > I just looked at some sample code on Ketul's github, and the source
>>>>> code of
>>>>> > the API itself, rather than any actual documentation.
>>>>> >
>>>>> >
>>>>> > Documentation on the GPIO API can be found in
>>>>> >
>>>>> https://devel.rtems.org/wiki/GSoC/2015/RaspberryPi_peripherals_and_SD_card#RTEMSGPIOAPI
>>>>> >
>>>>> This deserves its own page.
>>>>> _______________________________________________
>>>>> users mailing list
>>>>> users at rtems.org
>>>>> http://lists.rtems.org/mailman/listinfo/users
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> <http://www.tallertechnologies.com>
>>>>
>>>>
>>>> Federico Garcia Cruz
>>>>
>>>> Software Engineer
>>>>
>>>>
>>>> San Lorenzo 47, 3rd Floor, Office 5
>>>>
>>>> Córdoba, Argentina
>>>>
>>>>
>>>> Phone: +54 351 4217888 / +54 351 4218211
>>>>
>>>>
>>>> <http://www.linkedin.com/company/taller-technologies>
>>>> <https://www.facebook.com/tallertechnologies>
>>>>
>>>> _______________________________________________
>>>> users mailing list
>>>> users at rtems.org
>>>> http://lists.rtems.org/mailman/listinfo/users
>>>>
>>>
>>>
>>
>>
>> --
>>
>> <http://www.tallertechnologies.com>
>>
>>
>> Federico Garcia Cruz
>>
>> Software Engineer
>>
>>
>> San Lorenzo 47, 3rd Floor, Office 5
>>
>> Córdoba, Argentina
>>
>>
>> Phone: +54 351 4217888 / +54 351 4218211
>>
>>
>> <http://www.linkedin.com/company/taller-technologies>
>> <https://www.facebook.com/tallertechnologies>
>>
>
>


-- 

<http://www.tallertechnologies.com>


Federico Garcia Cruz

Software Engineer


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina


Phone: +54 351 4217888 / +54 351 4218211


<http://www.linkedin.com/company/taller-technologies>
<https://www.facebook.com/tallertechnologies>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20151111/d80f4998/attachment-0002.html>


More information about the users mailing list