U-Boot sunxi DM_I2C migration?

Hey,
As I try and migrate more CONFIG symbols to be Kconfig only, I see that sunxi is still using the legacy I2C drivers. Is there something specific holding up migration? Thanks!

On Thu, 12 Aug 2021 13:49:30 -0400 Tom Rini trini@konsulko.com wrote:
Hi Tom,
As I try and migrate more CONFIG symbols to be Kconfig only, I see that sunxi is still using the legacy I2C drivers. Is there something specific holding up migration? Thanks!
Do you mean a DM_I2C conversion, or just moving those base address symbols to Kconfig? The latter is rather easy, let me know if I should give it a shot.
For DM_I2C, it's the usual sunxi issue: we are using both: DM_I2C and DT based probing for U-Boot proper, and hardcoded CONFIG_ symbols for the SPL. *Some* boards need the set up the PMIC early (for increasing the CPU frequency or setting the proper DRAM voltage), so this needs to be done in the SPL. I don't know how to fix this "properly", but introducing DM (and DT) into the SPL is surely not worth the trouble. Alternatively we could have a separate, cut-down SPL-only driver, like we have for SPI (arch/arm/mach-sunxi/spl_spi_sunxi.c), but not sure that's really better.
If there is something in particular that annoys you about the situation, we could try to improve this particular issue instead? Moving the non-DM code into a separate file, maybe?
Cheers, Andre

On Thu, Aug 12, 2021 at 10:22:07PM +0100, Andre Przywara wrote:
On Thu, 12 Aug 2021 13:49:30 -0400 Tom Rini trini@konsulko.com wrote:
Hi Tom,
As I try and migrate more CONFIG symbols to be Kconfig only, I see that sunxi is still using the legacy I2C drivers. Is there something specific holding up migration? Thanks!
Do you mean a DM_I2C conversion, or just moving those base address symbols to Kconfig? The latter is rather easy, let me know if I should give it a shot.
For DM_I2C, it's the usual sunxi issue: we are using both: DM_I2C and DT based probing for U-Boot proper, and hardcoded CONFIG_ symbols for the SPL. *Some* boards need the set up the PMIC early (for increasing the CPU frequency or setting the proper DRAM voltage), so this needs to be done in the SPL. I don't know how to fix this "properly", but introducing DM (and DT) into the SPL is surely not worth the trouble. Alternatively we could have a separate, cut-down SPL-only driver, like we have for SPI (arch/arm/mach-sunxi/spl_spi_sunxi.c), but not sure that's really better.
If there is something in particular that annoys you about the situation, we could try to improve this particular issue instead? Moving the non-DM code into a separate file, maybe?
I'm working on the symbols now (since it gets tricky). The first example I pulled out was Hummingbird_A31 which does have legacy I2C and does not set DM_I2C, which is what set me down the more worrying path. If you can confirm that no, really, it's just SPL that's not using DM_I2C that's OK enough for now, we can sort out what the best but probably still unideal solution is long term for SPL.

On Thu, Aug 12, 2021 at 05:40:34PM -0400, Tom Rini wrote:
On Thu, Aug 12, 2021 at 10:22:07PM +0100, Andre Przywara wrote:
On Thu, 12 Aug 2021 13:49:30 -0400 Tom Rini trini@konsulko.com wrote:
Hi Tom,
As I try and migrate more CONFIG symbols to be Kconfig only, I see that sunxi is still using the legacy I2C drivers. Is there something specific holding up migration? Thanks!
Do you mean a DM_I2C conversion, or just moving those base address symbols to Kconfig? The latter is rather easy, let me know if I should give it a shot.
For DM_I2C, it's the usual sunxi issue: we are using both: DM_I2C and DT based probing for U-Boot proper, and hardcoded CONFIG_ symbols for the SPL. *Some* boards need the set up the PMIC early (for increasing the CPU frequency or setting the proper DRAM voltage), so this needs to be done in the SPL. I don't know how to fix this "properly", but introducing DM (and DT) into the SPL is surely not worth the trouble. Alternatively we could have a separate, cut-down SPL-only driver, like we have for SPI (arch/arm/mach-sunxi/spl_spi_sunxi.c), but not sure that's really better.
If there is something in particular that annoys you about the situation, we could try to improve this particular issue instead? Moving the non-DM code into a separate file, maybe?
I'm working on the symbols now (since it gets tricky). The first example I pulled out was Hummingbird_A31 which does have legacy I2C and does not set DM_I2C, which is what set me down the more worrying path. If you can confirm that no, really, it's just SPL that's not using DM_I2C that's OK enough for now, we can sort out what the best but probably still unideal solution is long term for SPL.
As I'm converting the symbols to Kconfig now (and adding SPL_SYS_I2C_LEGACY), what I'm seeing on sunxi is a whole lot of platform enabling the legacy driver in full U-Boot and not DM_I2C. Now it's entirely possible the follow up solution really is just to switch to DM_I2C (and continue SPL_SYS_I2C_LEGACY) and it would be a fairly trivial switch. But I'm not in a good position to make that change and test it, so I'm asking you to please, once I've posted this series to add SPL_SYS_I2C_LEGACY

