xref: /OK3568_Linux_fs/kernel/arch/arc/include/asm/mmzone.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2016 Synopsys, Inc. (www.synopsys.com)
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef _ASM_ARC_MMZONE_H
7*4882a593Smuzhiyun #define _ASM_ARC_MMZONE_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifdef CONFIG_DISCONTIGMEM
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun extern struct pglist_data node_data[];
12*4882a593Smuzhiyun #define NODE_DATA(nid) (&node_data[nid])
13*4882a593Smuzhiyun 
pfn_to_nid(unsigned long pfn)14*4882a593Smuzhiyun static inline int pfn_to_nid(unsigned long pfn)
15*4882a593Smuzhiyun {
16*4882a593Smuzhiyun 	int is_end_low = 1;
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun 	if (IS_ENABLED(CONFIG_ARC_HAS_PAE40))
19*4882a593Smuzhiyun 		is_end_low = pfn <= virt_to_pfn(0xFFFFFFFFUL);
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun 	/*
22*4882a593Smuzhiyun 	 * node 0: lowmem:             0x8000_0000   to 0xFFFF_FFFF
23*4882a593Smuzhiyun 	 * node 1: HIGHMEM w/o  PAE40: 0x0           to 0x7FFF_FFFF
24*4882a593Smuzhiyun 	 *         HIGHMEM with PAE40: 0x1_0000_0000 to ...
25*4882a593Smuzhiyun 	 */
26*4882a593Smuzhiyun 	if (pfn >= ARCH_PFN_OFFSET && is_end_low)
27*4882a593Smuzhiyun 		return 0;
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun 	return 1;
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun 
pfn_valid(unsigned long pfn)32*4882a593Smuzhiyun static inline int pfn_valid(unsigned long pfn)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun 	int nid = pfn_to_nid(pfn);
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun 	return (pfn <= node_end_pfn(nid));
37*4882a593Smuzhiyun }
38*4882a593Smuzhiyun #endif /* CONFIG_DISCONTIGMEM  */
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #endif
41