[Letux-kernel] u-boot for e60k02

H. Nikolaus Schaller hns at goldelico.com
Sat Oct 5 08:27:50 CEST 2019


Hi,

> Am 03.10.2019 um 19:30 schrieb Andreas Kemnade <andreas at kemnade.info>:
> 
> On Thu, 3 Oct 2019 13:19:22 +0200
> "H. Nikolaus Schaller" <hns at goldelico.com> wrote:
> 
>> wait_for_sr_state: failed sr=81 cr=a0 state=2020
>> i2c_init_transfer: failed for chip 0x32 retry=0
>> wait_for_sr_state: failed sr=81 cr=a0 state=2020
>> i2c_init_transfer: failed for chip 0x32 retry=1
>> wait_for_sr_state: failed sr=81 cr=a0 state=2020
>> i2c_init_transfer: failed for chip 0x32 retry=2
>> i2c_init_transfer: give up i2c_regs=0x21a8000
>> RC5T619 write to [0xb7] 1 bytes failed !!
>> wait_for_sr_state: failed sr=81 cr=a0 state=2020
>> i2c_init_transfer: failed for chip 0x32 retry=0
>> wait_for_sr_state: failed sr=81 cr=a0 state=2020
>> i2c_init_transfer: failed for chip 0x32 retry=1
>> wait_for_sr_state: failed sr=81 cr=a0 state=2020
>> i2c_init_transfer: failed for chip 0x32 retry=2
>> i2c_init_transfer: give up i2c_regs=0x21a8000
>> RC5T619 read [0xb7] failed !!
>> REGISET2 val 9E

>> 
>> ^^^ the i2c issue seems to be the i2c where the RC5T619 is connected to.
>> 
> can you try out via cmdline whether other i2c devices are accessible,
> esp. backlight on i2c1?
> 
> Found something interesting in the i2c pinmux.
> IOMUX_CONFIG_SION = 0x10
> For some reason we do not have that is the kernel (and not in the
> kernel-imported pinmuxes used for i2c2 and i2c3):
> 
> ./arch/arm/include/asm/arch-mx6/mx6sll_pins.h:	MX6_PAD_I2C1_SCL__I2C1_SCL                            = IOMUX_PAD(0x0464, 0x019C, IOMUX_CONFIG_SION | 0, 0x067C, 0, 0),
> ./arch/arm/include/asm/arch-mx6/mx6sll_pins.h:	MX6_PAD_I2C1_SDA__I2C1_SDA                            = IOMUX_PAD(0x0468, 0x01A0, IOMUX_CONFIG_SION | 0, 0x0680, 0, 0),
> ./arch/arm/include/asm/arch-mx6/mx6sl_pins.h:	MX6_PAD_I2C1_SDA__I2C1_SDA				= IOMUX_PAD(0x0450, 0x0160, 0x10, 0x0720, 2, 0),
> ./arch/arm/include/asm/arch-mx6/mx6sl_pins.h:	MX6_PAD_I2C1_SCL__I2C1_SCL				= IOMUX_PAD(0x044C, 0x015C, 0x10, 0x071C, 2, 0),
> ./arch/arm/include/asm/arch-mx6/mx6sl-pins-kernel.h:MX6SL_PAD_I2C1_SCL__I2C1_SCL = IOMUX_PAD(0x44c,0x15c,0x0,0x71c,0x2,0),
> ./arch/arm/include/asm/arch-mx6/mx6sl-pins-kernel.h:MX6SL_PAD_I2C1_SDA__I2C1_SDA = IOMUX_PAD(0x450,0x160,0x0,0x720,0x2,0),
> 
> so maybe we just need to add that 0x10 to the I2C2 and I2C3 pinmuxes.

eBR-1A # i2c
i2c - I2C sub-system

