summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2021-02-07 15:15:17 -0700
committerGitHub <noreply@github.com>2021-02-07 15:15:17 -0700
commit1cc8282aea3b4c466f3d3ae174127bce32cb21e8 (patch)
treed29036c7709e7d86d7b9f59e1c7d9e3253ad4f37
parent18bc3103637834b6e6ad57d1ac32715506534607 (diff)
downloadbcm5719-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.md2
-rw-r--r--fwupd/CMakeLists.txt18
-rw-r--r--stage1/CMakeLists.txt43
-rw-r--r--stage1/main.c12
4 files changed, 49 insertions, 26 deletions
diff --git a/README.md b/README.md
index 67b6c3e..8a1fbda 100644
--- a/README.md
+++ b/README.md
@@ -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.
OpenPOWER on IntegriCloud