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*4882a593Smuzhiyunstatic 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*4882a593Smuzhiyunstatic 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