diff options
Diffstat (limited to 'Documentation/devicetree/bindings/numa.txt')
| -rw-r--r-- | Documentation/devicetree/bindings/numa.txt | 275 | 
1 files changed, 275 insertions, 0 deletions
| diff --git a/Documentation/devicetree/bindings/numa.txt b/Documentation/devicetree/bindings/numa.txt new file mode 100644 index 000000000000..21b35053ca5a --- /dev/null +++ b/Documentation/devicetree/bindings/numa.txt @@ -0,0 +1,275 @@ +============================================================================== +NUMA binding description. +============================================================================== + +============================================================================== +1 - Introduction +============================================================================== + +Systems employing a Non Uniform Memory Access (NUMA) architecture contain +collections of hardware resources including processors, memory, and I/O buses, +that comprise what is commonly known as a NUMA node. +Processor accesses to memory within the local NUMA node is generally faster +than processor accesses to memory outside of the local NUMA node. +DT defines interfaces that allow the platform to convey NUMA node +topology information to OS. + +============================================================================== +2 - numa-node-id +============================================================================== + +For the purpose of identification, each NUMA node is associated with a unique +token known as a node id. For the purpose of this binding +a node id is a 32-bit integer. + +A device node is associated with a NUMA node by the presence of a +numa-node-id property which contains the node id of the device. + +Example: +	/* numa node 0 */ +	numa-node-id = <0>; + +	/* numa node 1 */ +	numa-node-id = <1>; + +============================================================================== +3 - distance-map +============================================================================== + +The optional device tree node distance-map describes the relative +distance (memory latency) between all numa nodes. + +- compatible : Should at least contain "numa-distance-map-v1". + +- distance-matrix +  This property defines a matrix to describe the relative distances +  between all numa nodes. +  It is represented as a list of node pairs and their relative distance. + +  Note: +	1. Each entry represents distance from first node to second node. +	The distances are equal in either direction. +	2. The distance from a node to self (local distance) is represented +	with value 10 and all internode distance should be represented with +	a value greater than 10. +	3. distance-matrix should have entries in lexicographical ascending +	order of nodes. +	4. There must be only one device node distance-map which must +	reside in the root node. +	5. If the distance-map node is not present, a default +	distance-matrix is used. + +Example: +	4 nodes connected in mesh/ring topology as below, + +		0_______20______1 +		|               | +		|               | +		20             20 +		|               | +		|               | +		|_______________| +		3       20      2 + +	if relative distance for each hop is 20, +	then internode distance would be, +	      0 -> 1 = 20 +	      1 -> 2 = 20 +	      2 -> 3 = 20 +	      3 -> 0 = 20 +	      0 -> 2 = 40 +	      1 -> 3 = 40 + +     and dt presentation for this distance matrix is, + +		distance-map { +			 compatible = "numa-distance-map-v1"; +			 distance-matrix = <0 0  10>, +					   <0 1  20>, +					   <0 2  40>, +					   <0 3  20>, +					   <1 0  20>, +					   <1 1  10>, +					   <1 2  20>, +					   <1 3  40>, +					   <2 0  40>, +					   <2 1  20>, +					   <2 2  10>, +					   <2 3  20>, +					   <3 0  20>, +					   <3 1  40>, +					   <3 2  20>, +					   <3 3  10>; +		}; + +============================================================================== +4 - Example dts +============================================================================== + +Dual socket system consists of 2 boards connected through ccn bus and +each board having one socket/soc of 8 cpus, memory and pci bus. + +	memory@c00000 { +		device_type = "memory"; +		reg = <0x0 0xc00000 0x0 0x80000000>; +		/* node 0 */ +		numa-node-id = <0>; +	}; + +	memory@10000000000 { +		device_type = "memory"; +		reg = <0x100 0x0 0x0 0x80000000>; +		/* node 1 */ +		numa-node-id = <1>; +	}; + +	cpus { +		#address-cells = <2>; +		#size-cells = <0>; + +		cpu@0 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x0>; +			enable-method = "psci"; +			/* node 0 */ +			numa-node-id = <0>; +		}; +		cpu@1 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x1>; +			enable-method = "psci"; +			numa-node-id = <0>; +		}; +		cpu@2 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x2>; +			enable-method = "psci"; +			numa-node-id = <0>; +		}; +		cpu@3 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x3>; +			enable-method = "psci"; +			numa-node-id = <0>; +		}; +		cpu@4 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x4>; +			enable-method = "psci"; +			numa-node-id = <0>; +		}; +		cpu@5 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x5>; +			enable-method = "psci"; +			numa-node-id = <0>; +		}; +		cpu@6 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x6>; +			enable-method = "psci"; +			numa-node-id = <0>; +		}; +		cpu@7 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x7>; +			enable-method = "psci"; +			numa-node-id = <0>; +		}; +		cpu@8 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x8>; +			enable-method = "psci"; +			/* node 1 */ +			numa-node-id = <1>; +		}; +		cpu@9 { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0x9>; +			enable-method = "psci"; +			numa-node-id = <1>; +		}; +		cpu@a { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0xa>; +			enable-method = "psci"; +			numa-node-id = <1>; +		}; +		cpu@b { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0xb>; +			enable-method = "psci"; +			numa-node-id = <1>; +		}; +		cpu@c { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0xc>; +			enable-method = "psci"; +			numa-node-id = <1>; +		}; +		cpu@d { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0xd>; +			enable-method = "psci"; +			numa-node-id = <1>; +		}; +		cpu@e { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0xe>; +			enable-method = "psci"; +			numa-node-id = <1>; +		}; +		cpu@f { +			device_type = "cpu"; +			compatible =  "arm,armv8"; +			reg = <0x0 0xf>; +			enable-method = "psci"; +			numa-node-id = <1>; +		}; +	}; + +	pcie0: pcie0@848000000000 { +		compatible = "arm,armv8"; +		device_type = "pci"; +		bus-range = <0 255>; +		#size-cells = <2>; +		#address-cells = <3>; +		reg = <0x8480 0x00000000 0 0x10000000>;  /* Configuration space */ +		ranges = <0x03000000 0x8010 0x00000000 0x8010 0x00000000 0x70 0x00000000>; +		/* node 0 */ +		numa-node-id = <0>; +        }; + +	pcie1: pcie1@948000000000 { +		compatible = "arm,armv8"; +		device_type = "pci"; +		bus-range = <0 255>; +		#size-cells = <2>; +		#address-cells = <3>; +		reg = <0x9480 0x00000000 0 0x10000000>;  /* Configuration space */ +		ranges = <0x03000000 0x9010 0x00000000 0x9010 0x00000000 0x70 0x00000000>; +		/* node 1 */ +		numa-node-id = <1>; +        }; + +	distance-map { +		compatible = "numa-distance-map-v1"; +		distance-matrix = <0 0 10>, +				  <0 1 20>, +				  <1 1 10>; +	}; |