From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Simek Date: Mon, 11 Feb 2019 11:06:09 +0100 Subject: [U-Boot] [PATCH v2 0/7] Align U-Boot I2C DM bus ID handling with Linux In-Reply-To: <74f7a301-2901-ceba-67fe-0e24fc197e3c@denx.de> References: <1925c5b2-6e4a-b48d-bfa0-f2ae118dec56@monstr.eu> <05b0cbd3-e372-2e86-e325-c978246de4a4@denx.de> <74f7a301-2901-ceba-67fe-0e24fc197e3c@denx.de> Message-ID: <29568351-68ed-ecb2-1545-7cf19f5687e7@xilinx.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: u-boot@lists.denx.de On 11. 02. 19 9:45, Heiko Schocher wrote: > Hello Michal, > > Am 11.02.2019 um 07:58 schrieb Michal Simek: >> On 11. 02. 19 7:20, Heiko Schocher wrote: >>> 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? >> >> Please take it directly. > > Ok, done. If all builds fine now, I make a pull request for Tom, > thanks! great. Thanks. Michal