net: pfe_eth: Use spi_flash_read API to access flash memory

Current PFE firmware access spi-nor memory directly. New spi-mem
framework does not support direct memory access. So, let's use
spi_flash_read API to access memory instead of directly using it.

Signed-off-by: Kuldeep Singh <kuldeep.singh@nxp.com>
Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
This commit is contained in:
Kuldeep Singh 2020-05-28 11:42:53 +05:30 committed by Priyanka Jain
parent 02decd4e0c
commit e0152dbed6
2 changed files with 48 additions and 2 deletions

View File

@ -16,13 +16,14 @@
#include <linux/bitops.h> #include <linux/bitops.h>
#include <net/pfe_eth/pfe_eth.h> #include <net/pfe_eth/pfe_eth.h>
#include <net/pfe_eth/pfe_firmware.h> #include <net/pfe_eth/pfe_firmware.h>
#include <spi_flash.h>
#ifdef CONFIG_CHAIN_OF_TRUST #ifdef CONFIG_CHAIN_OF_TRUST
#include <fsl_validate.h> #include <fsl_validate.h>
#endif #endif
#define PFE_FIRMWARE_FIT_CNF_NAME "config@1" #define PFE_FIRMWARE_FIT_CNF_NAME "config@1"
static const void *pfe_fit_addr = (void *)CONFIG_SYS_LS_PFE_FW_ADDR; static const void *pfe_fit_addr;
/* /*
* PFE elf firmware loader. * PFE elf firmware loader.
@ -163,6 +164,44 @@ static int pfe_fit_check(void)
return ret; return ret;
} }
int pfe_spi_flash_init(void)
{
struct spi_flash *pfe_flash;
int ret = 0;
void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
#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);
pfe_flash = dev_get_uclass_priv(new);
#else
pfe_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS,
CONFIG_ENV_SPI_CS,
CONFIG_ENV_SPI_MAX_HZ,
CONFIG_ENV_SPI_MODE);
#endif
if (!pfe_flash) {
printf("SF: probe for pfe failed\n");
return -ENODEV;
}
ret = spi_flash_read(pfe_flash,
CONFIG_SYS_LS_PFE_FW_ADDR,
CONFIG_SYS_QE_FMAN_FW_LENGTH,
addr);
if (ret)
printf("SF: read for pfe failed\n");
pfe_fit_addr = addr;
spi_flash_free(pfe_flash);
return ret;
}
/* /*
* PFE firmware initialization. * PFE firmware initialization.
* Loads different firmware files from FIT image. * Loads different firmware files from FIT image.
@ -187,6 +226,10 @@ int pfe_firmware_init(void)
int ret = 0; int ret = 0;
int fw_count; int fw_count;
ret = pfe_spi_flash_init();
if (ret)
goto err;
ret = pfe_fit_check(); ret = pfe_fit_check();
if (ret) if (ret)
goto err; goto err;

View File

@ -36,8 +36,11 @@
/* Size of malloc() pool */ /* Size of malloc() pool */
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 1024 * 1024) #define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 1024 * 1024)
/*SPI device */ /* PFE */
#define CONFIG_SYS_FMAN_FW_ADDR 0x400d0000 #define CONFIG_SYS_FMAN_FW_ADDR 0x400d0000
#define CONFIG_SYS_QE_FMAN_FW_LENGTH 0x300000
/*SPI device */
#define CONFIG_SYS_FSL_QSPI_BASE 0x40000000 #define CONFIG_SYS_FSL_QSPI_BASE 0x40000000
/* SATA */ /* SATA */