diff options
author | Lionel Debieve <lionel.debieve@foss.st.com> | 2021-11-03 16:37:54 +0100 |
---|---|---|
committer | Jérôme Forissier <jerome@forissier.org> | 2021-11-08 11:28:53 +0100 |
commit | 717f942aebec6d7b7601b197b456fe20be914ef4 (patch) | |
tree | 1025a129e169e8ad4c52dd1ad6def4e6c38bdd6c /core | |
parent | 06fd21ddc260599bfc6c82c02e9a4db939a25a6e (diff) |
drivers: stm32_i2c: use reg_size to map virtual addresses
Use directly the register map size from the dt_node_info
structure to call the io_pa_or_va() function.
Signed-off-by: Lionel Debieve <lionel.debieve@foss.st.com>
Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org>
Diffstat (limited to 'core')
-rw-r--r-- | core/drivers/stm32_i2c.c | 10 | ||||
-rw-r--r-- | core/include/drivers/stm32_i2c.h | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/core/drivers/stm32_i2c.c b/core/drivers/stm32_i2c.c index a14fcffd..a66eb2fe 100644 --- a/core/drivers/stm32_i2c.c +++ b/core/drivers/stm32_i2c.c @@ -290,7 +290,7 @@ struct i2c_request { static vaddr_t get_base(struct i2c_handle_s *hi2c) { - return io_pa_or_va_secure(&hi2c->base, I2C_SIZE); + return io_pa_or_va_secure(&hi2c->base, hi2c->reg_size); } static void notif_i2c_timeout(struct i2c_handle_s *hi2c) @@ -692,11 +692,14 @@ int stm32_i2c_get_setup_from_fdt(void *fdt, int node, memset(init, 0, sizeof(*init)); _fdt_fill_device_info(fdt, &info, node); + assert(info.reg != DT_INFO_INVALID_REG && + info.reg_size != DT_INFO_INVALID_REG_SIZE && + info.clock != DT_INFO_INVALID_CLOCK); + init->dt_status = info.status; init->pbase = info.reg; + init->reg_size = info.reg_size; init->clock = info.clock; - assert(info.reg != DT_INFO_INVALID_REG && - info.clock != DT_INFO_INVALID_CLOCK); cuint = fdt_getprop(fdt, node, "i2c-scl-rising-time-ns", NULL); if (cuint) @@ -754,6 +757,7 @@ int stm32_i2c_init(struct i2c_handle_s *hi2c, hi2c->dt_status = init_data->dt_status; hi2c->base.pa = init_data->pbase; + hi2c->reg_size = init_data->reg_size; hi2c->clock = init_data->clock; rc = i2c_setup_timing(hi2c, init_data, &timing); diff --git a/core/include/drivers/stm32_i2c.h b/core/include/drivers/stm32_i2c.h index f1a60a3b..a63b22f1 100644 --- a/core/include/drivers/stm32_i2c.h +++ b/core/include/drivers/stm32_i2c.h @@ -31,6 +31,7 @@ * * @dt_status: non-secure/secure status read from DT * @pbase: I2C interface base address + * @reg_size: I2C interface register map size * @clock: I2C bus/interface clock * @addr_mode_10b_not_7b: True if 10bit addressing mode, otherwise 7bit mode * @own_address1: 7-bit or 10-bit first device own address. @@ -48,6 +49,7 @@ struct stm32_i2c_init_s { unsigned int dt_status; paddr_t pbase; + size_t reg_size; unsigned int clock; bool addr_mode_10b_not_7b; uint32_t own_address1; @@ -100,6 +102,7 @@ struct i2c_cfg { /* * I2C bus device * @base: I2C SoC registers base address + * @reg_size: I2C SoC registers address map size * @dt_status: non-secure/secure status read from DT * @clock: clock ID * @i2c_state: Driver state ID I2C_STATE_* @@ -112,6 +115,7 @@ struct i2c_cfg { */ struct i2c_handle_s { struct io_pa_va base; + size_t reg_size; unsigned int dt_status; unsigned long clock; enum i2c_state_e i2c_state; |