Usage:
i2c bus [muxtype:muxaddr:muxchannel] - show I2C bus info
crc32 chip address[.0, .1, .2] count - compute CRC32 checksum
i2c dev [dev] - show or set current I2C bus
i2c loop chip address[.0, .1, .2] [# of objects] - looping read of device
i2c md chip address[.0, .1, .2] [# of objects] - read from I2C device
i2c mm chip address[.0, .1, .2] - write to I2C device (auto-incrementing)
i2c mw chip address[.0, .1, .2] value [count] - write to I2C device (fill)
i2c nm chip address[.0, .1, .2] - write to I2C device (constant address)
i2c probe [address] - test for and show device(s) on the I2C bus
i2c read chip address[.0, .1, .2] length memaddress - read to memory
i2c write memaddress chip address[.0, .1, .2] length [-s] - write memory
          to I2C; the -s option selects bulk write in a single transaction
i2c reset - re-init the I2C Controller
i2c speed [speed] - show or set I2C bus speed
eBR-1A # i2c dev
Current bus is 0
eBR-1A # i2c probe
Valid chip addresses: 36
eBR-1A # i2c dev 1
Setting bus to 1
eBR-1A # i2cprobe
Unknown command 'i2cprobe' - try 'help'
eBR-1A # i2c probe
Valid chip addresses:wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x0 retry=0
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x0 retry=1
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x0 retry=2
i2c_init_transfer: give up i2c_regs=0x21a4000
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x1 retry=0
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x1 retry=1
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x1 retry=2
...
i2c_init_transfer: failed for chip 0x7e retry=2
i2c_init_transfer: give up i2c_regs=0x21a4000
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x7f retry=0
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x7f retry=1
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x7f retry=2
i2c_init_transfer: give up i2c_regs=0x21a4000

eBR-1A # i2c dev 2
Setting bus to 2
eBR-1A # i2c probe 55
Valid chip addresses:wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x55 retry=0
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x55 retry=1
wait_for_sr_state: failed sr=81 cr=a0 state=2020
i2c_init_transfer: failed for chip 0x55 retry=2
i2c_init_transfer: give up i2c_regs=0x21a8000

eBR-1A # i2c dev 3
Invalid bus 3
i2c - I2C sub-system

Usage:
i2c bus [muxtype:muxaddr:muxchannel] - show I2C bus info
crc32 chip address[.0, .1, .2] count - compute CRC32 checksum
i2c dev [dev] - show or set current I2C bus
i2c loop chip address[.0, .1, .2] [# of objects] - looping read of device
i2c md chip address[.0, .1, .2] [# of objects] - read from I2C device
i2c mm chip address[.0, .1, .2] - write to I2C device (auto-incrementing)
i2c mw chip address[.0, .1, .2] value [count] - write to I2C device (fill)
i2c nm chip address[.0, .1, .2] - write to I2C device (constant address)
i2c probe [address] - test for and show device(s) on the I2C bus
i2c read chip address[.0, .1, .2] length memaddress - read to memory
i2c write memaddress chip address[.0, .1, .2] length [-s] - write memory
          to I2C; the -s option selects bulk write in a single transaction
i2c reset - re-init the I2C Controller
i2c speed [speed] - show or set I2C bus speed
eBR-1A # i2c dev 0
Setting bus to 0
eBR-1A # i2c probe 55
Valid chip addresses:
eBR-1A # 

So on which i2c bus should the RC5T619 respond?

>> 
>> ^^^ is this the same on Kobo?
>> 
> so I guess you have the tolino firstpart things and not the kobo ones.

Yes. Why is this important?

> Never seen this on kobo. I guess especially the hwcfg makes us enter
> rarely used codepaths it the patched kobo uboot.

What is hwcfg? Some config file read from the "firstpart" sectors
which influences what u-boot is doing? Sort of a proprietary boot.scr
mechanism?

>> 
>> Anyways we have made a big step forwards.
>> 
>> So the next steps are IMHO:
> retry with kobo firstpart (with m6sl uboot) to check whether things
> work.
> 
>> 1. fix the i2c issue on the Tolino - and potential other NTXGPIO setup issues
> 
> which might be fixed by that.

Hm. How should mmc contents (outside of u-boot code) influcence i2c pinmux setup?
Isn't that fully in our code?

> 
>> 2. get rid of the ntx special loader code that wants to see the 9 fastboot partitions
> 
> is probably also fixed by that (switch from android mode to ordinary
> linux by different hwcfg).
> Well, I think it is a good idea to be still able to boot the
> kobo kernel (or even convert the pinmuxes there to mx6sl). Or be able
> to copy code from there for first steps towards epdc, e.g. So
> I would not restructurize it too much in a first step.
> If we have a good kernel, then the time is there to do it.
> 
>> 3. make u-boot simply load uImage from /boot/uImage
> 
> well, maybe my bootchoice thing now works (which is included in the
> kobo-firstpart), would be interesting
> to verify. Then a /boot/boot.scr is loaded.

Ok. How is "bootchoice" operated? What does it do? Is it some new commands
in the u-boot environment?

> 
>> 4. make it load the device tree and set the address
> 
> load_ntxkernel
> run loadfdt
> setenv bootargs console=ttymxc0,115200 rootwait rw root=/dev/mmcblk0p5

Hm. I think I have no partition 5 with our current partitioning scheme.

> setenv fdtfile imx6sl-tolino-shine3.dtb
> load mmc 0:5 ${loadaddr} /boot/zImage
> load mmc 0:5 ${fdt_addr} /boot/dtb/${fdtfile} 
> bootz ${loadaddr} - ${fdt_addr}
> 
> Big attention: There is the quiet flag appended to cmdline in bootz.
> For my experiments I have first renamed it in the kernel in init/main.c:
> 
> early_param("quiet", quiet_kernel);
> But when you are already compiling uboot, you might remove the flag
> there, of course.

Yes, we should do... No hidden features :)

> I think before we tidy up uboot too much, maybe we should have a first
> look on the kernel, just to see if our assumptions about the hardware
> are correct without having mysterious, hacky uboot things influence our
> sight.

Well, that is why I would like to remove them first...

> The kobo/backlight branch on github.com/akemnade/linux.git might
> be the best thing now to try (not the mysterious 5.4-rc1).
> It includes a tolino dtb. Maybe enabling some CONFIG_REGULATOR_DEBUG
> might be interesting.
> 
> Anything influencing the boot process should imho go into a separate
> branch,

you mean in u-boot.git? Some e60k02-improved?

> so we can maybe be prepared for dualboot things. The
> kobolino uboot probably boots the android system also.

Now I am a little confused. What is the "kobolino uboot"?

BR and thanks,
Nikolaus



More information about the Letux-kernel mailing list