diff options
author | Evan Lojewski <github@meklort.com> | 2021-02-07 15:15:17 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-07 15:15:17 -0700 |
commit | 1cc8282aea3b4c466f3d3ae174127bce32cb21e8 (patch) | |
tree | d29036c7709e7d86d7b9f59e1c7d9e3253ad4f37 | |
parent | 18bc3103637834b6e6ad57d1ac32715506534607 (diff) | |
download | bcm5719-ortega-1cc8282aea3b4c466f3d3ae174127bce32cb21e8.tar.gz bcm5719-ortega-1cc8282aea3b4c466f3d3ae174127bce32cb21e8.zip |
stage1: Enable 1G advertise on non-APE-controlled ports. (#213)v0.5.41
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | fwupd/CMakeLists.txt | 18 | ||||
-rw-r--r-- | stage1/CMakeLists.txt | 43 | ||||
-rw-r--r-- | stage1/main.c | 12 |
4 files changed, 49 insertions, 26 deletions
@@ -144,7 +144,7 @@ The flash can be updated with development firmware using `bcmflash` and the appr ### Updating the MIPS Firmware ```bash cd build -sudo ./bin/bcmflash -t eth -i enP4p1s0f0 -1 stage1/stage1.bin +sudo ./bin/bcmflash -t eth -i enP4p1s0f0 -1 stage1/stage1-port0.bin ``` ### Updating the APE Firmware diff --git a/fwupd/CMakeLists.txt b/fwupd/CMakeLists.txt index 0064ba9..5b3830b 100644 --- a/fwupd/CMakeLists.txt +++ b/fwupd/CMakeLists.txt @@ -55,7 +55,7 @@ SET(APP_STREAM_PREFIX com.meklort.bcm5719.firmware) add_custom_target(fwupd ALL) -FUNCTION(CREATE_FWUPD_CAB TARGET_ID TARGET_NAME APE_VARIANT FIRMWARE_ID HARDWARE_ID) +FUNCTION(CREATE_FWUPD_CAB TARGET_ID TARGET_NAME VARIANT FIRMWARE_ID HARDWARE_ID) IF(HARDWARE_ID) SET(HARDWARE_FILTER "<hardware>${HARDWARE_ID}</hardware>") ELSE() @@ -63,12 +63,12 @@ FUNCTION(CREATE_FWUPD_CAB TARGET_ID TARGET_NAME APE_VARIANT FIRMWARE_ID HARDWARE ENDIF() configure_file(metainfo.xml.in ${APP_STREAM_PREFIX}.${TARGET_ID}.metainfo.xml @ONLY) - add_custom_command(OUTPUT ${TARGET_ID}-${APE_VARIANT}.${VERSION_STRING}.fw - COMMAND bcmflash -c ${TARGET_ID} -t file -i ${TARGET_ID}-${APE_VARIANT}.${VERSION_STRING}.fw - -1 $<TARGET_PROPERTY:stage1,RESOURCE> - -a $<TARGET_PROPERTY:ape-${APE_VARIANT},RESOURCE> - COMMAND touch -d "${VERSION_TIMESTAMP}" ${TARGET_ID}-${APE_VARIANT}.${VERSION_STRING}.fw - DEPENDS stage1 ape-${APE_VARIANT} + add_custom_command(OUTPUT ${TARGET_ID}-${VARIANT}.${VERSION_STRING}.fw + COMMAND bcmflash -c ${TARGET_ID} -t file -i ${TARGET_ID}-${VARIANT}.${VERSION_STRING}.fw + -1 $<TARGET_PROPERTY:stage1-${VARIANT},RESOURCE> + -a $<TARGET_PROPERTY:ape-${VARIANT},RESOURCE> + COMMAND touch -d "${VERSION_TIMESTAMP}" ${TARGET_ID}-${VARIANT}.${VERSION_STRING}.fw + DEPENDS stage1-${VARIANT} ape-${VARIANT} VERBATIM ) @@ -76,10 +76,10 @@ FUNCTION(CREATE_FWUPD_CAB TARGET_ID TARGET_NAME APE_VARIANT FIRMWARE_ID HARDWARE COMMAND touch -d "${VERSION_TIMESTAMP}" ${APP_STREAM_PREFIX}.${TARGET_ID}.metainfo.xml COMMAND ${GCAB} -c -z ${TARGET_ID}-bcm5719-${VERSION_STRING}.cab ${APP_STREAM_PREFIX}.${TARGET_ID}.metainfo.xml - ${TARGET_ID}-${APE_VARIANT}.${VERSION_STRING}.fw + ${TARGET_ID}-${VARIANT}.${VERSION_STRING}.fw DEPENDS ${APP_STREAM_PREFIX}.${TARGET_ID}.metainfo.xml - ${TARGET_ID}-${APE_VARIANT}.${VERSION_STRING}.fw + ${TARGET_ID}-${VARIANT}.${VERSION_STRING}.fw ) add_custom_target(build-${TARGET_ID}-bcm5719-${VERSION_STRING}.cab DEPENDS ${TARGET_ID}-bcm5719-${VERSION_STRING}.cab) diff --git a/stage1/CMakeLists.txt b/stage1/CMakeLists.txt index db51f4f..a42e71b 100644 --- a/stage1/CMakeLists.txt +++ b/stage1/CMakeLists.txt @@ -47,20 +47,32 @@ project(stage1) # Firmware set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/stage1.ld") -mips_add_executable(${PROJECT_NAME} - init_hw.c - main.c - crt.s) -mips_linker_script(${PROJECT_NAME} ${LINKER_SCRIPT}) -target_link_libraries(${PROJECT_NAME} - --defsym=VERSION_MAJOR=${VERSION_MAJOR} - --defsym=VERSION_MINOR=${VERSION_MINOR} - --defsym=VERSION_PATCH=${VERSION_PATCH}) -target_link_libraries(${PROJECT_NAME} NVRam-mips MII-mips APE-mips Timer-mips printf-mips) -target_link_libraries(${PROJECT_NAME} bcm5719) -target_compile_options(${PROJECT_NAME} PRIVATE -nodefaultlibs) -target_include_directories(${PROJECT_NAME} PUBLIC ../libs/VPD/include .) +function(stage1_firmware PORT) + SET(TARGET ${PROJECT_NAME}-port${PORT}) + + mips_add_executable(${TARGET} + init_hw.c + main.c + crt.s) + mips_linker_script(${TARGET} ${LINKER_SCRIPT}) + target_link_libraries(${TARGET} + --defsym=NETWORK_PORT=${PORT} + --defsym=VERSION_MAJOR=${VERSION_MAJOR} + --defsym=VERSION_MINOR=${VERSION_MINOR} + --defsym=VERSION_PATCH=${VERSION_PATCH}) + + target_link_libraries(${TARGET} NVRam-mips MII-mips APE-mips Timer-mips printf-mips) + target_link_libraries(${TARGET} bcm5719) + target_compile_options(${TARGET} PRIVATE -nodefaultlibs) + target_include_directories(${TARGET} PUBLIC ../libs/VPD/include .) + target_compile_definitions(${TARGET} PRIVATE NETWORK_PORT=${PORT}) + + install(TARGETS ${TARGET} DESTINATION fw RESOURCE) +endfunction(stage1_firmware) + +stage1_firmware(0) +stage1_firmware(2) # Simulator add_executable @@ -71,7 +83,6 @@ simulator_add_executable(sim-${PROJECT_NAME} target_link_libraries(sim-${PROJECT_NAME} simulator) target_link_libraries(sim-${PROJECT_NAME} NVRam MII VPD APE Timer printf) target_include_directories(sim-${PROJECT_NAME} PUBLIC .) +target_compile_definitions(sim-${PROJECT_NAME} PRIVATE NETWORK_PORT=0) -install(TARGETS ${PROJECT_NAME} DESTINATION fw RESOURCE) - -format_target_sources(${PROJECT_NAME}) +format_target_sources(${PROJECT_NAME}-port0) diff --git a/stage1/main.c b/stage1/main.c index 699bee5..a23c50e 100644 --- a/stage1/main.c +++ b/stage1/main.c @@ -55,6 +55,8 @@ #define crc_swap(__x__) ((((__x__)&0x000000FF) << 24) | (((__x__)&0x0000FF00) << 8) | (((__x__)&0x00FF0000) >> 8) | (((__x__)&0xFF000000) >> 24)) #define vpd_swap(__x__) ((((__x__)&0x000000FF) << 24) | (((__x__)&0x0000FF00) << 8) | (((__x__)&0x00FF0000) >> 8) | (((__x__)&0xFF000000) >> 24)) #endif +#include <APE.h> +#include <MII.h> #include <NVRam.h> #include <bcm5719_APE.h> #include <bcm5719_BOOTCODE.h> @@ -210,6 +212,16 @@ int main() #endif } + int function = DEVICE.Status.bits.FunctionNumber; + if (NETWORK_PORT != function) + { + // Linux might not reconfigure the advertisement, so enable 1G mode now. + // Note: The APE does this for NETWORK_PORT as needed. + APE_aquireLock(); + (void)MII_UpdateAdvertisement(&DEVICE, MII_getPhy(&DEVICE)); + APE_releaseLock(); + } + SHM.RcpuInitCount.r32 = SHM.RcpuInitCount.r32 + 1; // Send configuration information to APE SHM. |