• Jack Steiner's avatar
    x86: support for new UV apic · ac23d4ee
    Jack Steiner authored
    UV supports really big systems. So big, in fact, that the APICID register
    does not contain enough bits to contain an APICID that is unique across all
    cpus.
    
    The UV BIOS supports 3 APICID modes:
    
    	- legacy mode. This mode uses the old APIC mode where
    	  APICID is in bits [31:24] of the APICID register.
    
    	- x2apic mode. This mode is whitebox-compatible. APICIDs
    	  are unique across all cpus. Standard x2apic APIC operations
    	  (Intel-defined) can be used for IPIs. The node identifier
    	  fits within the Intel-defined portion of the APICID register.
    
    	- x2apic-uv mode. In this mode, the APICIDs on each node have
    	  unique IDs, but IDs on different node are not unique. For example,
    	  if each mode has 32 cpus, the APICIDs on each node might be
    	  0 - 31. Every node has the same set of IDs.
    	  The UV hub is used to route IPIs/interrupts to the correct node.
    	  Traditional APIC operations WILL NOT WORK.
    
    In x2apic-uv mode, the ACPI tables all contain a full unique ID (note:
    exact bit layout still changing but the following is close):
    
    	nnnnnnnnnnlc0cch
    		n = unique node number
    		l = socket number on board
    		c = core
    		h = hyperthread
    
    Only the "lc0cch" bits are written to the APICID register. The remaining bits are
    supplied by having the get_apic_id() function "OR" the extra bits into the value
    read from the APICID register. (Hmmm.. why not keep the ENTIRE APICID register
    in per-cpu data....)
    
    The x2apic-uv mode is recognized by the MADT table containing:
    	  oem_id = "SGI"
    	  oem_table_id = "UV-X"
    Signed-off-by: default avatarJack Steiner <steiner@sgi.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    ac23d4ee
genx2apic_uv_x.c 6.33 KB