diff options
author | Oliver O'Halloran <oohall@gmail.com> | 2017-03-07 15:16:21 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2017-03-07 15:40:32 +1100 |
commit | 8e88933f7e2779a15aab81a57a5f5bb452f6533a (patch) | |
tree | f242ece2f270e38483481000a93b6e9afa5511dc /hdata | |
parent | fb27dd8ac6c4c80511e2ca674a6886cd504e1a2c (diff) | |
download | blackbird-skiboot-8e88933f7e2779a15aab81a57a5f5bb452f6533a.tar.gz blackbird-skiboot-8e88933f7e2779a15aab81a57a5f5bb452f6533a.zip |
hdat: Parse BMC nodes much earlier
This moves the parsing of the BMC and LPC details to the start of the
HDAT parsing. This allows us to enable the Skiboot log console earlier
so we can get debug output while parsing the rest of the HDAT.
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Acked-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hdata')
-rw-r--r-- | hdata/fsp.c | 28 | ||||
-rw-r--r-- | hdata/hdata.h | 1 | ||||
-rw-r--r-- | hdata/spira.c | 7 | ||||
-rw-r--r-- | hdata/test/stubs.c | 1 |
4 files changed, 34 insertions, 3 deletions
diff --git a/hdata/fsp.c b/hdata/fsp.c index 3896dc4a..0a89d66f 100644 --- a/hdata/fsp.c +++ b/hdata/fsp.c @@ -400,6 +400,32 @@ static void bmc_create_node(const struct HDIF_common_hdr *sp) ); } +/* + * Search for and instanciate BMC nodes. This is mostly the same as fsp_parse() + * below, but it can be called earlier since BMCs don't depend on the psihb + * nodes being added. + */ +void bmc_parse(void) +{ + bool found = false; + const void *sp; + int i; + + sp = get_hdif(&spira.ntuples.sp_subsys, SPSS_HDIF_SIG); + if (!sp) + return; + + for_each_ntuple_idx(&spira.ntuples.sp_subsys, sp, i, SPSS_HDIF_SIG) { + if (find_service_proc_type(sp, i) == SP_BMC) { + bmc_create_node(sp); + found = true; + } + } + + if (found) + early_uart_init(); +} + void fsp_parse(void) { struct dt_node *fsp_root = NULL, *fsp_node; @@ -433,7 +459,7 @@ void fsp_parse(void) break; case SP_BMC: - bmc_create_node(sp); + /* Handled above */ break; case SP_BAD: diff --git a/hdata/hdata.h b/hdata/hdata.h index 1d0da1e9..53927a3a 100644 --- a/hdata/hdata.h +++ b/hdata/hdata.h @@ -23,6 +23,7 @@ extern void memory_parse(void); extern int paca_parse(void); extern bool pcia_parse(void); extern void fsp_parse(void); +extern void bmc_parse(void); extern void io_parse(void); extern struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr, int indx_fru, int indx_vpd); diff --git a/hdata/spira.c b/hdata/spira.c index 4ebbc43e..512784f1 100644 --- a/hdata/spira.c +++ b/hdata/spira.c @@ -1230,6 +1230,9 @@ int parse_hdat(bool is_opal) dt_add_property_cells(dt_root, "#size-cells", 2); dt_add_property_string(dt_root, "lid-type", is_opal ? "opal" : "phyp"); + /* Add any BMCs and enable the LPC UART */ + bmc_parse(); + /* Create /vpd node */ dt_init_vpd_node(); @@ -1247,10 +1250,10 @@ int parse_hdat(bool is_opal) /* Parse MS VPD */ memory_parse(); - /* Add XSCOM node (must be before chiptod & IO ) */ + /* Add XSCOM node (must be before chiptod, IO and FSP) */ add_xscom(); - /* Add FSP */ + /* Add any FSPs */ fsp_parse(); /* Add ChipTOD's */ diff --git a/hdata/test/stubs.c b/hdata/test/stubs.c index bea433c2..f513aacb 100644 --- a/hdata/test/stubs.c +++ b/hdata/test/stubs.c @@ -100,3 +100,4 @@ STUB(fsp_preload_lid); STUB(fsp_wait_lid_loaded); STUB(fsp_adjust_lid_side); STUB(mem_reserve_hw); +STUB(early_uart_init); |