mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2025-12-10 07:44:53 +01:00
ipq5332: avoid multiple machid for nand/mmc boot
added boot type based nand or emmc flash selection. So machid based flash selection becomes obsolete. Change-Id: I96fa43d31d23397fa249e02f62b905d6e4e67770 Signed-off-by: Rajkumar Ayyasamy <quic_arajkuma@quicinc.com>
This commit is contained in:
parent
6f9f184fd4
commit
425d52cd85
7 changed files with 120 additions and 10 deletions
|
|
@ -56,7 +56,7 @@
|
||||||
|
|
||||||
mmc: sdhci@7804000 {
|
mmc: sdhci@7804000 {
|
||||||
compatible = "qcom,sdhci-msm";
|
compatible = "qcom,sdhci-msm";
|
||||||
status = "disabled";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
pci0: pci@20000000 {
|
pci0: pci@20000000 {
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,12 @@ int qca_mmc_init(bd_t *, qca_mmc *);
|
||||||
int board_mmc_env_init(qca_mmc mmc_host);
|
int board_mmc_env_init(qca_mmc mmc_host);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_QCA_MMC
|
||||||
|
int do_mmc_init(void);
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_QPIC_SERIAL
|
||||||
|
void do_nand_init(void);
|
||||||
|
#endif
|
||||||
int ipq_board_usb_init(void);
|
int ipq_board_usb_init(void);
|
||||||
int spi_nand_init(void);
|
int spi_nand_init(void);
|
||||||
void board_mmc_deinit(void);
|
void board_mmc_deinit(void);
|
||||||
|
|
|
||||||
|
|
@ -125,10 +125,11 @@ int dump_entries_s = ARRAY_SIZE(dumpinfo_s);
|
||||||
|
|
||||||
void fdt_fixup_flash(void *blob)
|
void fdt_fixup_flash(void *blob)
|
||||||
{
|
{
|
||||||
if (gd->bd->bi_arch_number == MACH_TYPE_IPQ5332_EMULATION)
|
uint32_t flash_type = SMEM_BOOT_NO_FLASH;
|
||||||
return;
|
|
||||||
|
|
||||||
if ((gd->bd->bi_arch_number >> FLASH_SEL_BIT) & 0x1) {
|
get_current_flash_type(&flash_type);
|
||||||
|
if (flash_type == SMEM_BOOT_NORPLUSEMMC ||
|
||||||
|
flash_type == SMEM_BOOT_MMC_FLASH ) {
|
||||||
parse_fdt_fixup(LINUX_NAND_DTS"%"STATUS_DISABLED, blob);
|
parse_fdt_fixup(LINUX_NAND_DTS"%"STATUS_DISABLED, blob);
|
||||||
parse_fdt_fixup(LINUX_MMC_DTS"%"STATUS_OK, blob);
|
parse_fdt_fixup(LINUX_MMC_DTS"%"STATUS_OK, blob);
|
||||||
|
|
||||||
|
|
@ -149,6 +150,10 @@ void ipq_uboot_fdt_fixup(void)
|
||||||
/* fix peripherals required for basic board bring up
|
/* fix peripherals required for basic board bring up
|
||||||
* like flash etc.
|
* like flash etc.
|
||||||
*/
|
*/
|
||||||
|
/* This becomes obsolete as nand or emmc will be
|
||||||
|
* initialized based on the boot type. Below code
|
||||||
|
* will be removed later
|
||||||
|
*/
|
||||||
|
|
||||||
if ((machid >> FLASH_SEL_BIT) & 0x1) {
|
if ((machid >> FLASH_SEL_BIT) & 0x1) {
|
||||||
flash = "mmc";
|
flash = "mmc";
|
||||||
|
|
@ -280,11 +285,10 @@ __weak void board_mmc_deinit(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_mmc_init(bd_t *bis)
|
int do_mmc_init(void)
|
||||||
{
|
{
|
||||||
int node, gpio_node;
|
int node, gpio_node;
|
||||||
int ret = 0;
|
|
||||||
qca_smem_flash_info_t *sfi = &qca_smem_flash_info;
|
|
||||||
node = fdt_path_offset(gd->fdt_blob, "mmc");
|
node = fdt_path_offset(gd->fdt_blob, "mmc");
|
||||||
if (node < 0) {
|
if (node < 0) {
|
||||||
printf("sdhci: Node Not found, skipping initialization\n");
|
printf("sdhci: Node Not found, skipping initialization\n");
|
||||||
|
|
@ -293,7 +297,7 @@ int board_mmc_init(bd_t *bis)
|
||||||
|
|
||||||
if (!fdtdec_get_is_enabled(gd->fdt_blob, node)) {
|
if (!fdtdec_get_is_enabled(gd->fdt_blob, node)) {
|
||||||
printf("MMC: disabled, skipping initialization\n");
|
printf("MMC: disabled, skipping initialization\n");
|
||||||
return ret;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
gpio_node = fdt_subnode_offset(gd->fdt_blob, node, "mmc_gpio");
|
gpio_node = fdt_subnode_offset(gd->fdt_blob, node, "mmc_gpio");
|
||||||
|
|
@ -315,6 +319,26 @@ int board_mmc_init(bd_t *bis)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_mmc_init(bd_t *bis)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
uint32_t flash_type = SMEM_BOOT_NO_FLASH;
|
||||||
|
qca_smem_flash_info_t *sfi = &qca_smem_flash_info;
|
||||||
|
char *name = NULL;
|
||||||
|
#ifdef CONFIG_QPIC_SERIAL
|
||||||
|
name = nand_info[CONFIG_NAND_FLASH_INFO_IDX].name;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
get_current_flash_type(&flash_type);
|
||||||
|
|
||||||
|
if (flash_type != SMEM_BOOT_NORPLUSNAND &&
|
||||||
|
flash_type != SMEM_BOOT_QSPI_NAND_FLASH &&
|
||||||
|
!name)
|
||||||
|
ret = do_mmc_init();
|
||||||
|
|
||||||
if (!ret && sfi->flash_type == SMEM_BOOT_MMC_FLASH) {
|
if (!ret && sfi->flash_type == SMEM_BOOT_MMC_FLASH) {
|
||||||
ret = board_mmc_env_init(mmc_host);
|
ret = board_mmc_env_init(mmc_host);
|
||||||
}
|
}
|
||||||
|
|
@ -707,21 +731,34 @@ void reset_cpu(unsigned long a)
|
||||||
while(1);
|
while(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void board_nand_init(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_QPIC_SERIAL
|
#ifdef CONFIG_QPIC_SERIAL
|
||||||
|
void do_nand_init(void)
|
||||||
|
{
|
||||||
/* check for nand node in dts
|
/* check for nand node in dts
|
||||||
* if nand node in dts is disabled then
|
* if nand node in dts is disabled then
|
||||||
* simply return from here without
|
* simply return from here without
|
||||||
* initializing
|
* initializing
|
||||||
*/
|
*/
|
||||||
int node;
|
int node;
|
||||||
|
|
||||||
node = fdt_path_offset(gd->fdt_blob, "/nand-controller");
|
node = fdt_path_offset(gd->fdt_blob, "/nand-controller");
|
||||||
if (!fdtdec_get_is_enabled(gd->fdt_blob, node)) {
|
if (!fdtdec_get_is_enabled(gd->fdt_blob, node)) {
|
||||||
printf("QPIC: disabled, skipping initialization\n");
|
printf("QPIC: disabled, skipping initialization\n");
|
||||||
} else {
|
} else {
|
||||||
qpic_nand_init(NULL);
|
qpic_nand_init(NULL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void board_nand_init(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_QPIC_SERIAL
|
||||||
|
uint32_t flash_type = SMEM_BOOT_NO_FLASH;
|
||||||
|
|
||||||
|
get_current_flash_type(&flash_type);
|
||||||
|
if (flash_type != SMEM_BOOT_NORPLUSEMMC &&
|
||||||
|
flash_type != SMEM_BOOT_MMC_FLASH)
|
||||||
|
do_nand_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_QCA_SPI
|
#ifdef CONFIG_QCA_SPI
|
||||||
int gpio_node;
|
int gpio_node;
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@
|
||||||
#include <mmc.h>
|
#include <mmc.h>
|
||||||
#include <sdhci.h>
|
#include <sdhci.h>
|
||||||
#include <ubi_uboot.h>
|
#include <ubi_uboot.h>
|
||||||
|
#include <fdtdec.h>
|
||||||
|
#include <asm/arch-qca-common/qpic_nand.h>
|
||||||
|
#include <nand.h>
|
||||||
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
#ifndef CONFIG_SDHCI_SUPPORT
|
#ifndef CONFIG_SDHCI_SUPPORT
|
||||||
|
|
@ -547,6 +551,48 @@ char * const argv[])
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_CMD_IPQ_FLASH_INIT
|
||||||
|
static int do_flash_init(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
|
char * const argv[])
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
char *name = NULL;
|
||||||
|
void *blk_dev = NULL;
|
||||||
|
|
||||||
|
if (argc < 2)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
#ifdef CONFIG_QCA_MMC
|
||||||
|
blk_dev = (void *)(mmc_get_dev(mmc_host.dev_num));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_QPIC_SERIAL
|
||||||
|
int nand_dev = CONFIG_NAND_FLASH_INFO_IDX;
|
||||||
|
name = nand_info[nand_dev].name;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (name || blk_dev) {
|
||||||
|
printf("Either NAND or eMMC already initialized\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_QCA_MMC
|
||||||
|
if (!strncmp(argv[1], "mmc", 3)) {
|
||||||
|
ret = do_mmc_init();
|
||||||
|
if (!ret)
|
||||||
|
ret = run_command("mmc info", 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_QPIC_SERIAL
|
||||||
|
if (!strncmp(argv[1], "nand", 4)) {
|
||||||
|
do_nand_init();
|
||||||
|
ret = (nand_info[nand_dev].name) ? 0: -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
flash, 4, 0, do_flash,
|
flash, 4, 0, do_flash,
|
||||||
"flash part_name \n"
|
"flash part_name \n"
|
||||||
|
|
@ -575,3 +621,11 @@ U_BOOT_CMD(
|
||||||
"xtract the image and flash \n"
|
"xtract the image and flash \n"
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_CMD_IPQ_FLASH_INIT
|
||||||
|
U_BOOT_CMD(
|
||||||
|
flashinit, 2, 0, do_flash_init,
|
||||||
|
"flashinit nand/mmc \n",
|
||||||
|
"Init the flash \n"
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -440,4 +440,6 @@ extern loff_t board_env_size;
|
||||||
#undef CONFIG_BOOTM_RTEMS
|
#undef CONFIG_BOOTM_RTEMS
|
||||||
#undef CONFIG_BOOTM_VXWORKS
|
#undef CONFIG_BOOTM_VXWORKS
|
||||||
|
|
||||||
|
#define CONFIG_CMD_IPQ_FLASH_INIT
|
||||||
|
|
||||||
#endif /* _IPQ5332_H */
|
#endif /* _IPQ5332_H */
|
||||||
|
|
|
||||||
|
|
@ -1398,6 +1398,12 @@ class Pack(object):
|
||||||
if flinfo.type == "emmc" and image_type == "all":
|
if flinfo.type == "emmc" and image_type == "all":
|
||||||
first = True
|
first = True
|
||||||
|
|
||||||
|
if ARCH_NAME in ["ipq5332"]:
|
||||||
|
if flinfo.type == "nand" or self.flash_type == "norplusnand":
|
||||||
|
script.append("flashinit nand")
|
||||||
|
elif flinfo.type == "emmc" or self.flash_type == "norplusemmc":
|
||||||
|
script.append("flashinit mmc")
|
||||||
|
|
||||||
for index in range(parts_length):
|
for index in range(parts_length):
|
||||||
|
|
||||||
filename = ""
|
filename = ""
|
||||||
|
|
|
||||||
|
|
@ -865,6 +865,11 @@ class Pack(object):
|
||||||
if flinfo.type == "emmc" and image_type == "all":
|
if flinfo.type == "emmc" and image_type == "all":
|
||||||
first = True
|
first = True
|
||||||
|
|
||||||
|
if flinfo.type == "nand" or self.flash_type == "norplusnand":
|
||||||
|
script.append("flashinit nand")
|
||||||
|
elif flinfo.type == "emmc" or self.flash_type == "norplusemmc":
|
||||||
|
script.append("flashinit mmc")
|
||||||
|
|
||||||
section = parts[1]
|
section = parts[1]
|
||||||
imgs = section.findall('img_name')
|
imgs = section.findall('img_name')
|
||||||
pnames = section.findall('name')
|
pnames = section.findall('name')
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue