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