drivers/am335xgpio: Release resources on error and when quitting
The /dev/mem file descriptor can be closed without invalidating the mappings so close as soon as possible. munmap() all memory, either on error or from quit. Change-Id: I9466edd2f43791e64f2dce719957c67728f3ec06 Signed-off-by: Steve Marple <stevemarple@googlemail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7047 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
parent
ace028262b
commit
903f2e92a1
|
@ -377,6 +377,13 @@ static bool am335xgpio_swd_mode_possible(void)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void am335xgpio_munmap(void)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < AM335XGPIO_NUM_GPIO_CHIPS && am335xgpio_gpio_chip_mmap_addr[i] != MAP_FAILED; ++i)
|
||||||
|
if (munmap((void *)am335xgpio_gpio_chip_mmap_addr[i], sysconf(_SC_PAGE_SIZE)) < 0)
|
||||||
|
LOG_ERROR("Cannot unmap GPIO memory for chip %d: %s", i, strerror(errno));
|
||||||
|
}
|
||||||
|
|
||||||
static int am335xgpio_init(void)
|
static int am335xgpio_init(void)
|
||||||
{
|
{
|
||||||
LOG_INFO("AM335x GPIO JTAG/SWD bitbang driver");
|
LOG_INFO("AM335x GPIO JTAG/SWD bitbang driver");
|
||||||
|
@ -410,10 +417,12 @@ static int am335xgpio_init(void)
|
||||||
|
|
||||||
if (am335xgpio_gpio_chip_mmap_addr[i] == MAP_FAILED) {
|
if (am335xgpio_gpio_chip_mmap_addr[i] == MAP_FAILED) {
|
||||||
LOG_ERROR("mmap: %s", strerror(errno));
|
LOG_ERROR("mmap: %s", strerror(errno));
|
||||||
|
am335xgpio_munmap();
|
||||||
close(dev_mem_fd);
|
close(dev_mem_fd);
|
||||||
return ERROR_JTAG_INIT_FAILED;
|
return ERROR_JTAG_INIT_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
close(dev_mem_fd);
|
||||||
|
|
||||||
/* Configure JTAG/SWD signals. Default directions and initial states are handled
|
/* Configure JTAG/SWD signals. Default directions and initial states are handled
|
||||||
* by adapter.c and "adapter gpio" command.
|
* by adapter.c and "adapter gpio" command.
|
||||||
|
@ -476,6 +485,8 @@ static int am335xgpio_quit(void)
|
||||||
restore_gpio(ADAPTER_GPIO_IDX_SRST);
|
restore_gpio(ADAPTER_GPIO_IDX_SRST);
|
||||||
restore_gpio(ADAPTER_GPIO_IDX_LED);
|
restore_gpio(ADAPTER_GPIO_IDX_LED);
|
||||||
|
|
||||||
|
am335xgpio_munmap();
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue