On 01.10.2019 11:59, Tudor Ambarus - M18064 wrote:
> From: Tudor Ambarus <tudor.amba...@microchip.com>
> 
> JESD216 allow vendors to define their own SFDP tables.
> 
> Add Microchip SFDP parser. The vendor table is allocated using
> resource-managed kmalloc - the table will be freed on driver detach.
> It will be accessible by getting the UCLASS_SPI_FLASH's private data.
> 
> The Michrochip's SFDP table is particularly of interest because contains
> pre-programmed globally unique EUI-48 and EUI-64 identifiers.
> 
> Signed-off-by: Tudor Ambarus <tudor.amba...@microchip.com>
> ---
>   drivers/mtd/spi/spi-nor-core.c | 35 +++++++++++++++++++++++++++++++++++
>   include/linux/mtd/spi-nor.h    |  2 ++
>   2 files changed, 37 insertions(+)
> 

Hello Jagan and Vignesh,

This patch touches the spi nor core, to take it through atmel tree would 
need your Review/Ack when you have the chance.
If you feel otherwise, reassign in patchwork and review through spi tree.

Thanks,
Eugen

> diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
> index 1acff745d1a2..bade7d8a9f79 100644
> --- a/drivers/mtd/spi/spi-nor-core.c
> +++ b/drivers/mtd/spi/spi-nor-core.c
> @@ -1417,6 +1417,7 @@ struct sfdp_parameter_header {
>   
>   #define SFDP_BFPT_ID                0xff00  /* Basic Flash Parameter Table 
> */
>   #define SFDP_SECTOR_MAP_ID  0xff81  /* Sector Map Table */
> +#define SFDP_MICROCHIP_ID    0x01bf  /* Manufacturer specific Table */
>   
>   #define SFDP_SIGNATURE              0x50444653U
>   #define SFDP_JESD216_MAJOR  1
> @@ -1797,6 +1798,34 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
>   }
>   
>   /**
> + * spi_nor_parse_microchip_sfdp() - parse the Microchip manufacturer specific
> + * SFDP table.
> + * @nor:             pointer to a 'struct spi_nor'.
> + * @param_header:    pointer to the SFDP parameter header.
> + *
> + * Return: 0 on success, -errno otherwise.
> + */
> +static int
> +spi_nor_parse_microchip_sfdp(struct spi_nor *nor,
> +                          const struct sfdp_parameter_header *param_header)
> +{
> +     size_t size;
> +     u32 addr;
> +     int ret;
> +
> +     size = param_header->length * sizeof(u32);
> +     addr = SFDP_PARAM_HEADER_PTP(param_header);
> +
> +     nor->manufacturer_sfdp = devm_kmalloc(nor->dev, size, GFP_KERNEL);
> +     if (!nor->manufacturer_sfdp)
> +             return -ENOMEM;
> +
> +     ret = spi_nor_read_sfdp(nor, addr, size, nor->manufacturer_sfdp);
> +
> +     return ret;
> +}
> +
> +/**
>    * spi_nor_parse_sfdp() - parse the Serial Flash Discoverable Parameters.
>    * @nor:            pointer to a 'struct spi_nor'
>    * @params:         pointer to the 'struct spi_nor_flash_parameter' to be
> @@ -1892,6 +1921,12 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor,
>                       dev_info(dev, "non-uniform erase sector maps are not 
> supported yet.\n");
>                       break;
>   
> +             case SFDP_MICROCHIP_ID:
> +                     err = spi_nor_parse_microchip_sfdp(nor, param_header);
> +                     if (err)
> +                             goto exit;
> +                     break;
> +
>               default:
>                       break;
>               }
> diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
> index 88e80af57941..836a50178925 100644
> --- a/include/linux/mtd/spi-nor.h
> +++ b/include/linux/mtd/spi-nor.h
> @@ -251,6 +251,7 @@ struct flash_info;
>    * @lock:           the lock for the read/write/erase/lock/unlock operations
>    * @dev:            point to a spi device, or a spi nor controller device.
>    * @info:           spi-nor part JDEC MFR id and other info
> + * @manufacturer_sfdp:       manufacturer specific SFDP table
>    * @page_size:              the page size of the SPI NOR
>    * @addr_width:             number of address bytes
>    * @erase_opcode:   the opcode for erasing a sector
> @@ -289,6 +290,7 @@ struct spi_nor {
>       struct udevice          *dev;
>       struct spi_slave        *spi;
>       const struct flash_info *info;
> +     u8                      *manufacturer_sfdp;
>       u32                     page_size;
>       u8                      addr_width;
>       u8                      erase_opcode;
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to