mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-11 00:04:33 +08:00
514a9cb331
Update code in powerpc/numa.c to use the walk_drmem_lmbs() routine instead of parsing the device tree directly. This is in anticipation of introducing a new ibm,dynamic-memory-v2 property with a different format. This will allow the numa code to use a single initialization routine per-LMB irregardless of the device tree format. Additionally, to support additional routines in numa.c that need to look up LMB information, an late_init routine is added to drmem.c to allocate the array of LMB information. This LMB array will provide per-LMB information to separate the LMB data from the device tree format. Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
/*
|
|
* drmem.h: Power specific logical memory block representation
|
|
*
|
|
* Copyright 2017 IBM Corporation
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _ASM_POWERPC_LMB_H
|
|
#define _ASM_POWERPC_LMB_H
|
|
|
|
struct drmem_lmb {
|
|
u64 base_addr;
|
|
u32 drc_index;
|
|
u32 aa_index;
|
|
u32 flags;
|
|
};
|
|
|
|
struct drmem_lmb_info {
|
|
struct drmem_lmb *lmbs;
|
|
int n_lmbs;
|
|
u32 lmb_size;
|
|
};
|
|
|
|
extern struct drmem_lmb_info *drmem_info;
|
|
|
|
#define for_each_drmem_lmb_in_range(lmb, start, end) \
|
|
for ((lmb) = (start); (lmb) <= (end); (lmb)++)
|
|
|
|
#define for_each_drmem_lmb(lmb) \
|
|
for_each_drmem_lmb_in_range((lmb), \
|
|
&drmem_info->lmbs[0], \
|
|
&drmem_info->lmbs[drmem_info->n_lmbs - 1])
|
|
|
|
static inline u32 drmem_lmb_size(void)
|
|
{
|
|
return drmem_info->lmb_size;
|
|
}
|
|
|
|
u64 drmem_lmb_memory_max(void);
|
|
void __init walk_drmem_lmbs(struct device_node *dn,
|
|
void (*func)(struct drmem_lmb *, const __be32 **));
|
|
|
|
#ifdef CONFIG_PPC_PSERIES
|
|
void __init walk_drmem_lmbs_early(unsigned long node,
|
|
void (*func)(struct drmem_lmb *, const __be32 **));
|
|
#endif
|
|
|
|
#endif /* _ASM_POWERPC_LMB_H */
|