From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Mon, 11 Feb 2019 07:20:58 +0100 Subject: [U-Boot] [PATCH v2 0/7] Align U-Boot I2C DM bus ID handling with Linux In-Reply-To: References: <1925c5b2-6e4a-b48d-bfa0-f2ae118dec56@monstr.eu> Message-ID: <05b0cbd3-e372-2e86-e325-c978246de4a4@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: u-boot@lists.denx.de Hello Michal, Am 08.02.2019 um 12:24 schrieb Michal Simek: > On 08. 02. 19 12:14, Michal Simek wrote: >> On 08. 02. 19 10:57, Heiko Schocher wrote: >>> Hello Michael, >>> >>> Am 31.01.2019 um 16:30 schrieb Michal Simek: >>>> U-Boot with I2C_DM enabled is not capable to list i2c busses connected >>>> to i2c mux. For getting this work there is a need to find out highest >>>> alias ID and use this uniq number for new buses connected to I2C mux. >>>> This series is making this happen. >>>> >>>> There is only one missing piece which is that also i2c controllers which >>>> are not listed in DT are not using this feature. >>>> >>>> Removing setting up aliases from i2c mux code and unifying it in the >>>> same code ensures that numbering schema is proper if no alias is >>>> specified. >>>> >>>> ZynqMP> i2c bus >>>> Bus 0:    i2c at ff020000 >>>>     20: gpio at 20, offset len 1, flags 0 >>>>     21: gpio at 21, offset len 1, flags 0 >>>>     75: i2c-mux at 75, offset len 1, flags 0 >>>> Bus 1:    i2c at ff020000->i2c-mux at 75->i2c at 0 >>>> Bus 2:    i2c at ff020000->i2c-mux at 75->i2c at 1 >>>> Bus 3:    i2c at ff020000->i2c-mux at 75->i2c at 2 >>>> Bus 4:    i2c at ff030000  (active 4) >>>>     74: i2c-mux at 74, offset len 1, flags 0 >>>>     75: i2c-mux at 75, offset len 1, flags 0 >>>> Bus 5:    i2c at ff030000->i2c-mux at 74->i2c at 0  (active 5) >>>>     54: eeprom at 54, offset len 1, flags 0 >>>> Bus 6:    i2c at ff030000->i2c-mux at 74->i2c at 1 >>>> Bus 7:    i2c at ff030000->i2c-mux at 74->i2c at 2 >>>> Bus 8:    i2c at ff030000->i2c-mux at 74->i2c at 3 >>>> Bus 9:    i2c at ff030000->i2c-mux at 74->i2c at 4 >>>> Bus 10:    i2c at ff030000->i2c-mux at 75->i2c at 0 >>>> Bus 11:    i2c at ff030000->i2c-mux at 75->i2c at 1 >>>> Bus 12:    i2c at ff030000->i2c-mux at 75->i2c at 2 >>>> Bus 13:    i2c at ff030000->i2c-mux at 75->i2c at 3 >>>> Bus 14:    i2c at ff030000->i2c-mux at 75->i2c at 4 >>>> Bus 15:    i2c at ff030000->i2c-mux at 75->i2c at 5 >>>> Bus 16:    i2c at ff030000->i2c-mux at 75->i2c at 6 >>>> Bus 17:    i2c at ff030000->i2c-mux at 75->i2c at 7 >>>> >>>> Thanks, >>>> Michal >>>> >>>> Changes in v2: >>>> - Update kernel-doc binding >>>> - Return -1 in case of error. -1 means that the next free alias is 0. >>>> - New patch >>>> - New patch >>>> - Use dev_read_alias_highest_id() >>>> - Use uclass private data >>>> - Use private uclass data >>>> - Fix headers >>>> - Change patch description to focus only on bus name >>>> >>>> Michal Simek (7): >>>>    dm: core: Add of_alias_get_highest_id() >>>>    fdt: Introduce fdtdec_get_alias_highest_id() >>>>    dm: core: Introduce dev_read_alias_highest_id() >>>>    dm: core: Add tests for dev_read_alias_highest_id() >>>>    i2c: dm: Record maximum id of devices before probing devices >>>>    i2c: Fill req_seq in i2c_post_bind() >>>>    i2c: mux: Generate longer i2c mux name >>>> >>>>   drivers/core/of_access.c           | 18 ++++++++++++++ >>>>   drivers/core/read.c                |  8 ++++++ >>>>   drivers/i2c/i2c-uclass.c           | 50 >>>> +++++++++++++++++++++++++++++++++++--- >>>>   drivers/i2c/muxes/i2c-mux-uclass.c | 29 +++++++++++++++++++--- >>>>   include/dm/of_access.h             | 10 ++++++++ >>>>   include/dm/read.h                  | 16 ++++++++++++ >>>>   include/fdtdec.h                   | 13 ++++++++++ >>>>   lib/fdtdec.c                       | 33 +++++++++++++++++++++++++ >>>>   test/dm/test-fdt.c                 | 23 ++++++++++++++++++ >>>>   9 files changed, 194 insertions(+), 6 deletions(-) >>>> >>> >>> I just applied your patches and triggered a build on travis: >>> >>> It shows error for omap boards: >>> >>> https://travis-ci.org/hsdenx/u-boot-i2c/jobs/490393822 >>> >>> I try to find time to look into it, but may you have time too? >>> >> >> This should be the fix. (I tried that on omap35_logic_somlv_defconfig) >> >> diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c >> index 6f3fca2d2326..391fb1289983 100644 >> --- a/drivers/i2c/i2c-uclass.c >> +++ b/drivers/i2c/i2c-uclass.c >> @@ -655,8 +655,12 @@ int i2c_uclass_init(struct uclass *class) >> if (!priv) >> return -ENOMEM; >> >> +#if CONFIG_IS_ENABLED(OF_CONTROL) >> /* Get the last allocated alias. */ >> priv->max_id = dev_read_alias_highest_id("i2c"); >> +#else >> + priv->max_id = -1; >> +#endif >> >> debug("%s: highest alias id is %d\n", __func__, priv->max_id); >> >> >> SPL has no OF_CONTROL and also no LIBFDT that's why it is trying to call >> it. > > :-) that sentence doesn't make sense. Correction: > ...that's why it shouldn't be called. ;-) > Maybe it should be enough to have dependency on OF_LIBFDT but Kconfig is > saying that OF_LIBFDT is bool setup to y when OF_CONTROL is enabled. > And in Makefile fdtdec is enabled > > obj-$(CONFIG_$(SPL_TPL_)OF_CONTROL) += fdtdec.o > or just > obj-$(CONFIG_OF_LIBFDT) += fdtdec.o > > Anyway it should be likely enough to have dependency just on OF_LIBFDT. Ok, do you want to send a v3 of the patch: dm: core: Add of_alias_get_highest_id() or is it OK for you, if I add the above fix to this patch directly? bye, Heiko -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de