On 03/10/2020 10:50, Pali Rohár wrote:
On Saturday 03 October 2020 09:17:35 Andre Heider wrote:
On 02/10/2020 12:49, Pali Rohár wrote:
On Saturday 26 September 2020 11:09:59 Andre Heider wrote:
On 25/09/2020 09:46, Pali Rohár wrote:
On Friday 11 September 2020 06:35:10 Andre Heider wrote:
...
+#ifdef CONFIG_BOARD_LATE_INIT
+int board_late_init(void)
+{
+       bool ddr4, emmc;
+
+       if (env_get("fdtfile"))
+               return 0;
+
+       if (!of_machine_is_compatible("globalscale,espressobin"))
+               return 0;
+
+       /* If the memory controller has been configured for DDR4, we're running 
on v7 */
+       ddr4 = ((readl(A3700_CH0_MC_CTRL2_REG) >> 
A3700_MC_CTRL2_SDRAM_TYPE_OFFS)
+               & A3700_MC_CTRL2_SDRAM_TYPE_MASK) == 
A3700_MC_CTRL2_SDRAM_TYPE_DDR4;
+
+       emmc = of_machine_is_compatible("globalscale,espressobin-emmc");

Maybe stupid question, but are not we able to detect if eMMC is
connected or not at runtime? That could simplify setup and avoid usage
of additional special DTS file for eMMC in U-Boot.

At some point I wondered about the same.

IIRC armbian just enables it and uses one u-boot binary everywhere. A
non-existing chip won't get detected, so that shouldn't be a problem.

But I think it has more to do with enabling/powering up hardware blocks,
which is not wanted or may even problematic.

In U-Boot such functionality may be implemented in board_fix_fdt()
function which allows U-Boot to modify its Device tree prior using it.

You have already wrote code which is doing V5 vs V7 detection, so
detecting eMMC is the last thing which is missing to have just one
U-Boot DTS file and therefore only one U-Boot binary for Espressobin.

That implies setting status=okay for the emmc node, which then powers up
that block. I don't know if that might be problematic. Can we just do that?

No. I mean to detect presence of eMMC in board_fix_fdt() and then set
tatus=okay only if check passed.

Yes, but how do you detect the emmc then? Enabling it in u-boot's dts and calling mmc_init() on it would be the easy way, but open coding all the required parts to do that with status=disabled could get rather big and/or unmaintanable (I didn't check what exactly would be required)?


The emmc detection would also add some delay to the boot process.

At least it should be powered down if no emmc chip has been detected, but I
didn't check if that happens right now.

Regards,
Andre

Reply via email to