All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rajesh Bhagat <rajesh.bhagat@nxp.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v6 17/27] net: fm: add TFABOOT support
Date: Mon, 5 Nov 2018 18:02:23 +0000	[thread overview]
Message-ID: <20181105181931.7348-18-rajesh.bhagat@nxp.com> (raw)
In-Reply-To: <20181105181931.7348-1-rajesh.bhagat@nxp.com>

Adds TFABOOT support and allows to pick FMAN firmware
on basis of boot source.

Signed-off-by: Pankit Garg <pankit.garg@nxp.com>
Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
---
Change in v6:
 - Rebased to master 

Change in v5:
 - Added CONFIG_ARM64 flag for includes in fm driver

Change in v4: None

Change in v3: None
  
Change in v2:                                                                  
 - Removed extra CONFIG_TFABOOT flag usage 

 drivers/net/fm/fm.c | 102 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 99 insertions(+), 3 deletions(-)

diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c
index c5cf188f05..efd8fc4547 100644
--- a/drivers/net/fm/fm.c
+++ b/drivers/net/fm/fm.c
@@ -11,12 +11,14 @@
 #include "fm.h"
 #include <fsl_qe.h>		/* For struct qe_firmware */
 
-#ifdef CONFIG_SYS_QE_FMAN_FW_IN_NAND
 #include <nand.h>
-#elif defined(CONFIG_SYS_QE_FW_IN_SPIFLASH)
 #include <spi_flash.h>
-#elif defined(CONFIG_SYS_QE_FMAN_FW_IN_MMC)
 #include <mmc.h>
+#include <environment.h>
+
+#ifdef CONFIG_ARM64
+#include <asm/armv8/mmu.h>
+#include <asm/arch/cpu.h>
 #endif
 
 struct fm_muram muram[CONFIG_SYS_NUM_FMAN];
@@ -347,6 +349,99 @@ static void fm_init_qmi(struct fm_qmi_common *qmi)
 }
 
 /* Init common part of FM, index is fm num# like fm as above */
+#ifdef CONFIG_TFABOOT
+int fm_init_common(int index, struct ccsr_fman *reg)
+{
+	int rc;
+	void *addr = NULL;
+	enum boot_src src = get_boot_src();
+
+	if (src == BOOT_SOURCE_IFC_NOR) {
+		addr = (void *)(CONFIG_SYS_FMAN_FW_ADDR +
+				CONFIG_SYS_FSL_IFC_BASE);
+	} else if (src == BOOT_SOURCE_IFC_NAND) {
+		size_t fw_length = CONFIG_SYS_QE_FMAN_FW_LENGTH;
+
+		addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
+
+		rc = nand_read(get_nand_dev_by_index(0),
+			       (loff_t)CONFIG_SYS_FMAN_FW_ADDR,
+			       &fw_length, (u_char *)addr);
+		if (rc == -EUCLEAN) {
+			printf("NAND read of FMAN firmware at offset 0x%x\
+			       failed %d\n", CONFIG_SYS_FMAN_FW_ADDR, rc);
+		}
+	} else if (src == BOOT_SOURCE_QSPI_NOR) {
+		struct spi_flash *ucode_flash;
+
+		addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
+		int ret = 0;
+
+#ifdef CONFIG_DM_SPI_FLASH
+		struct udevice *new;
+
+		/* speed and mode will be read from DT */
+		ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS,
+					     CONFIG_ENV_SPI_CS, 0, 0, &new);
+
+		ucode_flash = dev_get_uclass_priv(new);
+#else
+		ucode_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS,
+					      CONFIG_ENV_SPI_CS,
+					      CONFIG_ENV_SPI_MAX_HZ,
+					      CONFIG_ENV_SPI_MODE);
+#endif
+		if (!ucode_flash)
+			printf("SF: probe for ucode failed\n");
+		else {
+			ret = spi_flash_read(ucode_flash,
+					     CONFIG_SYS_FMAN_FW_ADDR +
+					     CONFIG_SYS_FSL_QSPI_BASE,
+					     CONFIG_SYS_QE_FMAN_FW_LENGTH,
+					     addr);
+			if (ret)
+				printf("SF: read for ucode failed\n");
+			spi_flash_free(ucode_flash);
+		}
+	} else if (src == BOOT_SOURCE_SD_MMC) {
+		int dev = CONFIG_SYS_MMC_ENV_DEV;
+
+		addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
+		u32 cnt = CONFIG_SYS_QE_FMAN_FW_LENGTH / 512;
+		u32 blk = CONFIG_SYS_FMAN_FW_ADDR / 512;
+		struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
+
+		if (!mmc)
+			printf("\nMMC cannot find device for ucode\n");
+		else {
+			printf("\nMMC read: dev # %u, block # %u, count %u \
+			       ...\n", dev, blk, cnt);
+			mmc_init(mmc);
+			(void)blk_dread(mmc_get_blk_desc(mmc), blk, cnt,
+						addr);
+		}
+	} else
+		addr = NULL;
+
+	/* Upload the Fman microcode if it's present */
+	rc = fman_upload_firmware(index, &reg->fm_imem, addr);
+	if (rc)
+		return rc;
+	env_set_addr("fman_ucode", addr);
+
+	fm_init_muram(index, &reg->muram);
+	fm_init_qmi(&reg->fm_qmi_common);
+	fm_init_fpm(&reg->fm_fpm);
+
+	/* clear DMA status */
+	setbits_be32(&reg->fm_dma.fmdmsr, FMDMSR_CLEAR_ALL);
+
+	/* set DMA mode */
+	setbits_be32(&reg->fm_dma.fmdmmr, FMDMMR_SBER);
+
+	return fm_init_bmi(index, &reg->fm_bmi_common);
+}
+#else
 int fm_init_common(int index, struct ccsr_fman *reg)
 {
 	int rc;
@@ -429,3 +524,4 @@ int fm_init_common(int index, struct ccsr_fman *reg)
 
 	return fm_init_bmi(index, &reg->fm_bmi_common);
 }
