diff mbox series

[8/9] arm: mvebu: axp: ddr: Switch to using DM I2C API

Message ID 20211118081939.861407-8-sr@denx.de
State Accepted
Commit 0cbd3d8121189690130257009aa9363232c888d5
Delegated to: Stefan Roese
Headers show
Series [1/9] arm: mvebu: theadorable_debug_defconfig: Enable DM_I2C | expand

Commit Message

Stefan Roese Nov. 18, 2021, 8:19 a.m. UTC
No functional change intended. This patch switches from the legacy I2C
API to the DM I2C API, so that this code can be used with DM I2C
enabled.

Signed-off-by: Stefan Roese <sr@denx.de>
---
 drivers/ddr/marvell/axp/ddr3_init.c | 16 +++++++++++-----
 drivers/ddr/marvell/axp/ddr3_init.h |  2 +-
 drivers/ddr/marvell/axp/ddr3_spd.c  | 16 ++++++++++++++--
 3 files changed, 26 insertions(+), 8 deletions(-)

Comments

Stefan Roese Dec. 18, 2021, 1:44 p.m. UTC | #1
On 11/18/21 09:19, Stefan Roese wrote:
> No functional change intended. This patch switches from the legacy I2C
> API to the DM I2C API, so that this code can be used with DM I2C
> enabled.
> 
> Signed-off-by: Stefan Roese <sr@denx.de>

Applied to u-boot-marvell/next

Thanks,
Stefan

