Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'at91-5.5-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/at91/linux into arm/drivers

AT91 drivers for 5.5

- a new driver exposing the serial number registers through nvmem
- a few documentation and definition changes

* tag 'at91-5.5-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/at91/linux:
soc: at91: Add Atmel SFR SN (Serial Number) support
memory: atmel-ebi: switch to SPDX license identifiers
memory: atmel-ebi: move NUM_CS definition inside EBI driver
ARM: at91: Documentation: update the sama5d3 and armv7m datasheets

Link: https://lore.kernel.org/r/20191107221644.GA201884@piout.net
Signed-off-by: Olof Johansson <olof@lixom.net>

+118 -9
+2 -2
Documentation/arm/microchip.rst
··· 103 103 104 104 * Datasheet 105 105 106 - http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-11121-32-bit-Cortex-A5-Microcontroller-SAMA5D3_Datasheet.pdf 106 + http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-11121-32-bit-Cortex-A5-Microcontroller-SAMA5D3_Datasheet_B.pdf 107 107 108 108 * ARM Cortex-A5 + NEON based SoCs 109 109 - sama5d4 family ··· 167 167 168 168 * Datasheet 169 169 170 - http://ww1.microchip.com/downloads/en/DeviceDoc/60001527A.pdf 170 + http://ww1.microchip.com/downloads/en/DeviceDoc/SAM-E70-S70-V70-V71-Family-Data-Sheet-DS60001527D.pdf 171 171 172 172 173 173 Linux kernel information
+5 -6
drivers/memory/atmel-ebi.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 1 2 /* 2 3 * EBI driver for Atmel chips 3 4 * inspired by the fsl weim bus driver 4 5 * 5 6 * Copyright (C) 2013 Jean-Jacques Hiblot <jjhiblot@traphandler.com> 6 - * 7 - * This file is licensed under the terms of the GNU General Public 8 - * License version 2. This program is licensed "as is" without any 9 - * warranty of any kind, whether express or implied. 10 7 */ 11 8 12 9 #include <linux/clk.h> ··· 15 18 #include <linux/of_device.h> 16 19 #include <linux/regmap.h> 17 20 #include <soc/at91/atmel-sfr.h> 21 + 22 + #define AT91_EBI_NUM_CS 8 18 23 19 24 struct atmel_ebi_dev_config { 20 25 int cs; ··· 313 314 if (ret) 314 315 return ret; 315 316 316 - if (cs >= AT91_MATRIX_EBI_NUM_CS || 317 + if (cs >= AT91_EBI_NUM_CS || 317 318 !(ebi->caps->available_cs & BIT(cs))) { 318 319 dev_err(dev, "invalid reg property in %pOF\n", np); 319 320 return -EINVAL; ··· 343 344 apply = true; 344 345 345 346 i = 0; 346 - for_each_set_bit(cs, &cslines, AT91_MATRIX_EBI_NUM_CS) { 347 + for_each_set_bit(cs, &cslines, AT91_EBI_NUM_CS) { 347 348 ebid->configs[i].cs = cs; 348 349 349 350 if (apply) {
+11
drivers/soc/atmel/Kconfig
··· 5 5 default ARCH_AT91 6 6 help 7 7 Include support for the SoC bus on the Atmel ARM SoCs. 8 + 9 + config AT91_SOC_SFR 10 + tristate "Special Function Registers support" 11 + depends on ARCH_AT91 || COMPILE_TEST 12 + help 13 + This is a driver for the Special Function Registers available on 14 + Atmel SAMA5Dx SoCs, providing access to specific aspects of the 15 + integrated memory, bridge implementations, processor etc. 16 + 17 + This driver can also be built as a module. If so, the module 18 + will be called sfr.
+1
drivers/soc/atmel/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 obj-$(CONFIG_AT91_SOC_ID) += soc.o 3 + obj-$(CONFIG_AT91_SOC_SFR) += sfr.o
+99
drivers/soc/atmel/sfr.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * sfr.c - driver for special function registers 4 + * 5 + * Copyright (C) 2019 Bootlin. 6 + * 7 + */ 8 + #include <linux/mfd/syscon.h> 9 + #include <linux/module.h> 10 + #include <linux/nvmem-provider.h> 11 + #include <linux/random.h> 12 + #include <linux/of.h> 13 + #include <linux/of_device.h> 14 + #include <linux/platform_device.h> 15 + #include <linux/regmap.h> 16 + 17 + #define SFR_SN0 0x4c 18 + #define SFR_SN_SIZE 8 19 + 20 + struct atmel_sfr_priv { 21 + struct regmap *regmap; 22 + }; 23 + 24 + static int atmel_sfr_read(void *context, unsigned int offset, 25 + void *buf, size_t bytes) 26 + { 27 + struct atmel_sfr_priv *priv = context; 28 + 29 + return regmap_bulk_read(priv->regmap, SFR_SN0 + offset, 30 + buf, bytes / 4); 31 + } 32 + 33 + static struct nvmem_config atmel_sfr_nvmem_config = { 34 + .name = "atmel-sfr", 35 + .read_only = true, 36 + .word_size = 4, 37 + .stride = 4, 38 + .size = SFR_SN_SIZE, 39 + .reg_read = atmel_sfr_read, 40 + }; 41 + 42 + static int atmel_sfr_probe(struct platform_device *pdev) 43 + { 44 + struct device *dev = &pdev->dev; 45 + struct device_node *np = dev->of_node; 46 + struct nvmem_device *nvmem; 47 + struct atmel_sfr_priv *priv; 48 + u8 sn[SFR_SN_SIZE]; 49 + int ret; 50 + 51 + priv = devm_kmalloc(dev, sizeof(*priv), GFP_KERNEL); 52 + if (!priv) 53 + return -ENOMEM; 54 + 55 + priv->regmap = syscon_node_to_regmap(np); 56 + if (IS_ERR(priv->regmap)) { 57 + dev_err(dev, "cannot get parent's regmap\n"); 58 + return PTR_ERR(priv->regmap); 59 + } 60 + 61 + atmel_sfr_nvmem_config.dev = dev; 62 + atmel_sfr_nvmem_config.priv = priv; 63 + 64 + nvmem = devm_nvmem_register(dev, &atmel_sfr_nvmem_config); 65 + if (IS_ERR(nvmem)) { 66 + dev_err(dev, "error registering nvmem config\n"); 67 + return PTR_ERR(nvmem); 68 + } 69 + 70 + ret = atmel_sfr_read(priv, 0, sn, SFR_SN_SIZE); 71 + if (ret == 0) 72 + add_device_randomness(sn, SFR_SN_SIZE); 73 + 74 + return ret; 75 + } 76 + 77 + static const struct of_device_id atmel_sfr_dt_ids[] = { 78 + { 79 + .compatible = "atmel,sama5d2-sfr", 80 + }, { 81 + .compatible = "atmel,sama5d4-sfr", 82 + }, { 83 + /* sentinel */ 84 + }, 85 + }; 86 + MODULE_DEVICE_TABLE(of, atmel_sfr_dt_ids); 87 + 88 + static struct platform_driver atmel_sfr_driver = { 89 + .probe = atmel_sfr_probe, 90 + .driver = { 91 + .name = "atmel-sfr", 92 + .of_match_table = atmel_sfr_dt_ids, 93 + }, 94 + }; 95 + module_platform_driver(atmel_sfr_driver); 96 + 97 + MODULE_AUTHOR("Kamel Bouhara <kamel.bouhara@bootlin.com>"); 98 + MODULE_DESCRIPTION("Atmel SFR SN driver for SAMA5D2/4 SoC family"); 99 + MODULE_LICENSE("GPL v2");
-1
include/linux/mfd/syscon/atmel-matrix.h
··· 106 106 #define AT91_MATRIX_DDR_IOSR BIT(18) 107 107 #define AT91_MATRIX_NFD0_SELECT BIT(24) 108 108 #define AT91_MATRIX_DDR_MP_EN BIT(25) 109 - #define AT91_MATRIX_EBI_NUM_CS 8 110 109 111 110 #define AT91_MATRIX_USBPUCR_PUON BIT(30) 112 111