diff options
Diffstat (limited to 'hdata/iohub.c')
-rw-r--r-- | hdata/iohub.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/hdata/iohub.c b/hdata/iohub.c index fb215e1..92df48b 100644 --- a/hdata/iohub.c +++ b/hdata/iohub.c @@ -152,8 +152,8 @@ static struct dt_node *add_pec_stack(const struct cechub_io_hub *hub, { struct dt_node *stack; const char *compat; - u64 eq[8]; - u8 *gen4; + u64 eq[12]; + u8 *ptr; int i; stack = dt_new_addr(pbcq, "stack", stack_index); @@ -181,18 +181,27 @@ static struct dt_node *add_pec_stack(const struct cechub_io_hub *hub, eq[i] = be64_to_cpu(hub->phb_lane_eq[phb_index][i]); for (i = 0; i < 4; i++) /* gen 4 eq settings */ eq[i+4] = be64_to_cpu(hub->phb4_lane_eq[phb_index][i]); + for (i = 0; i < 4; i++) /* gen 5 eq settings */ + eq[i+8] = be64_to_cpu(hub->phb5_lane_eq[phb_index][i]); /* Lane-eq settings are packed 2 bytes per lane for 16 lanes - * On P9 DD2, 1 byte per lane is used in the hardware + * On P9 DD2 and P10, 1 byte per lane is used in the hardware */ - /* Repack 2 byte lane settings into 1 byte */ - gen4 = (u8 *)&eq[4]; - for (i = 0; i < 16; i++) - gen4[i] = gen4[2*i]; + /* Repack 2 byte lane settings into 1 byte for gen 4 & 5 */ + ptr = (u8 *)&eq[4]; + for (i = 0; i < 32; i++) + ptr[i] = ptr[2*i]; - dt_add_property_u64s(stack, "ibm,lane-eq", eq[0], eq[1], - eq[2], eq[3], eq[4], eq[5]); + if (proc_gen == proc_gen_p9) + dt_add_property_u64s(stack, "ibm,lane-eq", + eq[0], eq[1], eq[2], eq[3], + eq[4], eq[5]); + else + dt_add_property_u64s(stack, "ibm,lane-eq", + eq[0], eq[1], eq[2], eq[3], + eq[4], eq[5], + eq[6], eq[7]); return stack; } |