> ---
>   drivers/ddr/marvell/axp/ddr3_init.c | 16 +++++++++++-----
>   drivers/ddr/marvell/axp/ddr3_init.h |  2 +-
>   drivers/ddr/marvell/axp/ddr3_spd.c  | 16 ++++++++++++++--
>   3 files changed, 26 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/ddr/marvell/axp/ddr3_init.c b/drivers/ddr/marvell/axp/ddr3_init.c
> index c5aa1ac18f51..a9dcb74cecb7 100644
> --- a/drivers/ddr/marvell/axp/ddr3_init.c
> +++ b/drivers/ddr/marvell/axp/ddr3_init.c
> @@ -361,12 +361,18 @@ static u32 ddr3_init_main(void)
>   	__maybe_unused u32 ddr_width = BUS_WIDTH;
>   	__maybe_unused int status;
>   	__maybe_unused u32 win_backup[16];
> +	__maybe_unused struct udevice *udev;
> +	__maybe_unused int ret;
>   
>   	/* SoC/Board special Initializtions */
>   	fab_opt = ddr3_get_fab_opt();
>   
>   #ifdef CONFIG_SPD_EEPROM
> -	i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
> +	ret = i2c_get_chip_for_busnum(0, BUS_WIDTH_ECC_TWSI_ADDR, 1, &udev);
> +	if (ret) {
> +		printf("Cannot find SPD EEPROM\n");
> +		return MV_DDR3_TRAINING_ERR_BAD_DIMM_SETUP;
> +	}
>   #endif
>   
>   	ddr3_print_version();
> @@ -438,7 +444,7 @@ static u32 ddr3_init_main(void)
>   
>   #if defined(ECC_SUPPORT) && defined(AUTO_DETECTION_SUPPORT)
>   	ecc = 0;
> -	if (ddr3_check_config(BUS_WIDTH_ECC_TWSI_ADDR, CONFIG_ECC))
> +	if (ddr3_check_config(udev, CONFIG_ECC))
>   		ecc = 1;
>   #endif
>   
> @@ -483,7 +489,7 @@ static u32 ddr3_init_main(void)
>   	 * Dynamically Set 32Bit and ECC for AXP (Relevant only for
>   	 * Marvell DB boards)
>   	 */
> -	if (ddr3_check_config(BUS_WIDTH_ECC_TWSI_ADDR, CONFIG_BUS_WIDTH)) {
> +	if (ddr3_check_config(udev, CONFIG_BUS_WIDTH)) {
>   		ddr_width = 32;
>   		DEBUG_INIT_S("DDR3 Training Sequence - DRAM bus width 32Bit\n");
>   	}
> @@ -904,7 +910,7 @@ void ddr3_static_mc_init(void)
>    * Notes:    Only Available for ArmadaXP/Armada 370 DB boards
>    * Returns:  None.
>    */
> -int ddr3_check_config(u32 twsi_addr, MV_CONFIG_TYPE config_type)
> +int ddr3_check_config(struct udevice *udev, MV_CONFIG_TYPE config_type)
>   {
>   #ifdef AUTO_DETECTION_SUPPORT
>   	u8 data = 0;
> @@ -916,7 +922,7 @@ int ddr3_check_config(u32 twsi_addr, MV_CONFIG_TYPE config_type)
>   	else
>   		offset = 0;
>   
> -	ret = i2c_read(twsi_addr, offset, 1, (u8 *)&data, 1);
> +	ret = dm_i2c_read(udev, offset, &data, 1);
>   	if (!ret) {
>   		switch (config_type) {
>   		case CONFIG_ECC:
> diff --git a/drivers/ddr/marvell/axp/ddr3_init.h b/drivers/ddr/marvell/axp/ddr3_init.h
> index 9a21886ac3e7..a26bd2a120e9 100644
> --- a/drivers/ddr/marvell/axp/ddr3_init.h
> +++ b/drivers/ddr/marvell/axp/ddr3_init.h
> @@ -101,7 +101,7 @@ void fix_pll_val(u8 target_fab);
>   u32 ddr3_get_fab_opt(void);
>   u32 ddr3_get_cpu_freq(void);
>   u32 ddr3_get_vco_freq(void);
> -int ddr3_check_config(u32 addr, MV_CONFIG_TYPE config_type);
> +int ddr3_check_config(struct udevice *udev, MV_CONFIG_TYPE config_type);
>   u32 ddr3_get_static_mc_value(u32 reg_addr, u32 offset1, u32 mask1, u32 offset2,
>   			     u32 mask2);
>   u32 ddr3_cl_to_valid_cl(u32 cl);
> diff --git a/drivers/ddr/marvell/axp/ddr3_spd.c b/drivers/ddr/marvell/axp/ddr3_spd.c
> index dd772e63ab19..4763403c1278 100644
> --- a/drivers/ddr/marvell/axp/ddr3_spd.c
> +++ b/drivers/ddr/marvell/axp/ddr3_spd.c
> @@ -209,13 +209,19 @@ static u32 ddr3_get_dimm_num(u32 *dimm_addr)
>   	/* Read the dimm eeprom */
>   	for (dimm_cur_addr = MAX_DIMM_ADDR; dimm_cur_addr > MIN_DIMM_ADDR;
>   	     dimm_cur_addr--) {
> +		struct udevice *udev;
> +
>   		data[SPD_DEV_TYPE_BYTE] = 0;
>   
>   		/* Far-End DIMM must be connected */
>   		if ((dimm_num == 0) && (dimm_cur_addr < FAR_END_DIMM_ADDR))
>   			return 0;
>   
> -		ret = i2c_read(dimm_cur_addr, 0, 1, (uchar *)data, 3);
> +		ret = i2c_get_chip_for_busnum(0, dimm_cur_addr, 1, &udev);
> +		if (ret)
> +			continue;
> +
> +		ret = dm_i2c_read(udev, 0, data, 3);
>   		if (!ret) {
>   			if (data[SPD_DEV_TYPE_BYTE] == SPD_MEM_TYPE_DDR3) {
>   				dimm_addr[dimm_num] = dimm_cur_addr;
> @@ -245,9 +251,15 @@ int ddr3_spd_init(MV_DIMM_INFO *info, u32 dimm_addr, u32 dimm_width)
>   	__maybe_unused u8 vendor_high, vendor_low;
>   
>   	if (dimm_addr != 0) {
> +		struct udevice *udev;
> +
>   		memset(spd_data, 0, SPD_SIZE * sizeof(u8));
>   
> -		ret = i2c_read(dimm_addr, 0, 1, (uchar *)spd_data, SPD_SIZE);
> +		ret = i2c_get_chip_for_busnum(0, dimm_addr, 1, &udev);
> +		if (ret)
> +			return MV_DDR3_TRAINING_ERR_TWSI_FAIL;
> +
> +		ret = dm_i2c_read(udev, 0, spd_data, SPD_SIZE);
>   		if (ret)
>   			return MV_DDR3_TRAINING_ERR_TWSI_FAIL;
>   	}
> 

Viele Grüße,
Stefan Roese
diff mbox series

Patch

diff --git a/drivers/ddr/marvell/axp/ddr3_init.c b/drivers/ddr/marvell/axp/ddr3_init.c
index c5aa1ac18f51..a9dcb74cecb7 100644
--- a/drivers/ddr/marvell/axp/ddr3_init.c
+++ b/drivers/ddr/marvell/axp/ddr3_init.c
@@ -361,12 +361,18 @@  static u32 ddr3_init_main(void)
 	__maybe_unused u32 ddr_width = BUS_WIDTH;
 	__maybe_unused int status;
 	__maybe_unused u32 win_backup[16];
+	__maybe_unused struct udevice *udev;
+	__maybe_unused int ret;
 
 	/* SoC/Board special Initializtions */
 	fab_opt = ddr3_get_fab_opt();
 
 #ifdef CONFIG_SPD_EEPROM
-	i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+	ret = i2c_get_chip_for_busnum(0, BUS_WIDTH_ECC_TWSI_ADDR, 1, &udev);
+	if (ret) {
+		printf("Cannot find SPD EEPROM\n");
+		return MV_DDR3_TRAINING_ERR_BAD_DIMM_SETUP;
+	}
 #endif
 
 	ddr3_print_version();
@@ -438,7 +444,7 @@  static u32 ddr3_init_main(void)
 
 #if defined(ECC_SUPPORT) && defined(AUTO_DETECTION_SUPPORT)
 	ecc = 0;
-	if (ddr3_check_config(BUS_WIDTH_ECC_TWSI_ADDR, CONFIG_ECC))
+	if (ddr3_check_config(udev, CONFIG_ECC))
 		ecc = 1;
 #endif
 
@@ -483,7 +489,7 @@  static u32 ddr3_init_main(void)
 	 * Dynamically Set 32Bit and ECC for AXP (Relevant only for
 	 * Marvell DB boards)
 	 */
-	if (ddr3_check_config(BUS_WIDTH_ECC_TWSI_ADDR, CONFIG_BUS_WIDTH)) {
+	if (ddr3_check_config(udev, CONFIG_BUS_WIDTH)) {
 		ddr_width = 32;
 		DEBUG_INIT_S("DDR3 Training Sequence - DRAM bus width 32Bit\n");
 	}
@@ -904,7 +910,7 @@  void ddr3_static_mc_init(void)
  * Notes:    Only Available for ArmadaXP/Armada 370 DB boards
  * Returns:  None.
  */
-int ddr3_check_config(u32 twsi_addr, MV_CONFIG_TYPE config_type)
+int ddr3_check_config(struct udevice *udev, MV_CONFIG_TYPE config_type)
 {
 #ifdef AUTO_DETECTION_SUPPORT
 	u8 data = 0;
@@ -916,7 +922,7 @@  int ddr3_check_config(u32 twsi_addr, MV_CONFIG_TYPE config_type)
 	else
 		offset = 0;
 
-	ret = i2c_read(twsi_addr, offset, 1, (u8 *)&data, 1);
+	ret = dm_i2c_read(udev, offset, &data, 1);
 	if (!ret) {
 		switch (config_type) {
 		case CONFIG_ECC:
diff --git a/drivers/ddr/marvell/axp/ddr3_init.h b/drivers/ddr/marvell/axp/ddr3_init.h
index 9a21886ac3e7..a26bd2a120e9 100644
--- a/drivers/ddr/marvell/axp/ddr3_init.h
+++ b/drivers/ddr/marvell/axp/ddr3_init.h
@@ -101,7 +101,7 @@  void fix_pll_val(u8 target_fab);
 u32 ddr3_get_fab_opt(void);
 u32 ddr3_get_cpu_freq(void);
 u32 ddr3_get_vco_freq(void);
-int ddr3_check_config(u32 addr, MV_CONFIG_TYPE config_type);
+int ddr3_check_config(struct udevice *udev, MV_CONFIG_TYPE config_type);
 u32 ddr3_get_static_mc_value(u32 reg_addr, u32 offset1, u32 mask1, u32 offset2,
 			     u32 mask2);
 u32 ddr3_cl_to_valid_cl(u32 cl);
diff --git a/drivers/ddr/marvell/axp/ddr3_spd.c b/drivers/ddr/marvell/axp/ddr3_spd.c
index dd772e63ab19..4763403c1278 100644
--- a/drivers/ddr/marvell/axp/ddr3_spd.c
+++ b/drivers/ddr/marvell/axp/ddr3_spd.c
@@ -209,13 +209,19 @@  static u32 ddr3_get_dimm_num(u32 *dimm_addr)
 	/* Read the dimm eeprom */
 	for (dimm_cur_addr = MAX_DIMM_ADDR; dimm_cur_addr > MIN_DIMM_ADDR;
 	     dimm_cur_addr--) {
+		struct udevice *udev;
+
 		data[SPD_DEV_TYPE_BYTE] = 0;
 
 		/* Far-End DIMM must be connected */
 		if ((dimm_num == 0) && (dimm_cur_addr < FAR_END_DIMM_ADDR))
 			return 0;
 
-		ret = i2c_read(dimm_cur_addr, 0, 1, (uchar *)data, 3);
+		ret = i2c_get_chip_for_busnum(0, dimm_cur_addr, 1, &udev);
+		if (ret)
+			continue;
+
+		ret = dm_i2c_read(udev, 0, data, 3);
 		if (!ret) {
 			if (data[SPD_DEV_TYPE_BYTE] == SPD_MEM_TYPE_DDR3) {
 				dimm_addr[dimm_num] = dimm_cur_addr;
@@ -245,9 +251,15 @@  int ddr3_spd_init(MV_DIMM_INFO *info, u32 dimm_addr, u32 dimm_width)
 	__maybe_unused u8 vendor_high, vendor_low;
 
 	if (dimm_addr != 0) {
+		struct udevice *udev;
+
 		memset(spd_data, 0, SPD_SIZE * sizeof(u8));
 
-		ret = i2c_read(dimm_addr, 0, 1, (uchar *)spd_data, SPD_SIZE);
+		ret = i2c_get_chip_for_busnum(0, dimm_addr, 1, &udev);
+		if (ret)
+			return MV_DDR3_TRAINING_ERR_TWSI_FAIL;
+
+		ret = dm_i2c_read(udev, 0, spd_data, SPD_SIZE);
 		if (ret)
 			return MV_DDR3_TRAINING_ERR_TWSI_FAIL;
 	}