aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Smith <stewart@flamingspork.com>2021-12-17 12:36:47 +1000
committerCédric Le Goater <clg@kaod.org>2021-12-17 10:34:23 +0100
commitb7ead9ddd79f76521cdffafcd2c010e598dc166c (patch)
treec42ffe0ff45a37f37655303644772780770561cf
parent07dc0d163714a04e99b1fa15707e70c4e7f65d8c (diff)
downloadskiboot-b7ead9ddd79f76521cdffafcd2c010e598dc166c.zip
skiboot-b7ead9ddd79f76521cdffafcd2c010e598dc166c.tar.gz
skiboot-b7ead9ddd79f76521cdffafcd2c010e598dc166c.tar.bz2
npu: Add CONFIG_NPU to optionally skip NPU code
Saves a whopping 39kb of skiboot.lid.xz. Reviewed-by: Dan Horák <dan@danny.cz> Signed-off-by: Stewart Smith <stewart@flamingspork.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
-rw-r--r--Makefile2
-rw-r--r--Makefile.main4
-rw-r--r--core/hmi.c10
-rw-r--r--core/platform.c1
-rw-r--r--hw/Makefile.inc18
-rw-r--r--hw/npu2-common.c3
-rw-r--r--hw/npu2.c1
-rw-r--r--include/npu2.h8
-rw-r--r--include/pci.h3
-rw-r--r--platforms/astbmc/Makefile.inc15
10 files changed, 53 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index 625f212..ce61e3a 100644
--- a/Makefile
+++ b/Makefile
@@ -61,6 +61,8 @@ DEAD_CODE_ELIMINATION ?= 0
CONFIG_FSP?=1
# Try to build without POWER8 support
CONFIG_P8?=1
+# Try and build without any NPU support
+CONFIG_NPU?=1
#
# Where is the source directory, must be a full path (no ~)
diff --git a/Makefile.main b/Makefile.main
index 2a346a6..dce0338 100644
--- a/Makefile.main
+++ b/Makefile.main
@@ -165,6 +165,10 @@ ifeq ($(CONFIG_P8),1)
CFLAGS += -DCONFIG_P8=1
endif
+ifeq ($(CONFIG_NPU),1)
+CFLAGS += -DCONFIG_NPU=1
+endif
+
CFLAGS += $(call try-cflag,$(CC),-Wjump-misses-init) \
$(call try-cflag,$(CC),-Wsuggest-attribute=const) \
$(call try-cflag,$(CC),-Wsuggest-attribute=noreturn) \
diff --git a/core/hmi.c b/core/hmi.c
index fe3d825..1af9971 100644
--- a/core/hmi.c
+++ b/core/hmi.c
@@ -719,6 +719,7 @@ static void find_nx_checkstop_reason(int flat_chip_id,
queue_hmi_event(hmi_evt, 0, out_flags);
}
+#ifdef CONFIG_NPU
static void add_npu_xstop_reason(uint32_t *xstop_reason, uint8_t reason)
{
int i, reason_count;
@@ -854,7 +855,7 @@ static bool npu_fir_errors(struct phb *phb, int flat_chip_id,
switch (phb->phb_type) {
case phb_type_npu_v2:
case phb_type_npu_v2_opencapi:
- npu2_dump_scoms(npu2, flat_chip_id);
+ phb->ops->dump_debug_data(phb, flat_chip_id);
break;
case phb_type_pau_opencapi:
pau_opencapi_dump_scoms(pau);
@@ -922,6 +923,13 @@ static void find_npu_checkstop_reason(int flat_chip_id,
queue_hmi_event(hmi_evt, 1, out_flags);
}
}
+#else
+static void find_npu_checkstop_reason(int flat_chip_id __unused,
+ struct OpalHMIEvent *hmi_evt __unused,
+ uint64_t *out_flags __unused)
+{
+}
+#endif
static void decode_malfunction(struct OpalHMIEvent *hmi_evt, uint64_t *out_flags)
{
diff --git a/core/platform.c b/core/platform.c
index 320fdea..3f4c8bd 100644
--- a/core/platform.c
+++ b/core/platform.c
@@ -226,7 +226,6 @@ static struct platform generic_platform = {
.start_preload_resource = generic_start_preload_resource,
.resource_loaded = generic_resource_loaded,
.ocapi = &generic_ocapi,
- .npu2_device_detect = npu2_i2c_presence_detect, /* Assumes ZZ */
};
const struct bmc_platform *bmc_platform = &generic_bmc;
diff --git a/hw/Makefile.inc b/hw/Makefile.inc
index 3027188..7fb7c38 100644
--- a/hw/Makefile.inc
+++ b/hw/Makefile.inc
@@ -5,14 +5,24 @@ HW_OBJS += homer.o slw.o occ.o fsi-master.o centaur.o imc.o
HW_OBJS += nx.o nx-rng.o nx-crypto.o nx-compress.o nx-842.o nx-gzip.o
HW_OBJS += sfc-ctrl.o fake-rtc.o bt.o p8-i2c.o prd.o
HW_OBJS += dts.o lpc-rtc.o xive.o phb4.o
-HW_OBJS += fake-nvram.o lpc-mbox.o npu2.o npu2-hw-procedures.o
-HW_OBJS += npu2-common.o npu2-opencapi.o phys-map.o sbe-p9.o capp.o
+HW_OBJS += fake-nvram.o lpc-mbox.o
+HW_OBJS += phys-map.o sbe-p9.o capp.o
HW_OBJS += occ-sensor.o vas.o sbe-p8.o dio-p9.o lpc-port80h.o cache-p9.o
-HW_OBJS += npu-opal.o ocmb.o xive2.o pau.o pau-hw-procedures.o
+HW_OBJS += ocmb.o xive2.o pau.o pau-hw-procedures.o
+
+ifeq ($(CONFIG_NPU),1)
+HW_OBJS += npu2.o npu2-hw-procedures.o
+HW_OBJS += npu2-common.o npu2-opencapi.o
+HW_OBJS += npu-opal.o
ifeq ($(CONFIG_P8),1)
-HW_OBJS += phb3.o
HW_OBJS += npu.o npu-hw-procedures.o
endif
+endif
+
+ifeq ($(CONFIG_P8),1)
+HW_OBJS += phb3.o
+endif
+
HW=hw/built-in.a
include $(SRC)/hw/fsp/Makefile.inc
diff --git a/hw/npu2-common.c b/hw/npu2-common.c
index 02f102f..33339ff 100644
--- a/hw/npu2-common.c
+++ b/hw/npu2-common.c
@@ -296,8 +296,9 @@ static void show_all_regs(struct npu2 *npu, int brick_index)
}
}
-void npu2_dump_scoms(struct npu2 *npu, int chip_id)
+void npu2_dump_scoms(struct phb *phb, int chip_id)
{
+ struct npu2 *npu = phb_to_npu2_nvlink(phb);
if (npu && npu->chip_id == chip_id)
show_all_regs(npu, -1 /* all bricks */);
}
diff --git a/hw/npu2.c b/hw/npu2.c
index cf57eeb..e18a1b7 100644
--- a/hw/npu2.c
+++ b/hw/npu2.c
@@ -1316,6 +1316,7 @@ static const struct phb_ops npu_ops = {
.set_capi_mode = NULL,
.set_capp_recovery = NULL,
.tce_kill = npu2_tce_kill,
+ .dump_debug_data = npu2_dump_scoms,
};
static void assign_mmio_bars(uint64_t gcid, uint32_t scom, uint64_t reg[2], uint64_t mm_win[2])
diff --git a/include/npu2.h b/include/npu2.h
index b302108..374c207 100644
--- a/include/npu2.h
+++ b/include/npu2.h
@@ -212,7 +212,13 @@ static inline struct phb *npu2_dev_to_phb(struct npu2_dev *ndev)
}
}
+#ifdef CONFIG_NPU
void npu2_i2c_presence_detect(struct npu2 *npu);
+#else
+static inline void npu2_i2c_presence_detect(struct npu2 *npu __unused)
+{
+}
+#endif
int npu2_opencapi_init_npu(struct npu2 *npu);
int npu2_nvlink_init_npu(struct npu2 *npu);
void npu2_nvlink_create_phb(struct npu2 *npu, struct dt_node *dn);
@@ -241,7 +247,7 @@ int64_t npu2_freeze_status(struct phb *phb __unused,
uint8_t *freeze_state,
uint16_t *pci_error_type __unused,
uint16_t *severity __unused);
-void npu2_dump_scoms(struct npu2 *npu, int chip_id);
+void npu2_dump_scoms(struct phb *phb, int chip_id);
int64_t npu2_init_context(struct phb *phb, uint64_t msr, uint64_t bdf);
int64_t npu2_destroy_context(struct phb *phb, uint64_t bdf);
diff --git a/include/pci.h b/include/pci.h
index 1014424..46d3d0a 100644
--- a/include/pci.h
+++ b/include/pci.h
@@ -343,6 +343,9 @@ struct phb_ops {
/* Currently only used by NPU HMI code */
void (*set_fence_state)(struct phb *phb, bool fence);
+
+ /* The most terrible of situtions, dump debug data to console. */
+ void (*dump_debug_data)(struct phb *phb, int flat_chip_id);
};
enum phb_type {
diff --git a/platforms/astbmc/Makefile.inc b/platforms/astbmc/Makefile.inc
index 1cdf37f..be2267d 100644
--- a/platforms/astbmc/Makefile.inc
+++ b/platforms/astbmc/Makefile.inc
@@ -1,16 +1,23 @@
SUBDIRS += $(PLATDIR)/astbmc
ASTBMC_OBJS = pnor.o common.o slots.o \
- witherspoon.o zaius.o romulus.o p9dsu.o \
- nicole.o mihawk.o mowgli.o \
+ witherspoon.o romulus.o p9dsu.o \
+ nicole.o mowgli.o \
talos.o blackbird.o \
- swift.o rainier.o
+ rainier.o
+
+ifeq ($(CONFIG_NPU),1)
+ASTBMC_OBJS += zaius.o mihawk.o swift.o
+endif
ifeq ($(CONFIG_P8),1)
ASTBMC_OBJS += palmetto.o habanero.o firestone.o \
p8dtu.o p8dnu.o \
- garrison.o barreleye.o \
+ barreleye.o \
vesnin.o
+ifeq ($(CONFIG_NPU),1)
+ASTBMC_OBJS += garrison.o
+endif
endif
ASTBMC = $(PLATDIR)/astbmc/built-in.a