summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/fastboot/fb_getvar.c103
-rw-r--r--drivers/fastboot/fb_mmc.c3
-rw-r--r--drivers/fastboot/fb_nand.c4
-rw-r--r--drivers/mmc/fsl_esdhc.c29
-rw-r--r--drivers/spi/Kconfig4
5 files changed, 116 insertions, 27 deletions
diff --git a/drivers/fastboot/fb_getvar.c b/drivers/fastboot/fb_getvar.c
index 4268628f5ef..bf957e83265 100644
--- a/drivers/fastboot/fb_getvar.c
+++ b/drivers/fastboot/fb_getvar.c
@@ -20,7 +20,9 @@ static void getvar_product(char *var_parameter, char *response);
static void getvar_platform(char *var_parameter, char *response);
static void getvar_current_slot(char *var_parameter, char *response);
static void getvar_slot_suffixes(char *var_parameter, char *response);
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
static void getvar_has_slot(char *var_parameter, char *response);
+#endif
#if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
static void getvar_partition_type(char *part_name, char *response);
#endif
@@ -65,9 +67,11 @@ static const struct {
}, {
.variable = "slot-suffixes",
.dispatch = getvar_slot_suffixes
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
}, {
.variable = "has-slot",
.dispatch = getvar_has_slot
+#endif
#if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
}, {
.variable = "partition-type",
@@ -81,6 +85,47 @@ static const struct {
}
};
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
+/**
+ * Get partition number and size for any storage type.
+ *
+ * Can be used to check if partition with specified name exists.
+ *
+ * If error occurs, this function guarantees to fill @p response with fail
+ * string. @p response can be rewritten in caller, if needed.
+ *
+ * @param[in] part_name Info for which partition name to look for
+ * @param[in,out] response Pointer to fastboot response buffer
+ * @param[out] size If not NULL, will contain partition size (in blocks)
+ * @return Partition number or negative value on error
+ */
+static int getvar_get_part_info(const char *part_name, char *response,
+ size_t *size)
+{
+ int r;
+# if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
+ struct blk_desc *dev_desc;
+ disk_partition_t part_info;
+
+ r = fastboot_mmc_get_part_info(part_name, &dev_desc, &part_info,
+ response);
+ if (r >= 0 && size)
+ *size = part_info.size;
+# elif CONFIG_IS_ENABLED(FASTBOOT_FLASH_NAND)
+ struct part_info *part_info;
+
+ r = fastboot_nand_get_part_info(part_name, &part_info, response);
+ if (r >= 0 && size)
+ *size = part_info->size;
+# else
+ fastboot_fail("this storage is not supported in bootloader", response);
+ r = -ENODEV;
+# endif
+
+ return r;
+}
+#endif
+
static void getvar_version(char *var_parameter, char *response)
{
fastboot_okay(FASTBOOT_VERSION, response);
@@ -133,23 +178,48 @@ static void getvar_platform(char *var_parameter, char *response)
static void getvar_current_slot(char *var_parameter, char *response)
{
- /* A/B not implemented, for now always return _a */
- fastboot_okay("_a", response);
+ /* A/B not implemented, for now always return "a" */
+ fastboot_okay("a", response);
}
static void getvar_slot_suffixes(char *var_parameter, char *response)
{
- fastboot_okay("_a,_b", response);
+ fastboot_okay("a,b", response);
}
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
static void getvar_has_slot(char *part_name, char *response)
{
- if (part_name && (!strcmp(part_name, "boot") ||
- !strcmp(part_name, "system")))
- fastboot_okay("yes", response);
- else
- fastboot_okay("no", response);
+ char part_name_wslot[PART_NAME_LEN];
+ size_t len;
+ int r;
+
+ if (!part_name || part_name[0] == '\0')
+ goto fail;
+
+ /* part_name_wslot = part_name + "_a" */
+ len = strlcpy(part_name_wslot, part_name, PART_NAME_LEN - 3);
+ if (len > PART_NAME_LEN - 3)
+ goto fail;
+ strcat(part_name_wslot, "_a");
+
+ r = getvar_get_part_info(part_name_wslot, response, NULL);
+ if (r >= 0) {
+ fastboot_okay("yes", response); /* part exists and slotted */
+ return;
+ }
+
+ r = getvar_get_part_info(part_name, response, NULL);
+ if (r >= 0)
+ fastboot_okay("no", response); /* part exists but not slotted */
+
+ /* At this point response is filled with okay or fail string */
+ return;
+
+fail:
+ fastboot_fail("invalid partition name", response);
}
+#endif
#if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
static void getvar_partition_type(char *part_name, char *response)
@@ -176,22 +246,7 @@ static void getvar_partition_size(char *part_name, char *response)
int r;
size_t size;
-#if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
- struct blk_desc *dev_desc;
- disk_partition_t part_info;
-
- r = fastboot_mmc_get_part_info(part_name, &dev_desc, &part_info,
- response);
- if (r >= 0)
- size = part_info.size;
-#endif
-#if CONFIG_IS_ENABLED(FASTBOOT_FLASH_NAND)
- struct part_info *part_info;
-
- r = fastboot_nand_get_part_info(part_name, &part_info, response);
- if (r >= 0)
- size = part_info->size;
-#endif
+ r = getvar_get_part_info(part_name, response, &size);
if (r >= 0)
fastboot_response("OKAY", response, "0x%016zx", size);
}
diff --git a/drivers/fastboot/fb_mmc.c b/drivers/fastboot/fb_mmc.c
index 90ca81da9b5..0a335db3a61 100644
--- a/drivers/fastboot/fb_mmc.c
+++ b/drivers/fastboot/fb_mmc.c
@@ -298,7 +298,8 @@ static int fb_mmc_update_zimage(struct blk_desc *dev_desc,
* @part_info: Pointer to returned disk_partition_t
* @response: Pointer to fastboot response buffer
*/
-int fastboot_mmc_get_part_info(char *part_name, struct blk_desc **dev_desc,
+int fastboot_mmc_get_part_info(const char *part_name,
+ struct blk_desc **dev_desc,
disk_partition_t *part_info, char *response)
{
int r;
diff --git a/drivers/fastboot/fb_nand.c b/drivers/fastboot/fb_nand.c
index 526bc12307f..6756ea769f3 100644
--- a/drivers/fastboot/fb_nand.c
+++ b/drivers/fastboot/fb_nand.c
@@ -152,8 +152,8 @@ static lbaint_t fb_nand_sparse_reserve(struct sparse_storage *info,
* @part_info: Pointer to returned part_info pointer
* @response: Pointer to fastboot response buffer
*/
-int fastboot_nand_get_part_info(char *part_name, struct part_info **part_info,
- char *response)
+int fastboot_nand_get_part_info(const char *part_name,
+ struct part_info **part_info, char *response)
{
struct mtd_info *mtd = NULL;
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index 672691fa6a7..6a191a17654 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2007, 2010-2011 Freescale Semiconductor, Inc
+ * Copyright 2019 NXP Semiconductors
* Andy Fleming
*
* Based vaguely on the pxa mmc code:
@@ -25,6 +26,10 @@
#include <asm-generic/gpio.h>
#include <dm/pinctrl.h>
+#if !CONFIG_IS_ENABLED(BLK)
+#include "mmc_private.h"
+#endif
+
DECLARE_GLOBAL_DATA_PTR;
#define SDHCI_IRQ_EN_BITS (IRQSTATEN_CC | IRQSTATEN_TC | \
@@ -34,6 +39,7 @@ DECLARE_GLOBAL_DATA_PTR;
IRQSTATEN_DEBE | IRQSTATEN_BRR | IRQSTATEN_BWR | \
IRQSTATEN_DINT)
#define MAX_TUNING_LOOP 40
+#define ESDHC_DRIVER_STAGE_VALUE 0xffffffff
struct fsl_esdhc {
uint dsaddr; /* SDMA system address register */
@@ -1457,6 +1463,9 @@ static int fsl_esdhc_probe(struct udevice *dev)
fdt_addr_t addr;
unsigned int val;
struct mmc *mmc;
+#if !CONFIG_IS_ENABLED(BLK)
+ struct blk_desc *bdesc;
+#endif
int ret;
addr = dev_read_addr(dev);
@@ -1593,6 +1602,26 @@ static int fsl_esdhc_probe(struct udevice *dev)
mmc = &plat->mmc;
mmc->cfg = &plat->cfg;
mmc->dev = dev;
+#if !CONFIG_IS_ENABLED(BLK)
+ mmc->priv = priv;
+
+ /* Setup dsr related values */
+ mmc->dsr_imp = 0;
+ mmc->dsr = ESDHC_DRIVER_STAGE_VALUE;
+ /* Setup the universal parts of the block interface just once */
+ bdesc = mmc_get_blk_desc(mmc);
+ bdesc->if_type = IF_TYPE_MMC;
+ bdesc->removable = 1;
+ bdesc->devnum = mmc_get_next_devnum();
+ bdesc->block_read = mmc_bread;
+ bdesc->block_write = mmc_bwrite;
+ bdesc->block_erase = mmc_berase;
+
+ /* setup initial part type */
+ bdesc->part_type = mmc->cfg->part_type;
+ mmc_list_add(mmc);
+#endif
+
upriv->mmc = mmc;
return esdhc_init_common(priv, mmc);
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index 04ddb32a8f3..9469147152a 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -322,6 +322,7 @@ endif # if DM_SPI
config SOFT_SPI
bool "Soft SPI driver"
+ depends on DM_SPI || (DEPRECATED && !DM_SPI)
help
Enable Soft SPI driver. This driver is to use GPIO simulate
the SPI protocol.
@@ -362,6 +363,7 @@ config DAVINCI_SPI
config SH_SPI
bool "SuperH SPI driver"
+ depends on DEPRECATED
help
Enable the SuperH SPI controller driver. This driver can be used
on various SuperH SoCs, such as SH7757.
@@ -380,6 +382,7 @@ config KIRKWOOD_SPI
config LPC32XX_SSP
bool "LPC32XX SPI Driver"
+ depends on DEPRECATED
help
Enable support for SPI on LPC32xx
@@ -391,6 +394,7 @@ config MXC_SPI
config MXS_SPI
bool "MXS SPI Driver"
+ depends on DEPRECATED
help
Enable the MXS SPI controller driver. This driver can be used
on the i.MX23 and i.MX28 SoCs.