Hi all,
On 8/17/21 2:23 PM, Tom Rini wrote:
On Thu, Aug 12, 2021 at 05:40:34PM -0400, Tom Rini wrote:
On Thu, Aug 12, 2021 at 10:22:07PM +0100, Andre Przywara wrote:
On Thu, 12 Aug 2021 13:49:30 -0400 Tom Rini trini@konsulko.com wrote:
Hi Tom,
As I try and migrate more CONFIG symbols to be Kconfig only, I see that sunxi is still using the legacy I2C drivers. Is there something specific holding up migration? Thanks!
Do you mean a DM_I2C conversion, or just moving those base address symbols to Kconfig? The latter is rather easy, let me know if I should give it a shot.
For DM_I2C, it's the usual sunxi issue: we are using both: DM_I2C and DT based probing for U-Boot proper, and hardcoded CONFIG_ symbols for the SPL. *Some* boards need the set up the PMIC early (for increasing the CPU frequency or setting the proper DRAM voltage), so this needs to be done in the SPL. I don't know how to fix this "properly", but introducing DM (and DT) into the SPL is surely not worth the trouble. Alternatively we could have a separate, cut-down SPL-only driver, like we have for SPI (arch/arm/mach-sunxi/spl_spi_sunxi.c), but not sure that's really better.
If there is something in particular that annoys you about the situation, we could try to improve this particular issue instead? Moving the non-DM code into a separate file, maybe?
I'm working on the symbols now (since it gets tricky). The first example I pulled out was Hummingbird_A31 which does have legacy I2C and does not set DM_I2C, which is what set me down the more worrying path. If you can confirm that no, really, it's just SPL that's not using DM_I2C that's OK enough for now, we can sort out what the best but probably still unideal solution is long term for SPL.
As I'm converting the symbols to Kconfig now (and adding SPL_SYS_I2C_LEGACY), what I'm seeing on sunxi is a whole lot of platform enabling the legacy driver in full U-Boot and not DM_I2C. Now it's entirely possible the follow up solution really is just to switch to DM_I2C (and continue SPL_SYS_I2C_LEGACY) and it would be a fairly trivial switch. But I'm not in a good position to make that change and test it, so I'm asking you to please, once I've posted this series to add SPL_SYS_I2C_LEGACY
I am aware of three places where sunxi boards use legacy I2C in U-Boot proper: - The i2c_soft usage enabled by CONFIG_VIDEO_LCD_PANEL_I2C - The axp_gpio driver (through pmic_bus_*) - do_poweroff() in drivers/power/axp*.c (through pmic_bus_write)
I have a patch series for converting all of these that I will be sending within the next few days. The two tricky parts are: - I have no way to test either board that uses VIDEO_LCD_PANEL_I2C, so I do not want to rely on bus number ordering. - I am trying to arrange changes in an order that never breaks any functionality, so some driver must be temporarily compatible with both legacy and DM I2C.
I will rebase this on top of the Kconfig series before sending it.
Regards, Samuel

On Wed, Aug 18, 2021 at 12:20:10AM -0500, Samuel Holland wrote:
Hi all,
On 8/17/21 2:23 PM, Tom Rini wrote:
On Thu, Aug 12, 2021 at 05:40:34PM -0400, Tom Rini wrote:
On Thu, Aug 12, 2021 at 10:22:07PM +0100, Andre Przywara wrote:
On Thu, 12 Aug 2021 13:49:30 -0400 Tom Rini trini@konsulko.com wrote:
Hi Tom,
As I try and migrate more CONFIG symbols to be Kconfig only, I see that sunxi is still using the legacy I2C drivers. Is there something specific holding up migration? Thanks!
Do you mean a DM_I2C conversion, or just moving those base address symbols to Kconfig? The latter is rather easy, let me know if I should give it a shot.
For DM_I2C, it's the usual sunxi issue: we are using both: DM_I2C and DT based probing for U-Boot proper, and hardcoded CONFIG_ symbols for the SPL. *Some* boards need the set up the PMIC early (for increasing the CPU frequency or setting the proper DRAM voltage), so this needs to be done in the SPL. I don't know how to fix this "properly", but introducing DM (and DT) into the SPL is surely not worth the trouble. Alternatively we could have a separate, cut-down SPL-only driver, like we have for SPI (arch/arm/mach-sunxi/spl_spi_sunxi.c), but not sure that's really better.
If there is something in particular that annoys you about the situation, we could try to improve this particular issue instead? Moving the non-DM code into a separate file, maybe?
I'm working on the symbols now (since it gets tricky). The first example I pulled out was Hummingbird_A31 which does have legacy I2C and does not set DM_I2C, which is what set me down the more worrying path. If you can confirm that no, really, it's just SPL that's not using DM_I2C that's OK enough for now, we can sort out what the best but probably still unideal solution is long term for SPL.
As I'm converting the symbols to Kconfig now (and adding SPL_SYS_I2C_LEGACY), what I'm seeing on sunxi is a whole lot of platform enabling the legacy driver in full U-Boot and not DM_I2C. Now it's entirely possible the follow up solution really is just to switch to DM_I2C (and continue SPL_SYS_I2C_LEGACY) and it would be a fairly trivial switch. But I'm not in a good position to make that change and test it, so I'm asking you to please, once I've posted this series to add SPL_SYS_I2C_LEGACY
I am aware of three places where sunxi boards use legacy I2C in U-Boot proper:
- The i2c_soft usage enabled by CONFIG_VIDEO_LCD_PANEL_I2C
- The axp_gpio driver (through pmic_bus_*)
- do_poweroff() in drivers/power/axp*.c (through pmic_bus_write)
I have a patch series for converting all of these that I will be sending within the next few days. The two tricky parts are:
- I have no way to test either board that uses VIDEO_LCD_PANEL_I2C, so I do not want to rely on bus number ordering.
- I am trying to arrange changes in an order that never breaks any functionality, so some driver must be temporarily compatible with both legacy and DM I2C.
I will rebase this on top of the Kconfig series before sending it.
Great, thanks!
participants (3)
-
Andre Przywara
-
Samuel Holland
-
Tom Rini