u-boot-brain/board/freescale/mx7ulp_evk/mx7ulp_evk.c
Peng Fan bd1cc6ae6f i.MX7ULP: evk: Modify FDT file to disable SD3.0 for usb boot
Since the SD3.0 kernel driver needs M4 image support, this causes
problem for usb boot booting into kernel.  To decouple the relationship,
we modify the FDT file in u-boot to disable SD3.0.
So the kernel won't depend on M4 image.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
2019-10-08 16:35:16 +02:00

95 lines
1.8 KiB
C

// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2016 Freescale Semiconductor, Inc.
*/
#include <common.h>
#include <fdt_support.h>
#include <asm/io.h>
#include <asm/arch/sys_proto.h>
#include <asm/arch/mx7ulp-pins.h>
#include <asm/arch/iomux.h>
#include <asm/mach-imx/boot_mode.h>
DECLARE_GLOBAL_DATA_PTR;
#define UART_PAD_CTRL (PAD_CTL_PUS_UP)
int dram_init(void)
{
gd->ram_size = PHYS_SDRAM_SIZE;
return 0;
}
static iomux_cfg_t const lpuart4_pads[] = {
MX7ULP_PAD_PTC3__LPUART4_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
MX7ULP_PAD_PTC2__LPUART4_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
};
static void setup_iomux_uart(void)
{
mx7ulp_iomux_setup_multiple_pads(lpuart4_pads,
ARRAY_SIZE(lpuart4_pads));
}
int board_early_init_f(void)
{
setup_iomux_uart();
return 0;
}
int board_init(void)
{
/* address of boot parameters */
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
return 0;
}
#if IS_ENABLED(CONFIG_OF_BOARD_SETUP)
int ft_board_setup(void *blob, bd_t *bd)
{
const char *path;
int rc, nodeoff;
if (get_boot_device() == USB_BOOT) {
path = fdt_get_alias(blob, "mmc0");
if (!path) {
puts("Not found mmc0\n");
return 0;
}
nodeoff = fdt_path_offset(blob, path);
if (nodeoff < 0)
return 0;
printf("Found usdhc0 node\n");
if (fdt_get_property(blob, nodeoff, "vqmmc-supply",
NULL) != NULL) {
rc = fdt_delprop(blob, nodeoff, "vqmmc-supply");
if (!rc) {
puts("Removed vqmmc-supply property\n");
add:
rc = fdt_setprop(blob, nodeoff,
"no-1-8-v", NULL, 0);
if (rc == -FDT_ERR_NOSPACE) {
rc = fdt_increase_size(blob, 32);
if (!rc)
goto add;
} else if (rc) {
printf("Failed to add no-1-8-v property, %d\n", rc);
} else {
puts("Added no-1-8-v property\n");
}
} else {
printf("Failed to remove vqmmc-supply property, %d\n", rc);
}
}
}
return 0;
}
#endif