[U-Boot] [PATCH 6/8] ARM: imx: dh-imx6: Convert SATA support to DM

Marek Vasut marex at denx.de
Sun May 12 20:19:31 UTC 2019


On 5/12/19 12:04 PM, Stefan Roese wrote:
> On 12.05.19 02:57, Marek Vasut wrote:
>> Enable DM SATA support on DHCOM iMX6 PDK2.
>> Convert board code to match the DM support.
>>
>> Signed-off-by: Marek Vasut <marex at denx.de>
>> Cc: Fabio Estevam <fabio.estevam at nxp.com>
>> Cc: Ludwig Zenz <lzenz at dh-electronics.com>
>> Cc: Stefano Babic <sbabic at denx.de>
>> ---
>>   board/dhelectronics/dh_imx6/dh_imx6.c | 55 +++++++++++++++++++++++++--
>>   configs/dh_imx6_defconfig             |  2 +
>>   include/configs/dh_imx6.h             |  5 ---
>>   3 files changed, 53 insertions(+), 9 deletions(-)
>>
>> diff --git a/board/dhelectronics/dh_imx6/dh_imx6.c
>> b/board/dhelectronics/dh_imx6/dh_imx6.c
>> index 193bb0eade..2381df84b4 100644
>> --- a/board/dhelectronics/dh_imx6/dh_imx6.c
>> +++ b/board/dhelectronics/dh_imx6/dh_imx6.c
>> @@ -20,6 +20,8 @@
>>   #include <asm/mach-imx/iomux-v3.h>
>>   #include <asm/mach-imx/mxc_i2c.h>
>>   #include <asm/mach-imx/sata.h>
>> +#include <ahci.h>
>> +#include <dwc_ahsata.h>
>>   #include <environment.h>
>>   #include <errno.h>
>>   #include <fsl_esdhc.h>
>> @@ -302,10 +304,6 @@ int board_init(void)
>>       }
>>   #endif
>>   -#ifdef CONFIG_SATA
>> -    setup_sata();
>> -#endif
>> -
>>       setup_dhcom_mac_from_fuse();
>>         return 0;
>> @@ -384,3 +382,52 @@ int checkboard(void)
>>       puts("Board: DHCOM i.MX6\n");
>>       return 0;
>>   }
>> +
>> +#if CONFIG_IS_ENABLED(AHCI)
>> +static int sata_imx_probe(struct udevice *dev)
>> +{
>> +    int i, err;
>> +
>> +    for (i = 0; i < 10; i++) {
>> +        err = setup_sata();
>> +        if (err) {
>> +            printf("SATA setup failed: %d\n", err);
>> +            return err;
>> +        }
>> +
>> +        udelay(100);
>> +
>> +        err = dwc_ahsata_probe(dev);
>> +        if (!err)
>> +            break;
>> +
>> +        /* There is no device on the SATA port */
>> +        if (sata_dm_port_status(0, 0) == 0)
>> +            break;
>> +
>> +        /* There's a device, but link not established. Retry */
>> +        device_remove(dev, DM_REMOVE_NORMAL);
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>> +struct ahci_ops sata_imx_ops = {
>> +    .port_status = dwc_ahsata_port_status,
>> +    .reset    = dwc_ahsata_bus_reset,
>> +    .scan    = dwc_ahsata_scan,
>> +};
>> +
>> +static const struct udevice_id sata_imx_ids[] = {
>> +    { .compatible = "fsl,imx6q-ahci" },
>> +    { }
>> +};
>> +
>> +U_BOOT_DRIVER(sata_imx) = {
>> +    .name        = "dwc_ahci",
>> +    .id        = UCLASS_AHCI,
>> +    .of_match    = sata_imx_ids,
>> +    .ops        = &sata_imx_ops,
>> +    .probe        = sata_imx_probe,
>> +};
>> +#endif /* AHCI */
> 
> Is this code dh_imx6 specific in any way? If not, then it would be
> better placed in drivers/ata, so that other i.MX6 boards might use
> it as well. Or am I missing something?

It's a copy-paste from apalis-imx6. In fact, it already is in
drivers/ata (see CONFIG_DWC_AHSATA_AHCI), so I'll just fix up the apalis
board and update this patch.

-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list