Debugging VoCore2 ROM Startup

Stefan Roese sr at denx.de
Wed Jan 15 10:31:23 CET 2020


Hi Mauro,

On 15.01.20 10:04, Mauro Condarelli wrote:
>> On 15.01.20 00:55, Mauro Condarelli wrote:
>>> I found *one* of the bugs in startup:
>>> To enable UART2 pinmux setting:
>>>       void __iomem *gpio_mode;
>>>       gpio_mode = ioremap_nocache(MT76XX_GPIO1_MODE, 0x100);
>>>       clrbits_le32(gpio_mode, GENMASK(27, 26));
>>> is not enough; you need also:
>>>       setbits_le32(gpio_mode, GENMASK(3, 2));
>>> I actually use the more explicit, but hopefully equivalent:
>>>       #define MT76XX_GPIO1_MODE   0x10000060
>>>       #define MIPS_KSEG1_START    0xA0000000
>>>
>>>       uint32_t v, *a;
>>>       a = (uint32_t *)(MIPS_KSEG1_START + MT76XX_GPIO1_MODE);
>>>       v = *a;
>>>       v &= 0xF3FFFFFF;
>>>       v |= 0x0000000C;
>>>       *a = v;
>>>
>>> It is unclear to me how Linkit port could work.
>>
>> I double checked on LiniIt and it works without this bit 2/3
>> setting:
>>
>> => md b0000060 1
>> b0000060: 50050404                               ...P
>>
>> You can check this on your VoCore2 board by setting this value
>> from the prompt. If this works, then its not strictly needed.
>>
> This seems to be strictly needed on my board:
>      U-Boot 1.1.3 (Apr 23 2017 - 14:59:01)
>      VoCore2 > md b0000060 1
>      b0000060: 5505040c    ...U
>      VoCore2 > mm b0000060
>      b0000060: 5505040c ? 55050404
>      <DEAD>
> This is with the original "paleolithic" u-boot, of course, but it
> should be a HW-related feature, should I try also with "current"
> (RAM based)?

In your version above, you do *not* have configured bits 27:26
(UART2 GPIO mode) to 00b but to 01b (GPIO mode).

I did this test on my LinkIt and wrote your original value:

=> mw b0000060 5505040c�
<DEAD>

So this does not work for me.

You might want to try my value "50050404" with your 1.1.3 version
to see, if this works there. But I dount it.
  
> I am surprised though as all I could find on differences between
> MT7628 and MT7688 are is a reference on Mediatek site:
> https://docs.labs.mediatek.com/resource/linkit-smart-7688/en/faq
> 
> Q: What’s MT7628 and how is it different from MT7688AN?
> 
> The MT7628 series are pin-to-pin compatible with the MT7688 series.
> However, MT7628 comes with a 2T2R antenna, while MT7688 only supports
> 1T1R antenna.
> 
> (Incomplete!) comparison of the two datasheets did not show
> relevant differences.
>>> Anyways now my "secondary from ROM" approach now
>>> works without the long delay described below.
>>>
>>> Unfortunately this does not seem to be the whole story because
>>> flashing u-boot linked directly in the "right palace":
>>>
>>>       SYS_TEXT_BASE = 0x9c000000
>>>
>>> still refuses to display anything on serial; I assume some other
>>> initialization is missing, but that will be another fight.
>>>
>>> Any insight welcome.
>>
>> Did my new image from yesterday produce any output on your board?
> No.
> Your image was as silent as mine.
> Not a single char in serial line.

I see. If you really need a different UART2 mux setup in the GPIO1_MODE
register, this might explain the difference. I can generate a new image
(untested) with your GPIO1_MODE value of 5505040c for you to test. Just
let me know.
  
>> BTW: How do you flash the image into SPI NOR? From the new mainline
>> U-Boot loaded into RAM or from the ancient 1.1.3 version? Perhaps
>> something is going wrong in the flashing process?
> I will try to read back after flashing, but I somewhat doubt that's the
> problem.

Yes, please do.

> I am using the new, RAM-based U-Boot to flash.
> Actual sequence is:
>      usb reset; fatload usb 0 80010000 u-boot-ram.bin; go 80010000
>      usb start; sf probe;
>      load usb 0:1 85000000 u-boot-rom.bin; sf update ${fileaddr} u-boot
> ${filesize}
>      reset
> where:
> => mtd list
>      List of MTD devices:
>      * nor0
>        - type: NOR flash
>        - block size: 0x1000 bytes
>        - min I/O: 0x1 bytes
>        - 0x000000000000-0x000001000000 : "nor0"
>            - 0x000000000000-0x00000007e000 : "u-boot"
>            - 0x00000007e000-0x00000007f000 : "env"
>            - 0x00000007f000-0x000000080000 : "factory"
>            - 0x000000080000-0x000000320000 : "kernel"
>            - 0x000000320000-0x000001000000 : "filesystem"
> Equivalent sequences work correctly to flash kernel and (recovery)
> filesystem.

Looks correct at first glance. Here my sequence:

=> printenv upd_uboot load_uboot update_uboot
upd_uboot=run load_uboot update_uboot
load_uboot=tftp ${loadaddr} ${tftpdir}/u-boot.bin
update_uboot=sf probe;sf update ${loadaddr} 0 ${filesize}

Thanks,
Stefan


More information about the U-Boot mailing list