RTEMS | Add the support for i2c driver in the aarch64/raspberrypi bsp (!363)
Gedare Bloom (@gedare)
gitlab at rtems.org
Tue Jun 24 16:07:33 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_125130
> + i2c_bus base;
> + uintptr_t input_clock;
> + rtems_id task_id;
This field is unused? remove unused fields from private structs
--
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/include/bsp/raspberrypi-i2c.h: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_125131
> +#include <dev/i2c/i2c.h>
> +
> +typedef enum {
please document this (public) data type
--
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_125132
> +static void i2c_polling_read( raspberrypi_i2c_bus *bus )
> +{
> + while ( !( S_REG( bus ) & S_DONE ) && ( bus->remaining_bytes > 0 ) ) {
Can multiple callers attempt this in parallel? Do you need a lock in the `raspberrypi_i2c_bus` to protect its shared data?
--
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_125133
> + bus->current_buffer++;
> + bus->remaining_bytes--;
> + }
Do you need to check for errors here?
--
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_125134
> + ++divider;
> + clock_rate = BSC_CORE_CLK_HZ / divider;
> + }
I'm confused by this loop. Because of integer division, you should have that `clock_rate == clock` from the preceding divisions?
--
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_125135
> + BCM2835_REG( bus->base_address + BCM2711_I2C_DIV ) = divider;
> +
> + bus->input_clock = clock_rate;
This gets set, but where does it get used?
--
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_125136
> + );
> + BCM2835_REG( bus->base_address + BCM2711_I2C_DLEN ) = bus->remaining_bytes;
> + S_REG( bus ) = S_ERR | S_CLKT | S_DONE;
what's this doing here?
--
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_125137
> +
> +
> + if ( msgs[ i ].flags & I2C_M_TEN ) // 10-bit slave address
don't use `//`
--
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_125138
> + if ( msgs[ i ].flags & I2C_M_TEN ) // 10-bit slave address
> + {
> + /* Add the 8 lsbs of the 10-bit slave address to the fifo register*/
space before *
--
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_125139
> +}
> +
> +static int rpi_i2c_setup_transfer( raspberrypi_i2c_bus *bus )
this function seems misnamed, maybe `rpi_i2c_setup_and_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_125140
> +}
> +
> +static rtems_status_code i2c_gpio_init(
name it with `rpi_` like the other private functions in this file
--
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_125141
> + switch ( device ) {
> + case raspberrypi_bscm0:
> + bus_path = "/dev/i2c-0";
this could instead be done in `rpi_i2c_gpio_init`
--
Gedare Bloom started a new discussion on bsps/aarch64/raspberrypi/include/bsp/raspberrypi-i2c.h: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_125142
> +#define BSC_CORE_CLK_HZ 150000000
> +
> +#define C_REG( bus ) BCM2835_REG( ( bus )->base_address + BCM2711_I2C_CONTROL )
should not define this kind of macro in a public header file. you can move this ad the `S_REG` macros to the .c file.
--
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/20250624/cc5fe876/attachment-0001.htm>
More information about the bugs
mailing list