1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-02 09:12:08 +02:00

arm: mvebu: clearfog: Detect MMC vs SDHC and fixup fdt

[upstream of vendor commit 19a96f7c40a8fc1d0a6546ac2418d966e5840a99]

The Clearfog devices have only one SDHC device. This is either eMMC if
it is populated on the SOM or SDHC if not. The Linux device tree assumes
the SDHC case. Detect if the device is an eMMC and fixup the device-tree
so it will be detected by Linux.

Ported from vendor repo at https://github.com/SolidRun/u-boot

Signed-off-by: Martin Rowe <martin.p.rowe@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
Martin Rowe
2023-03-27 21:24:09 +10:00
committed by Stefan Roese
parent 3f92f4865b
commit c733fe91e4
2 changed files with 34 additions and 0 deletions

View File

@@ -107,6 +107,7 @@ config TARGET_CLEARFOG
bool "Support ClearFog" bool "Support ClearFog"
select 88F6820 select 88F6820
select BOARD_LATE_INIT select BOARD_LATE_INIT
select OF_BOARD_SETUP
config TARGET_HELIOS4 config TARGET_HELIOS4
bool "Support Helios4" bool "Support Helios4"

View File

@@ -10,6 +10,7 @@
#include <miiphy.h> #include <miiphy.h>
#include <net.h> #include <net.h>
#include <netdev.h> #include <netdev.h>
#include <mmc.h>
#include <asm/global_data.h> #include <asm/global_data.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/arch/cpu.h> #include <asm/arch/cpu.h>
@@ -261,3 +262,35 @@ int board_late_init(void)
return 0; return 0;
} }
static bool has_emmc(void)
{
struct mmc *mmc;
mmc = find_mmc_device(0);
if (!mmc)
return 0;
return (!mmc_init(mmc) && IS_MMC(mmc)) ? true : false;
}
/*
* The Clearfog devices have only one SDHC device. This is either eMMC
* if it is populated on the SOM or SDHC if not. The Linux device tree
* assumes the SDHC case. Detect if the device is an eMMC and fixup the
* device-tree, so that it will be detected by Linux.
*/
int ft_board_setup(void *blob, struct bd_info *bd)
{
int node;
if (has_emmc()) {
node = fdt_node_offset_by_compatible(blob, -1, "marvell,armada-380-sdhci");
if (node < 0)
return 0; /* Unexpected eMMC device; patching not supported */
puts("Patching FDT so that eMMC is detected by OS\n");
return fdt_setprop_empty(blob, node, "non-removable");
}
return 0;
}