[U-Boot] [PATCH v2 0/7] Align U-Boot I2C DM bus ID handling with Linux
Heiko Schocher
hs at denx.de
Mon Feb 11 08:45:42 UTC 2019
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!
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
More information about the U-Boot
mailing list