// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2012 Freescale Semiconductor, Inc. * Author: Fabio Estevam * * Copyright (C) 2013, 2014 TQ-Systems (ported SabreSD to TQMa6x) * Author: Markus Niebel */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "tqma6_bb.h" DECLARE_GLOBAL_DATA_PTR; int dram_init(void) { gd->ram_size = imx_ddr_size(); return 0; } static const uint16_t tqma6_emmc_dsr = 0x0100; int board_early_init_f(void) { return tqma6_bb_board_early_init_f(); } int board_init(void) { /* address of boot parameters */ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; #ifndef CONFIG_DM_SPI tqma6_iomuxc_spi(); #endif tqma6_bb_board_init(); return 0; } static const char *tqma6_get_boardname(void) { u32 cpurev = get_cpu_rev(); switch ((cpurev & 0xFF000) >> 12) { case MXC_CPU_MX6SOLO: return "TQMa6S"; break; case MXC_CPU_MX6DL: return "TQMa6DL"; break; case MXC_CPU_MX6D: return "TQMa6D"; break; case MXC_CPU_MX6Q: return "TQMa6Q"; break; default: return "??"; }; } #if CONFIG_IS_ENABLED(DM_PMIC) /* setup board specific PMIC */ int power_init_board(void) { struct udevice *dev; u32 reg, rev; int ret; ret = pmic_get("pmic@8", &dev); if (ret < 0) return 0; reg = pmic_reg_read(dev, PFUZE100_DEVICEID); rev = pmic_reg_read(dev, PFUZE100_REVID); printf("PMIC: PFUZE100 ID=0x%02x REV=0x%02x\n", reg, rev); return 0; } #endif int board_late_init(void) { env_set("board_name", tqma6_get_boardname()); tqma6_bb_board_late_init(); printf("Board: %s on a %s\n", tqma6_get_boardname(), tqma6_bb_get_boardname()); return 0; } /* * Device Tree Support */ #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) #define MODELSTRLEN 32u int ft_board_setup(void *blob, struct bd_info *bd) { char modelstr[MODELSTRLEN]; snprintf(modelstr, MODELSTRLEN, "TQ %s on %s", tqma6_get_boardname(), tqma6_bb_get_boardname()); do_fixup_by_path_string(blob, "/", "model", modelstr); fdt_fixup_memory(blob, (u64)PHYS_SDRAM, (u64)gd->ram_size); /* bring in eMMC dsr settings */ do_fixup_by_path_u32(blob, "/soc/aips-bus@02100000/usdhc@02198000", "dsr", tqma6_emmc_dsr, 2); tqma6_bb_ft_board_setup(blob, bd); return 0; } #endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */