From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 8/9] tegra: i2c: Enable new CONFIG_SYS_I2C framework
Date: Wed, 31 Jul 2013 07:01:22 +0200 [thread overview]
Message-ID: <51F89A22.3000902@denx.de> (raw)
In-Reply-To: <51F81261.7020008@wwwdotorg.org>
Hello Stephen,
Am 30.07.2013 21:22, schrieb Stephen Warren:
> On 07/29/2013 10:28 PM, Heiko Schocher wrote:
>> Hello Stephen,
>>
>> Am 29.07.2013 18:12, schrieb Stephen Warren:
>>> On 05/04/2013 06:01 AM, Heiko Schocher wrote:
>>>> From: Simon Glass<sjg@chromium.org>
>>>>
>>>> This enables CONFIG_SYS_I2C on Tegra, updating existing boards and
>>>> the Tegra
>>>> i2c driver to support this.
>>>
>>> Heiko, the latest U-Boot tree hangs during boot on Tegra, and "git
>>> bisect" points at this patch. Olof reported the issue to me.
>>> Can you take a look at the code and see what might be wrong? Thanks.
>>>
>>> I suspect some kind of initialization ordering issue, since the boot
>>> messages are:
>>>
>>> -----
>>> U-Boot SPL 2013.07-rc3-00038-g880540d (Jul 29 2013 - 10:04:37)
>>> U-Boot 2013.07-rc3-00038-g880540d (Jul 29 2013 - 10:04:37)
>>>
>>> TEGRA30
>>> Board: NVIDIA Beaver
>>> I2C: Caller requested bad clock: periph=-49, parent=2
>>> -----
>>>
>>> ... and that "bad clock" message implies to me that the I2C driver is
>>> initializing before it has parsed the correct clock ID out of device
>>> tree.
>>
>> Hmm... looking in the patch ... I can see nothing which changes
>> some initializing order ...
>
> Yes, there's some initialization order issue; before this patch, I see
> the I2C controller initialization, followed by some usage of it:
Ok, great!
> ----------
> U-Boot SPL 2013.07-rc3-00036-gd84eb85-dirty (Jul 30 2013 - 13:04:47)
> U-Boot 2013.07-rc3-00036-gd84eb85-dirty (Jul 30 2013 - 13:04:47)
>
> TEGRA30
> Board: NVIDIA Beaver
> DRAM: 2 GiB
> i2c: controller bus 0 at 7000d000, periph_id 47, speed 100000: ok
> i2c: controller bus 1 at 7000c000, periph_id 12, speed 100000: ok
> i2c: controller bus 2 at 7000c400, periph_id 54, speed 100000: ok
> i2c: controller bus 3 at 7000c500, periph_id 67, speed 100000: ok
> i2c: controller bus 4 at 7000c700, periph_id 103, speed 100000: ok
> MMC: i2c_write: chip=0x2d, addr=0x32, len=0x1
> ----------
>
> However with this patch applied, something starts using the controller
> immediately, without it having been "probed" from device-tree:
Hmm... do you have a debugger?
> ----------
> U-Boot SPL 2013.07-rc3-00037-g1f2ba72-dirty (Jul 30 2013 - 13:08:28)
> U-Boot 2013.07-rc3-00037-g1f2ba72-dirty (Jul 30 2013 - 13:08:28)
>
> TEGRA30
> Board: NVIDIA Beaver
> I2C: i2c_init(speed=100000, slaveaddr=0xfe)
> ----------
>
> i2c_init touches HW, but since process_nodes() hasn't run, none of the
> parameters like register address or clock ID are yet known.
>
i> I think this call comes from init_sequence_f[] -> init_func_i2c() ->
> i2c_init() -> i2c_init() == __i2c_init() -> i2c_init_bus() ->
No, we have now defined CONFIG_SYS_I2C and this calls
i2c_init_all() -> i2c_init_board()
and I think, on nvidia board i2c_init_board is defined. Yes, in the
i2c driver there it is ... calling process_nodes() ... so, the i2c
busses should be setup ...
> I2C_ADAP->init(), although I didn't validate that in the running code,
> just by code inspection.
>
> The issue here is that the I2C core and/or Tegra driver seems to be
> statically registering the I2C device objects, even though they should
> be dynamically registered from device tree.
Feel free to post patches.
> Should Tegra move its call of i2c_init_board() out of board_init() to
> board_init_f(), and/or override __i2c_init() to call i2c_init_board()?
No, i2c_init_board gets called here very early:
init_func_i2c() -> i2c_init_all():
static int init_func_i2c(void)
{
puts("I2C: ");
#ifdef CONFIG_SYS_I2C
i2c_init_all();
#else
i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
#endif
puts("ready\n");
return (0);
}
and we have CONFIG_SYS_I2C defined (or, did you have it?)
and in drivers/i2c/i2c_core.c:
void i2c_init_all(void)
{
i2c_init_board();
i2c_set_bus_num(CONFIG_SYS_SPD_BUS_NUM);
return;
}
Ah, I see, it is also called in board_init ...
> I think when init_sequence_f[] is running, there may be no serial
> console to report errors. If so, moving the I2C initialization to that
> early point sounds like a really bad idea.
No, we need i2c before relocation for example to read SPD data
from eeprom, but this is on powerpc.
puts() is working, as your log shows.
I added in the comment from i2c_init_all:
/*
* i2c_init_all():
*
* not longer needed, will deleted. Actual init the SPD_BUS
* for compatibility.
* i2c_adap[] must be initialized beforehead with function pointers and
* data, including speed and slaveaddr.
*/
So the question raises, do we need this on arm?
bye,
Heiko
next prev parent reply other threads:[~2013-07-31 5:01 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-04 12:01 [U-Boot] [PATCH v3 0/9] Bring in new I2C framework Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 1/9] i2c: add i2c_core and prepare for new multibus support Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 2/9] i2c: common changes for multibus/multiadapter support Heiko Schocher
2013-05-06 16:39 ` Daniel Schwierzeck
2013-05-07 13:05 ` Heiko Schocher
2013-05-11 21:17 ` Simon Glass
2013-05-13 4:47 ` Heiko Schocher
2013-05-11 21:33 ` Simon Glass
2013-05-13 5:41 ` Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 3/9] i2c, soft-i2c: switch to new " Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 4/9] i2c, fsl_i2c: " Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 5/9] i2c, multibus: get rid of CONFIG_I2C_MUX Heiko Schocher
2013-05-06 12:23 ` Holger Brunck
2013-05-06 13:57 ` Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 6/9] i2c, multibus, keymile: get rid of EEprom_ivm envvariable Heiko Schocher
2013-05-06 12:24 ` Holger Brunck
2013-05-06 13:58 ` Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 7/9] tegra: i2c: Add function to know about current bus Heiko Schocher
2013-05-04 12:01 ` [U-Boot] [PATCH v3 8/9] tegra: i2c: Enable new CONFIG_SYS_I2C framework Heiko Schocher
2013-05-06 19:08 ` Stephen Warren
2013-05-07 8:01 ` [U-Boot] [PATCH v3 8/9] tegra: i2c: Enable new CONFIG_SYS_I2Cframework Marc Dietrich
2013-05-07 14:55 ` Stephen Warren
2013-05-07 16:17 ` Simon Glass
2013-05-08 4:11 ` Heiko Schocher
2013-05-07 13:07 ` [U-Boot] [PATCH v3 8/9] tegra: i2c: Enable new CONFIG_SYS_I2C framework Heiko Schocher
[not found] ` <5FBF8E85CA34454794F0F7ECBA79798F37ACAFEF3F@HQMAIL04.nvidia.com>
2013-05-07 13:12 ` Heiko Schocher
2013-07-29 16:12 ` Stephen Warren
2013-07-30 4:28 ` Heiko Schocher
2013-07-30 4:34 ` Simon Glass
2013-07-30 18:56 ` Stephen Warren
2013-07-31 4:29 ` Heiko Schocher
2013-07-30 19:22 ` Stephen Warren
2013-07-30 20:00 ` Stephen Warren
2013-07-30 21:21 ` Simon Glass
2013-07-30 21:32 ` Stephen Warren
2013-07-30 21:46 ` Simon Glass
2013-07-30 21:51 ` Stephen Warren
2013-07-30 22:05 ` Simon Glass
2013-07-31 5:46 ` Heiko Schocher
2013-07-31 19:31 ` Stephen Warren
2013-08-01 4:32 ` Heiko Schocher
2013-08-01 5:39 ` Stephen Warren
2013-08-01 6:02 ` Heiko Schocher
2013-08-01 6:53 ` Albert ARIBAUD
2013-08-01 8:38 ` Heiko Schocher
2013-08-01 14:22 ` Simon Glass
2013-08-01 15:06 ` Heiko Schocher
2013-08-01 20:16 ` Albert ARIBAUD
2013-08-02 19:32 ` Simon Glass
2013-08-01 20:14 ` Albert ARIBAUD
2013-08-01 20:34 ` Stephen Warren
2013-08-01 20:32 ` Stephen Warren
2013-08-02 4:40 ` Heiko Schocher
2013-08-02 19:35 ` Simon Glass
2013-08-02 21:43 ` Stephen Warren
2013-08-03 3:55 ` Heiko Schocher
2013-08-05 15:40 ` Simon Glass
2013-08-05 17:28 ` Stephen Warren
2013-08-05 20:12 ` Simon Glass
2013-08-05 20:15 ` Stephen Warren
2013-08-05 17:59 ` Stephen Warren
2013-07-30 22:09 ` Albert ARIBAUD
2013-07-30 22:11 ` Simon Glass
2013-07-31 5:18 ` Wolfgang Denk
2013-07-31 5:55 ` Heiko Schocher
2013-07-31 7:06 ` Albert ARIBAUD
2013-07-31 7:36 ` Heiko Schocher
2013-07-31 8:16 ` Albert ARIBAUD
2013-07-31 8:31 ` Heiko Schocher
2013-07-31 9:38 ` Albert ARIBAUD
2013-07-31 12:30 ` Simon Glass
2013-07-31 13:03 ` Heiko Schocher
2013-07-31 19:41 ` Stephen Warren
2013-08-01 4:32 ` Heiko Schocher
2013-07-31 19:39 ` Wolfgang Denk
2013-07-31 5:52 ` Heiko Schocher
2013-07-31 5:03 ` Heiko Schocher
2013-08-05 19:21 ` Stephen Warren
2013-08-05 20:08 ` Tom Rini
2013-08-05 21:06 ` Stephen Warren
2013-08-05 23:18 ` Stephen Warren
2013-07-30 21:19 ` Simon Glass
2013-07-30 21:21 ` Stephen Warren
2013-07-30 21:45 ` Simon Glass
2013-07-31 5:01 ` Heiko Schocher [this message]
2013-05-04 12:01 ` [U-Boot] [PATCH v3 9/9] i2c, ppc4xx_i2c: switch to new multibus/multiadapter support Heiko Schocher
2013-05-06 6:52 ` Stefan Roese
2013-05-06 8:57 ` [U-Boot] [PATCH v3 0/9] Bring in new I2C framework Dirk Eibach
2013-05-06 14:11 ` Heiko Schocher
2013-05-17 13:17 ` Piotr Wilczek
2013-05-18 17:41 ` Simon Glass
2013-05-20 6:13 ` Piotr Wilczek
2013-06-19 22:07 ` Simon Glass
2013-06-20 3:38 ` Heiko Schocher
2013-06-20 5:50 ` Minkyu Kang
2013-06-20 6:41 ` Piotr Wilczek
2013-06-20 7:14 ` Heiko Schocher
2013-06-20 8:34 ` Piotr Wilczek
2013-06-20 9:19 ` Heiko Schocher
2013-06-20 5:52 ` Piotr Wilczek
2013-06-20 6:52 ` Dirk Eibach
2013-06-20 7:59 ` Heiko Schocher
2013-06-20 8:20 ` Dirk Eibach
2013-06-20 9:11 ` Heiko Schocher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51F89A22.3000902@denx.de \
--to=hs@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox