This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335x custom board: how to get rid of I2C EEPROM dependency ?

Other Parts Discussed in Thread: AM3352

Hello,

I'm trying to boot Android ICS on a custom board based on BeagleBone. We are using AM3352 CPU.

Android is crashing at boot :

[ 5.092559] init (1): /proc/1/oom_adj is deprecated, please use /proc/1/oom_score_adj instead.
[ 5.374572] init: cannot open '/initlogo.rle'
[ 6.528106] init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery'
[ 6.542572] android_usb: already disabled
[ 6.547180] adb_bind_config
[ 8.256164] adb_open
root@android:/ # [ 9.043670] Disabling lock debugging due to kernel taint
[ 10.203216] init: untracked pid 61 exited
[ 10.780548] Unhandled fault: external abort on non-linefetch (0x1028) at 0xd3000014
[ 10.788635] Internal error: : 1028 [#1]
[ 10.792663] Modules linked in: omaplfb(O) pvrsrvkm(O)
[ 10.798004] CPU: 0 Tainted: G O (3.2.0-gc9a69e1-dirty #8)
[ 10.805023] PC is at OSReadHWReg+0xc/0x18 [pvrsrvkm]
[ 10.810302] LR is at SysFinalise+0x9c/0x118 [pvrsrvkm]
[ 10.815704] pc : [<bf000250>] lr : [<bf014d64>] psr: a0000013
[ 10.815704] sp : cf17fe10 ip : cf17fe20 fp : cf17fe1c
[ 10.827789] r10: 00000000 r9 : cf17e000 r8 : d3000000
[ 10.833282] r7 : bf0213d8 r6 : 00000000 r5 : 00000000 r4 : bf021304
[ 10.840148] r3 : 00000000 r2 : d4000000 r1 : 00000014 r0 : d3000000

Basically our design is not that different from the beagleboard and I successfully booted Android on the beagleboard. The only differences are DDR3 instead of DD2 and we are not using the I2C EEPROM to identify the hardware. I think that this EEPROM is causing me a lot of problems right now and it is probably the cause of Android crash.

I modified MLO to avoid reading the I2C EEPROM and to configure correctly DDR3 memory. That seems ok right now, because I'm able to execute u-boot and linux kernel in RAM. 

I also patched the kernel to avoid reading the EEPROM. I changed the function am335x_evm_setup in board-am335xevm.c to directly call setup_beaglebone(). That seems to "work" to boot linux but I suspect that something is missing to successfully boot Android. Android seems to crash when it tries to load the graphics drivers. I checked my dmesg and my screen is registered.

My question:

Is there a clean way to get rid of the I2C EEPROM dependency in the linux kernel ? It seems to be used everywhere I tough I could emulate it with hard coding some values in the config structure used to get info from EEPROM. Is that a good idea ?

Thanks !!

Regards,

Nicolas

P.S.: The complete dmseg is in attachement.

  • I hesitate to judge of how good the idea is but it definetely works. At least works for me.

    After modified (the said way) bbone code was fully functional, I created separate clean board specific project.

    I doubt however that "It seems to be used everywhere".  Only few (~10-15) files.

    (Or maybe you really are talking about a BeagleBoard, not a BeagleBone)

  • Hi,

    Yes, I was talking about BeagleBone, I edited my post, thanks.

    By everywhere I mean, in SPL, in uBoot and in the linux kernel.

    Can you show me what information you copied in the config structure ?

    Thank you !

    Nicolas