18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2016 Synopsys, Inc. (www.synopsys.com) 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _ASM_ARC_MMZONE_H 78c2ecf20Sopenharmony_ci#define _ASM_ARC_MMZONE_H 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifdef CONFIG_DISCONTIGMEM 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ciextern struct pglist_data node_data[]; 128c2ecf20Sopenharmony_ci#define NODE_DATA(nid) (&node_data[nid]) 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_cistatic inline int pfn_to_nid(unsigned long pfn) 158c2ecf20Sopenharmony_ci{ 168c2ecf20Sopenharmony_ci int is_end_low = 1; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci if (IS_ENABLED(CONFIG_ARC_HAS_PAE40)) 198c2ecf20Sopenharmony_ci is_end_low = pfn <= virt_to_pfn(0xFFFFFFFFUL); 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci /* 228c2ecf20Sopenharmony_ci * node 0: lowmem: 0x8000_0000 to 0xFFFF_FFFF 238c2ecf20Sopenharmony_ci * node 1: HIGHMEM w/o PAE40: 0x0 to 0x7FFF_FFFF 248c2ecf20Sopenharmony_ci * HIGHMEM with PAE40: 0x1_0000_0000 to ... 258c2ecf20Sopenharmony_ci */ 268c2ecf20Sopenharmony_ci if (pfn >= ARCH_PFN_OFFSET && is_end_low) 278c2ecf20Sopenharmony_ci return 0; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci return 1; 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cistatic inline int pfn_valid(unsigned long pfn) 338c2ecf20Sopenharmony_ci{ 348c2ecf20Sopenharmony_ci int nid = pfn_to_nid(pfn); 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci return (pfn <= node_end_pfn(nid)); 378c2ecf20Sopenharmony_ci} 388c2ecf20Sopenharmony_ci#endif /* CONFIG_DISCONTIGMEM */ 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#endif 41