From patchwork Tue Mar 22 07:37:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 600415 X-Patchwork-Delegate: jagannadh.teki@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3qTl3r70J0z9s5Q for ; Tue, 22 Mar 2016 18:40:40 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id BBC16A767F; Tue, 22 Mar 2016 08:40:09 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hAwHgDku4Ln5; Tue, 22 Mar 2016 08:40:09 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 8DCE7A75FA; Tue, 22 Mar 2016 08:40:01 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E85C1A75B9 for ; Tue, 22 Mar 2016 08:39:44 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id EEWIBj_d3_9k for ; Tue, 22 Mar 2016 08:39:44 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-pf0-f194.google.com (mail-pf0-f194.google.com [209.85.192.194]) by theia.denx.de (Postfix) with ESMTPS id 3945FA7640 for ; Tue, 22 Mar 2016 08:39:32 +0100 (CET) Received: by mail-pf0-f194.google.com with SMTP id x3so34297922pfb.0 for ; Tue, 22 Mar 2016 00:39:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=unuu87dGla7jpUJ00MTMHjQIwZoyma+1ajOm/lP3wz0=; b=fPIOaMkNbXHwATvaJOqO4fGgpxcTRJxgGTXIWam+A/Cp8ZSxaOsmQgeEKQBLFkAnzq qkCEM9jHi3NzXLbx0XvHJk54+i9jN/Z5VEpXpapwkV1DDRe4uY2vbOCP7NydoyQy5wtJ KeJISBeXvkkvRl0l5vtD5HVj4zjIef1d6YPKoCxpGDkIB4lKieBjQ4wB/SFpFdbWMESf rZI7NEP9uezwqwY0cdepwe/UfzgU2h3jJX6nWIeFKkx6qdP8u3faPFlGu81mekQRdiKX D29QyMTIYV4zJzfSTWMfLuFZIz5kxMjFkwFli6C0GkRMBFXs8HLL+XIH5YQjk+II8SXn syxg== X-Gm-Message-State: AD7BkJKVIEKi/56T0M2aR0IdViwt3a5T66YvI5UZBzLho1TQ8cZjg/R9cQNF+xH5lZYwtg== X-Received: by 10.66.164.39 with SMTP id yn7mr52010257pab.107.1458632371037; Tue, 22 Mar 2016 00:39:31 -0700 (PDT) Received: from jteki-Latitude-E7450.amcc.com ([182.73.239.130]) by smtp.gmail.com with ESMTPSA id ko9sm45814957pab.37.2016.03.22.00.39.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 Mar 2016 00:39:29 -0700 (PDT) From: Jagan Teki To: u-boot@lists.denx.de Date: Tue, 22 Mar 2016 13:07:21 +0530 Message-Id: <1458632319-24866-9-git-send-email-jteki@openedev.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1458632319-24866-1-git-send-email-jteki@openedev.com> References: <1458632319-24866-1-git-send-email-jteki@openedev.com> Cc: Michal Simek , Siva Durga Prasad Paladugu , Jagan Teki Subject: [U-Boot] [PATCH v7 09/87] mtd: spi-nor: Add dm spi-nor probing X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This patch adds driver-model probe from cmd_sf through MTD_DM_SPI_NOR which is depends on MTD and DM_SPI uclass. Cc: Simon Glass Cc: Bin Meng Cc: Mugunthan V N Cc: Michal Simek Cc: Siva Durga Prasad Paladugu Signed-off-by: Jagan Teki --- cmd/sf.c | 4 ++-- common/env_sf.c | 4 ++-- drivers/mtd/spi-nor/Kconfig | 7 +++++++ drivers/mtd/spi-nor/Makefile | 2 ++ drivers/mtd/spi-nor/spi-nor-probe.c | 36 ++++++++++++++++++++++++++++++++++++ include/spi_flash.h | 18 +++++++++++++++++- 6 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 drivers/mtd/spi-nor/spi-nor-probe.c diff --git a/cmd/sf.c b/cmd/sf.c index 42862d9..89ab41e 100644 --- a/cmd/sf.c +++ b/cmd/sf.c @@ -85,7 +85,7 @@ static int do_spi_flash_probe(int argc, char * const argv[]) unsigned int speed = CONFIG_SF_DEFAULT_SPEED; unsigned int mode = CONFIG_SF_DEFAULT_MODE; char *endp; -#ifdef CONFIG_DM_SPI_FLASH +#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR) struct udevice *new, *bus_dev; int ret; #else @@ -118,7 +118,7 @@ static int do_spi_flash_probe(int argc, char * const argv[]) return -1; } -#ifdef CONFIG_DM_SPI_FLASH +#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR) /* Remove the old device, otherwise probe will just be a nop */ ret = spi_find_bus_and_cs(bus, cs, &bus_dev, &new); if (!ret) { diff --git a/common/env_sf.c b/common/env_sf.c index 892e6cb..ec88792 100644 --- a/common/env_sf.c +++ b/common/env_sf.c @@ -52,7 +52,7 @@ int saveenv(void) char *saved_buffer = NULL, flag = OBSOLETE_FLAG; u32 saved_size, saved_offset, sector = 1; int ret; -#ifdef CONFIG_DM_SPI_FLASH +#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR) struct udevice *new; ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS, @@ -242,7 +242,7 @@ int saveenv(void) char *saved_buffer = NULL; int ret = 1; env_t env_new; -#ifdef CONFIG_DM_SPI_FLASH +#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR) struct udevice *new; ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS, diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig index 374cdcb..342164d 100644 --- a/drivers/mtd/spi-nor/Kconfig +++ b/drivers/mtd/spi-nor/Kconfig @@ -1,5 +1,6 @@ menuconfig MTD_SPI_NOR tristate "SPI-NOR device support" + select DM_MTD_SPI_NOR if DM_SPI && MTD help This is the core SPI NOR framework which can be used to interact SPI-NOR to SPI driver interface layer and the SPI-NOR controller driver. @@ -12,6 +13,12 @@ menuconfig MTD_SPI_NOR SPI-NOR controller drivers for SPI-NOR device access. Note that from SPI-NOR core to SPI drivers there should be an interface layer. +config DM_MTD_SPI_NOR + bool "MTD driver model for SPI-NOR" + help + This is enables MTD driver model support for SPI-NOR. Both MTD and SPI + driver models need to define for enabling this support. + if MTD_SPI_NOR config MTD_M25P80 diff --git a/drivers/mtd/spi-nor/Makefile b/drivers/mtd/spi-nor/Makefile index 9ab6e3d..2f41630 100644 --- a/drivers/mtd/spi-nor/Makefile +++ b/drivers/mtd/spi-nor/Makefile @@ -6,6 +6,8 @@ ifdef CONFIG_MTD_SPI_NOR obj-y += spi-nor.o obj-y += spi-nor-ids.o + +obj-$(CONFIG_DM_MTD_SPI_NOR) += spi-nor-probe.o endif obj-$(CONFIG_MTD_M25P80) += m25p80.o diff --git a/drivers/mtd/spi-nor/spi-nor-probe.c b/drivers/mtd/spi-nor/spi-nor-probe.c new file mode 100644 index 0000000..532d8a7 --- /dev/null +++ b/drivers/mtd/spi-nor/spi-nor-probe.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2014 Google, Inc + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include + +int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs, + unsigned int max_hz, unsigned int spi_mode, + struct udevice **devp) +{ + struct spi_slave *slave; + struct udevice *bus; + char *str; + int ret; + +#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_USE_TINY_PRINTF) + str = "spi_flash"; +#else + char name[30]; + + snprintf(name, sizeof(name), "spi_flash@%d:%d", busnum, cs); + str = strdup(name); +#endif + ret = spi_get_bus_and_cs(busnum, cs, max_hz, spi_mode, + "spi_flash_std", str, &bus, &slave); + if (ret) + return ret; + + *devp = slave->dev; + return 0; +} diff --git a/include/spi_flash.h b/include/spi_flash.h index d0ce9e7..d39941f 100644 --- a/include/spi_flash.h +++ b/include/spi_flash.h @@ -108,6 +108,14 @@ struct spi_flash { #endif }; +#if defined(CONFIG_MTD_SPI_NOR) && defined(CONFIG_DM_MTD_SPI_NOR) + +int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs, + unsigned int max_hz, unsigned int spi_mode, + struct udevice **devp); + +#endif + struct dm_spi_flash_ops { int (*read)(struct udevice *dev, u32 offset, size_t len, void *buf); int (*write)(struct udevice *dev, u32 offset, size_t len, @@ -190,7 +198,15 @@ int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs, void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs); -#else +#elif !defined(CONFIG_MTD_SPI_NOR) + +struct sandbox_state; + +int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs, + struct udevice *bus, int of_offset, const char *spec); + +void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs); + struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, unsigned int max_hz, unsigned int spi_mode);