blob: b86b9d1e54dc072511d79dab82591664801b6d94 [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001/* SPDX-License-Identifier: GPL-2.0-only */
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00002/*
3 * Copyright (C) 2016 Synopsys, Inc. (www.synopsys.com)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00004 */
5
6#ifndef _ASM_ARC_MMZONE_H
7#define _ASM_ARC_MMZONE_H
8
9#ifdef CONFIG_DISCONTIGMEM
10
11extern struct pglist_data node_data[];
12#define NODE_DATA(nid) (&node_data[nid])
13
14static inline int pfn_to_nid(unsigned long pfn)
15{
16 int is_end_low = 1;
17
18 if (IS_ENABLED(CONFIG_ARC_HAS_PAE40))
19 is_end_low = pfn <= virt_to_pfn(0xFFFFFFFFUL);
20
21 /*
22 * node 0: lowmem: 0x8000_0000 to 0xFFFF_FFFF
23 * node 1: HIGHMEM w/o PAE40: 0x0 to 0x7FFF_FFFF
24 * HIGHMEM with PAE40: 0x1_0000_0000 to ...
25 */
26 if (pfn >= ARCH_PFN_OFFSET && is_end_low)
27 return 0;
28
29 return 1;
30}
31
32static inline int pfn_valid(unsigned long pfn)
33{
34 int nid = pfn_to_nid(pfn);
35
36 return (pfn <= node_end_pfn(nid));
37}
38#endif /* CONFIG_DISCONTIGMEM */
39
40#endif