Skip to contentSkip to conversation

Add support for PL172 memory-controller

PATCH New Joachim Eastwood 2 participants 4 messages Jul 13, 2015 – Jul 17, 2015

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

v2 cover Add support for PL172 memory-controller

This patch set adds a memory driver and documentation for the ARM PL172. This driver makes it possible to configure the static memory chip selects on the ARM PL172 MultiPort Memory Controller from a set of properties in DT. Configuration of dynamic memory (SDRAM) is not supported and is left to the boot loader. The intended usage is to setup timing and configuration for static memory devices like NAND and NOR Flash before they are probed by a driver. Pretty much what like all the other memory drivers do.

As drivers/memory doesn't seem to have a maintainer of it's own I hope this patch set can go through the armsoc-drivers branch.

The previous version of the patch set didn't recive recivce much feedback and the cover letter can be found here:
http://marc.info/?l=devicetree&m=143024189625522&w=2

DT bindings for PL172 is based on the bindings for the TI AEMIF memory controller. PL172 can be found on a number of NXP devices like the LPC18xx family.

Tested on Embedded Artists' LPC4357 Developer's Kit with NOR Flash (SST39VF320) and 74LCV16374 (gpio-74x164) on MPMC.

Changes since v1:
- Add proper commit messages
- Misc clean ups

Joachim Eastwood (2):
memory: add ARM PL172 MultiPort Memory Controller driver
doc: dt: add documentation for pl172 memory bindings

 .../bindings/memory-controllers/arm,pl172.txt      | 125 +++++++++
 drivers/memory/Kconfig                             |   8 +
 drivers/memory/Makefile                            |   1 +
 drivers/memory/pl172.c                             | 302 +++++++++++++++++++++
 4 files changed, 436 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/memory-controllers/arm,pl172.txt
 create mode 100644 drivers/memory/pl172.c
Signature · 1 line
1.8.0
#1 lore raw

PATCH v2 1/2 memory: add ARM PL172 MultiPort Memory Controller driver

This driver makes it possible to configure the static memory chip selects on the ARM PL172 MultiPort Memory Controller from a set of properties in DT. Configuration of dynamic memory is not supported and is left to the boot loader.

The intended usage is to setup timing and configuration for static memory devices like NAND and NOR Flash before they are probed by a driver.

---
 drivers/memory/Kconfig  |   8 ++
 drivers/memory/Makefile |   1 +
 drivers/memory/pl172.c  | 302 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 311 insertions(+)
 create mode 100644 drivers/memory/pl172.c
drivers/memory/Kconfig +8 -0
index 8406c668ecdc..c6a644b22af4 100644
@@ -7,6 +7,14 @@ menuconfig MEMORY
 
 if MEMORY
 
+config ARM_PL172_MPMC
+	tristate "ARM PL172 MPMC driver"
+	depends on ARM_AMBA && OF
+	help
+	  This selects the ARM PrimeCell PL172 MultiPort Memory Controller.
+	  If you have an embedded system with an AMBA bus and a PL172
+	  controller, say Y or M here.
+
 config ATMEL_SDRAMC
 	bool "Atmel (Multi-port DDR-)SDRAM Controller"
 	default y
drivers/memory/Makefile +1 -0
index b670441e3cdf..1c46af501610 100644
@@ -5,6 +5,7 @@
 ifeq ($(CONFIG_DDR),y)
 obj-$(CONFIG_OF)		+= of_memory.o
 endif
+obj-$(CONFIG_ARM_PL172_MPMC)	+= pl172.o
 obj-$(CONFIG_ATMEL_SDRAMC)	+= atmel-sdramc.o
 obj-$(CONFIG_TI_AEMIF)		+= ti-aemif.o
 obj-$(CONFIG_TI_EMIF)		+= emif.o
drivers/memory/pl172.c new file +302 -0

302 lines not on this page · raw message

Signature · 1 line
1.8.0
#2 lore raw

PATCH v2 2/2 doc: dt: add documentation for pl172 memory bindings

In reply to Joachim Eastwood

Add documentation for configuration and timing setup of static memory devices on the ARM PL172 controller.

---
 .../bindings/memory-controllers/arm,pl172.txt      | 125 +++++++++++++++++++++
 1 file changed, 125 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/memory-controllers/arm,pl172.txt
