[U-Boot] [PATCH v7 2/3] mmc: meson: add MMC driver for Meson GX (S905)

Simon Glass
2017-04-16T19:34:43Z

Hi Alex,

On 16 April 2017 at 04:08, Alexander Graf <agraf@suse.de> wrote:
>
>
> On 16.04.17 04:09, Heinrich Schuchardt wrote:
>>
>> On 04/15/2017 11:51 PM, Andreas F채rber wrote:
>>>
>>> Am 15.04.2017 um 23:16 schrieb Andreas F채rber:
>>>>
>>>> Am 15.04.2017 um 23:04 schrieb Alexander Graf:
>>>>>>
>>>>>> Am 15.04.2017 um 22:34 schrieb Andreas F채rber <afaerber@suse.de>:
>>>>>>>
>>>>>>> Am 15.04.2017 um 20:27 schrieb Alexander Graf:
>>>>>>>>
>>>>>>>> On 15.04.17 20:18, Heiner Kallweit wrote:
>>>>>>>>>
>>>>>>>>> Am 15.04.2017 um 17:05 schrieb Andreas F채rber:
>>>>>>>>> But for the Vega S95 Telos I needed to disable the first of three
>>>>>>>>> MMC
>>>>>>>>> nodes (SDIO) - otherwise U-Boot would happily iterate over them for
>>>>>>>>> distro boot with Heinrich's patch, but GRUB would come up with no
>>>>>>>>> disks,
>>>>>>>>> so that booting failed. I'm not yet sure why, maybe it's a
>>>>>>>>> UEFI-side
>>>>>>>>> problem in that it is the first MMC device that is absent rather
>>>>>>>>> than
>>>>>>>>> the last one?
>>>>>>>>>
>>>>>>>> I don't own this device so I can just provide a guess.
>>>>>>>> Based on DT the device ordering most likely is:
>>>>>>>> mmc0: SDIO
>>>>>>>> mmc1: SD
>>>>>>>> mmc2: eMMC
>>>>>>
>>>>>> [...]
>>>>>>>
>>>>>>> If grub comes up, distro boot has successfully found the target
>>>>>>> binary
>>>>>>> and executed it. For some reason, grub can not find its boot origin
>>>>>>> though.
>>>>>>>
>>>>>>> Andreas, please add debug prints like the ones below and check that
>>>>>>> the
>>>>>>> device names match:
>>>>>>
>>>>>>
>>>>>> U-Boot 2017.05-rc1-00318-g082535f-dirty (Apr 15 2017 - 22:29:17 +0200)
>>>>>> vega-s95
>>>>>>
>>>>>> DRAM: 2 GiB
>>>>>> MMC: mmc at 70000: 0, mmc at 72000: 1, mmc at 74000: 2
>>>>>> Using default environment
>>>>>>
>>>>>> In: serial at 4c0
>>>>>> Out: serial at 4c0
>>>>>> Err: serial at 4c0
>>>>>> Net: eth0: ethernet at c9410000
>>>>>> Hit any key to stop autoboot: 0
>>>>>> mmc_init: -95, time 1806
>>>>>> MMC Device 0 not found
>>>>>> no mmc device at slot 0
>>>>>> switch to partitions #0, OK
>>>>>> mmc1 is current device
>>>>>> Scanning mmc 1:1...
>>>>>> Setting boot device name to '//boot/dtb/amlogic/meson-gxbb-v'
>>>>>> 20335 bytes read in 43 ms (460.9 KiB/s)
>>>>>> Found EFI removable media binary efi/boot/bootaa64.efi
>>>>>> Setting boot device name to '/efi/boot/bootaa64.efi'
>>>>>> reading efi/boot/bootaa64.efi
>>>>>> 129024 bytes read in 13 ms (9.5 MiB/s)
>>>>>> ## Starting EFI application at 01080000 ...
>>>>>> mmc_init: -95, time 1807
>>>>>> Found 0 disks
>>>>>
>>>>>
>>>>> That looks like efi_disk didn't manage to enumerate any devices?
>>>>
>>>>
>>>> Apparently. The last line comes from
>>>> lib/efi_loader_efi_disk:efi_disk_register(), and CONFIG_BLK=y. As you
>>>> can see, there is not a single "Scanning disk" line, so I guess we do
>>>> not iterate over uclass devices properly?
>>>>
>>>> On the Odroid-C2 I get this:
>>>>
>>>> Scanning disk mmc at 72000.blk...
>>>> Card did not respond to voltage select!
>>>> mmc_init: -95, time 9
>>>> Found 1 disks
>>>>
>>>> Therefore my guess that it matters at what point in time - before or
>>>> after the disk we want - the error accessing an MMC device happens.
>>>
>>>
>>> For comparison, Vega S95 with first MMC node disabled in DT:
>>>
>>> Scanning disk mmc at 72000.blk...
>>> Adding disk device 'mmc at 72000.blk'
>>> ** First descriptor is NOT a primary desc on 1:1 **
>>> Scanning disk mmc at 74000.blk...
>>> Adding disk device 'mmc at 74000.blk'
>>> Found 2 disks
>>>
>>> Regards,
>>> Andreas
>>>
>> By adding sd_mmc_a to the odroid-c2.dts I was able to reproduce the
>> problem on the Odroid C2.
>>
>> While booting from SD card via booti still worked
>> bootefi would not find any block device:
>>
>> => bootefi hello
>> ## Starting EFI application at 01000000 ...
>> WARNING: Invalid device tree, expect boot to fail
>> efi_add_memory_map: 0x7cf53000 0x1 2 yes
>> uclass_find_device_by_seq: 0 -1
>> uclass_find_device_by_seq: 0 0
>> - -1 -1
>> - -1 -1
>> - -1 -1
>> - not found
>> set_state_simple op missing
>> blk_get_device: if_type=6, devnum=0: mmc at 70000.blk, 6, 0
>> mmc_init: -95, time 1807
>> Found 0 disks
>> efi_add_memory_map: 0x7cf52000 0x1 6 yes
>> do_bootefi_exec:234 Jumping to 0x7cf53148
>> EFI: Entry efi_cout_output_string(000000007ff94b38, 000000007cf53280)
>> Hello, world!
>> EFI: Entry efi_exit(000000007ffa4598, 0, 0, 0000000000000000)
>> ## Application terminated, r = 0
>>
>> In the debug output you can see that after trying non-existant
>> mmc at 70000.blk no further devices are scanned. mmc at 72000.blk which has
>> the SD card is not enumerated.
>
>
> To me that looks like something wrong with DM code, as there is no explicit
> abort condition in efi_disk_register() for the CONFIG_BLK case. Let's CC
> Simon and ask for help :).

Reviewed-by: Simon Glass <sjg@chromium.org>

Do you have a board that uses CONFIG_BLK?

Or could we enhance my helloworld test to check the test? I really
don't like having to run grub to find bugs :-)

Regards,
Simon