Message ID | 20190920051651.9620-27-amitay@ozlabs.org |
---|---|
State | Superseded |
Headers | show |
Series | Add system device tree to libpdbg | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch master (8a10a05c89db666bf98734139334166da7c370a4) |
snowpatch_ozlabs/apply_patch | fail | Failed to apply to any branch |
Hi Amitay, Seems good other than what looks a couple of simple cut & paste errors below... On Friday, 20 September 2019 3:16:51 PM AEST Amitay Isaacs wrote: > Signed-off-by: Amitay Isaacs <amitay@ozlabs.org> > --- > libpdbg/dtb.c | 179 +++++++++++++++++++++++++++++++++----------------- > 1 file changed, 118 insertions(+), 61 deletions(-) > > diff --git a/libpdbg/dtb.c b/libpdbg/dtb.c > index f548816..b7b3c50 100644 > --- a/libpdbg/dtb.c > +++ b/libpdbg/dtb.c > @@ -43,6 +43,9 @@ > #include "p8-cronus.dt.h" > #include "p9-cronus.dt.h" > > +#include "p8.dt.h" > +#include "p9.dt.h" > + > #define AMI_BMC "/proc/ractrends/Helper/FwInfo" > #define OPENFSI_BMC "/sys/bus/platform/devices/gpio-fsi/fsi0/" > #define FSI_CFAM_ID "/sys/devices/platform/gpio-fsi/fsi0/slave@00:00/cfam_id" > @@ -84,11 +87,22 @@ static void ppc_target(struct pdbg_dtb *dtb) > char line[256]; > FILE *cpuinfo; > > - if (!strcmp(pdbg_backend_option, "p8")) { > - dtb->system = &_binary_p8_host_dtb_o_start; > - return; > - } else if (!strcmp(pdbg_backend_option, "p9")) { > - dtb->system = &_binary_p9_host_dtb_o_start; > + if (pdbg_backend_option) { > + if (!strcmp(pdbg_backend_option, "p8")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p8_host_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; > + } else if (!strcmp(pdbg_backend_option, "p9")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p9_host_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p9_dtb_o_start; > + } else { > + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); > + pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9'\n"); > + } > + > return; > } > > @@ -117,15 +131,19 @@ static void ppc_target(struct pdbg_dtb *dtb) > > if (strncmp(pos, "POWER8", 6) == 0) { > pdbg_log(PDBG_INFO, "Found a POWER8 PPC host system\n"); > - dtb->system = &_binary_p8_host_dtb_o_start; > - } > - > - if (strncmp(pos, "POWER9", 6) == 0) { > + if (!dtb->backend) > + dtb->backend = &_binary_p8_host_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; > + } else if (strncmp(pos, "POWER9", 6) == 0) { > pdbg_log(PDBG_INFO, "Found a POWER9 PPC host system\n"); > - dtb->system = &_binary_p9_host_dtb_o_start; > + if (!dtb->backend) > + dtb->backend = &_binary_p9_host_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p9_host_dtb_o_start; Is that a typo? Shouldn't it be _binary_p9_dtb_o_start? > + } else { > + pdbg_log(PDBG_ERROR, "Unsupported CPU type '%s'\n", pos); > } > - > - pdbg_log(PDBG_ERROR, "Unsupported CPU type '%s'\n", pos); > } > > static void bmc_target(struct pdbg_dtb *dtb) > @@ -135,40 +153,55 @@ static void bmc_target(struct pdbg_dtb *dtb) > uint32_t chip_id = 0; > int rc; > > - if (!pdbg_backend_option) { > - /* Try and determine the correct device type */ > - cfam_id_file = fopen(FSI_CFAM_ID, "r"); > - if (!cfam_id_file) { > - pdbg_log(PDBG_ERROR, "Unabled to open CFAM ID file\n"); > - return; > + if (pdbg_backend_option) { > + if (!strcmp(pdbg_backend_option, "p8")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p8_kernel_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; > + } else if (!strcmp(pdbg_backend_option, "p9")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p9_kernel_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; Typo? Should be _binary_p9_dtb_o_start > + } else { > + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); > + pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9'\n"); > } > > - rc = fscanf(cfam_id_file, "0x%" PRIx32, &cfam_id); > - if (rc != 1) { > - pdbg_log(PDBG_ERROR, "Unable to read CFAM ID: %s", strerror(errno)); > - } > - fclose(cfam_id_file); > - chip_id = (cfam_id >> 4) & 0xff; > - } else { > - if (!strcmp(pdbg_backend_option, "p9")) > - chip_id = CHIP_ID_P9; > - else if (!strcmp(pdbg_backend_option, "p8")) > - chip_id = CHIP_ID_P8; > - else > - pdbg_log(PDBG_WARNING, "Invalid OpenBMC system type '%s' specified\n", > - pdbg_backend_option); > + return; > } > > + /* Try and determine the correct device type */ > + cfam_id_file = fopen(FSI_CFAM_ID, "r"); > + if (!cfam_id_file) { > + pdbg_log(PDBG_ERROR, "Unabled to open CFAM ID file\n"); > + return; > + } > + > + rc = fscanf(cfam_id_file, "0x%" PRIx32, &cfam_id); > + if (rc != 1) { > + pdbg_log(PDBG_ERROR, "Unable to read CFAM ID: %s", strerror(errno)); > + } > + fclose(cfam_id_file); > + chip_id = (cfam_id >> 4) & 0xff; > + > switch(chip_id) { > case CHIP_ID_P9: > pdbg_log(PDBG_INFO, "Found a POWER9 OpenBMC based system\n"); > - dtb->system = &_binary_p9_kernel_dtb_o_start; > + if (!dtb->backend) > + dtb->backend = &_binary_p9_kernel_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p9_dtb_o_start; > break; > > case CHIP_ID_P8: > case CHIP_ID_P8P: > pdbg_log(PDBG_INFO, "Found a POWER8/8+ OpenBMC based system\n"); > - dtb->system = &_binary_p8_kernel_dtb_o_start; > + if (!dtb->backend) > + dtb->backend = &_binary_p8_kernel_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; > break; > > default: > @@ -229,17 +262,23 @@ const char *pdbg_get_backend_option(void) > * the fdt that is most likely to work on the system. */ > void pdbg_default_dtb(struct pdbg_dtb *dtb) > { > - char *fdt = getenv("PDBG_DTB"); > + char *fdt; > > *dtb = (struct pdbg_dtb) { > .backend = NULL, > .system = NULL, > }; > > - if (fdt) { > + fdt = getenv("PDBG_BACKEND_DTB"); > + if (fdt) > + dtb->backend = mmap_dtb(fdt); > + > + fdt = getenv("PDBG_DTB"); > + if (fdt) > dtb->system = mmap_dtb(fdt); > + > + if (dtb->backend && dtb->system) > return; > - } > > if (!pdbg_backend) > pdbg_backend = default_backend(); > @@ -251,8 +290,12 @@ void pdbg_default_dtb(struct pdbg_dtb *dtb) > > case PDBG_BACKEND_I2C: > /* I2C is only supported on POWER8 */ > - pdbg_log(PDBG_INFO, "Found a POWER8 AMI BMC based system\n"); > - dtb->system = &_binary_p8_i2c_dtb_o_start; > + if (!dtb->backend) { > + pdbg_log(PDBG_INFO, "Found a POWER8 AMI BMC based system\n"); > + dtb->backend = &_binary_p8_i2c_dtb_o_start; > + } > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; > break; > > case PDBG_BACKEND_KERNEL: > @@ -261,44 +304,58 @@ void pdbg_default_dtb(struct pdbg_dtb *dtb) > > case PDBG_BACKEND_FSI: > if (!pdbg_backend_option) { > - pdbg_log(PDBG_ERROR, "No device type specified\n"); > + pdbg_log(PDBG_ERROR, "No system type specified\n"); > pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9r/p9w/p9z'\n"); > return; > } > > - if (!strcmp(pdbg_backend_option, "p8")) > - dtb->system = &_binary_p8_fsi_dtb_o_start; > - else if (!strcmp(pdbg_backend_option, "p9w")) > - dtb->system = &_binary_p9w_fsi_dtb_o_start; > - else if (!strcmp(pdbg_backend_option, "p9r")) > - dtb->system = &_binary_p9r_fsi_dtb_o_start; > - else if (!strcmp(pdbg_backend_option, "p9z")) > - dtb->system = &_binary_p9z_fsi_dtb_o_start; > - else { > - pdbg_log(PDBG_ERROR, "Invalid device type specified\n"); > + if (!strcmp(pdbg_backend_option, "p8")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p8_fsi_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; > + } else if (!strcmp(pdbg_backend_option, "p9w")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p9w_fsi_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p9_dtb_o_start; > + } else if (!strcmp(pdbg_backend_option, "p9r")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p9r_fsi_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p9_dtb_o_start; > + } else if (!strcmp(pdbg_backend_option, "p9z")) { > + if (!dtb->backend) > + dtb->backend = &_binary_p9z_fsi_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p9_dtb_o_start; > + } else { > + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); > pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9r/p9w/p9z'\n"); > - return; > } > - > break; > > case PDBG_BACKEND_CRONUS: > if (!pdbg_backend_option) { > - pdbg_log(PDBG_ERROR, "No device type specified\n"); > + pdbg_log(PDBG_ERROR, "No system type specified\n"); > pdbg_log(PDBG_ERROR, "Use p8@<server> or p9@<server>\n"); > return; > } > > - if (!strncmp(pdbg_backend_option, "p8", 2)) > - dtb->system = &_binary_p8_cronus_dtb_o_start; > - else if (!strncmp(pdbg_backend_option, "p9", 2)) > - dtb->system = &_binary_p9_cronus_dtb_o_start; > - else { > - pdbg_log(PDBG_ERROR, "Invalid device type specified\n"); > + if (!strncmp(pdbg_backend_option, "p8", 2)) { > + if (!dtb->backend) > + dtb->backend = &_binary_p8_cronus_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p8_dtb_o_start; > + } else if (!strncmp(pdbg_backend_option, "p9", 2)) { > + if (!dtb->backend) > + dtb->backend = &_binary_p9_cronus_dtb_o_start; > + if (!dtb->system) > + dtb->system = &_binary_p9_dtb_o_start; > + } else { > + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); > pdbg_log(PDBG_ERROR, "Use p8@<server> or p9@<server>\n"); > - return; > } > - > break; > > default: >
diff --git a/libpdbg/dtb.c b/libpdbg/dtb.c index f548816..b7b3c50 100644 --- a/libpdbg/dtb.c +++ b/libpdbg/dtb.c @@ -43,6 +43,9 @@ #include "p8-cronus.dt.h" #include "p9-cronus.dt.h" +#include "p8.dt.h" +#include "p9.dt.h" + #define AMI_BMC "/proc/ractrends/Helper/FwInfo" #define OPENFSI_BMC "/sys/bus/platform/devices/gpio-fsi/fsi0/" #define FSI_CFAM_ID "/sys/devices/platform/gpio-fsi/fsi0/slave@00:00/cfam_id" @@ -84,11 +87,22 @@ static void ppc_target(struct pdbg_dtb *dtb) char line[256]; FILE *cpuinfo; - if (!strcmp(pdbg_backend_option, "p8")) { - dtb->system = &_binary_p8_host_dtb_o_start; - return; - } else if (!strcmp(pdbg_backend_option, "p9")) { - dtb->system = &_binary_p9_host_dtb_o_start; + if (pdbg_backend_option) { + if (!strcmp(pdbg_backend_option, "p8")) { + if (!dtb->backend) + dtb->backend = &_binary_p8_host_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; + } else if (!strcmp(pdbg_backend_option, "p9")) { + if (!dtb->backend) + dtb->backend = &_binary_p9_host_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p9_dtb_o_start; + } else { + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); + pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9'\n"); + } + return; } @@ -117,15 +131,19 @@ static void ppc_target(struct pdbg_dtb *dtb) if (strncmp(pos, "POWER8", 6) == 0) { pdbg_log(PDBG_INFO, "Found a POWER8 PPC host system\n"); - dtb->system = &_binary_p8_host_dtb_o_start; - } - - if (strncmp(pos, "POWER9", 6) == 0) { + if (!dtb->backend) + dtb->backend = &_binary_p8_host_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; + } else if (strncmp(pos, "POWER9", 6) == 0) { pdbg_log(PDBG_INFO, "Found a POWER9 PPC host system\n"); - dtb->system = &_binary_p9_host_dtb_o_start; + if (!dtb->backend) + dtb->backend = &_binary_p9_host_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p9_host_dtb_o_start; + } else { + pdbg_log(PDBG_ERROR, "Unsupported CPU type '%s'\n", pos); } - - pdbg_log(PDBG_ERROR, "Unsupported CPU type '%s'\n", pos); } static void bmc_target(struct pdbg_dtb *dtb) @@ -135,40 +153,55 @@ static void bmc_target(struct pdbg_dtb *dtb) uint32_t chip_id = 0; int rc; - if (!pdbg_backend_option) { - /* Try and determine the correct device type */ - cfam_id_file = fopen(FSI_CFAM_ID, "r"); - if (!cfam_id_file) { - pdbg_log(PDBG_ERROR, "Unabled to open CFAM ID file\n"); - return; + if (pdbg_backend_option) { + if (!strcmp(pdbg_backend_option, "p8")) { + if (!dtb->backend) + dtb->backend = &_binary_p8_kernel_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; + } else if (!strcmp(pdbg_backend_option, "p9")) { + if (!dtb->backend) + dtb->backend = &_binary_p9_kernel_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; + } else { + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); + pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9'\n"); } - rc = fscanf(cfam_id_file, "0x%" PRIx32, &cfam_id); - if (rc != 1) { - pdbg_log(PDBG_ERROR, "Unable to read CFAM ID: %s", strerror(errno)); - } - fclose(cfam_id_file); - chip_id = (cfam_id >> 4) & 0xff; - } else { - if (!strcmp(pdbg_backend_option, "p9")) - chip_id = CHIP_ID_P9; - else if (!strcmp(pdbg_backend_option, "p8")) - chip_id = CHIP_ID_P8; - else - pdbg_log(PDBG_WARNING, "Invalid OpenBMC system type '%s' specified\n", - pdbg_backend_option); + return; } + /* Try and determine the correct device type */ + cfam_id_file = fopen(FSI_CFAM_ID, "r"); + if (!cfam_id_file) { + pdbg_log(PDBG_ERROR, "Unabled to open CFAM ID file\n"); + return; + } + + rc = fscanf(cfam_id_file, "0x%" PRIx32, &cfam_id); + if (rc != 1) { + pdbg_log(PDBG_ERROR, "Unable to read CFAM ID: %s", strerror(errno)); + } + fclose(cfam_id_file); + chip_id = (cfam_id >> 4) & 0xff; + switch(chip_id) { case CHIP_ID_P9: pdbg_log(PDBG_INFO, "Found a POWER9 OpenBMC based system\n"); - dtb->system = &_binary_p9_kernel_dtb_o_start; + if (!dtb->backend) + dtb->backend = &_binary_p9_kernel_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p9_dtb_o_start; break; case CHIP_ID_P8: case CHIP_ID_P8P: pdbg_log(PDBG_INFO, "Found a POWER8/8+ OpenBMC based system\n"); - dtb->system = &_binary_p8_kernel_dtb_o_start; + if (!dtb->backend) + dtb->backend = &_binary_p8_kernel_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; break; default: @@ -229,17 +262,23 @@ const char *pdbg_get_backend_option(void) * the fdt that is most likely to work on the system. */ void pdbg_default_dtb(struct pdbg_dtb *dtb) { - char *fdt = getenv("PDBG_DTB"); + char *fdt; *dtb = (struct pdbg_dtb) { .backend = NULL, .system = NULL, }; - if (fdt) { + fdt = getenv("PDBG_BACKEND_DTB"); + if (fdt) + dtb->backend = mmap_dtb(fdt); + + fdt = getenv("PDBG_DTB"); + if (fdt) dtb->system = mmap_dtb(fdt); + + if (dtb->backend && dtb->system) return; - } if (!pdbg_backend) pdbg_backend = default_backend(); @@ -251,8 +290,12 @@ void pdbg_default_dtb(struct pdbg_dtb *dtb) case PDBG_BACKEND_I2C: /* I2C is only supported on POWER8 */ - pdbg_log(PDBG_INFO, "Found a POWER8 AMI BMC based system\n"); - dtb->system = &_binary_p8_i2c_dtb_o_start; + if (!dtb->backend) { + pdbg_log(PDBG_INFO, "Found a POWER8 AMI BMC based system\n"); + dtb->backend = &_binary_p8_i2c_dtb_o_start; + } + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; break; case PDBG_BACKEND_KERNEL: @@ -261,44 +304,58 @@ void pdbg_default_dtb(struct pdbg_dtb *dtb) case PDBG_BACKEND_FSI: if (!pdbg_backend_option) { - pdbg_log(PDBG_ERROR, "No device type specified\n"); + pdbg_log(PDBG_ERROR, "No system type specified\n"); pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9r/p9w/p9z'\n"); return; } - if (!strcmp(pdbg_backend_option, "p8")) - dtb->system = &_binary_p8_fsi_dtb_o_start; - else if (!strcmp(pdbg_backend_option, "p9w")) - dtb->system = &_binary_p9w_fsi_dtb_o_start; - else if (!strcmp(pdbg_backend_option, "p9r")) - dtb->system = &_binary_p9r_fsi_dtb_o_start; - else if (!strcmp(pdbg_backend_option, "p9z")) - dtb->system = &_binary_p9z_fsi_dtb_o_start; - else { - pdbg_log(PDBG_ERROR, "Invalid device type specified\n"); + if (!strcmp(pdbg_backend_option, "p8")) { + if (!dtb->backend) + dtb->backend = &_binary_p8_fsi_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; + } else if (!strcmp(pdbg_backend_option, "p9w")) { + if (!dtb->backend) + dtb->backend = &_binary_p9w_fsi_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p9_dtb_o_start; + } else if (!strcmp(pdbg_backend_option, "p9r")) { + if (!dtb->backend) + dtb->backend = &_binary_p9r_fsi_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p9_dtb_o_start; + } else if (!strcmp(pdbg_backend_option, "p9z")) { + if (!dtb->backend) + dtb->backend = &_binary_p9z_fsi_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p9_dtb_o_start; + } else { + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); pdbg_log(PDBG_ERROR, "Use 'p8' or 'p9r/p9w/p9z'\n"); - return; } - break; case PDBG_BACKEND_CRONUS: if (!pdbg_backend_option) { - pdbg_log(PDBG_ERROR, "No device type specified\n"); + pdbg_log(PDBG_ERROR, "No system type specified\n"); pdbg_log(PDBG_ERROR, "Use p8@<server> or p9@<server>\n"); return; } - if (!strncmp(pdbg_backend_option, "p8", 2)) - dtb->system = &_binary_p8_cronus_dtb_o_start; - else if (!strncmp(pdbg_backend_option, "p9", 2)) - dtb->system = &_binary_p9_cronus_dtb_o_start; - else { - pdbg_log(PDBG_ERROR, "Invalid device type specified\n"); + if (!strncmp(pdbg_backend_option, "p8", 2)) { + if (!dtb->backend) + dtb->backend = &_binary_p8_cronus_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p8_dtb_o_start; + } else if (!strncmp(pdbg_backend_option, "p9", 2)) { + if (!dtb->backend) + dtb->backend = &_binary_p9_cronus_dtb_o_start; + if (!dtb->system) + dtb->system = &_binary_p9_dtb_o_start; + } else { + pdbg_log(PDBG_ERROR, "Invalid system type %s\n", pdbg_backend_option); pdbg_log(PDBG_ERROR, "Use p8@<server> or p9@<server>\n"); - return; } - break; default:
Signed-off-by: Amitay Isaacs <amitay@ozlabs.org> --- libpdbg/dtb.c | 179 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 118 insertions(+), 61 deletions(-)