Lines Matching +full:cpu +full:- +full:offset

9  * Copyright (C) 2007-2014 Silicon Graphics, Inc. All rights reserved.
33 * M - The low M bits of a physical address represent the offset
38 * N - Number of bits in the node portion of a socket physical
41 * NASID - network ID of a router, Mbrick or Cbrick. Nasid values of
44 * right shift the NASID by 1 to exclude the always-zero bit.
47 * GNODE - NASID right shifted by 1 bit. Most mmrs contain gnodes instead
50 * PNODE - the low N bits of the GNODE. The PNODE is the most useful variant
53 * GPA - (global physical address) a socket physical address converted
62 * +--------------------------------+---------------------+
64 * +--------------------------------+---------------------+
65 * |<-------53 - M bits --->|<--------M bits ----->
67 * M - number of node offset bits (35 .. 40)
70 * Memory/UV-HUB Processor Socket Address Format:
71 * +----------------+---------------+---------------------+
73 * +----------------+---------------+---------------------+
74 * <--- N bits --->|<--------M bits ----->
76 * M - number of node offset bits (35 .. 40)
77 * N - number of PNODE bits (0 .. 10)
91 * pppppppppplc0cch Nehalem-EX (12 bits in hdw reg)
92 * ppppppppplcc0cch Westmere-EX (12 bits in hdw reg)
115 * This value is also the value of the maximum number of non-router NASIDs
145 * available in the L3 cache on the cpu socket for the node.
182 /* CPU specific info with a pointer to the hub common info struct */
191 #define uv_cpu_info_per(cpu) (&per_cpu(__uv_cpu_info, cpu)) argument
202 return (struct uv_hub_info_s *)uv_cpu_info->p_uv_hub_info; in _uv_hub_info()
206 static inline struct uv_hub_info_s *uv_cpu_hub_info(int cpu) in uv_cpu_hub_info() argument
208 return (struct uv_hub_info_s *)uv_cpu_info_per(cpu)->p_uv_hub_info; in uv_cpu_hub_info()
213 return uv_hub_info->hub_type; in uv_hub_type()
218 uv_hub_info->hub_type = uvmask; in uv_hub_type_set()
224 * This is a software convention - NOT the hardware revision numbers in
272 * in this file - not by other kernel code.
273 * n - NASID (full 15-bit global nasid)
274 * g - GNODE (full 15-bit global nasid, right shifted 1)
275 * p - PNODE (local part of nsids, right shifted 1)
278 (((n) >> uv_hub_info->nasid_shift) & uv_hub_info->pnode_mask)
279 #define UV_PNODE_TO_GNODE(p) ((p) |uv_hub_info->gnode_extra)
281 (UV_PNODE_TO_GNODE(p) << uv_hub_info->nasid_shift)
331 #define UV_GLOBAL_MMR64_BASE (uv_hub_info->global_mmr_base)
337 #define UV_GLOBAL_MMR64_PNODE_SHIFT (uv_hub_info->global_mmr_shift)
347 /* Local Bus from cpu's perspective */
355 * used by the system controller to monitor system-wide operation.
357 * 8 cpus per core, 2 threads per cpu) there are 32 cpu threads on
364 LOCAL_BUS_SIZE - \
382 /* global bits offset - number of local address bits in gpa for this UV arch */
385 return uv_hub_info->gpa_shift; in uv_gpa_shift()
392 struct uv_gam_range_s *gr = uv_hub_info->gr_table; in uv_gam_range()
393 unsigned long pal = (pa & uv_hub_info->gpa_mask) >> UV_GAM_RANGE_SHFT; in uv_gam_range()
394 int i, num = uv_hub_info->gr_table_len; in uv_gam_range()
398 if (pal < gr->limit) in uv_gam_range()
410 int base = gr->base; in uv_gam_range_base()
415 return uv_hub_info->gr_table[base].limit; in uv_gam_range_base()
418 /* socket phys RAM --> UV global NASID (UV4+) */
421 return uv_gam_range(paddr)->nasid; in uv_soc_phys_ram_to_nasid()
425 /* socket virtual --> UV global NASID (UV4+) */
431 /* socket phys RAM --> UV global physical address */
434 unsigned int m_val = uv_hub_info->m_val; in uv_soc_phys_ram_to_gpa()
436 if (paddr < uv_hub_info->lowmem_remap_top) in uv_soc_phys_ram_to_gpa()
437 paddr |= uv_hub_info->lowmem_remap_base; in uv_soc_phys_ram_to_gpa()
440 paddr |= uv_hub_info->gnode_upper; in uv_soc_phys_ram_to_gpa()
441 paddr = ((paddr << uv_hub_info->m_shift) in uv_soc_phys_ram_to_gpa()
442 >> uv_hub_info->m_shift) | in uv_soc_phys_ram_to_gpa()
443 ((paddr >> uv_hub_info->m_val) in uv_soc_phys_ram_to_gpa()
444 << uv_hub_info->n_lshift); in uv_soc_phys_ram_to_gpa()
447 << uv_hub_info->gpa_shift; in uv_soc_phys_ram_to_gpa()
452 /* socket virtual --> UV global physical address */
465 /* UV global physical address --> socket phys RAM */
469 unsigned long remap_base = uv_hub_info->lowmem_remap_base; in uv_gpa_to_soc_phys_ram()
470 unsigned long remap_top = uv_hub_info->lowmem_remap_top; in uv_gpa_to_soc_phys_ram()
471 unsigned int m_val = uv_hub_info->m_val; in uv_gpa_to_soc_phys_ram()
474 gpa = ((gpa << uv_hub_info->m_shift) >> uv_hub_info->m_shift) | in uv_gpa_to_soc_phys_ram()
475 ((gpa >> uv_hub_info->n_lshift) << uv_hub_info->m_val); in uv_gpa_to_soc_phys_ram()
477 paddr = gpa & uv_hub_info->gpa_mask; in uv_gpa_to_soc_phys_ram()
479 paddr -= remap_base; in uv_gpa_to_soc_phys_ram()
483 /* gpa -> gnode */
486 unsigned int n_lshift = uv_hub_info->n_lshift; in uv_gpa_to_gnode()
491 return uv_gam_range(gpa)->nasid >> 1; in uv_gpa_to_gnode()
494 /* gpa -> pnode */
497 return uv_gpa_to_gnode(gpa) & uv_hub_info->pnode_mask; in uv_gpa_to_pnode()
500 /* gpa -> node offset */
503 unsigned int m_shift = uv_hub_info->m_shift; in uv_gpa_to_offset()
508 return (gpa & uv_hub_info->gpa_mask) - uv_gam_range_base(gpa); in uv_gpa_to_offset()
514 return s2nid ? s2nid[socket - uv_hub_info->min_socket] : socket; in _uv_socket_to_node()
519 return _uv_socket_to_node(socket, uv_hub_info->socket_to_node); in uv_socket_to_node()
522 /* pnode, offset --> socket virtual */
523 static inline void *uv_pnode_offset_to_vaddr(int pnode, unsigned long offset) in uv_pnode_offset_to_vaddr() argument
525 unsigned int m_val = uv_hub_info->m_val; in uv_pnode_offset_to_vaddr()
530 return __va(((unsigned long)pnode << m_val) | offset); in uv_pnode_offset_to_vaddr()
532 p2s = uv_hub_info->pnode_to_socket; in uv_pnode_offset_to_vaddr()
533 sockid = p2s ? p2s[pnode - uv_hub_info->min_pnode] : pnode; in uv_pnode_offset_to_vaddr()
538 return __va((unsigned long)offset); in uv_pnode_offset_to_vaddr()
540 base = (unsigned long)(uv_hub_info->gr_table[node - 1].limit); in uv_pnode_offset_to_vaddr()
541 return __va(base << UV_GAM_RANGE_SHFT | offset); in uv_pnode_offset_to_vaddr()
547 int pnode = apicid >> uv_hub_info->apic_pnode_shift; in uv_apicid_to_pnode()
548 unsigned short *s2pn = uv_hub_info->socket_to_pnode; in uv_apicid_to_pnode()
550 return s2pn ? s2pn[pnode - uv_hub_info->min_socket] : pnode; in uv_apicid_to_pnode()
557 static inline unsigned long *uv_global_mmr32_address(int pnode, unsigned long offset) in uv_global_mmr32_address() argument
560 UV_GLOBAL_MMR32_PNODE_BITS(pnode) | offset); in uv_global_mmr32_address()
563 static inline void uv_write_global_mmr32(int pnode, unsigned long offset, unsigned long val) in uv_write_global_mmr32() argument
565 writeq(val, uv_global_mmr32_address(pnode, offset)); in uv_write_global_mmr32()
568 static inline unsigned long uv_read_global_mmr32(int pnode, unsigned long offset) in uv_read_global_mmr32() argument
570 return readq(uv_global_mmr32_address(pnode, offset)); in uv_read_global_mmr32()
577 static inline volatile void __iomem *uv_global_mmr64_address(int pnode, unsigned long offset) in uv_global_mmr64_address() argument
580 UV_GLOBAL_MMR64_PNODE_BITS(pnode) | offset); in uv_global_mmr64_address()
583 static inline void uv_write_global_mmr64(int pnode, unsigned long offset, unsigned long val) in uv_write_global_mmr64() argument
585 writeq(val, uv_global_mmr64_address(pnode, offset)); in uv_write_global_mmr64()
588 static inline unsigned long uv_read_global_mmr64(int pnode, unsigned long offset) in uv_read_global_mmr64() argument
590 return readq(uv_global_mmr64_address(pnode, offset)); in uv_read_global_mmr64()
593 static inline void uv_write_global_mmr8(int pnode, unsigned long offset, unsigned char val) in uv_write_global_mmr8() argument
595 writeb(val, uv_global_mmr64_address(pnode, offset)); in uv_write_global_mmr8()
598 static inline unsigned char uv_read_global_mmr8(int pnode, unsigned long offset) in uv_read_global_mmr8() argument
600 return readb(uv_global_mmr64_address(pnode, offset)); in uv_read_global_mmr8()
607 static inline unsigned long *uv_local_mmr_address(unsigned long offset) in uv_local_mmr_address() argument
609 return __va(UV_LOCAL_MMR_BASE | offset); in uv_local_mmr_address()
612 static inline unsigned long uv_read_local_mmr(unsigned long offset) in uv_read_local_mmr() argument
614 return readq(uv_local_mmr_address(offset)); in uv_read_local_mmr()
617 static inline void uv_write_local_mmr(unsigned long offset, unsigned long val) in uv_write_local_mmr() argument
619 writeq(val, uv_local_mmr_address(offset)); in uv_write_local_mmr()
622 static inline unsigned char uv_read_local_mmr8(unsigned long offset) in uv_read_local_mmr8() argument
624 return readb(uv_local_mmr_address(offset)); in uv_read_local_mmr8()
627 static inline void uv_write_local_mmr8(unsigned long offset, unsigned char val) in uv_write_local_mmr8() argument
629 writeb(val, uv_local_mmr_address(offset)); in uv_write_local_mmr8()
632 /* Blade-local cpu number of current cpu. Numbered 0 .. <# cpus on the blade> */
635 return uv_cpu_info->blade_cpu_id; in uv_blade_processor_id()
638 /* Blade-local cpu number of cpu N. Numbered 0 .. <# cpus on the blade> */
639 static inline int uv_cpu_blade_processor_id(int cpu) in uv_cpu_blade_processor_id() argument
641 return uv_cpu_info_per(cpu)->blade_cpu_id; in uv_cpu_blade_processor_id()
650 /* Blade number of current cpu. Numnbered 0 .. <#blades -1> */
653 return uv_hub_info->numa_blade_id; in uv_numa_blade_id()
666 /* Convert a CPU number to the UV blade number */
667 static inline int uv_cpu_to_blade_id(int cpu) in uv_cpu_to_blade_id() argument
669 return uv_node_to_blade_id(cpu_to_node(cpu)); in uv_cpu_to_blade_id()
675 return uv_hub_info_list(uv_blade_to_node(bid))->pnode; in uv_blade_to_pnode()
678 /* Nid of memory node on blade. -1 if no blade-local memory */
681 return uv_hub_info_list(uv_blade_to_node(bid))->memory_nid; in uv_blade_to_memory_nid()
687 return uv_hub_info_list(uv_blade_to_node(bid))->nr_possible_cpus; in uv_blade_nr_possible_cpus()
693 return uv_hub_info_list(uv_blade_to_node(bid))->nr_online_cpus; in uv_blade_nr_online_cpus()
696 /* Convert a cpu id to the PNODE of the blade containing the cpu */
697 static inline int uv_cpu_to_pnode(int cpu) in uv_cpu_to_pnode() argument
699 return uv_cpu_hub_info(cpu)->pnode; in uv_cpu_to_pnode()
705 return uv_hub_info_list(nid)->pnode; in uv_node_to_pnode()
732 /* BMC sets a bit this MMR non-zero before sending an NMI */
760 #define uv_cpu_nmi_per(cpu) (per_cpu(uv_cpu_nmi, cpu)) argument
761 #define uv_hub_nmi_per(cpu) (uv_cpu_nmi_per(cpu).hub) argument
775 return uv_hub_info->hub_revision; in uv_get_min_hub_revision_id()