[BISECTED] BeagleBone Black doesn't boot after a58147c2dbbf
Matwey V. Kornilov
matwey.kornilov at gmail.com
Tue Aug 16 16:18:17 CEST 2022
I cannot understand what is going on. As far as I understand, read
consists of i2c write of address and subsequent i2c read of data.
During the i2c write process, EEPROM handles ACK/NOACK and - since
there is no error code - the EEPROM handles i2c write correctly. And
then it looks like no EEPROM device during the i2c read stage.
вт, 16 авг. 2022 г. в 04:27, Nishanth Menon <nm at ti.com>:
>
> On 23:32-20220815, Matwey V. Kornilov wrote:
> > Only the first one dm_i2c_read is successful, whenever the size value.
>
> I wonder if we need to add complete ep read... this is what I see on my
> element 14 board:
> <debug_uart>
> ti_i2c_eeprom_get: 98: rc=0 header=0xee3355aa
> ti_i2c_eeprom_get: 102: rc=0
> ti_i2c_eeprom_get: 110: rc=0
> ti_i2c_eeprom_get: 121: header=0xffffffff rc=0
> ti_i2c_eeprom_get: 130: rc=0
> ti_i2c_eeprom_get: 135: rc=0
> ti_i2c_eeprom_get: 139: header=0xee3355aa
> ti_i2c_eeprom_get: 144: rc=0
> ep[0]=0xaa
> ep[1]=0x55
> ep[2]=0x33
> ep[3]=0xee
> ep[4]=0x41
> ep[5]=0x33
> ep[6]=0x33
> ep[7]=0x35
> ep[8]=0x42
> ep[9]=0x4e
> ep[10]=0x4c
> ep[11]=0x54
> ep[12]=0x30
> ep[13]=0x30
> ep[14]=0x43
> ep[15]=0x30
> ep[16]=0x34
> ep[17]=0x31
> ep[18]=0x34
> ep[19]=0x42
> ep[20]=0x42
> ep[21]=0x42
> ep[22]=0x4b
> ep[23]=0x30
> ep[24]=0x31
> ep[25]=0x36
> ep[26]=0x37
> ep[27]=0xff
> ep[28]=0xff
> ep[29]=0xff
> ep[30]=0xff
> ep[31]=0xff
> ep[32]=0xff
> ep[33]=0xff
> ep[34]=0xff
> ep[35]=0xff
> ep[36]=0xff
> ep[37]=0xff
> ep[38]=0xff
> ep[39]=0xff
> ep[40]=0xff
> ep[41]=0xff
> ep[42]=0xff
> ep[43]=0xff
> ep[44]=0xff
> ep[45]=0xff
> ep[46]=0xff
> ep[47]=0xff
> ep[48]=0xff
> ep[49]=0xff
> ep[50]=0xff
> ep[51]=0xff
> ep[52]=0xff
> ep[53]=0xff
> ep[54]=0xff
> ep[55]=0xff
> ep[56]=0xff
> ep[57]=0xff
> ep[58]=0xff
> ep[59]=0xff
> ep[60]=0xff
> ep[61]=0xff
> ep[62]=0xff
> ep[63]=0xff
> ep[64]=0xff
> ep[65]=0xff
> ep[66]=0xff
> ep[67]=0xff
> ep[68]=0xff
> ep[69]=0xff
> ep[70]=0xff
> ep[71]=0xff
> ep[72]=0xff
> ep[73]=0xff
> ep[74]=0xff
> ep[75]=0xff
> ep[76]=0xff
> ep[77]=0xff
> ti_i2c_eeprom_get: 195: Out OK
>
> U-Boot SPL 2022.10-rc2-00030-g29d075bc05ca-dirty (Aug 15 2022 - 14:50:17 -0500)
> Trying to boot from MMC1
>
>
> U-Boot 2022.10-rc2-00030-g29d075bc05ca-dirty (Aug 15 2022 - 14:50:17 -0500)
>
> CPU : AM335X-GP rev 2.1
> Model: TI AM335x BeagleBone Black
> DRAM: 512 MiB
> Core: 160 devices, 18 uclasses, devicetree: separate
> WDT: Started wdt at 44e35000 with servicing (60s timeout)
> NAND: 0 MiB
> MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
> Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1...
> <ethaddr> not set. Validating first E-fuse MAC
> Net: eth2: ethernet at 4a100000, eth3: usb_ether
> Hit any key to stop autoboot: 0
> =>
>
> >
> > пн, 15 авг. 2022 г. в 23:21, Matwey V. Kornilov <matwey.kornilov at gmail.com>:
> > >
> > > I have one idea. I'll try dm_i2c_read() with different `size' argument
> > > values tomorrow.
> > >
> > > пн, 15 авг. 2022 г. в 23:13, Matwey V. Kornilov <matwey.kornilov at gmail.com>:
> > > >
> > > > пн, 15 авг. 2022 г. в 22:56, Nishanth Menon <nm at ti.com>:
> > > > >
> > > > > On 21:12-20220815, Matwey V. Kornilov wrote:
> > > > > [....]
> > > > >
> > > > > Trying offline for now (I am also on libera.chat #linux-ti and #u-boot)..
> > > > >
> > > > > >
> > > > > > <debug_uart>
> > > > > > ti_i2c_eeprom_get: 98: rc=0 header=0xee3355aa
> > > > > > ti_i2c_eeprom_get: 102: rc=0
> > > > > > ti_i2c_eeprom_get: 110: rc=0
> > > > > > ti_i2c_eeprom_get: 121: header=0xee3355aa
> > > > > > ti_i2c_eeprom_get: 139: header=0xee3355aa
> > > > > > ti_i2c_eeprom_get: 144: rc=0
> > > > > > ep[0]=0xff
> > > > >
> > > > > gaah... data seems stuck... with one more potential fixup... Dont know
> > > > > how this might behave..
> > > >
> > > > ti_i2c_eeprom_get: 121: header=0xee3355aa rc=0
> > > >
> > > > >
> > > > > main change is this:
> > > > > @@ -113,33 +117,42 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> > > > > * We must allow for fall through to check the data if 2 byte
> > > > > * addressing works
> > > > > */
> > > > > - (void)dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
> > > > > + rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
> > > > > + printf("%s: %d: header=0x%08x rc=%d\n", __func__, __LINE__, hdr_read, rc);
> > > > >
> > > > > /* Corrupted data??? */
> > > > > - if (hdr_read != header) {
> > > > > + if (rc || hdr_read != header) {
> > > > >
> > > > > 8<---
> > > > > diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
> > > > > index ed34991377ee..f4e5da34b70a 100644
> > > > > --- a/board/ti/common/board_detect.c
> > > > > +++ b/board/ti/common/board_detect.c
> > > > > @@ -90,13 +90,16 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> > > > > int rc;
> > > > >
> > > > > #if CONFIG_IS_ENABLED(DM_I2C)
> > > > > + int i;
> > > > > struct udevice *dev;
> > > > > struct udevice *bus;
> > > > >
> > > > > rc = uclass_get_device_by_seq(UCLASS_I2C, bus_addr, &bus);
> > > > > + printf("%s: %d: rc=%d header=0x%08x\n", __func__, __LINE__, rc, header);
> > > > > if (rc)
> > > > > return rc;
> > > > > rc = dm_i2c_probe(bus, dev_addr, 0, &dev);
> > > > > + printf("%s: %d: rc=%d\n", __func__, __LINE__, rc);
> > > > > if (rc)
> > > > > return rc;
> > > > >
> > > > > @@ -104,6 +107,7 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> > > > > * Read the header first then only read the other contents.
> > > > > */
> > > > > rc = i2c_set_chip_offset_len(dev, 1);
> > > > > + printf("%s: %d: rc=%d\n", __func__, __LINE__, rc);
> > > > > if (rc)
> > > > > return rc;
> > > > >
> > > > > @@ -113,33 +117,42 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> > > > > * We must allow for fall through to check the data if 2 byte
> > > > > * addressing works
> > > > > */
> > > > > - (void)dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
> > > > > + rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
> > > > > + printf("%s: %d: header=0x%08x rc=%d\n", __func__, __LINE__, hdr_read, rc);
> > > > >
> > > > > /* Corrupted data??? */
> > > > > - if (hdr_read != header) {
> > > > > + if (rc || hdr_read != header) {
> > > > > /*
> > > > > * read the eeprom header using i2c again, but use only a
> > > > > * 2 byte address (some newer boards need this..)
> > > > > */
> > > > > rc = i2c_set_chip_offset_len(dev, 2);
> > > > > + printf("%s: %d: rc=%d\n", __func__, __LINE__, rc);
> > > > > if (rc)
> > > > > return rc;
> > > > >
> > > > > rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
> > > > > + printf("%s: %d: rc=%d\n", __func__, __LINE__, rc);
> > > > > if (rc)
> > > > > return rc;
> > > > > }
> > > > > + printf("%s: %d: header=0x%08x\n", __func__, __LINE__, hdr_read);
> > > > > if (hdr_read != header)
> > > > > return -1;
> > > > >
> > > > > rc = dm_i2c_read(dev, 0, ep, size);
> > > > > + printf("%s: %d: rc=%d\n", __func__, __LINE__, rc);
> > > > > if (rc)
> > > > > return rc;
> > > > > +
> > > > > + for (i = 0; i< size; i++)
> > > > > + printf("ep[%d]=0x%02x\n",i, ep[i]);
> > > > > #else
> > > > > u32 byte;
> > > > >
> > > > > gpi2c_init();
> > > > > rc = ti_i2c_eeprom_init(bus_addr, dev_addr);
> > > > > + printf("%s: %d: rc=%d header=0x%08x\n", __func__, __LINE__, rc, header);
> > > > > if (rc)
> > > > > return rc;
> > > > >
> > > > > @@ -157,6 +170,7 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> > > > > (void)i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read, 4);
> > > > >
> > > > > /* Corrupted data??? */
> > > > > + printf("%s: %d: header=0x%08x\n", __func__, __LINE__, hdr_read);
> > > > > if (hdr_read != header) {
> > > > > /*
> > > > > * read the eeprom header using i2c again, but use only a
> > > > > @@ -165,16 +179,20 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> > > > > byte = 2;
> > > > > rc = i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read,
> > > > > 4);
> > > > > + printf("%s: %d: rc=%d\n", __func__, __LINE__, rc);
> > > > > if (rc)
> > > > > return rc;
> > > > > }
> > > > > + printf("%s: %d: header=0x%08x\n", __func__, __LINE__, hdr_read);
> > > > > if (hdr_read != header)
> > > > > return -1;
> > > > >
> > > > > rc = i2c_read(dev_addr, 0x0, byte, ep, size);
> > > > > + printf("%s: %d: rc=%d\n", __func__, __LINE__, rc);
> > > > > if (rc)
> > > > > return rc;
> > > > > #endif
> > > > > + printf("%s: %d: Out OK\n", __func__, __LINE__);
> > > > > return 0;
> > > > > }
> > > > >
> > > > > diff --git a/configs/am335x_evm_defconfig b/configs/am335x_evm_defconfig
> > > > > index b500ed0fdd8d..b4039018793b 100644
> > > > > --- a/configs/am335x_evm_defconfig
> > > > > +++ b/configs/am335x_evm_defconfig
> > > > > @@ -9,6 +9,9 @@ CONFIG_AM335X_USB0=y
> > > > > CONFIG_AM335X_USB0_PERIPHERAL=y
> > > > > CONFIG_AM335X_USB1=y
> > > > > CONFIG_SPL=y
> > > > > +CONFIG_DEBUG_UART_BASE=0x44e09000
> > > > > +CONFIG_DEBUG_UART_CLOCK=48000000
> > > > > +CONFIG_DEBUG_UART=y
> > > > > CONFIG_DISTRO_DEFAULTS=y
> > > > > CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
> > > > > CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x4030ff00
> > > > > @@ -102,6 +105,9 @@ CONFIG_DRIVER_TI_CPSW=y
> > > > > CONFIG_DM_PMIC=y
> > > > > # CONFIG_SPL_DM_PMIC is not set
> > > > > CONFIG_PMIC_TPS65217=y
> > > > > +CONFIG_DEBUG_UART_OMAP=y
> > > > > +CONFIG_DEBUG_UART_SHIFT=2
> > > > > +CONFIG_DEBUG_UART_ANNOUNCE=y
> > > > > CONFIG_SPI=y
> > > > > CONFIG_DM_SPI=y
> > > > > CONFIG_OMAP3_SPI=y
> > > > > --
> > > > > Regards,
> > > > > Nishanth Menon
> > > > > Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
> > > >
> > > >
> > > >
> > > > --
> > > > With best regards,
> > > > Matwey V. Kornilov
> > >
> > >
> > >
> > > --
> > > With best regards,
> > > Matwey V. Kornilov
> >
> >
> >
> > --
> > With best regards,
> > Matwey V. Kornilov
>
> --
> Regards,
> Nishanth Menon
> Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
--
With best regards,
Matwey V. Kornilov
More information about the U-Boot
mailing list