From f3c18a2e5d3af5d66100b502091f636d219c3655 Mon Sep 17 00:00:00 2001 From: Greg Still Date: Mon, 20 Jul 2015 07:27:48 -0500 Subject: Honor PPE partial good attributes to intialize targets - Addressed internal Gerrit comments - Addressed compilation issues with real procedures - Fix image tool "clean" function (updated) (deals with missing tools/image/bin) - make "clean" fixup - Get vector of attribute values properly into the image - Fix FAPI_ATTR_* signature from target pointer to target reference - ATTR_CHIP_UNIT_POS support for non-core/cache chiplets - Require FAPI_ATTR_GET/SET invocation to be in the form of fapi2::ATTR_.... - Fix tools bin directory creation issue - Address plat_PervPGTargets error case - Add FAPI_EXEC_HW support to deal with recently merged functions - Update libcommonerrors.mk to deal with recently merged compilation issue Change-Id: I31485ff05731e7fbaa0453d8ed9985b9ca56b8b3 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/19342 Tested-by: Jenkins Server Reviewed-by: Gregory S. Still Reviewed-by: Sachin Gupta Reviewed-by: Amit J. Tendolkar --- sbe/image/Makefile | 19 ++-- sbe/image/img_defs.mk | 5 +- sbe/image/sbe_common.H | 216 +++++++++++++++++++++++----------------------- sbe/image/sbe_main.C | 95 ++++++++++++++++---- sbe/image/sbe_xip_image.c | 41 ++++----- sbe/image/sbe_xip_image.h | 40 +++++++++ sbe/image/topfiles.mk | 4 +- 7 files changed, 266 insertions(+), 154 deletions(-) (limited to 'sbe') diff --git a/sbe/image/Makefile b/sbe/image/Makefile index 1bc7aa8c..6d54fa35 100644 --- a/sbe/image/Makefile +++ b/sbe/image/Makefile @@ -1,4 +1,5 @@ + #remove this once we have a real compiler export P2P_ENABLE = 1 @@ -102,7 +103,7 @@ LINK_SCRIPT_LOADER = $(addprefix $(OBJDIR)/, linkscriptloader) $(OBJDIR)/$(IMAGE_SEEPROM_NAME).bin $(OBJDIR)/$(IMAGE_SEEPROM_NAME).dis: $(OBJDIR)/$(IMAGE_SEEPROM_NAME).out $(OBJCOPY) -O binary $< $(OBJDIR)/$(IMAGE_SEEPROM_NAME).bin --pad-to 0x`/usr/bin/nm $(OBJDIR)/$(IMAGE_SEEPROM_NAME).out | grep "A _seeprom_end" | cut -d " " -f 1` $(OBJDUMP) -S $< > $(OBJDIR)/$(IMAGE_SEEPROM_NAME).dis - + #create a linked ELF executable $(OBJDIR)/$(IMAGE_SEEPROM_NAME).out: $(LINK_OBJS) $(LINK_SCRIPT_SEEPROM) $(LD) -e __system_reset -T$(LINK_SCRIPT_SEEPROM) -Map $(OBJDIR)/$(IMAGE_SEEPROM_NAME).map -Bstatic -o $(OBJDIR)/$(IMAGE_SEEPROM_NAME).out $(LIB_DIRS) $(OBJS) --start-group $(LLIBS) --end-group @@ -131,7 +132,7 @@ $(LINK_SCRIPT_SBE): linksbe.cmd $(OBJDIR)/$(IMAGE_LOADER_NAME).bin $(OBJDIR)/$(IMAGE_LOADER_NAME).dis: $(OBJDIR)/$(IMAGE_LOADER_NAME).out $(OBJCOPY) -O binary $< $(OBJDIR)/$(IMAGE_LOADER_NAME).bin --pad-to 0x`/usr/bin/nm $(OBJDIR)/$(IMAGE_LOADER_NAME).out | grep "A _loader_end" | cut -d " " -f 1` $(OBJDUMP) -S $< > $(OBJDIR)/$(IMAGE_LOADER_NAME).dis - + #create a linked ELF executable $(OBJDIR)/$(IMAGE_LOADER_NAME).out: $(OBJDIR)/base_loader.o $(LINK_OBJS) $(LINK_SCRIPT_LOADER) $(LD) -e base_loader -T$(LINK_SCRIPT_LOADER) -Map $(OBJDIR)/$(IMAGE_LOADER_NAME).map -Bstatic -o $(OBJDIR)/$(IMAGE_LOADER_NAME).out $(LIB_DIRS) $(OBJDIR)/base_loader.o --start-group $(SBEFWLIB) $(LLIBS) --end-group @@ -144,13 +145,16 @@ $(LINK_SCRIPT_LOADER): linkloader.cmd all: $(OBJDIR)/$(IMAGE_SEEPROM_NAME).bin $(OBJDIR)/$(IMAGE_SBE_NAME).bin $(OBJDIR)/$(IMAGE_LOADER_NAME).bin $(SBE_TOOLS) normalize defaultset $(OBJDIR)/fixed.bin appendbase appendloader + $(TOOLS_IMAGE_DIR)/sbe_xip_tool $(OBJDIR)/$(IMAGE_SEEPROM_NAME).bin report > $(OBJDIR)/$(IMAGE_SEEPROM_NAME).rpt generic: $(OBJDIR)/$(IMAGE_SEEPROM_NAME).bin $(SBE_TOOLS) normalize defaultset $(OBJDIR)/fixed.bin + $(TOOLS_IMAGE_DIR)/sbe_xip_tool $(OBJDIR)/$(IMAGE_SEEPROM_NAME).bin report > $(OBJDIR)/$(IMAGE_SEEPROM_NAME).rpt #Create an obj directory if needed $(LINK_OBJS) $(OBJS) $(OBJS:.o=.d) $(OBJDIR)/base_sbe_fixed.o $(OBJDIR)/base_sbe_fixed.d: | $(OBJDIR) ATTRFILES += $(IMPORT_XML_DIR)/attribute_info/perv_attributes.xml +ATTRFILES += $(IMPORT_XML_DIR)/attribute_info/pervasive_attributes.xml ATTRFILES += $(IMPORT_XML_DIR)/attribute_info/proc_attributes.xml ATTRFILES += $(IMPORT_XML_DIR)/attribute_info/ex_attributes.xml ATTRFILES += $(IMPORT_XML_DIR)/attribute_info/eq_attributes.xml @@ -285,7 +289,7 @@ tracehash: clean: rm -fr $(OBJDIR) rm -f $(TOP-FIXED-HEADERS) - rm -fr $(TOOLS_IMAGE_DIR)/bin/* + $(MAKE) -C $(TOOLS_IMAGE_DIR) -f Makefile clean rm -f *.dump rm -f hwp_return_codes.H hwp_error_info.H hwp_ffdc_classes.H collect_reg_ffdc.C set_sbe_error.H @@ -295,14 +299,17 @@ dump: .PHONY : run_spgpe run_pmgpe # load and run the SBE SeeProm image in a GPE simics environment -run_spgpe: $(OBJDIR)/$(IMAGE_SEEPROM_NAME).out +#run_spgpe: $(OBJDIR)/$(IMAGE_SEEPROM_NAME).out +run_spgpe: generic $(SIMICS_WS)/simics \ - -e '$$occ_gpe0_binary_to_load=$(OBJDIR)/$(IMAGE_SEEPROM_NAME).out' modelsetup.simics + -e '$$occ_gpe0_binary_to_load=$(OBJDIR)/$(IMAGE_SEEPROM_NAME).bin;$$occ_gpe0_sym_tbl_file=$(OBJDIR)/$(IMAGE_SEEPROM_NAME).out' \ + modelsetup.simics # load and run the SBE PibMem image in a GPE simics environment run_pmgpe: $(OBJDIR)/$(IMAGE_NAME).out $(SIMICS_WS)/simics \ - -e '$$occ_gpe0_binary_to_load=$(OBJDIR)/$(IMAGE_SBE_NAME).out' modelsetup.simics + -e '$$occ_gpe0_binary_to_load=$(OBJDIR)/$(IMAGE_SBE_NAME).bin;$$occ_gpe0_binary_to_load=$(OBJDIR)/$(IMAGE_SBE_NAME).bin' \ + modelsetup.simics diff --git a/sbe/image/img_defs.mk b/sbe/image/img_defs.mk index 522562ad..c1214c80 100644 --- a/sbe/image/img_defs.mk +++ b/sbe/image/img_defs.mk @@ -191,7 +191,10 @@ GCC-DEFS += -D__PK__=1 GCC-DEFS += -D__SBE__=1 GCC-DEFS += -D__PPE__=1 GCC-DEFS += -DFAPI2_NO_FFDC=1 -GCC-DEFS += -DPK_TRACE_SZ=512 +# use the default settings in the code unless a size is defined +ifdef PK_TRACE_SZ +GCC-DEFS += -DPK_TRACE_SZ=$(PK_TRACE_SZ) +endif DEFS += $(GCC-DEFS) export LD_LIBRARY_PATH = /afs/awd.austin.ibm.com/proj/p3/cte/tools/gcc405lin/vol1/usr/lib diff --git a/sbe/image/sbe_common.H b/sbe/image/sbe_common.H index db7c114f..4e48339b 100644 --- a/sbe/image/sbe_common.H +++ b/sbe/image/sbe_common.H @@ -38,8 +38,8 @@ .rept ((\tnumber)*(\elements)) .byte 0 .endr - - .xip_toc \symbol, SBE_XIP_UINT8, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_UINT8, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -53,8 +53,8 @@ .rept ((\tnumber)*(\elements)) .byte 0 .endr - - .xip_toc \symbol, SBE_XIP_INT8, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_INT8, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -68,10 +68,10 @@ \symbol\(): .rept ((\tnumber)*(\elements)) - .long 0 + .byte 0,0 .endr - - .xip_toc \symbol, SBE_XIP_UINT16, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_UINT16, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -85,10 +85,10 @@ \symbol\(): .rept ((\tnumber)*(\elements)) - .long 0 + .byte 0,0 .endr - - .xip_toc \symbol, SBE_XIP_INT16, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_INT16, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -104,8 +104,8 @@ .rept ((\tnumber)*(\elements)) .long 0 .endr - - .xip_toc \symbol, SBE_XIP_UINT32, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_UINT32, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -121,8 +121,8 @@ .rept ((\tnumber)*(\elements)) .long 0 .endr - - .xip_toc \symbol, SBE_XIP_INT32, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_INT32, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -137,8 +137,8 @@ .rept ((\tnumber)*(\elements)) .quad 0 .endr - - .xip_toc \symbol, SBE_XIP_UINT64, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_UINT64, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -153,8 +153,8 @@ .rept ((\tnumber)*(\elements)) .quad 0 .endr - - .xip_toc \symbol, SBE_XIP_INT64, \symbol, (\elements) + + .xip_toc \symbol, SBE_XIP_INT64, \symbol, ((\tnumber)*(\elements)) .pushsection .fixed_toc .space 8 @@ -166,7 +166,7 @@ .global \symbol \symbol\(): .quadia (\space), (\address) - + .xip_toc \symbol, SBE_XIP_UINT64, \symbol .pushsection .fixed_toc @@ -201,79 +201,79 @@ proc_sbe_fixed_int64 symbol #define PROC_SBE_FIXED_UINT8_VECTOR(symbol, elements) \ - proc_sbe_fixed_uint8 symbol, elements + proc_sbe_fixed_uint8 symbol, 1, elements #define PROC_SBE_FIXED_INT8_VECTOR(symbol, elements) \ - proc_sbe_fixed_int8 symbol, elements - + proc_sbe_fixed_int8 symbol, 1, elements + #define PROC_SBE_FIXED_UINT16_VECTOR(symbol, elements) \ - proc_sbe_fixed_uint16 symbol, elements + proc_sbe_fixed_uint16 symbol, 1, elements #define PROC_SBE_FIXED_INT16_VECTOR(symbol, elements) \ - proc_sbe_fixed_int16 symbol, elements - + proc_sbe_fixed_int16 symbol, 1, elements + #define PROC_SBE_FIXED_UINT32_VECTOR(symbol, elements) \ - proc_sbe_fixed_uint32 symbol, elements + proc_sbe_fixed_uint32 symbol, 1, elements #define PROC_SBE_FIXED_INT32_VECTOR(symbol, elements) \ - proc_sbe_fixed_int32 symbol, elements + proc_sbe_fixed_int32 symbol, 1, elements #define PROC_SBE_FIXED_UINT64_VECTOR(symbol, elements) \ - proc_sbe_fixed_uint64 symbol, elements + proc_sbe_fixed_uint64 symbol, 1, elements #define PROC_SBE_FIXED_INT64_VECTOR(symbol, elements) \ - proc_sbe_fixed_int64 symbol, elements + proc_sbe_fixed_int64 symbol, 1, elements #define PROC_SBE_FIXED_UINT8_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_uint8 symbol, dim1 * dim2 + proc_sbe_fixed_uint8 symbol, 1, dim1 * dim2 #define PROC_SBE_FIXED_INT8_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_int8 symbol, dim1 * dim2 + proc_sbe_fixed_int8 symbol, 1, dim1 * dim2 #define PROC_SBE_FIXED_UINT16_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_uint16 symbol, dim1 * dim2 + proc_sbe_fixed_uint16 symbol, 1, dim1 * dim2 #define PROC_SBE_FIXED_INT16_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_int16 symbol, dim1 * dim2 + proc_sbe_fixed_int16 symbol, 1, dim1 * dim2 #define PROC_SBE_FIXED_UINT32_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_uint32 symbol, dim1 * dim2 + proc_sbe_fixed_uint32 symbol, 1, dim1 * dim2 #define PROC_SBE_FIXED_INT32_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_int32 symbol, dim1 * dim2 - + proc_sbe_fixed_int32 symbol, 1, dim1 * dim2 + #define PROC_SBE_FIXED_UINT64_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_uint64 symbol, dim1 * dim2 + proc_sbe_fixed_uint64 symbol, 1, dim1 * dim2 #define PROC_SBE_FIXED_INT64_VECTOR_2(symbol, dim1, dim2 ) \ - proc_sbe_fixed_int64 symbol, dim1 * dim2 + proc_sbe_fixed_int64 symbol, 1, dim1 * dim2 #define PROC_SBE_FIXED_UINT8_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint8 symbol, dim1 * dim2 * dim3 - + proc_sbe_fixed_uint8 symbol, 1, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_INT8_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint8 symbol, dim1 * dim2 * dim3 + proc_sbe_fixed_uint8 symbol, 1, dim1 * dim2 * dim3 #define PROC_SBE_FIXED_UINT16_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint16 symbol, dim1 * dim2 * dim3 - + proc_sbe_fixed_uint16 symbol, 1, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_INT16_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint16 symbol, dim1 * dim2 * dim3 + proc_sbe_fixed_uint16 symbol, 1, dim1 * dim2 * dim3 #define PROC_SBE_FIXED_UINT32_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint32 symbol, dim1 * dim2 * dim3 - + proc_sbe_fixed_uint32 symbol, 1, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_INT32_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint32 symbol, dim1 * dim2 * dim3 + proc_sbe_fixed_uint32 symbol, 1, dim1 * dim2 * dim3 #define PROC_SBE_FIXED_UINT64_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint64 symbol, dim1 * dim2 * dim3 - + proc_sbe_fixed_uint64 symbol, 1, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_INT64_VECTOR_3(symbol, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint64 symbol, dim1 * dim2 * dim3 - + proc_sbe_fixed_uint64 symbol, 1, dim1 * dim2 * dim3 + // Non-Chip Target Attributes - + #define PROC_SBE_FIXED_TARGET_UINT8(symbol, tnumber) \ proc_sbe_fixed_uint8 symbol, tnumber @@ -299,80 +299,80 @@ proc_sbe_fixed_int64 symbol, tnumber #define PROC_SBE_FIXED_TARGET_UINT8_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_uint8 symbol, tnumber * elements + proc_sbe_fixed_uint8 symbol, tnumber, elements #define PROC_SBE_FIXED_TARGET_INT8_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_int8 symbol, tnumber * elements - + proc_sbe_fixed_int8 symbol, tnumber, elements + #define PROC_SBE_FIXED_TARGET_UINT16_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_uint16 symbol, tnumber * elements + proc_sbe_fixed_uint16 symbol, tnumber, elements #define PROC_SBE_FIXED_TARGET_INT16_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_int16 symbol, tnumber * elements - + proc_sbe_fixed_int16 symbol, tnumber, elements + #define PROC_SBE_FIXED_TARGET_UINT32_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_uint32 symbol, tnumber * elements + proc_sbe_fixed_uint32 symbol, tnumber, elements #define PROC_SBE_FIXED_TARGET_INT32_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_int32 symbol, tnumber * elements + proc_sbe_fixed_int32 symbol, tnumber, elements #define PROC_SBE_FIXED_TARGET_UINT64_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_uint64 symbol, tnumber * elements + proc_sbe_fixed_uint64 symbol, tnumber, elements #define PROC_SBE_FIXED_TARGET_INT64_VECTOR(symbol, tnumber, elements) \ - proc_sbe_fixed_int64 symbol, tnumber * elements + proc_sbe_fixed_int64 symbol, tnumber, elements #define PROC_SBE_FIXED_TARGET_UINT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_uint8 symbol, tnumber * dim1 * dim2 + proc_sbe_fixed_uint8 symbol, tnumber, dim1 * dim2 #define PROC_SBE_FIXED_TARGET_INT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_int8 symbol, tnumber * dim1 * dim2 + proc_sbe_fixed_int8 symbol, tnumber, dim1 * dim2 #define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_uint16 symbol, tnumber * dim1 * dim2 + proc_sbe_fixed_uint16 symbol, tnumber, dim1 * dim2 #define PROC_SBE_FIXED_TARGET_INT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_int16 symbol, tnumber * dim1 * dim2 + proc_sbe_fixed_int16 symbol, tnumber, dim1 * dim2 #define PROC_SBE_FIXED_TARGET_UINT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_uint32 symbol, tnumber * dim1 * dim2 + proc_sbe_fixed_uint32 symbol, tnumber, dim1 * dim2 #define PROC_SBE_FIXED_TARGET_INT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_int32 symbol, tnumber * dim1 * dim2 - + proc_sbe_fixed_int32 symbol, tnumber, dim1 * dim2 + #define PROC_SBE_FIXED_TARGET_UINT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_uint64 symbol, tnumber * dim1 * dim2 + proc_sbe_fixed_uint64 symbol, tnumber, dim1 * dim2 #define PROC_SBE_FIXED_TARGET_INT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ - proc_sbe_fixed_int64 symbol, tnumber * dim1 * dim2 + proc_sbe_fixed_int64 symbol, tnumber, dim1 * dim2 #define PROC_SBE_FIXED_TARGET_UINT8_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint8 symbol, tnumber * dim1 * dim2 * dim3 - + proc_sbe_fixed_uint8 symbol, tnumber, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_TARGET_INT8_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint8 symbol, tnumber * dim1 * dim2 * dim3 + proc_sbe_fixed_uint8 symbol, tnumber, dim1 * dim2 * dim3 #define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint16 symbol, tnumber * dim1 * dim2 * dim3 - + proc_sbe_fixed_uint16 symbol, tnumber, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_TARGET_INT16_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint16 symbol, tnumber * dim1 * dim2 * dim3 + proc_sbe_fixed_uint16 symbol, tnumber, dim1 * dim2 * dim3 #define PROC_SBE_FIXED_TARGET_UINT32_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint32 symbol, tnumber * dim1 * dim2 * dim3 - + proc_sbe_fixed_uint32 symbol, tnumber, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_TARGET_INT32_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint32 symbol, tnumber * dim1 * dim2 * dim3 + proc_sbe_fixed_uint32 symbol, tnumber, dim1 * dim2 * dim3 #define PROC_SBE_FIXED_TARGET_UINT64_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint64 symbol, tnumber * dim1 * dim2 * dim3 - + proc_sbe_fixed_uint64 symbol, tnumber, dim1 * dim2 * dim3 + #define PROC_SBE_FIXED_TARGET_INT64_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ - proc_sbe_fixed_uint64 symbol, tnumber * dim1 * dim2 * dim3 + proc_sbe_fixed_uint64 symbol, tnumber, dim1 * dim2 * dim3 #define PROC_SBE_FIXED_QUADIA(symbol, space, address) \ proc_sbe_fixed_quadia symbol, (space), (address) - + #else // __ASSEMBLER__ (eg the C portion) @@ -399,19 +399,19 @@ #define PROC_SBE_FIXED_INT64(symbol) \ int64_t symbol - + #define PROC_SBE_FIXED_UINT8_VECTOR(symbol, elements) \ uint8_t symbol[elements] #define PROC_SBE_FIXED_INT8_VECTOR(symbol, elements) \ int8_t symbol[elements] - + #define PROC_SBE_FIXED_UINT16_VECTOR(symbol, elements) \ uint16_t symbol[elements] #define PROC_SBE_FIXED_INT16_VECTOR(symbol, elements) \ int16_t symbol[elements] - + #define PROC_SBE_FIXED_UINT32_VECTOR(symbol, elements) \ uint32_t symbol[elements] @@ -422,29 +422,29 @@ uint64_t symbol[elements] #define PROC_SBE_FIXED_INT64_VECTOR(symbol, elements) \ - int64_t symbol[elements] - + int64_t symbol[elements] + #define PROC_SBE_FIXED_UINT8_VECTOR_2(symbol, dim1, dim2 ) \ uint8_t symbol[dim1][dim2] - + #define PROC_SBE_FIXED_INT8_VECTOR_2(symbol, dim1, dim2 ) \ int8_t symbol[dim1][dim2] #define PROC_SBE_FIXED_UINT16_VECTOR_2(symbol, dim1, dim2 ) \ uint16_t symbol[dim1][dim2] - + #define PROC_SBE_FIXED_INT16_VECTOR_2(symbol, dim1, dim2 ) \ int16_t symbol[dim1][dim2] - + #define PROC_SBE_FIXED_UINT32_VECTOR_2(symbol, dim1, dim2 ) \ uint32_t symbol[dim1][dim2] - + #define PROC_SBE_FIXED_INT32_VECTOR_2(symbol, dim1, dim2 ) \ int32_t symbol[dim1][dim2] - + #define PROC_SBE_FIXED_UINT64_VECTOR_2(symbol, dim1, dim2 ) \ uint64_t symbol[dim1][dim2] - + #define PROC_SBE_FIXED_INT64_VECTOR_2(symbol, dim1, dim2 ) \ int64_t symbol[dim1][dim2] @@ -453,7 +453,7 @@ #define PROC_SBE_FIXED_INT8_VECTOR_3(symbol, dim1, dim2, dim3 ) \ int8_t symbol[dim1][dim2][dim3] - + #define PROC_SBE_FIXED_UINT16_VECTOR_3(symbol, dim1, dim2, dim3 ) \ uint16_t symbol[dim1][dim2][dim3] @@ -497,19 +497,19 @@ #define PROC_SBE_FIXED_TARGET_INT64(symbol, tnumber) \ int64_t symbol[tnumber] - + #define PROC_SBE_FIXED_TARGET_UINT8_VECTOR(symbol, tnumber, elements) \ uint8_t symbol[tnumber][elements] #define PROC_SBE_FIXED_TARGET_INT8_VECTOR(symbol, tnumber, elements) \ int8_t symbol[tnumber][elements] - + #define PROC_SBE_FIXED_TARGET_UINT16_VECTOR(symbol, tnumber, elements) \ uint16_t symbol[tnumber][elements] #define PROC_SBE_FIXED_TARGET_INT16_VECTOR(symbol, tnumber, elements) \ int16_t symbol[tnumber][elements] - + #define PROC_SBE_FIXED_TARGET_UINT32_VECTOR(symbol, tnumber, elements) \ uint32_t symbol[tnumber][elements] @@ -520,29 +520,29 @@ uint64_t symbol[tnumber][elements] #define PROC_SBE_FIXED_TARGET_INT64_VECTOR(symbol, tnumber, elements) \ - int64_t symbol[tnumber][elements] - + int64_t symbol[tnumber][elements] + #define PROC_SBE_FIXED_TARGET_UINT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ uint8_t symbol[tnumber][dim1][dim2] - + #define PROC_SBE_FIXED_TARGET_INT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ int8_t symbol[tnumber][dim1][dim2] #define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ uint16_t symbol[tnumber][dim1][dim2] - + #define PROC_SBE_FIXED_TARGET_INT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ int16_t symbol[tnumber][dim1][dim2] - + #define PROC_SBE_FIXED_TARGET_UINT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ uint32_t symbol[tnumber][dim1][dim2] - + #define PROC_SBE_FIXED_TARGET_INT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ int32_t symbol[tnumber][dim1][dim2] - + #define PROC_SBE_FIXED_TARGET_UINT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ uint64_t symbol[tnumber][dim1][dim2] - + #define PROC_SBE_FIXED_TARGET_INT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \ int64_t symbol[tnumber][dim1][dim2] @@ -551,7 +551,7 @@ #define PROC_SBE_FIXED_TARGET_INT8_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ int8_t symbol[tnumber][dim1][dim2][dim3] - + #define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \ uint16_t symbol[tnumber][dim1][dim2][dim3] diff --git a/sbe/image/sbe_main.C b/sbe/image/sbe_main.C index 3f859e86..54d4fdc6 100644 --- a/sbe/image/sbe_main.C +++ b/sbe/image/sbe_main.C @@ -35,11 +35,12 @@ extern "C" namespace fapi2attr { -extern ProcChipAttributes_t* G_proc_chip_attributes asm("G_proc_chip_attributes") __attribute__ ((section (".fixed"))); -extern PervAttributes_t* G_perv_attributes asm("G_perv_attributes") __attribute__ ((section (".fixed"))); -extern CoreAttributes_t* G_core_attributes asm("G_core_attributes") __attribute__ ((section (".fixed"))); -extern EQAttributes_t* G_eq_attributes asm("G_eq_attributes") __attribute__ ((section (".fixed"))); -extern EXAttributes_t* G_ex_attributes asm("G_ex_attributes") __attribute__ ((section (".fixed"))); +extern ProcChipAttributes_t G_proc_chip_attributes asm("G_proc_chip_attributes") __attribute__ ((section (".fixed"))); +extern PervAttributes_t G_perv_attributes asm("G_perv_attributes") __attribute__ ((section (".fixed"))); +extern CoreAttributes_t G_core_attributes asm("G_core_attributes") __attribute__ ((section (".fixed"))); +extern EQAttributes_t G_eq_attributes asm("G_eq_attributes") __attribute__ ((section (".fixed"))); +extern EXAttributes_t G_ex_attributes asm("G_ex_attributes") __attribute__ ((section (".fixed"))); + } @@ -55,8 +56,20 @@ uint8_t G_main_thread_stack[MAIN_THREAD_STACK_SIZE]; PkThread G_main_thread; +fapi2attr::ProcChipAttributes_t* G_proc_chip_attributes_ptr ; +fapi2attr::PervAttributes_t* G_perv_attributes_ptr; +fapi2attr::CoreAttributes_t* G_core_attributes_ptr; +fapi2attr::EQAttributes_t* G_eq_attributes_ptr; +fapi2attr::EXAttributes_t* G_ex_attributes_ptr; + + + fapi2::ReturnCode -hwp_chip(const fapi2::Target & i_target); +hwp_chip_present(const fapi2::Target & i_target); + +fapi2::ReturnCode +hwp_chip_functional(const fapi2::Target & i_target); + fapi2::ReturnCode hwp_chip2(const fapi2::Target & i_target); @@ -85,6 +98,9 @@ void main_thread(void* arg) std::vector targets1; G_vec_targets = std::move(targets1); + // Establish the pointer to the global attributes + G_proc_chip_attributes_ptr = &G_proc_chip_attributes; + // Intialize the targets fapi2::plat_TargetsInit(); @@ -94,7 +110,8 @@ void main_thread(void* arg) FAPI_DBG("chip_target_new = 0x%08X", (uint32_t)(chip_target_new.get()>>32)); - FAPI_TRY(hwp_chip(chip_target_new)); +// FAPI_TRY(hwp_chip_present(chip_target_new)); + FAPI_TRY(hwp_chip_functional(chip_target_new)); FAPI_TRY(hwp_chip2(chip_target_new)); @@ -123,21 +140,21 @@ fapi_try_exit: // A Chip try fapi2::ReturnCode -hwp_chip(const fapi2::Target & i_target) +hwp_chip_present(const fapi2::Target & i_target) { FAPI_DBG("i_target = 0x%08X", (uint32_t)(i_target.get()>>32)); - auto l_perv_functional_vector = + auto l_perv_present_vector = i_target.getChildren (fapi2::TARGET_STATE_PRESENT); // Get the TPChiplet target uint32_t i = 0; - for (auto it: l_perv_functional_vector) + for (auto it: l_perv_present_vector) { - FAPI_DBG("Perv Functional Target %u value=%08X chiplet %02X", + FAPI_DBG("Perv Present Target %u value=%08X chiplet %02X", i, (uint32_t)(it.get()>>32), (uint32_t)(it.getChipletNumber())); @@ -145,16 +162,16 @@ hwp_chip(const fapi2::Target & i_target) ++i; } - auto l_core_functional_vector = + auto l_core_present_vector = i_target.getChildren (fapi2::TARGET_STATE_PRESENT); // Get the Core Chiplet targets uint32_t j = 0; - for (auto it: l_core_functional_vector) + for (auto it: l_core_present_vector) { - FAPI_DBG("Core Functional Target %u value=%08X chiplet %02X", + FAPI_DBG("Core Present Target %u value=%08X chiplet %02X", j, (uint32_t)(it.get()>>32), (uint32_t)(it.getChipletNumber())); @@ -180,7 +197,7 @@ hwp_chip(const fapi2::Target & i_target) FAPI_TRY(fapi2::getScom(i_target, address, data)); - FAPI_DBG("First getSCOM: data = %016llX", revle64(data)); +// FAPI_DBG("The First getSCOM: data = %016llX", revle64(data)); data.setBit<0, 16>(); FAPI_TRY(fapi2::putScom(i_target, 0x0006d010, data)); @@ -191,6 +208,54 @@ fapi_try_exit: return fapi2::FAPI2_RC_PLAT_ERR_SEE_DATA; } +// A Chip try +fapi2::ReturnCode +hwp_chip_functional(const fapi2::Target & i_target) +{ + + FAPI_DBG("i_target = 0x%08X", (uint32_t)(i_target.get()>>32)); + + auto l_perv_functional_vector = + i_target.getChildren + (fapi2::TARGET_STATE_FUNCTIONAL); + + // Get the TPChiplet target + uint32_t i = 0; + for (auto it: l_perv_functional_vector) + { + + FAPI_DBG("Perv Functional Target %u value=%08X chiplet %02X", + i, + (uint32_t)(it.get()>>32), + (uint32_t)(it.getChipletNumber())); + + ++i; + } + + auto l_core_functional_vector = + i_target.getChildren + (fapi2::TARGET_STATE_FUNCTIONAL); + + // Get the Core Chiplet targets + uint32_t j = 0; + for (auto it: l_core_functional_vector) + { + + FAPI_DBG("Core Functional Target %u value=%08X chiplet %02X", + j, + (uint32_t)(it.get()>>32), + (uint32_t)(it.getChipletNumber())); + + ++j; + } + + return fapi2::FAPI2_RC_SUCCESS; + +fapi_try_exit: + return fapi2::FAPI2_RC_PLAT_ERR_SEE_DATA; +} + + // A Chip try fapi2::ReturnCode hwp_chip2(const fapi2::Target & i_target) diff --git a/sbe/image/sbe_xip_image.c b/sbe/image/sbe_xip_image.c index 270b450d..d800650b 100644 --- a/sbe/image/sbe_xip_image.c +++ b/sbe/image/sbe_xip_image.c @@ -30,28 +30,6 @@ // Local Functions //////////////////////////////////////////////////////////////////////////// -// PHYP has their own way of implementing the functions. PHYP also -// does not allow static functions or data, so all of the XIP_STATIC functions -// defined here are global to PHYP. - -#ifdef PPC_HYP - -#ifdef PLIC_MODULE - -#define strcpy(dest, src) hvstrcpy(dest, src) -#define strlen(s) hvstrlen(s) -#define strcmp(s1, s2) hvstrcmp(s1, s2) -#endif //PLIC_MODULE - -#define XIP_STATIC - -#else // PPC_HYP - -#define XIP_STATIC static - -#endif // PPC_HYP - - #ifdef DEBUG_SBE_XIP_IMAGE // Debugging support, normally disabled. All of the formatted I/O you see in @@ -1947,6 +1925,10 @@ sbe_xip_set_element(void *i_image, case SBE_XIP_UINT8: ((uint8_t*)(item.iv_imageData))[i_index] = (uint8_t)i_data; break; + case SBE_XIP_UINT16: + ((uint16_t*)(item.iv_imageData))[i_index] = + xipRevLe16((uint16_t)i_data); + break; case SBE_XIP_UINT32: ((uint32_t*)(item.iv_imageData))[i_index] = xipRevLe32((uint32_t)i_data); @@ -1955,6 +1937,21 @@ sbe_xip_set_element(void *i_image, ((uint64_t*)(item.iv_imageData))[i_index] = xipRevLe64((uint64_t)i_data); break; + case SBE_XIP_INT8: + ((int8_t*)(item.iv_imageData))[i_index] = (int8_t)i_data; + break; + case SBE_XIP_INT16: + ((int16_t*)(item.iv_imageData))[i_index] = + xipRevLe16((uint16_t)i_data); + break; + case SBE_XIP_INT32: + ((int32_t*)(item.iv_imageData))[i_index] = + xipRevLe32((uint32_t)i_data); + break; + case SBE_XIP_INT64: + ((int64_t*)(item.iv_imageData))[i_index] = + xipRevLe64((uint64_t)i_data); + break; default: rc = TRACE_ERROR(SBE_XIP_TYPE_ERROR); break; diff --git a/sbe/image/sbe_xip_image.h b/sbe/image/sbe_xip_image.h index fc1bf47c..41b83311 100644 --- a/sbe/image/sbe_xip_image.h +++ b/sbe/image/sbe_xip_image.h @@ -1250,6 +1250,46 @@ sbe_xip_host2image(const void* i_image, uint64_t* o_imageAddress); + +// PHYP has their own way of implementing the functions. PHYP also +// does not allow static functions or data, so all of the XIP_STATIC functions +// defined here are global to PHYP. + +#ifdef PPC_HYP + +#ifdef PLIC_MODULE + +#define strcpy(dest, src) hvstrcpy(dest, src) +#define strlen(s) hvstrlen(s) +#define strcmp(s1, s2) hvstrcmp(s1, s2) +#endif //PLIC_MODULE + +#define XIP_STATIC + +#else // PPC_HYP + +// #define XIP_STATIC static +#define XIP_STATIC + +#endif // PPC_HYP + +// Note: For maximum flexibility we provide private versions of +// endian-conversion routines rather than counting on a system-specific header +// to provide these. + +/// Byte-reverse a 16-bit integer if on a little-endian machine +XIP_STATIC uint16_t +xipRevLe16(const uint16_t i_x); + +/// Byte-reverse a 32-bit integer if on a little-endian machine +XIP_STATIC uint32_t +xipRevLe32(const uint32_t i_x); + + +/// Byte-reverse a 64-bit integer if on a little-endian machine +XIP_STATIC uint64_t +xipRevLe64(const uint64_t i_x); + /// \defgroup sbe_xip_image_errors Error codes from SBE-XIP image APIs /// /// @{ diff --git a/sbe/image/topfiles.mk b/sbe/image/topfiles.mk index 37af6c2b..88c11bee 100644 --- a/sbe/image/topfiles.mk +++ b/sbe/image/topfiles.mk @@ -1,5 +1,5 @@ -TOP-C-SOURCES = sbe_loader.c -TOP-CPP-SOURCES = sbe_main.C +TOP-C-SOURCES = base_ppe_demo.c sbe_loader.c +TOP-CPP-SOURCES = TOP-S-SOURCES = base_ppe_header.S TOP-FIXED-HEADERS += $(IMAGE_SRCDIR)/proc_sbe_fixed_perv.H -- cgit v1.2.1