powerpc: Move of_drconf_cell struct to asm/drmem.h

Now that the powerpc code parses dynamic reconfiguration memory
LMB information from the LMB array and not the device tree
directly we can move the of_drconf_cell struct to drmem.h where
it fits better.

In addition, the struct is renamed to of_drconf_cell_v1 in
anticipation of upcoming support for version 2 of the dynamic
reconfiguration property and the members are typed as __be*
values to reflect how they exist in the device tree.

Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Nathan Fontenot 2017-12-01 10:47:42 -06:00 committed by Michael Ellerman
parent 6195a5001f
commit 2c77721552
4 changed files with 24 additions and 21 deletions

View File

@ -35,6 +35,25 @@ extern struct drmem_lmb_info *drmem_info;
&drmem_info->lmbs[0], \ &drmem_info->lmbs[0], \
&drmem_info->lmbs[drmem_info->n_lmbs - 1]) &drmem_info->lmbs[drmem_info->n_lmbs - 1])
/*
* The of_drconf_cell_v1 struct defines the layout of the LMB data
* specified in the ibm,dynamic-memory device tree property.
* The property itself is a 32-bit value specifying the number of
* LMBs followed by an array of of_drconf_cell_v1 entries, one
* per LMB.
*/
struct of_drconf_cell_v1 {
__be64 base_addr;
__be32 drc_index;
__be32 reserved;
__be32 aa_index;
__be32 flags;
};
#define DRCONF_MEM_ASSIGNED 0x00000008
#define DRCONF_MEM_AI_INVALID 0x00000040
#define DRCONF_MEM_RESERVED 0x00000080
static inline u32 drmem_lmb_size(void) static inline u32 drmem_lmb_size(void)
{ {
return drmem_info->lmb_size; return drmem_info->lmb_size;

View File

@ -80,22 +80,6 @@ extern void of_instantiate_rtc(void);
extern int of_get_ibm_chip_id(struct device_node *np); extern int of_get_ibm_chip_id(struct device_node *np);
/* The of_drconf_cell struct defines the layout of the LMB array
* specified in the device tree property
* ibm,dynamic-reconfiguration-memory/ibm,dynamic-memory
*/
struct of_drconf_cell {
u64 base_addr;
u32 drc_index;
u32 reserved;
u32 aa_index;
u32 flags;
};
#define DRCONF_MEM_ASSIGNED 0x00000008
#define DRCONF_MEM_AI_INVALID 0x00000040
#define DRCONF_MEM_RESERVED 0x00000080
/* /*
* There are two methods for telling firmware what our capabilities are. * There are two methods for telling firmware what our capabilities are.
* Newer machines have an "ibm,client-architecture-support" method on the * Newer machines have an "ibm,client-architecture-support" method on the

View File

@ -66,7 +66,7 @@ static int drmem_update_dt_v1(struct device_node *memory,
struct property *prop) struct property *prop)
{ {
struct property *new_prop; struct property *new_prop;
struct of_drconf_cell *dr_cell; struct of_drconf_cell_v1 *dr_cell;
struct drmem_lmb *lmb; struct drmem_lmb *lmb;
u32 *p; u32 *p;
@ -77,7 +77,7 @@ static int drmem_update_dt_v1(struct device_node *memory,
p = new_prop->value; p = new_prop->value;
*p++ = cpu_to_be32(drmem_info->n_lmbs); *p++ = cpu_to_be32(drmem_info->n_lmbs);
dr_cell = (struct of_drconf_cell *)p; dr_cell = (struct of_drconf_cell_v1 *)p;
for_each_drmem_lmb(lmb) { for_each_drmem_lmb(lmb) {
dr_cell->base_addr = cpu_to_be64(lmb->base_addr); dr_cell->base_addr = cpu_to_be64(lmb->base_addr);

View File

@ -996,7 +996,7 @@ static int pseries_add_mem_node(struct device_node *np)
static int pseries_update_drconf_memory(struct of_reconfig_data *pr) static int pseries_update_drconf_memory(struct of_reconfig_data *pr)
{ {
struct of_drconf_cell *new_drmem, *old_drmem; struct of_drconf_cell_v1 *new_drmem, *old_drmem;
unsigned long memblock_size; unsigned long memblock_size;
u32 entries; u32 entries;
__be32 *p; __be32 *p;
@ -1019,11 +1019,11 @@ static int pseries_update_drconf_memory(struct of_reconfig_data *pr)
* of_drconf_cell's. * of_drconf_cell's.
*/ */
entries = be32_to_cpu(*p++); entries = be32_to_cpu(*p++);
old_drmem = (struct of_drconf_cell *)p; old_drmem = (struct of_drconf_cell_v1 *)p;
p = (__be32 *)pr->prop->value; p = (__be32 *)pr->prop->value;
p++; p++;
new_drmem = (struct of_drconf_cell *)p; new_drmem = (struct of_drconf_cell_v1 *)p;
for (i = 0; i < entries; i++) { for (i = 0; i < entries; i++) {
if ((be32_to_cpu(old_drmem[i].flags) & DRCONF_MEM_ASSIGNED) && if ((be32_to_cpu(old_drmem[i].flags) & DRCONF_MEM_ASSIGNED) &&