Documentation/devicetree/bindings/memory-controllers/arm,pl172.txt new file +125 -0
new file mode 100644
index 000000000000..e6df32f9986d
@@ -0,0 +1,125 @@
+* Device tree bindings for ARM PL172 MultiPort Memory Controller
+
+Required properties:
+
+- compatible:		"arm,pl172", "arm,primecell"
+
+- reg:			Must contains offset/length value for controller.
+
+- #address-cells:	Must be 2. The partition number has to be encoded in the
+			first address cell and it may accept values 0..N-1
+			(N - total number of partitions). The second cell is the
+			offset into the partition.
+
+- #size-cells:		Must be set to 1.
+
+- ranges:		Must contain one or more chip select memory regions.
+
+- clocks:		Must contain references to controller clocks.
+
+- clock-names:		Must contain "mpmcclk" and "apb_pclk".
+
+- clock-ranges:		Empty property indicating that child nodes can inherit
+			named clocks. Required only if clock tree data present
+			in device tree.
+			See clock-bindings.txt
+
+Child chip-select (cs) nodes contain the memory devices nodes connected to
+such as NOR (e.g. cfi-flash) and NAND.
+
+Required child cs node properties:
+
+- #address-cells:	Must be 2.
+
+- #size-cells:		Must be 1.
+
+- ranges:		Empty property indicating that child nodes can inherit
+			memory layout.
+
+- clock-ranges:		Empty property indicating that child nodes can inherit
+			named clocks. Required only if clock tree data present
+			in device tree.
+
+- mpmc,cs:		Chip select number. Indicates to the pl0172 driver
+			which chipselect is used for accessing the memory.
+
+- mpmc,memory-width:	Width of the chip select memory. Must be equal to
+			either 8, 16 or 32.
+
+Optional child cs node config properties:
+
+- mpmc,async-page-mode:	Enable asynchronous page mode.
+
+- mpmc,cs-active-high:	Set chip select polarity to active high.
+
+- mpmc,byte-lane-low:	Set byte lane state to low.
+
+- mpmc,extended-wait:	Enable extended wait.
+
+- mpmc,buffer-enable:	Enable write buffer.
+
+- mpmc,write-protect:	Enable write protect.
+
+Optional child cs node timing properties:
+
+- mpmc,write-enable-delay:	Delay from chip select assertion to write
+				enable (WE signal) in nano seconds.
+
+- mpmc,output-enable-delay:	Delay from chip select assertion to output
+				enable (OE signal) in nano seconds.
+
+- mpmc,write-access-delay:	Delay from chip select assertion to write
+				access in nano seconds.
+
+- mpmc,read-access-delay:	Delay from chip select assertion to read
+				access in nano seconds.
+
+- mpmc,page-mode-read-delay:	Delay for asynchronous page mode sequential
+				accesses in nano seconds.
+
+- mpmc,turn-round-delay:	Delay between access to memory banks in nano
+				seconds.
+
+If any of the above timing parameters are absent, current parameter value will
+be taken from the corresponding HW reg.
+
+Example for pl172 with nor flash on chip select 0 shown below.
+
+emc: memory-controller at 40005000 {
+	compatible = "arm,pl172", "arm,primecell";
+	reg = <0x40005000 0x1000>;
+	clocks = <&ccu1 CLK_CPU_EMCDIV>, <&ccu1 CLK_CPU_EMC>;
+	clock-names = "mpmcclk", "apb_pclk";
+	#address-cells = <2>;
+	#size-cells = <1>;
+	ranges = <0 0 0x1c000000 0x1000000
+		  1 0 0x1d000000 0x1000000
+		  2 0 0x1e000000 0x1000000
+		  3 0 0x1f000000 0x1000000>;
+
+	cs0 {
+		#address-cells = <2>;
+		#size-cells = <1>;
+		ranges;
+
+		mpmc,cs = <0>;
+		mpmc,memory-width = <16>;
+		mpmc,byte-lane-low;
+		mpmc,write-enable-delay = <0>;
+		mpmc,output-enable-delay = <0>;
+		mpmc,read-enable-delay = <70>;
+		mpmc,page-mode-read-delay = <70>;
+
+		flash at 0,0 {
+			compatible = "sst,sst39vf320", "cfi-flash";
+			reg = <0 0 0x400000>;
+			bank-width = <2>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			partition at 0 {
+				label = "data";
+				reg = <0 0x400000>;
+			};
+		};
+	};
+};
Signature · 1 line
1.8.0
#3 lore raw

v2 cover Add support for PL172 memory-controller

In reply to Joachim Eastwood
Quoted 23 lines · Joachim Eastwood

This patch set adds a memory driver and documentation for the ARM PL172. This driver makes it possible to configure the static memory chip selects on the ARM PL172 MultiPort Memory Controller from a set of properties in DT. Configuration of dynamic memory (SDRAM) is not supported and is left to the boot loader. The intended usage is to setup timing and configuration for static memory devices like NAND and NOR Flash before they are probed by a driver. Pretty much what like all the other memory drivers do.

As drivers/memory doesn't seem to have a maintainer of it's own I hope this patch set can go through the armsoc-drivers branch.

The previous version of the patch set didn't recive recivce much feedback and the cover letter can be found here:
http://marc.info/?l=devicetree&m=143024189625522&w=2

DT bindings for PL172 is based on the bindings for the TI AEMIF memory controller. PL172 can be found on a number of NXP devices like the LPC18xx family.

Tested on Embedded Artists' LPC4357 Developer's Kit with NOR Flash (SST39VF320) and 74LCV16374 (gpio-74x164) on MPMC.

Quoted 7 lines

Changes since v1:
- Add proper commit messages
- Misc clean ups

Joachim Eastwood (2):
memory: add ARM PL172 MultiPort Memory Controller driver
doc: dt: add documentation for pl172 memory bindings

Thanks, I've applied both patches to next/drivers.

-Olof