What:		/sys/firmware/sgi_uv/
Date:		September 2020
Contact:	Justin Ernst <justin.ernst@hpe.com>
Description:
		The /sys/firmware/sgi_uv directory contains information
		about the UV platform.

		Under that directory are a number of read-only attributes::

			archtype
			hub_type
			hubless
			partition_id
			coherence_id
			uv_type

		The archtype entry contains the UV architecture type that
		is used to select arch-dependent addresses and features.
		It can be set via the OEM_ID in the ACPI MADT table or by
		UVsystab entry both passed from UV BIOS.

		The hub_type entry is used to select the type of hub which is
		similar to uv_type but encoded in a binary format.  Include
		the file uv_hub.h to get the definitions.

		The hubless entry basically is present and set only if there
		is no hub.  In this case the hub_type entry is not present.

		The partition_id entry contains the partition id.
		UV systems can be partitioned into multiple physical
		machines, which each partition running a unique copy
		of the operating system. Each partition will have a unique
		partition id.

		The coherence_id entry contains the coherence id.
		A partitioned UV system can have one or more coherence
		domains. The coherence id indicates which coherence domain
		this partition is in.

		The uv_type entry contains the hub revision number.
		This value can be used to identify the UV system version::

			"0.*" = Hubless UV ('*' is subtype)
			"3.0" = UV2
			"5.0" = UV3
			"7.0" = UV4
			"7.1" = UV4a
			"9.0" = UV5

		The /sys/firmware/sgi_uv directory also contains two directories::

			hubs/
			pcibuses/

		The hubs directory contains a number of hub objects, each representing
		a UV Hub visible to the BIOS. Each hub object's name is appended by a
		unique ordinal value (ex. /sys/firmware/sgi_uv/hubs/hub_5)

		Each hub object directory contains a number of read-only attributes::

			cnode
			location
			name
			nasid
			shared
			this_partition

		The cnode entry contains the cnode number of the corresponding hub.
		If a cnode value is not applicable, the value returned will be -1.

		The location entry contains the location string of the corresponding hub.
		This value is used to physically identify a hub within a system.

		The name entry contains the name of the corresponding hub. This name can
		be two variants::

			"UVHub x.x" = A 'node' ASIC, connecting a CPU to the interconnect
			fabric. The 'x.x' value represents the ASIC revision.
			(ex. 'UVHub 5.0')

			"NLxRouter" = A 'router ASIC, only connecting other ASICs to
			the interconnect fabric. The 'x' value representing
			the fabric technology version. (ex. 'NL8Router')

		The nasid entry contains the nasid number of the corresponding hub.
		If a nasid value is not applicable, the value returned will be -1.

		The shared entry contains a boolean value describing whether the
		corresponding hub is shared between system partitions.

		The this_partition entry contains a boolean value describing whether
		the corresponding hub is local to the current partition.

		Each hub object directory also contains a number of port objects,
		each representing a fabric port on the corresponding hub.
		A port object's name is appended by a unique ordinal value
		(ex. /sys/firmware/sgi_uv/hubs/hub_5/port_3)

		Each port object directory contains a number of read-only attributes::

			conn_hub
			conn_port

		The conn_hub entry contains a value representing the unique
		oridinal value of the hub on the other end of the fabric
		cable plugged into the port. If the port is disconnected,
		the value returned will be -1.

		The conn_port entry contains a value representing the unique
		oridinal value of the port on the other end of the fabric cable
		plugged into the port. If the port is disconnected, the value
		returned will be -1.

		Ex:
			A value of '3' is read from:
				/sys/firmware/sgi_uv/hubs/hub_5/port_3/conn_hub

			and a value of '6' is read from:
				/sys/firmware/sgi_uv/hubs/hub_5/port_3/conn_port

			representing that this port is connected to:
				/sys/firmware/sgi_uv/hubs/hub_3/port_6

		The pcibuses directory contains a number of PCI bus objects.
		Each PCI bus object's name is appended by its PCI bus address.
		(ex. pcibus_0003:80)

		Each pcibus object has a number of possible read-only attributes::

			type
			location
			slot
			ppb_addr
			iio_stack

		The type entry contains a value describing the type of IO at
		the corresponding PCI bus address. Known possible values
		across all UV versions are::

			BASE IO
			PCIe IO
			PCIe SLOT
			NODE IO
			Riser
			PPB

		The location entry contains the location string of the UV Hub
		of the CPU physically connected to the corresponding PCI bus.

		The slot entry contains the physical slot number of the
		corresponding PCI bus. This value is used to physically locate
		PCI cards within a system.

		The ppb_addr entry contains the PCI address string of the
		bridged PCI bus. This entry is only present when the PCI bus
		object type is 'PPB'.

		The iio_stack entry contains a value describing the IIO stack
		number that the corresponding PCI bus object is connected to.
