[PATCH 00/17] RFC for additional 'nvmem' plumbing

Andrey Smirnov andrew.smirnov at gmail.com
Tue Feb 16 17:29:01 PST 2016


Hi everyone,

The main purpose of this patchset is propose additional Nvmem plubing
needed for that subsytem's inclusion in BB and solicit feedback about
it (patches ## 15 to 17) . Included in this set are also a number of
bugfixes and RFC-for-bugfixes for problems that were discoverd during
development of this patch series.

Proposed Nvmem additions are two new platform device drivers that
implement a nvmem interface on top of data embedded in DT as well as
nvmem interface that allows to combine existing nvmem-accesible bytes
into continuous blocks.

Below is an example of DT code that uses both drivers in order to
create a MAC address as a combination of bytes from DT and OCOTP
module:

	ro-blob {
		compatible = "barebox,nvmem-ro-of-blob";
		#address-cells = <1>;
		#size-cells = <1>;

		ro_blob: ro-blob-cell {
			reg = <0 5>;
			data = [aa bb cc dd ff];
		};
	};

	scatter-gather-blob {
		compatible = "barebox,nvmem-sg";
		#address-cells = <1>;
		#size-cells = <1>;

		mac_address: combined-bits {
			reg = <0 6>;
			layout = <&ro_blob 0 2
  			          &ro_blob 1 1
			          &fec_mac_address 1 1
			          &ro_blob 2 1
			          &fec_mac_address 2 1>;
		};
	};

	&ocotp {
	       #address-cells = <1>;
	       	#size-cells = <1>;

		barebox,provide-mac-address = <&fec 0x620>;

		fec_mac_address: mac_address at 88 {
			reg = <0x88 0x8>;
		};
	};

This should result in 'mac_address' variable that when read returns
[aa bb bb xx cc yy], where 'xx' and 'yy' are bytes at offsets 1 and 2
of OCOTP's register 0x88.

Please bear in mind that the code in commits ## 16, 17 is very raw and
clunky (a lot of error checking/handling code is omitted), which was
done for the cause of expediency in order to start this discussion
sooner and abandon this path if this design doesn't make sense.

As usual, any feedback is appreciated.

Regards,
Andrey Smirnov


Andrey Smirnov (17):
  base: driver.c: Coalesce error checking code
  [RFC] at91: Make IS_ERR work for I/O pointers
  [RFC] base/driver.c: Remove dev_request_mem_region_err_null
  i2c-at91: Use IS_ERR instead of checking for NULL
  clk-imx6: Call clk_enable on mmdc_ch0_axi_podf
  fec_imx: Deallocate clocks when probe fails
  [RFC] base: Introduce dev_request_mem_resource
  fec_imx: Deallocate I/O resources if probe fails
  fec_imx: Free phy_reset GPIO if when probe fails
  fec_imx: Use FEC_ECNTRL_RESET instead of a magic number
  fec_imx: Impelemnt reset timeout
  fec_imx: Deallocate DMA buffers when probe fails
  fec_imx: Unregister MDIO when probe fails
  [RFC] net: eth: Always use DEVICE_ID_DYNAMIC
  [RFC] nvmem: Add of_nvmem_cell_from_cell_np
  [RFC] nvmem: Add nvmem-ro-of-blob driver
  [RFC] nvmem: Add nvmem-sg driver

 arch/arm/mach-at91/at91sam926x_time.c |   6 +-
 arch/arm/mach-imx/clk-imx6.c          |   1 +
 drivers/base/driver.c                 |  25 ++-
 drivers/i2c/busses/i2c-at91.c         |   4 +-
 drivers/misc/Makefile                 |   2 +
 drivers/misc/nvmem-ro-of-blob.c       | 196 +++++++++++++++++++++++
 drivers/misc/nvmem-sg.c               | 287 ++++++++++++++++++++++++++++++++++
 drivers/net/fec_imx.c                 |  60 +++++--
 drivers/nvmem/core.c                  |  57 ++++---
 drivers/pinctrl/pinctrl-at91.c        |   6 +-
 drivers/serial/atmel.c                |   6 +-
 include/driver.h                      |   8 +-
 include/linux/nvmem-consumer.h        |  10 ++
 net/eth.c                             |   8 +-
 scripts/include/linux/err.h           |  66 ++++++++
 15 files changed, 670 insertions(+), 72 deletions(-)
 create mode 100644 drivers/misc/nvmem-ro-of-blob.c
 create mode 100644 drivers/misc/nvmem-sg.c

-- 
2.5.0




More information about the barebox mailing list