Skip to content

Commit c92a81a

Browse files
committed
drivers: mipi_dbi: stm32: move barriers outside of the loop
Relocate __DSB barriers outside the data write loops to improve efficiency. Signed-off-by: Georgij Černyšiov <[email protected]>
1 parent 47b07e5 commit c92a81a

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

drivers/mipi_dbi/mipi_dbi_stm32_fmc.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,18 @@ int mipi_dbi_stm32_fmc_command_write(const struct device *dev,
8989
sys_write16(cmd, config->register_addr);
9090
if (IS_ENABLED(CONFIG_MIPI_DBI_STM32_FMC_MEM_BARRIER)) {
9191
barrier_dsync_fence_full();
92+
/* avoid after loop barrier */
93+
if (len == 0U) {
94+
return 0;
95+
}
9296
}
9397

9498
for (i = 0U; i < len; i++) {
9599
sys_write16((uint16_t)data_buf[i], config->data_addr);
96-
if (IS_ENABLED(CONFIG_MIPI_DBI_STM32_FMC_MEM_BARRIER)) {
97-
barrier_dsync_fence_full();
98-
}
100+
}
101+
102+
if (IS_ENABLED(CONFIG_MIPI_DBI_STM32_FMC_MEM_BARRIER)) {
103+
barrier_dsync_fence_full();
99104
}
100105

101106
return 0;
@@ -118,9 +123,10 @@ static int mipi_dbi_stm32_fmc_write_display(const struct device *dev,
118123

119124
for (i = 0U; i < desc->buf_size; i += 2) {
120125
sys_write16(sys_get_le16(&framebuf[i]), config->data_addr);
121-
if (IS_ENABLED(CONFIG_MIPI_DBI_STM32_FMC_MEM_BARRIER)) {
122-
barrier_dsync_fence_full();
123-
}
126+
}
127+
128+
if (IS_ENABLED(CONFIG_MIPI_DBI_STM32_FMC_MEM_BARRIER)) {
129+
barrier_dsync_fence_full();
124130
}
125131

126132
return 0;

0 commit comments

Comments
 (0)