All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] i2c_set_bus_num freeze
@ 2017-01-26 17:42 Ran Shalit
  2017-01-26 23:20 ` Adam Ford
  2017-01-27  6:46 ` Heiko Schocher
  0 siblings, 2 replies; 8+ messages in thread
From: Ran Shalit @ 2017-01-26 17:42 UTC (permalink / raw)
  To: u-boot

Hello,

I have some issue in u-boot trying to access bus #1.

I can access bus #0, #2 with i2c dev 0/2

I can also access bus #0,1,2 from linux.

But on trying to access i2c #1 in u-boot in hangs:

The function i2c_set_bus_num get stuck .


ret = i2c_set_bus_num(1);

<<------- never gets here .........
 if (ret)
     printf("Failure changing bus number (%d)\n", ret);

It hangs in i2c_set_bus_num->i2c_init->

......

    printf("i2c_init 8\n");

bus_initialized[current_bus] = 1;
if (readw (I2C_CON) & I2C_CON_EN) {
writew (0, I2C_CON);
udelay (50000);
}

writew(psc, I2C_PSC);
writew(scll, I2C_SCLL);
writew(sclh, I2C_SCLH);

/* own address */
writew (slaveadd, I2C_OA);
writew (I2C_CON_EN, I2C_CON);

    printf("i2c_init 9\n");  <<------ never get printed ..................

I have seen a similar question, yet I am doing this access after u-boot
complete, and command prompt.

Is anyone familiar with this ?

Regards,

Ran

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] i2c_set_bus_num freeze
  2017-01-26 17:42 [U-Boot] i2c_set_bus_num freeze Ran Shalit
@ 2017-01-26 23:20 ` Adam Ford
  2017-01-27  5:30   ` Ran Shalit
  2017-01-27  6:46 ` Heiko Schocher
  1 sibling, 1 reply; 8+ messages in thread
From: Adam Ford @ 2017-01-26 23:20 UTC (permalink / raw)
  To: u-boot

On Jan 26, 2017 11:44 AM, "Ran Shalit" <ranshalit@gmail.com> wrote:

Hello,

I have some issue in u-boot trying to access bus #1.

I can access bus #0, #2 with i2c dev 0/2

I can also access bus #0,1,2 from linux.

But on trying to access i2c #1 in u-boot in hangs:

The function i2c_set_bus_num get stuck .


ret = i2c_set_bus_num(1);

<<------- never gets here .........
 if (ret)
     printf("Failure changing bus number (%d)\n", ret);

It hangs in i2c_set_bus_num->i2c_init->

......

    printf("i2c_init 8\n");

bus_initialized[current_bus] = 1;
if (readw (I2C_CON) & I2C_CON_EN) {
writew (0, I2C_CON);
udelay (50000);
}

writew(psc, I2C_PSC);
writew(scll, I2C_SCLL);
writew(sclh, I2C_SCLH);

/* own address */
writew (slaveadd, I2C_OA);
writew (I2C_CON_EN, I2C_CON);

    printf("i2c_init 9\n");  <<------ never get printed ..................

I have seen a similar question, yet I am doing this access after u-boot
complete, and command prompt.

Is anyone familiar with this ?


What platform are you using?



Regards,

Ran
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] i2c_set_bus_num freeze
  2017-01-26 23:20 ` Adam Ford
@ 2017-01-27  5:30   ` Ran Shalit
  0 siblings, 0 replies; 8+ messages in thread
From: Ran Shalit @ 2017-01-27  5:30 UTC (permalink / raw)
  To: u-boot

On Jan 27, 2017 1:20 AM, "Adam Ford" <aford173@gmail.com> wrote:
>
>
>
> On Jan 26, 2017 11:44 AM, "Ran Shalit" <ranshalit@gmail.com> wrote:
>>
>> Hello,
>>
>> I have some issue in u-boot trying to access bus #1.
>>
>> I can access bus #0, #2 with i2c dev 0/2
>>
>> I can also access bus #0,1,2 from linux.
>>
>> But on trying to access i2c #1 in u-boot in hangs:
>>
>> The function i2c_set_bus_num get stuck .
>>
>>
>> ret = i2c_set_bus_num(1);
>>
>> <<------- never gets here .........
>>  if (ret)
>>      printf("Failure changing bus number (%d)\n", ret);
>>
>> It hangs in i2c_set_bus_num->i2c_init->
>>
>> ......
>>
>>     printf("i2c_init 8\n");
>>
>> bus_initialized[current_bus] = 1;
>> if (readw (I2C_CON) & I2C_CON_EN) {
>> writew (0, I2C_CON);
>> udelay (50000);
>> }
>>
>> writew(psc, I2C_PSC);
>> writew(scll, I2C_SCLL);
>> writew(sclh, I2C_SCLH);
>>
>> /* own address */
>> writew (slaveadd, I2C_OA);
>> writew (I2C_CON_EN, I2C_CON);
>>
>>     printf("i2c_init 9\n");  <<------ never get printed
..................
>>
>> I have seen a similar question, yet I am doing this access after u-boot
>> complete, and command prompt.
>>
>> Is anyone familiar with this ?
>>
>>
>> What platform are you using?

I am using dm8148 TI.
I suspected pinmux but it seems to be ok and it is the same pinmux used in
linux. In linux access to i2c 0,1,2 works without issues.

>
>
>
>> Regards,
>>
>> Ran
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
>
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] i2c_set_bus_num freeze
  2017-01-26 17:42 [U-Boot] i2c_set_bus_num freeze Ran Shalit
  2017-01-26 23:20 ` Adam Ford
