AllWinner A13: I2C bus locked

2,833 views
Skip to first unread message

bruce bushby

unread,
Jun 18, 2015, 5:46:43 PM6/18/15
to linux...@googlegroups.com
Hi

I wanted to ask if anybody is having or has had problems with "A13 I2C bus locked"?

I'm using a "Latest" version of u-boot and 4.1 release candidate. I've also tried using an older U-Boot (2014.04) .... tomorrow I'll try some older kernels but thought I would check with the list at the same time. 

I'm using the Olimex A13-SOM with nothing connected and have tried a couple of different power supplies just in case it was a voltage issue.



Some console extracts:


U-Boot SPL 2015.04 (Jun 18 2015 - 17:32:42)
DRAM: 512 MiB
Failed to set core voltage! Can't set CPU frequency


U-Boot 2015.04 (Jun 18 2015 - 17:32:42) Allwinner Technology

CPU:   Allwinner A13 (SUN5I)
I2C:   ready
DRAM:  512 MiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

Setting up a 1024x768 vga console
In:    serial
Out:   vga
Err:   vga
Net:   No ethernet found.
starting USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
318 bytes read in 21 ms (14.6 KiB/s)
## Executing script at 43100000
reading uImage
4281912 bytes read in 666 ms (6.1 MiB/s)
reading sun5i-a13-olinuxino-micro.dtb
14674 bytes read in 36 ms (397.5 KiB/s)
## Booting kernel from Legacy Image at 46000000 ...
   Image Name:   Linux-4.1.0-rc6
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4281848 Bytes = 4.1 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 49000000
   Booting using the fdt blob at 0x49000000
   Loading Kernel Image ... OK
   Using Device Tree in place at 49000000, end 49006951

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.1.0-rc6 (br...@core.home.local) (gcc version 4.9.2 (Buildroot 2015.08-git-00187-g0db1c13) ) #1 SMP Thu Jun 18 17:40:32 BST 2015

......




# uname -a
Linux A13-SOM 4.1.0-rc6 #1 SMP Thu Jun 18 17:40:32 BST 2015 armv7l GNU/Linux
# dmesg | grep i2c
[    0.162429] i2c-core: driver [dummy] registered
[    0.197051] i2c-core: driver [tps65217] registered
[    0.197202] i2c-core: driver [tps65910] registered
[    0.197326] i2c-core: driver [tps65912] registered
[    0.197543] i2c-core: driver [tps80031] registered
[    0.197816] i2c-core: driver [da9052] registered
[    0.197940] i2c-core: driver [da9055-pmic] registered
[    0.198061] i2c-core: driver [tps6586x] registered
[    0.198183] i2c-core: driver [tps65090] registered
[    0.198301] i2c-core: driver [palmas] registered
[    0.442578] i2c-core: driver [lp872x] registered
[    1.128358] i2c-core: driver [tps65218] registered
[    1.128487] i2c-core: driver [twl] registered
[    1.129017] i2c-core: driver [twl6040] registered
[    1.129152] i2c-core: driver [axp20x] registered
[    1.172919] i2c /dev entries driver
[    1.178191] i2c-dev: adapter [mv64xxx_i2c adapter] registered as minor 0
[    1.178304] i2c i2c-0: adapter [mv64xxx_i2c adapter] registered
[    1.178407] i2c i2c-0: of_i2c: walking child nodes
[    1.179639] i2c-dev: adapter [mv64xxx_i2c adapter] registered as minor 1
[    1.179739] i2c i2c-1: adapter [mv64xxx_i2c adapter] registered
[    1.179840] i2c i2c-1: of_i2c: walking child nodes
[    1.181004] i2c-dev: adapter [mv64xxx_i2c adapter] registered as minor 2
[    1.181096] i2c i2c-2: adapter [mv64xxx_i2c adapter] registered
[    1.181190] i2c i2c-2: of_i2c: walking child nodes
[    1.181489] i2c-core: driver [ir-kbd-i2c] registered
# ls -l /dev | grep i2c
crw-------    1 root     root       89,   0 Jan  1 00:00 i2c-0
crw-------    1 root     root       89,   1 Jan  1 00:00 i2c-1
crw-------    1 root     root       89,   2 Jan  1 00:00 i2c-2
# i2cdetect -l
i2c-0   i2c             mv64xxx_i2c adapter                     I2C adapter
i2c-1   i2c             mv64xxx_i2c adapter                     I2C adapter
i2c-2   i2c             mv64xxx_i2c adapter                     I2C adapter
# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          [   55.294387] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   57.294387] i2c i2c-0: mv64xxx: , block: 1, time_left: 0
-- [   59.294474] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   61.294381] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- ^C[   63.294436] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0

# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          [   67.604383] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   69.604378] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   71.604421] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- ^C[   73.604385] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0

# i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          [   78.464390] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   80.464386] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   82.464378] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   84.464400] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   86.464391] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   88.464379] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   90.464456] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   92.464378] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   93.377552] random: nonblocking pool is initialized
[   94.464388] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   96.464415] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [   98.464383] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  100.464381] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  102.464413] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- 
10: [  104.464378] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  106.464380] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  108.464427] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  110.464382] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  112.464381] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  114.464400] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  116.464379] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [  118.464378] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- ^C[  120.464404] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0






Kernel IC2 configs:

ok 22:39 br...@core.home.local /A13/buildroot-2015.05.shm 
$ grep I2C board/olimex/a13-som/sun5i_defconfig  | grep -v "^#"
CONFIG_REGMAP_I2C=y
CONFIG_INPUT_CMA3000_I2C=m
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=m
CONFIG_I2C_ALGOBIT=m
CONFIG_I2C_ALGOPCA=m
CONFIG_I2C_DESIGNWARE_CORE=m
CONFIG_I2C_DESIGNWARE_PLATFORM=m
CONFIG_I2C_MV64XXX=y
CONFIG_I2C_PCA_PLATFORM=m
CONFIG_I2C_SIMTEC=m
CONFIG_I2C_SUN6I_P2WI=y
CONFIG_I2C_XILINX=m
CONFIG_I2C_DIOLAN_U2C=m
CONFIG_I2C_PARPORT_LIGHT=m
CONFIG_I2C_TINY_USB=m
CONFIG_I2C_VIPERBOARD=m
CONFIG_I2C_STUB=m
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
CONFIG_MFD_DA9052_I2C=y
CONFIG_MFD_TPS65912_I2C=y
CONFIG_VIDEO_IR_I2C=y
CONFIG_SND_SOC_I2C_AND_SPI=y

ok 22:39 br...@core.home.local /A13/buildroot-2015.05.shm 




Buildroot config;

# U-Boot
BR2_LINUX_KERNEL_UBOOT_IMAGE=y
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BOARDNAME="A13-OLinuXino"
BR2_TARGET_UBOOT_LATEST_VERSION=y
BR2_TARGET_UBOOT_FORMAT_BIN=y
BR2_TARGET_UBOOT_SPL=y
BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin"

# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_VERSION="4.1-rc4"
BR2_LINUX_KERNEL_CUSTOM_GIT=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="g...@github.com:BruceBushby/linux-4.1.git"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="b4c45b4e65d9f87802d19504e9dbfc7778240df2"
BR2_LINUX_KERNEL_PATCH="board/olimex/a13-som/kernel/"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/olimex/a13-som/sun5i_defconfig"
BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x40008000"
BR2_LINUX_KERNEL_APPENDED_UIMAGE=n
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_APPENDED_DTB=n
BR2_LINUX_KERNEL_USE_INTREE_DTS=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun5i-a13-olinuxino-micro"




Any ideas?




Bruce



Maxime Ripard

unread,
Jun 19, 2015, 3:15:05 AM6/19/15
to bruce bushby, linux...@googlegroups.com
Hi,
So you're using a DT for a board that is not yours. Please NEVER do
that, unless you're willing to take the risk of blowing your board up.

> 14674 bytes read in 36 ms (397.5 KiB/s)
> ## Booting kernel from Legacy Image at 46000000 ...
> Image Name: Linux-4.1.0-rc6
> Image Type: ARM Linux Kernel Image (uncompressed)
> Data Size: 4281848 Bytes = 4.1 MiB
> Load Address: 40008000
> Entry Point: 40008000
> Verifying Checksum ... OK
> ## Flattened Device Tree blob at 49000000
> Booting using the fdt blob at 0x49000000
> Loading Kernel Image ... OK
> Using Device Tree in place at 49000000, end 49006951
>
> Starting kernel ...
>
> [ 0.000000] Booting Linux on physical CPU 0x0
> [ 0.000000] Initializing cgroup subsys cpuset
> [ 0.000000] Initializing cgroup subsys cpu
> [ 0.000000] Initializing cgroup subsys cpuacct
> [ 0.000000] Linux version 4.1.0-rc6 (br...@core.home.local) (gcc version
> 4.9.2 (Buildroot 2015.08-git-00187-g0db1c13) ) #1 SMP Thu Jun 18 17:40:32
> BST 2015
>
> ......