+#endif
-- 
2.17.1

  parent reply	other threads:[~2018-11-05 18:02 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-05 18:01 [U-Boot] [PATCH v6 00/27] TF-A Boot support for NXP Chassis 2 platforms Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 01/27] move data structure out of cpu.h Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 02/27] env: allow flash and nand env driver to compile together Rajesh Bhagat
2018-12-03 18:14   ` York Sun
2018-11-05 18:01 ` [U-Boot] [PATCH v6 03/27] env: sf: define API to override sf environment address Rajesh Bhagat
2018-12-03 18:16   ` York Sun
2018-11-05 18:01 ` [U-Boot] [PATCH v6 04/27] driver/ifc: replace __ilog2 with LOG2 macro Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 05/27] armv8: layerscape: Enable routing SError exception Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 06/27] armv8: fsl-layerscape: change tlb base from OCRAM to DDR in EL < 3 Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 07/27] drivers: ifc: dynamic chipselect mapping support Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 08/27] armv8: layerscape: Add TFABOOT support Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 09/27] armv8: fsl-layerscape: identify boot source from PORSR register Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 10/27] armv8: layerscape: remove EL3 specific erratas for TFABOOT Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 11/27] armv8: fsl-layerscape: bootcmd identification " Rajesh Bhagat
2018-11-05 18:01 ` [U-Boot] [PATCH v6 12/27] armv8: layerscape: add SMC calls for DDR size and bank info Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 13/27] armv8: layerscape: skip OCRAM init for TFABOOT Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 14/27] armv8: fsl-layerscape: Update parsing boot source Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 15/27] armv8: sec_firmware: change el2_to_aarch32 SMC ID Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 16/27] armv8: sec_firmware: return job ring status as true in TFABOOT Rajesh Bhagat
2018-11-05 18:02 ` Rajesh Bhagat [this message]
2018-11-05 18:02 ` [U-Boot] [PATCH v6 18/27] drivers: qe: add TFABOOT support Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 19/27] armv8: fsl-layerscape: add support of MC framework for TFA Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 20/27] armv8: ls1046ardb: Add TFABOOT support Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 21/27] armv8: ls1046aqds: " Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 22/27] armv8: ls1043ardb: " Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 23/27] armv8: ls1043aqds: " Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 24/27] armv8: ls1012ardb: " Rajesh Bhagat
2018-11-05 18:02 ` [U-Boot] [PATCH v6 25/27] armv8: ls1012aqds: fix secure boot compilation Rajesh Bhagat
2018-11-05 18:03 ` [U-Boot] [PATCH v6 26/27] armv8: ls1012aqds: Add TFABOOT support Rajesh Bhagat
2018-11-05 18:03 ` [U-Boot] [PATCH v6 27/27] armv8: ls1012afrx: " Rajesh Bhagat
2018-11-19 20:13 ` [U-Boot] [PATCH v6 00/27] TF-A Boot support for NXP Chassis 2 platforms York Sun
2018-12-10 21:05 ` York Sun

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181105181931.7348-18-rajesh.bhagat@nxp.com \
    --to=rajesh.bhagat@nxp.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.