@ 2017-01-27  6:46 ` Heiko Schocher
  2017-01-27  7:08   ` Ran Shalit
  1 sibling, 1 reply; 8+ messages in thread
From: Heiko Schocher @ 2017-01-27  6:46 UTC (permalink / raw)
  To: u-boot

Hello Ran,

Am 26.01.2017 um 18:42 schrieb Ran Shalit:
> Hello,
>
> I have some issue in u-boot trying to access bus #1.

On which hardware? Is the board in mainline?

> I can access bus #0, #2 with i2c dev 0/2
>
> I can also access bus #0,1,2 from linux.
>
> But on trying to access i2c #1 in u-boot in hangs:
>
> The function i2c_set_bus_num get stuck .
>
>
> ret = i2c_set_bus_num(1);
>
> <<------- never gets here .........
>   if (ret)
>       printf("Failure changing bus number (%d)\n", ret);
>
> It hangs in i2c_set_bus_num->i2c_init->
>
> ......
>
>      printf("i2c_init 8\n");

You see this printf?

> bus_initialized[current_bus] = 1;
> if (readw (I2C_CON) & I2C_CON_EN) {
> writew (0, I2C_CON);
> udelay (50000);
> }
>
> writew(psc, I2C_PSC);
> writew(scll, I2C_SCLL);
> writew(sclh, I2C_SCLH);
>
> /* own address */
> writew (slaveadd, I2C_OA);
> writew (I2C_CON_EN, I2C_CON);
>
>      printf("i2c_init 9\n");  <<------ never get printed ..................
>
> I have seen a similar question, yet I am doing this access after u-boot
> complete, and command prompt.
>
> Is anyone familiar with this ?

Hmm.. no reason, why the last printf should not come ...

As I do not know, on which hw ... I just can speculate ...

Is the clock for the i2c subsystem 1 in the SoC enabled?

bye,
Heiko
>
> Regards,
>
> Ran
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] i2c_set_bus_num freeze
  2017-01-27  6:46 ` Heiko Schocher
@ 2017-01-27  7:08   ` Ran Shalit
  2017-01-27  7:12     ` Ran Shalit
  2017-01-27  7:24     ` Heiko Schocher
  0 siblings, 2 replies; 8+ messages in thread
From: Ran Shalit @ 2017-01-27  7:08 UTC (permalink / raw)
  To: u-boot

On Fri, Jan 27, 2017 at 8:46 AM, Heiko Schocher <hs@denx.de> wrote:

> Hello Ran,
>
> Am 26.01.2017 um 18:42 schrieb Ran Shalit:
>
>> Hello,
>>
>> I have some issue in u-boot trying to access bus #1.
>>
>
> On which hardware? Is the board in mainline?


Yes, it's TI's dm8148 (ti81xx, ti814x)

>
>
> I can access bus #0, #2 with i2c dev 0/2
>>
>> I can also access bus #0,1,2 from linux.
>>
>> But on trying to access i2c #1 in u-boot in hangs:
>>
>> The function i2c_set_bus_num get stuck .
>>
>>
>> ret = i2c_set_bus_num(1);
>>
>> <<------- never gets here .........
>>   if (ret)
>>       printf("Failure changing bus number (%d)\n", ret);
>>
>> It hangs in i2c_set_bus_num->i2c_init->
>>
>> ......
>>
>>      printf("i2c_init 8\n");
>>
>
> You see this printf?


Yes, it seems to get stuck here:

if (readw (I2C_CON) & I2C_CON_EN) {
<<--------- we never gets here !!!!!!!!!!!!!!!!!!!!!!!!!!!
writew (0, I2C_CON);



>
>
> bus_initialized[current_bus] = 1;
>> if (readw (I2C_CON) & I2C_CON_EN) {
>> writew (0, I2C_CON);
>> udelay (50000);
>> }
>>
>> writew(psc, I2C_PSC);
>> writew(scll, I2C_SCLL);
>> writew(sclh, I2C_SCLH);
>>
>> /* own address */
>> writew (slaveadd, I2C_OA);
>> writew (I2C_CON_EN, I2C_CON);
>>
>>      printf("i2c_init 9\n");  <<------ never get printed
>> ..................
>>
>> I have seen a similar question, yet I am doing this access after u-boot
>> complete, and command prompt.
>>
>> Is anyone familiar with this ?
>>
>
> Hmm.. no reason, why the last printf should not come ...
>
> As I do not know, on which hw ... I just can speculate ...
>
> Is the clock for the i2c subsystem 1 in the SoC enabled?
>

TI's DM8148.
I remember that I once used that code and it works, so I quite amazed that
it stopped working now.
The board had some changes from that time when I tried the code, and the sw
too some minor changes (i2c eerom added in bus #0),  but I really don't
understand why it doesn't work any more :(

It might be clock issue, I'll check.


>
> bye,
> Heiko
>
>
>> Regards,
>>
>> Ran
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
>>
>>
> --
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] i2c_set_bus_num freeze
  2017-01-27  7:08   ` Ran Shalit
@ 2017-01-27  7:12     ` Ran Shalit
  2017-01-27  7:16       ` Michael Nazzareno Trimarchi
  2017-01-27  7:24     ` Heiko Schocher
  1 sibling, 1 reply; 8+ messages in thread
From: Ran Shalit @ 2017-01-27  7:12 UTC (permalink / raw)
  To: u-boot

On Fri, Jan 27, 2017 at 9:08 AM, Ran Shalit <ranshalit@gmail.com> wrote:

>
>
> On Fri, Jan 27, 2017 at 8:46 AM, Heiko Schocher <hs@denx.de> wrote:
>
>> Hello Ran,
>>
>> Am 26.01.2017 um 18:42 schrieb Ran Shalit:
>>
>>> Hello,
>>>
>>> I have some issue in u-boot trying to access bus #1.
>>>
>>
>> On which hardware? Is the board in mainline?
>
>
> Yes, it's TI's dm8148 (ti81xx, ti814x)
>
>>
>>
>> I can access bus #0, #2 with i2c dev 0/2
>>>
>>> I can also access bus #0,1,2 from linux.
>>>
>>> But on trying to access i2c #1 in u-boot in hangs:
>>>
>>> The function i2c_set_bus_num get stuck .
>>>
>>>
>>> ret = i2c_set_bus_num(1);
>>>
>>> <<------- never gets here .........
>>>   if (ret)
>>>       printf("Failure changing bus number (%d)\n", ret);
>>>
>>> It hangs in i2c_set_bus_num->i2c_init->
>>>
>>> ......
>>>
>>>      printf("i2c_init 8\n");
>>>
>>
>> You see this printf?
>
>
> Yes, it seems to get stuck here:
>
> if (readw (I2C_CON) & I2C_CON_EN) {
> <<--------- we never gets here !!!!!!!!!!!!!!!!!!!!!!!!!!!
> writew (0, I2C_CON);
>
>
>
>>
>>
>> bus_initialized[current_bus] = 1;
>>> if (readw (I2C_CON) & I2C_CON_EN) {
>>> writew (0, I2C_CON);
>>> udelay (50000);
>>> }
>>>
>>> writew(psc, I2C_PSC);
>>> writew(scll, I2C_SCLL);
>>> writew(sclh, I2C_SCLH);
>>>
>>> /* own address */
>>> writew (slaveadd, I2C_OA);
>>> writew (I2C_CON_EN, I2C_CON);
>>>
>>>      printf("i2c_init 9\n");  <<------ never get printed
>>> ..................
>>>
>>> I have seen a similar question, yet I am doing this access after u-boot
>>> complete, and command prompt.
>>>
>>> Is anyone familiar with this ?
>>>
>>
>> Hmm.. no reason, why the last printf should not come ...
>>
>> As I do not know, on which hw ... I just can speculate ...
>>
>> Is the clock for the i2c subsystem 1 in the SoC enabled?
>>
>
> TI's DM8148.
> I remember that I once used that code and it works, so I quite amazed that
> it stopped working now.
> The board had some changes from that time when I tried the code, and the
> sw too some minor changes (i2c eerom added in bus #0),  but I really don't
> understand why it doesn't work any more :(
>
> It might be clock issue, I'll check.
>
>

I still don't understand what reason for it to get stuck in:
 if (readw (I2C_CON) & I2C_CON_EN)
It's a simple register reading, Right ?
So why should it hangs after calling ?

Regards,
Ran


>> bye,
>> Heiko
>>
>>
>>> Regards,
>>>
>>> Ran
>>> _______________________________________________
>>> U-Boot mailing list
>>> U-Boot at lists.denx.de
>>> http://lists.denx.de/mailman/listinfo/u-boot
>>>
>>>
>> --
>> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
>> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>>
>
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] i2c_set_bus_num freeze
  2017-01-27  7:12     ` Ran Shalit
@ 2017-01-27  7:16       ` Michael Nazzareno Trimarchi
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Nazzareno Trimarchi @ 2017-01-27  7:16 UTC (permalink / raw)
  To: u-boot

Hi


On 27 Jan 2017 3:13 p.m., "Ran Shalit" <ranshalit@gmail.com> wrote:

On Fri, Jan 27, 2017 at 9:08 AM, Ran Shalit <ranshalit@gmail.com> wrote:



>
>
> On Fri, Jan 27, 2017 at 8:46 AM, Heiko Schocher <hs@denx.de> wrote:
>
>> Hello Ran,
>>
>> Am 26.01.2017 um 18:42 schrieb Ran Shalit:
>>
>>> Hello,
>>>
>>> I have some issue in u-boot trying to access bus #1.
>>>
>>
>> On which hardware? Is the board in mainline?
>
>
> Yes, it's TI's dm8148 (ti81xx, ti814x)
>
>>
>>
>> I can access bus #0, #2 with i2c dev 0/2
>>>
>>> I can also access bus #0,1,2 from linux.
>>>
>>> But on trying to access i2c #1 in u-boot in hangs:
>>>
>>> The function i2c_set_bus_num get stuck .
>>>
>>>
>>> ret = i2c_set_bus_num(1);
>>>
>>> <<------- never gets here .........
>>>   if (ret)
>>>       printf("Failure changing bus number (%d)\n", ret);
>>>
>>> It hangs in i2c_set_bus_num->i2c_init->
>>>
>>> ......
>>>
>>>      printf("i2c_init 8\n");
>>>
>>
>> You see this printf?
>
>
> Yes, it seems to get stuck here:
>
> if (readw (I2C_CON) & I2C_CON_EN) {
> <<--------- we never gets here !!!!!!!!!!!!!!!!!!!!!!!!!!!
> writew (0, I2C_CON);
>
>
>
>>
>>
>> bus_initialized[current_bus] = 1;
>>> if (readw (I2C_CON) & I2C_CON_EN) {
>>> writew (0, I2C_CON);
>>> udelay (50000);
>>> }
>>>
>>> writew(psc, I2C_PSC);
>>> writew(scll, I2C_SCLL);
>>> writew(sclh, I2C_SCLH);
>>>
>>> /* own address */
>>> writew (slaveadd, I2C_OA);
>>> writew (I2C_CON_EN, I2C_CON);
>>>
>>>      printf("i2c_init 9\n");  <<------ never get printed
>>> ..................
>>>
>>> I have seen a similar question, yet I am doing this access after u-boot
>>> complete, and command prompt.
>>>
>>> Is anyone familiar with this ?
>>>
>>
>> Hmm.. no reason, why the last printf should not come ...
>>
>> As I do not know, on which hw ... I just can speculate ...
>>
>> Is the clock for the i2c subsystem 1 in the SoC enabled?
>>
>
> TI's DM8148.
> I remember that I once used that code and it works, so I quite amazed that
> it stopped working now.
> The board had some changes from that time when I tried the code, and the
> sw too some minor changes (i2c eerom added in bus #0),  but I really don't
> understand why it doesn't work any more :(
>
> It might be clock issue, I'll check.
>
>



I still don't understand what reason for it to get stuck in:
 if (readw (I2C_CON) & I2C_CON_EN)
It's a simple register reading, Right ?
So why should it hangs after calling ?

Regards,
Ran


If the clock is not enable for the bus it can not work. Please check if you
need to declare the i2c bus in use

Michael



>> bye,
>> Heiko
>>
>>
>>> Regards,
>>>
>>> Ran
>>> _______________________________________________
>>> U-Boot mailing list
>>> U-Boot at lists.denx.de
>>> http://lists.denx.de/mailman/listinfo/u-boot
>>>
>>>
>> --
>> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
>> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>>
>
>
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] i2c_set_bus_num freeze
  2017-01-27  7:08   ` Ran Shalit
  2017-01-27  7:12     ` Ran Shalit
@ 2017-01-27  7:24     ` Heiko Schocher
  1 sibling, 0 replies; 8+ messages in thread
From: Heiko Schocher @ 2017-01-27  7:24 UTC (permalink / raw)
  To: u-boot

Hello Ran,

Am 27.01.2017 um 08:08 schrieb Ran Shalit:
>
>
> On Fri, Jan 27, 2017 at 8:46 AM, Heiko Schocher <hs at denx.de <mailto:hs@denx.de>> wrote:
>
>     Hello Ran,
>
>     Am 26.01.2017 um 18:42 schrieb Ran Shalit:
>
>         Hello,
>
>         I have some issue in u-boot trying to access bus #1.
>
>
>     On which hardware? Is the board in mainline?
>
>
> Yes, it's TI's dm8148 (ti81xx, ti814x)

Which defconfig do you use?

>         I can access bus #0, #2 with i2c dev 0/2
>
>         I can also access bus #0,1,2 from linux.
>
>         But on trying to access i2c #1 in u-boot in hangs:
>
>         The function i2c_set_bus_num get stuck .
>
>
>         ret = i2c_set_bus_num(1);
>
>         <<------- never gets here .........
>            if (ret)
>                printf("Failure changing bus number (%d)\n", ret);
>
>         It hangs in i2c_set_bus_num->i2c_init->
>
>         ......
>
>               printf("i2c_init 8\n");
>
>
>     You see this printf?
>
> Yes, it seems to get stuck here:
>
> if (readw (I2C_CON) & I2C_CON_EN) {
> <<--------- we never gets here !!!!!!!!!!!!!!!!!!!!!!!!!!!
> writew (0, I2C_CON);
>
>
>
>         bus_initialized[current_bus] = 1;
>         if (readw (I2C_CON) & I2C_CON_EN) {

Hmm... if I search for "bus_initialized" in mainline code:

$ grep -lr bus_initialized drivers/i2c/
drivers/i2c/mv_i2c.c

I only find the mv_i2c driver ... do you use current mainline code?

>         writew (0, I2C_CON);
>         udelay (50000);
>         }
>
>         writew(psc, I2C_PSC);
>         writew(scll, I2C_SCLL);
>         writew(sclh, I2C_SCLH);
>
>         /* own address */
>         writew (slaveadd, I2C_OA);
>         writew (I2C_CON_EN, I2C_CON);
>
>               printf("i2c_init 9\n");  <<------ never get printed ..................
>
>         I have seen a similar question, yet I am doing this access after u-boot
>         complete, and command prompt.
>
>         Is anyone familiar with this ?
>
>
>     Hmm.. no reason, why the last printf should not come ...
>
>     As I do not know, on which hw ... I just can speculate ...
>
>     Is the clock for the i2c subsystem 1 in the SoC enabled?
>
>
> TI's DM8148.
> I remember that I once used that code and it works, so I quite amazed that it stopped working now.
> The board had some changes from that time when I tried the code, and the sw too some minor changes
> (i2c eerom added in bus #0),  but I really don't understand why it doesn't work any more :(
>
> It might be clock issue, I'll check.

Thanks!

bye,
Heiko
>
>
>     bye,
>     Heiko
>
>
>         Regards,
>
>         Ran
>         _______________________________________________
>         U-Boot mailing list
>         U-Boot at lists.denx.de <mailto:U-Boot@lists.denx.de>
>         http://lists.denx.de/mailman/listinfo/u-boot <http://lists.denx.de/mailman/listinfo/u-boot>
>
>
>     --
>     DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
>     HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>
>

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-01-27  7:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-26 17:42 [U-Boot] i2c_set_bus_num freeze Ran Shalit
2017-01-26 23:20 ` Adam Ford
2017-01-27  5:30   ` Ran Shalit
2017-01-27  6:46 ` Heiko Schocher
2017-01-27  7:08   ` Ran Shalit
2017-01-27  7:12     ` Ran Shalit
2017-01-27  7:16       ` Michael Nazzareno Trimarchi
2017-01-27  7:24     ` Heiko Schocher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.