aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorLionel Debieve <lionel.debieve@foss.st.com>2021-11-03 16:37:54 +0100
committerJérôme Forissier <jerome@forissier.org>2021-11-08 11:28:53 +0100
commit717f942aebec6d7b7601b197b456fe20be914ef4 (patch)
tree1025a129e169e8ad4c52dd1ad6def4e6c38bdd6c /core
parent06fd21ddc260599bfc6c82c02e9a4db939a25a6e (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.c10
-rw-r--r--core/include/drivers/stm32_i2c.h4
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;