Usually these dots are helpful.


> # ls -l /dev | grep i2c
> crw------- 1 root root 89, 0 Jan 1 00:00 i2c-0
> crw------- 1 root root 89, 1 Jan 1 00:00 i2c-1
> crw------- 1 root root 89, 2 Jan 1 00:00 i2c-2
> #
> # i2cdetect -l
> i2c-0 i2c mv64xxx_i2c adapter I2C adapter
> i2c-1 i2c mv64xxx_i2c adapter I2C adapter
> i2c-2 i2c mv64xxx_i2c adapter I2C adapter
> #
> # i2cdetect -y 0
> 0 1 2 3 4 5 6 7 8 9 a b c d e f
> 00: [ 55.294387] i2c i2c-0: mv64xxx: I2C bus locked, block: 1,
> time_left: 0
> -- [ 57.294387] i2c i2c-0: mv64xxx: , block: 1, time_left: 0
> -- [ 59.294474] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0
> -- [ 61.294381] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0
> -- ^C[ 63.294436] i2c i2c-0: mv64xxx: I2C bus locked, block: 1,
> time_left: 0

Do you have pullups on that bus?

Maxime

--
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
signature.asc

bruce bushby

unread,
Jun 19, 2015, 6:08:28 AM6/19/15
to Maxime Ripard, linux...@googlegroups.com
Hi Maxime 

> So you're using a DT for a board that is not yours. Please NEVER do
> that, unless you're willing to take the risk of blowing your board up.
I'm using the "A13-SOM" cpu module from Olimex ....which I believed was a close match to the "A13-OLinuXino" board minus some peripherals. I'm using them to learn so have a half dozen for when they break. ..."touch wood" so far so good.


Do you have pullups on that bus?
Nothing is connected to the module besides the 3.3V power and a uart for uart0 (console)  ...it's booting from sdcard. Previously I was using the A20-SOM ....although that was via the EVB. Would a Soc require pullups to scan an empty bus?  ...perhaps this is my problem.

As always thanks again for your help!


Bruce


Maxime Ripard

unread,
Jun 19, 2015, 6:35:05 AM6/19/15
to bruce bushby, linux...@googlegroups.com
On Fri, Jun 19, 2015 at 11:08:26AM +0100, bruce bushby wrote:
> Hi Maxime
>
> > So you're using a DT for a board that is not yours. Please NEVER do
> > that, unless you're willing to take the risk of blowing your board up.
>
> I'm using the "A13-SOM" cpu module from Olimex ....which I believed
> was a close match to the "A13-OLinuXino" board minus some
> peripherals. I'm using them to learn so have a half dozen for when
> they break. ..."touch wood" so far so good.

Unless you know for a fact that the board are exactly the same, don't
do that.

> > Do you have pullups on that bus?
>
> Nothing is connected to the module besides the 3.3V power and a uart
> for uart0 (console) ...it's booting from sdcard. Previously I was
> using the A20-SOM ....although that was via the EVB. Would a Soc
> require pullups to scan an empty bus? ...perhaps this is my
> problem.

Pull-ups are needed on both lines of any I2C bus. If the board doesn't
have any, you might have your problem. You can try to enable the
internal ones in the pinctrl node that each buses use.
signature.asc

bruce bushby

unread,
Jun 19, 2015, 3:29:03 PM6/19/15
to Maxime Ripard, linux...@googlegroups.com

ok understood, did a little reading and I think I get it. Had a go enabling the internal pull ups and i2c0 & i2c1 look better. i2c2 is still sticky but as you say I need to go over the dts files I am using.




arch/arm/boot/dts/sun5i-a13.dtsi
 @@ -505,21 +505,21 @@
                                allwinner,pins = "PB0", "PB1";
                                allwinner,function = "i2c0";
                                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
                        };
 
                        i2c1_pins_a: i2c1@0 {
                                allwinner,pins = "PB15", "PB16";
                                allwinner,function = "i2c1";
                                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
                        };
 
                        i2c2_pins_a: i2c2@0 {
                                allwinner,pins = "PB17", "PB18";
                                allwinner,function = "i2c2";
                                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
                        };
 
                        mmc0_pins_a: mmc0@0 {



# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
# i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- [ 3224.743548] i2c i2c-2: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 3224.750339] i2c i2c-2: mv64xxx_i2c_fsm: Ctlr Error -- state: 0x2, status: 0x0, addr: 0x22, flags: 0x0
-- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         



Thanks for the help, much appreciated!!



Reply all
Reply to author
Forward
0 new messages