RTEMS | Add the support for i2c driver in the aarch64/raspberrypi bsp (!363)

Gedare Bloom (@gedare) gitlab at rtems.org
Thu Mar 20 21:23:44 UTC 2025



Merge request https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363 was reviewed by Gedare Bloom

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121497

 >  #include <dev/i2c/i2c.h>
 >  #include <bsp/irq.h>
 > +#include <stdio.h>

Why do you add this header?

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121498

 > -{
 > -    while (bus->remaining_bytes >= 1)
 > +static int rpi_i2c_bus_transfer(raspberrypi_i2c_bus *bus) {

why do you change the format of existing lines?

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121499

 > -            BCM2835_REG(bus->base_address + BCM2711_I2C_FIFO) = *(bus->current_buffer);
 > +        while (!(BCM2835_REG(bus->base_address + BCM2711_I2C_STATUS) & S_DONE )) {
 > +            while ((BCM2835_REG(bus->base_address + BCM2711_I2C_STATUS) & S_RXD ) && (bus->remaining_bytes > 0)) {

This line looks too long. The logic here is aa bit complicated. I suggest adding a helper function/macro for this repeated expression `BCM2835_REG(bus->base_address + BCM2711_I2C_STATUS)`

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121500

 > +            
 > +            // If we've read all expected bytes, we can exit
 > +            if (bus->remaining_bytes == 0) {

I think this is already handled by the loop conditional?

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121501

 > +static int rpi_i2c_bus_transfer(raspberrypi_i2c_bus *bus) {
 > +    if (bus->read_transfer)
 >      {

consider adding helper functions for separating the logic for read/write transfer.

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121502

 > +                bus->current_buffer++;
 > +                bus->remaining_bytes--;
 > +                if(bus->remaining_bytes == 0){

handled by the loop?

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121503

 > +                }
 > +            }
 > +            if(bus->remaining_bytes == 0){

I think this is superfluous.

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121504

 > -    while (bus->remaining_transfers > 0)
 > -    {
 > +    while(bus->remaining_transfers > 0){

avoid making random formatting changes to existing code.

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121505

 >          rv = rpi_i2c_bus_transfer(bus);
 > -
 > +        

ditto

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121506

 >          {
 > -            BCM2835_REG(bus->base_address + BCM2711_I2C_CONTROL) &= ~(1 << 0);
 > +            BCM2835_REG(bus->base_address + BCM2711_I2C_CONTROL) |= 0 | C_ST; // Write packet transfer

 `0 |` is superfluous

--
  
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_121507

 >          raspberrypi_gpio_set_function(1, GPIO_AF0);
 > -        bus->base_address = 0x00205000;
 > +        bus->base_address = RPI_PERIPHERAL_BASE + 0x00205000;

should there be a macro for this (and the below) offset value?


-- 
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363
You're receiving this email because of your account on gitlab.rtems.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20250320/c8ded834/attachment-0001.htm>


More information about the bugs mailing list