2012_2 misc on reading

本文探讨了使用evernote提高工作效率的方法,强调了C++语言在效率、灵活性和抽象方面的优势,并通过Facebook创始人扎克伯格的信件,强调了热情在个人成长中的重要性。此外,文章还讨论了渐进式创新在技术发展中的应用。

自从有了evernote之后,看到的和想到的就会先cache到evernote上,然后大约一个月一次的写到blog上。

这样效率高多了,也是evernote一个效率提升的实际例子了。

Why C++ ? 王者归来

一个比较高屋建瓴的文章。
  • 语言几个重要的方面:效率,灵活性,抽象,生产力
  • c++在效率,灵活性,抽象三方面很好,在移动设备和服务器端编程变得非常强大
  • java类的语言不能解决所有,这里面有一个tradeoff的问题,在不同时期需要不同的东西

你缺少的不是知识而是热情


通篇一句话最有意义:
很多时候,你缺少的不是知识而是热情


扎科伯格的信@facebook ipo
  • 价值观比能力能够更多的决定技术所能达到高度
  • 一种价值观和时间哲学需要一种能力去匹配,没有一流的能力就用这样的价值观也是不行的,所以要么提升自己来符合自己希望的价值观,要么降低价值观来匹配自己的能力吧

卡马克谈静态代码分析

  • visual studio' analysis is very useful
  • keep on polishing code
  • code error increase when code size increase(with reasonable writting)
迄今位置,已经收集到太多的需要写简洁紧凑的代码的必要了,最后它汇聚成优秀开发者的审美观,我们需要make it simple&clean&tight


渐进式创新
主要谈了腾讯的渐进式创新,我对于这种方式属不属于创新并不关心,但是一步一个脚印的做事方法是我比较喜欢的。
结合最近的认识,这里面可以有几个部分:
  • 你需要向着极致一步步的去做,不是每家公司都像巅峰时期的微软和google那样充满了大神级程序员,一步步去做就是那些普普通通程序员创造奇迹的方式(或许是唯一的方式),你的目标就在那里,所需就是一份执着!
  • 每次做的比自己的能力高一点,不能高很多,否则自己就搞不定了,这个从锻炼身体,学习英语,甚至炒股票中都可以看见,是一种(不是唯一)科学的获得较快提升方式






These headers fail: <stdarg.h> /home/xgd22/workdir/be230v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/lib/gcc/arm-buildroot-linux-gnueabi/10.3.0/include/stdarg.h, line 40: syntax error, unexpected IDENTIFIER, expecting ';' or ',' <stdio.h> /home/xgd22/workdir/be230v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/lib/gcc/arm-buildroot-linux-gnueabi/10.3.0/include/stdarg.h, line 40: syntax error, unexpected IDENTIFIER, expecting ';' or ',' Finished in 3 wallclock secs (1.68 usr + 1.07 sys = 2.75 CPU) config file generation success make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/CBC' make -C CPAN make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/CPAN' if perl -MDigest::CRC -e "exit;" ;\ then \ echo "Digest::CRC Found" ; \ else \ tar xf Digest-CRC-0.21.tar.gz ; \ cd Digest-CRC-0.21/ ; \ perl Makefile.PL PREFIX=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/local_install/Perl LIB=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/local_install/Perl ; \ make ; \ make install ; \ cd .. ; \ rm -rf Digest-CRC-0.21/ ; \ fi Digest::CRC Found make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/CPAN' Building secure boot utils ... make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils -f Makefile make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils' CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/rtl8367c_asicdrv_trunking.o echo /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils/../..//hostTools/PerlLib:/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils/../..//hostTools/local_install/Perl/:/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils/../..//hostTools/PerlLib/x86_64-linux-gnu-thread-multi/ CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/dal_rtl8367c_switch.o /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils/../..//hostTools/PerlLib:/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils/../..//hostTools/local_install/Perl/:/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils/../..//hostTools/PerlLib/x86_64-linux-gnu-thread-multi/ make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/SecureBootUtils' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools' TOOLCHAIN_TOP= make -f build/pre_kernelbuild.mk make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' ------------------------------------------- ... starting kernel build at /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19 PROFILE_KERNEL_VER is LINUX_4_19_0 BCM_KF is defined do not copy /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/arch/arm64/defconfig Untarring original Linux kernel source: src-linux-4.19.tar.gz make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make ARCH=arm64 -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19 IPLATFORM_ROOTFS=/home/xgd22/workdir/be230v2/Iplatform/build/../image/be230v1/rootfs PROFILE=TP6764L SHELL=/bin/bash PRODUCT_NAME=be230v1 olddefconfig EXTRAVERSION= LOCALVERSION= make[6]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/dal_rtl8367c_rldp.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/rtl8367c_asicdrv_cputag.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/dal_rtl8367c_l2.o HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/rtl8367c_asicdrv_green.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/dal_rtl8367c_qos.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/rtl8367c_asicdrv_dot1x.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367c/dal_rtl8367c_eee.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_eee.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_mapper.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_cpu.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_gpio.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_leaky.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_storm.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_stat.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/rtl8367d_smi.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_trap.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf --olddefconfig Kconfig CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_rldp.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_mirror.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_port.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_vlan.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_qos.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_switch.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_svlan.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/rtl8367d_asicdrv.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_igmp.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_dot1x.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_rate.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_trunk.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_acl.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_l2.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_led.o CC drivers/net/bcmbca/phy/rtl8367/dal/rtl8367d/dal_rtl8367d_interrupt.o LD drivers/net/bcmbca/phy/rtl8367/built-in.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_access.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_debug_functions.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_internal.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_config.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_tx_analog_functions.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_diag.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_pwr_mgt.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_internal_error.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_field_access.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_reg_dump.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_pll_config.o CC drivers/net/bcmbca/phy/merlin_shortfin/src/merlin16_shortfin_prbs.o CC drivers/net/bcmbca/phy/merlin_shortfin/serdes_wrapper.o CC drivers/net/bcmbca/phy/mac_drv.o CC drivers/net/bcmbca/phy/bus_drv.o CC drivers/net/bcmbca/phy/phy_drv.o CC drivers/net/bcmbca/phy/phy_drv_mii.o ../../bcmdrivers/opensource/misc/sotp/Kconfig.autodetect:1:warning: ignoring type redefinition of 'BCM_SOTP' from 'tristate' to 'bool' ../../bcmdrivers/opensource/misc/thermal/Kconfig.autodetect:1:warning: ignoring type redefinition of 'BCM_THERMAL' from 'tristate' to 'bool' net/mptcp/Kconfig:53:warning: choice default symbol 'DEFAULT' is not contained in the choice net/mptcp/Kconfig:115:warning: choice default symbol 'DEFAULT' is not contained in the choice CC drivers/net/bcmbca/phy/phy_drv_brcm.o # # configuration written to .config # make[6]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' TOOLCHAIN_TOP= make -f build/Bcmkernel.mk prepare_bcm_driver make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' make ARCH=arm64 -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19 PRODUCT_NAME=be230v1 SHELL=/bin/bash PROFILE=TP6764L IPLATFORM_ROOTFS=/home/xgd22/workdir/be230v2/Iplatform/build/../image/be230v1/rootfs prepare_bcm_driver EXTRAVERSION= LOCALVERSION= make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' CC drivers/net/bcmbca/phy/dt_access.o CC drivers/net/bcmbca/phy/dt_parsing.o CC drivers/net/bcmbca/phy/mdio_drv_common.o CC drivers/net/bcmbca/phy/mdio_drv_sf2.o CC drivers/net/bcmbca/phy/bus_drv_sf2.o CC drivers/net/bcmbca/phy/mac_drv_sf2.o CC drivers/net/bcmbca/phy/ephy_led_init.o CC drivers/net/bcmbca/phy/phy_drv_ext3.o READING AG MAKEFILE LN_RULE_AG (NAME=CONFIG_BCM_BCA_LED,VAL=y,DIR=opensource/misc/bca_led_ctrl,IMPL=1) CONFIG_BCM_BCA_LED_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_LEGACY_LED_API,VAL=y,DIR=opensource/misc/bca_legacy_led,IMPL=1) CONFIG_BCM_BCA_LEGACY_LED_API_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PMC,VAL=y,DIR=opensource/misc/pmc,IMPL=1) CONFIG_BCM_PMC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_ARM_CPUIDLE,VAL=y,DIR=opensource/misc/cpuidle,IMPL=1) CONFIG_BCM_ARM_CPUIDLE_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_VREG_SYNC,VAL=y,DIR=opensource/misc/vregsync,IMPL=1) CONFIG_BCM_BCA_VREG_SYNC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_STRAP,VAL=y,DIR=opensource/misc/strap,IMPL=1) CONFIG_BCM_STRAP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_DGASP_DRV,VAL=y,DIR=opensource/misc/dgasp,IMPL=1) CONFIG_BCM_DGASP_DRV_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BUTTON,VAL=y,DIR=opensource/misc/button,IMPL=1) CONFIG_BCM_BUTTON_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_SFP,VAL=y,DIR=opensource/misc/bcmsfp,IMPL=1) CONFIG_BCM_SFP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_UBUS,VAL=y,DIR=opensource/misc/ubus,IMPL=1) CONFIG_BCM_UBUS_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_THERMAL,VAL=m,DIR=opensource/misc/thermal,IMPL=1) CONFIG_BCM_THERMAL_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_COMMON_CLK,VAL=y,DIR=opensource/misc/clk,IMPL=1) CONFIG_BCM_COMMON_CLK_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_RESET_BUTTON,VAL=y,DIR=opensource/misc/reset_button,IMPL=1) CONFIG_BCM_RESET_BUTTON_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_EXTINTR,VAL=y,DIR=opensource/misc/bca_extintr,IMPL=1) CONFIG_BCM_BCA_EXTINTR_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_OTP_DRV,VAL=y,DIR=opensource/misc/otp,IMPL=1) CONFIG_BCM_OTP_DRV_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_GPIO,VAL=y,DIR=opensource/misc/bca_gpio,IMPL=1) CONFIG_BCM_BCA_GPIO_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_PINCTRL,VAL=y,DIR=opensource/misc/bca_pinctrl,IMPL=1) CONFIG_BCM_BCA_PINCTRL_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_MEMC,VAL=y,DIR=opensource/misc/memc,IMPL=1) CONFIG_BCM_MEMC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCAP,VAL=m,DIR=opensource/char/pcap,IMPL=1) CONFIG_BCM_PCAP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCM,VAL=y,DIR=opensource/char/pcm,IMPL=1) CONFIG_BCM_PCM_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_MCAST,VAL=m,DIR=opensource/char/mcast,IMPL=1) CONFIG_BCM_MCAST_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_LIBS,VAL=m,DIR=opensource/char/bcmlibs,IMPL=1) CONFIG_BCM_LIBS_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BOOTSTATE,VAL=y,DIR=opensource/char/bcm_bootstate,IMPL=1) CONFIG_BCM_BOOTSTATE_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_OPTICALDET,VAL=y,DIR=opensource/char/opticaldet,IMPL=2) CONFIG_BCM_OPTICALDET_IMPL=2 LN_RULE_AG (NAME=CONFIG_BCM_BCA_USB,VAL=m,DIR=opensource/bus/usb,IMPL=1) CONFIG_BCM_BCA_USB_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCIE_HCD,VAL=m,DIR=opensource/bus/pci/host,IMPL=1) CONFIG_BCM_PCIE_HCD_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_ENET,VAL=m,DIR=opensource/net/enet,IMPL=7) CONFIG_BCM_ENET_IMPL=7 linking opensource/char/board/bcm963xx/bcm96765 => impl1 linking opensource/char/bcm_knvram/bcm96765 => impl1 linking opensource/char/timer/bcm96765 => impl1 linking opensource/char/i2c/busses/bcm96765 => impl1 linking opensource/char/plat-bcm/bcm96765 => impl1 linking broadcom/char/pktflow/bcm96765 => impl1 linking broadcom/char/cmdlist/bcm96765 => impl1 linking broadcom/char/archer/bcm96765 => impl1 linking opensource/char/archer/bcm96765 => impl1 linking broadcom/char/bp3/bcm96765 => impl1 linking broadcom/char/vlan/bcm96765 => impl1 linking opensource/char/ingqos/bcm96765 => impl1 linking broadcom/char/bpm/bcm96765 => impl1 linking opensource/net/map/bcm96765 => impl1 linking opensource/char/spudd/bcm96765 => impl5 linking opensource/char/flexrm/bcm96765 => impl1 linking opensource/misc/bca_led_ctrl/bcm96765 => impl1 linking opensource/misc/bca_legacy_led/bcm96765 => impl1 linking opensource/misc/pmc/bcm96765 => impl1 linking opensource/misc/cpuidle/bcm96765 => impl1 linking opensource/misc/vregsync/bcm96765 => impl1 linking opensource/misc/strap/bcm96765 => impl1 linking opensource/misc/dgasp/bcm96765 => impl1 linking opensource/misc/button/bcm96765 => impl1 linking opensource/misc/bcmsfp/bcm96765 => impl1 linking opensource/misc/ubus/bcm96765 => impl1 linking opensource/misc/thermal/bcm96765 => impl1 linking opensource/misc/clk/bcm96765 => impl1 linking opensource/misc/reset_button/bcm96765 => impl1 linking opensource/misc/bca_extintr/bcm96765 => impl1 linking opensource/misc/otp/bcm96765 => impl1 linking opensource/misc/bca_gpio/bcm96765 => impl1 linking opensource/misc/bca_pinctrl/bcm96765 => impl1 linking opensource/misc/memc/bcm96765 => impl1 linking opensource/char/pcap/bcm96765 => impl1 linking opensource/char/pcm/bcm96765 => impl1 linking opensource/char/mcast/bcm96765 => impl1 linking opensource/char/bcmlibs/bcm96765 => impl1 linking opensource/char/bcm_bootstate/bcm96765 => impl1 linking opensource/char/opticaldet/bcm96765 => impl2 linking opensource/bus/usb/bcm96765 => impl1 linking opensource/bus/pci/host/bcm96765 => impl1 linking opensource/net/enet/bcm96765 => impl7 linking broadcom/net/wl/bcm96765 => impl103 done bcmdriver links make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' make -C data-model make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/data-model' cp -f cms-dm-tr104v1-voice.xml cms-dm-tr104-voice.xml cat cms-dm-tr104v1-voice.xml | sed 's/Baseline:1/Device2_Baseline:1/g' > cms-dm-tr104-voice-tr181.xml skipping bbf-data-model-1.xml (not configured) skipping bbf-data-model-2.xml (not configured) ./generate_from_dm.pl merge /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-igd.d cms-data-model-merged.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2.d cms-data-model-merged2.xml CC drivers/net/bcmbca/phy/eth_phy_top.o CC drivers/net/bcmbca/phy/serdes_access.o CC drivers/net/bcmbca/phy/Serdes146Class/merlin16_shortfin_config.o ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-devinfo.d cms-data-model-merged2-devinfo.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-dsl.d cms-data-model-merged2-dsl.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-gpon.d cms-data-model-merged2-gpon.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-epon.d cms-data-model-merged2-epon.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-voice.d cms-data-model-merged2-voice.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-wifi.d cms-data-model-merged2-wifi.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-diag.d cms-data-model-merged2-diag.xml CC drivers/net/bcmbca/phy/phy_drv_146class_serdes.o ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-sysmgmt.d cms-data-model-merged2-sysmgmt.xml CC drivers/net/bcmbca/phy/phy_drv_dsl_serdes.o ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-openplat.d cms-data-model-merged2-softwaremodules.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-tr69.d cms-data-model-merged2-tr69.xml ./generate_from_dm.pl merge2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 merge-dev2-usp.d cms-data-model-merged2-localagent.xml ./generate_from_dm.pl objectid /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml cms-data-model-merged2.xml mkdir -p /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include cp -u -f --no-preserve=mode --preserve=timestamps -r mdm_objectid.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include ./generate_from_dm.pl object /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml cms-data-model-merged2.xml CC drivers/net/bcmbca/phy/phy_drv_dsl_848xx.o mkdir -p /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include cp -u -f --no-preserve=mode --preserve=timestamps -r mdm_object.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include ./generate_from_dm.pl validstrings /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml cms-data-model-merged2.xml mkdir -p /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include cp -u -f --no-preserve=mode --preserve=timestamps -r mdm_validstrings.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include ./generate_from_dm.pl mdmparams /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml cms-data-model-merged2.xml CC drivers/net/bcmbca/phy/phy_drv_dsl_phy.o LD drivers/net/bcmbca/phy/DRV_OBJS LD drivers/net/bcmbca/phy/built-in.o CC drivers/net/bcmbca/bcm_ethsw_impl1.o mkdir -p /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include cp -u -f --no-preserve=mode --preserve=timestamps -r mdm_params.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/public/include CC drivers/net/bcmbca/bcm_ethsw_phy.o ./generate_from_dm.pl mdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml mdm CC drivers/net/bcmbca/bcmbca_sysport_v2.o ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2.xml mdm2 CC drivers/net/bcmbca/bcm_ethsw_ext.o LD drivers/net/bcmbca/built-in.o ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-devinfo.xml mdm2_devinfo ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-dsl.xml mdm2_dsl LD drivers/net/mscc_eswitch/built-in.o ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-gpon.xml mdm2_gpon ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-epon.xml mdm2_epon LD drivers/net/ti/built-in.o LD drivers/net/built-in.o ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-voice.xml mdm2_voice ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-diag.xml mdm2_diag LD drivers/net/phy/built-in.o LD drivers/power/built-in.o ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-sysmgmt.xml mdm2_sysmgmt LD drivers/power/battery/built-in.o LD drivers/power/domain/built-in.o LD drivers/power/fuel_gauge/built-in.o LD drivers/power/mfd/built-in.o LD drivers/power/pmic/built-in.o LD drivers/power/regulator/built-in.o CC drivers/serial/serial-uclass.o ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-softwaremodules.xml mdm2_openplat ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-tr69.xml mdm2_tr69 CC drivers/serial/serial_pl01x.o ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-localagent.xml mdm2_usp ./generate_from_dm.pl mdm2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-wifi.xml mdm2_wifi LD drivers/serial/built-in.o CC drivers/spi/spi-uclass.o ./generate_from_dm.pl oidinfo /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml cms_core CC drivers/spi/spi-mem.o ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2.xml mdm_cbk_core CC drivers/spi/bcmbca_hsspi.o ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-devinfo.xml mdm_cbk_devinfo ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-dsl.xml mdm_cbk_dsl LD drivers/spi/built-in.o CC drivers/usb/common/common.o ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-gpon.xml mdm_cbk_gpon ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-epon.xml mdm_cbk_epon LD drivers/usb/common/built-in.o ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-voice.xml mdm_cbk_voice LD drivers/usb/dwc3/built-in.o LD drivers/usb/emul/built-in.o CC drivers/usb/eth/usb_ether.o ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-diag.xml mdm_cbk_diag ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-sysmgmt.xml mdm_cbk_sysmgmt LD drivers/usb/eth/built-in.o ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-softwaremodules.xml mdm_cbk_openplat CC drivers/usb/host/usb-uclass.o ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-tr69.xml mdm_cbk_tr69 ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-localagent.xml mdm_cbk_usp ./generate_from_dm.pl oidinfo2 /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-wifi.xml mdm_cbk_wifi ./generate_from_dm.pl prototypes /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml cms-data-model-merged2.xml CC drivers/usb/host/ohci-hcd.o ./generate_from_dm.pl prototypes /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged.xml cms-data-model-merged2.xml CC drivers/usb/host/ohci-bcmbca.o CC drivers/usb/host/ehci-hcd.o rm -f /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/userspace/public/apps/obuspa/obuspa/src/vendor/vendor_registerdm.c 2>/dev/null rm -f /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/userspace/public/apps/obuspa/obuspa/src/vendor/vendor_registerdm.h 2>/dev/null rm -f /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/userspace/public/apps/obuspa/obuspa/src/vendor/vendor_registerdm_obj.h 2>/dev/null rm -f /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/userspace/public/apps/obuspa/obuspa/src/vendor/vendor.am 2>/dev/null ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-devinfo.xml devinfo ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-dsl.xml dsl ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-gpon.xml gpon ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-epon.xml epon ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-voice.xml voice CC drivers/usb/host/ehci-bcmbca.o ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-sysmgmt.xml sysmgmt LD drivers/usb/host/built-in.o LD drivers/usb/musb-new/built-in.o LD drivers/usb/musb/built-in.o LD drivers/usb/phy/built-in.o LD drivers/usb/ulpi/built-in.o CC env/common.o CC env/env.o ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-diag.xml diag CC env/attr.o ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-softwaremodules.xml openplat ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-tr69.xml tr69c CC env/callback.o ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-localagent.xml usp CC env/flags.o ./generate_from_dm.pl registerdm /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04 cms-data-model-merged2-wifi.xml wifi CC env/boot_magic.o make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/data-model' make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf KERNEL_ARCH=aarch64 BRCM_CHIP=6765 make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf' Untarring source and overrides... LD env/built-in.o CC fs/ubifs/ubifs.o CC fs/ubifs/io.o Removing .git folder... Applying patches to ARM_TF... Link platform bcm make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8' CC fs/ubifs/super.o CC fs/ubifs/sb.o CC fs/ubifs/master.o CC fs/ubifs/lpt.o CC fs/ubifs/lpt_commit.o CC fs/ubifs/scan.o CC fs/ubifs/lprops.o CC fs/ubifs/tnc.o CC fs/ubifs/tnc_misc.o CC fs/ubifs/debug.o CC fs/ubifs/crc16.o CC fs/ubifs/budget.o CC fs/ubifs/log.o CC fs/ubifs/orphan.o CC fs/ubifs/recovery.o CC fs/ubifs/replay.o CC fs/ubifs/gc.o LD fs/ubifs/built-in.o CC fs/fs.o CC fs/fs_internal.o LD fs/built-in.o CC lib/efi_driver/efi_uclass.o CC lib/efi_driver/efi_block_device.o LD lib/efi_driver/built-in.o CC lib/efi_loader/efi_bootmgr.o CC lib/efi_loader/efi_boottime.o CC lib/efi_loader/efi_console.o CC lib/efi_loader/efi_device_path.o CC lib/efi_loader/efi_device_path_to_text.o CC lib/efi_loader/efi_device_path_utilities.o CC lib/efi_loader/efi_file.o CC lib/efi_loader/efi_hii.o CC lib/efi_loader/efi_hii_config.o CC lib/efi_loader/efi_image_loader.o CC lib/efi_loader/efi_memory.o CC lib/efi_loader/efi_root_node.o CC lib/efi_loader/efi_runtime.o CC lib/efi_loader/efi_setup.o CC lib/efi_loader/efi_unicode_collation.o CC lib/efi_loader/efi_variable.o CC lib/efi_loader/efi_watchdog.o CC lib/efi_loader/efi_disk.o CC lib/efi_loader/efi_net.o CC lib/efi_loader/helloworld.o AS lib/efi_loader/efi_crt0.o CC lib/efi_loader/efi_reloc.o CC lib/efi_loader/efi_freestanding.o LD lib/efi_loader/built-in.o LD lib/efi_loader/helloworld_efi.so OBJCOPY lib/efi_loader/helloworld.efi CC lib/libfdt/fdt.o CC lib/libfdt/fdt_wip.o CC lib/libfdt/fdt_strerror.o CC lib/libfdt/fdt_sw.o CC lib/libfdt/fdt_rw.o CC lib/libfdt/fdt_empty_tree.o CC lib/libfdt/fdt_addresses.o CC lib/libfdt/fdt_ro.o CC lib/libfdt/fdt_region.o LD lib/libfdt/built-in.o CC lib/lzma/LzmaDec.o CC lib/lzma/LzmaTools.o LD lib/lzma/built-in.o CC lib/lzo/lzo1x_decompress.o LD lib/lzo/built-in.o CC lib/nvram_mngr/md5.o CC lib/nvram_mngr/nm_api.o CC lib/nvram_mngr/nm_fwup.o CC lib/nvram_mngr/nm_lib.o CC lib/nvram_mngr/nm_ubifs.o CC lib/nvram_mngr/sysProductInfo.o CC lib/nvram_mngr/rsaVerify.o CC lib/nvram_mngr/shaAndSha512.o CC lib/nvram_mngr/bigNumber.o CC lib/nvram_mngr/aes.o LD lib/nvram_mngr/built-in.o CC lib/rsa/rsa-verify.o CC lib/rsa/rsa-checksum.o CC lib/rsa/rsa-mod-exp.o LD lib/rsa/built-in.o CC lib/zlib/zlib.o LD lib/zlib/built-in.o CC lib/aes.o CC lib/charset.o CC lib/crc7.o CC lib/crc8.o CC lib/crc16.o CC lib/fdtdec_common.o CC lib/gzip.o CC lib/ldiv.o CC lib/md5.o CC lib/net_utils.o CC lib/rc4.o CC lib/rbtree.o CC lib/list_sort.o CC lib/sha1.o CC lib/sha256.o CC lib/gunzip.o CC lib/fdtdec.o CC lib/qsort.o CC lib/hashtable.o CC lib/errno.o CC lib/display_options.o CC lib/crc32.o CC lib/ctype.o CC lib/div64.o CC lib/hang.o CC lib/linux_compat.o CC lib/linux_string.o CC lib/lmb.o CC lib/membuff.o CC lib/slre.o CC lib/string.o CC lib/tables_csum.o CC lib/time.o CC lib/hexdump.o CC lib/uuid.o CC lib/rand.o CC lib/panic.o CC lib/vsprintf.o CC lib/strto.o CC lib/strmhz.o LD lib/built-in.o CC net/checksum.o CC net/arp.o CC net/bootp.o CC net/eth-uclass.o CC net/eth_common.o CC net/net.o CC net/nfs.o CC net/ping.o CC net/tftp.o LD net/built-in.o CC examples/standalone/hello_world.o CC examples/standalone/stubs.o LD examples/standalone/libstubs.o LD examples/standalone/hello_world OBJCOPY examples/standalone/hello_world.srec OBJCOPY examples/standalone/hello_world.bin LDS u-boot.lds LD u-boot OBJCOPY u-boot-nodtb.bin start=$(/home/xgd22/workdir/be230v2/Iplatform/build/../../bcm504L04/toolchain/opt/toolchains/crosstools-aarch64-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/bin/aarch64-linux-nm u-boot | grep __rel_dyn_start | cut -f 1 -d ' '); end=$(/home/xgd22/workdir/be230v2/Iplatform/build/../../bcm504L04/toolchain/opt/toolchains/crosstools-aarch64-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/bin/aarch64-linux-nm u-boot | grep __rel_dyn_end | cut -f 1 -d ' '); tools/relocate-rela u-boot-nodtb.bin 0x01000000 $start $end CAT u-boot-dtb.bin COPY u-boot.bin make[7]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/obj/uboot' make[6]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/u-boot-2019.07' /home/xgd22/workdir/be230v2/Iplatform/build/../../bcm504L04/toolchain/opt/toolchains/crosstools-aarch64-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/bin/aarch64-linux-objdump -d /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/obj/uboot/u-boot > /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/obj/uboot/u-boot.dis mkdir -p /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/obj/binaries/linux/ make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' profile_saved_check: FORCE= CURRENT_KARCH=aarch64 TOOLCHAIN_TOP= make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build -f Bcmkernel.mk headers_install INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/aarch64 KERN_TARGET= make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make ARCH=arm64 -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19 KERN_TARGET= INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/aarch64 PRODUCT_NAME=be230v1 SHELL=/bin/bash PROFILE=TP6764L IPLATFORM_ROOTFS=/home/xgd22/workdir/be230v2/Iplatform/build/../image/be230v1/rootfs headers_install EXTRAVERSION= LOCALVERSION= make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' UPD include/generated/uapi/linux/version.h WRAP arch/arm64/include/generated/uapi/asm/errno.h WRAP arch/arm64/include/generated/uapi/asm/ioctl.h WRAP arch/arm64/include/generated/uapi/asm/ioctls.h WRAP arch/arm64/include/generated/uapi/asm/ipcbuf.h WRAP arch/arm64/include/generated/uapi/asm/kvm_para.h WRAP arch/arm64/include/generated/uapi/asm/mman.h WRAP arch/arm64/include/generated/uapi/asm/msgbuf.h WRAP arch/arm64/include/generated/uapi/asm/poll.h WRAP arch/arm64/include/generated/uapi/asm/resource.h WRAP arch/arm64/include/generated/uapi/asm/sembuf.h WRAP arch/arm64/include/generated/uapi/asm/shmbuf.h WRAP arch/arm64/include/generated/uapi/asm/socket.h WRAP arch/arm64/include/generated/uapi/asm/sockios.h WRAP arch/arm64/include/generated/uapi/asm/swab.h WRAP arch/arm64/include/generated/uapi/asm/termbits.h WRAP arch/arm64/include/generated/uapi/asm/termios.h WRAP arch/arm64/include/generated/uapi/asm/types.h HOSTCC scripts/unifdef INSTALL include/asm-generic (37 files) INSTALL include/drm (26 files) INSTALL include/linux (498 files) INSTALL include/linux/android (1 file) INSTALL include/linux/byteorder (2 files) INSTALL include/linux/caif (2 files) INSTALL include/linux/can (6 files) INSTALL include/linux/cifs (1 file) INSTALL include/linux/dvb (8 files) INSTALL include/linux/genwqe (1 file) INSTALL include/linux/hdlc (1 file) INSTALL include/linux/hsi (2 files) INSTALL include/linux/iio (2 files) INSTALL include/linux/isdn (1 file) INSTALL include/linux/mmc (1 file) INSTALL include/linux/netfilter (88 files) INSTALL include/linux/netfilter/ipset (4 files) INSTALL include/linux/netfilter_arp (2 files) INSTALL include/linux/netfilter_bridge (17 files) INSTALL include/linux/netfilter_ipv4 (9 files) INSTALL include/linux/netfilter_ipv6 (13 files) INSTALL include/linux/nfsd (5 files) INSTALL include/linux/raid (2 files) INSTALL include/linux/sched (1 file) INSTALL include/linux/spi (1 file) INSTALL include/linux/sunrpc (1 file) INSTALL include/linux/tc_act (15 files) INSTALL include/linux/tc_ematch (5 files) INSTALL include/linux/usb (13 files) INSTALL include/linux/wimax (1 file) INSTALL include/misc (2 files) INSTALL include/mtd (5 files) INSTALL include/rdma (25 files) INSTALL include/rdma/hfi (2 files) INSTALL include/scsi (4 files) INSTALL include/scsi/fc (4 files) INSTALL include/sound (16 files) INSTALL include/video (3 files) INSTALL include/xen (4 files) INSTALL include/asm (36 files) make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' CURRENT_KARCH=arm TOOLCHAIN_TOP= make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build -f Bcmkernel.mk headers_install INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/arm KERN_TARGET= make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make ARCH=arm -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19 KERN_TARGET= INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/arm PRODUCT_NAME=be230v1 SHELL=/bin/bash PROFILE=TP6764L IPLATFORM_ROOTFS=/home/xgd22/workdir/be230v2/Iplatform/build/../image/be230v1/rootfs headers_install EXTRAVERSION= LOCALVERSION= make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' WRAP arch/arm/include/generated/uapi/asm/bitsperlong.h WRAP arch/arm/include/generated/uapi/asm/bpf_perf_event.h WRAP arch/arm/include/generated/uapi/asm/errno.h WRAP arch/arm/include/generated/uapi/asm/ioctl.h WRAP arch/arm/include/generated/uapi/asm/ipcbuf.h WRAP arch/arm/include/generated/uapi/asm/msgbuf.h WRAP arch/arm/include/generated/uapi/asm/param.h WRAP arch/arm/include/generated/uapi/asm/poll.h WRAP arch/arm/include/generated/uapi/asm/resource.h WRAP arch/arm/include/generated/uapi/asm/sembuf.h WRAP arch/arm/include/generated/uapi/asm/shmbuf.h WRAP arch/arm/include/generated/uapi/asm/siginfo.h WRAP arch/arm/include/generated/uapi/asm/socket.h WRAP arch/arm/include/generated/uapi/asm/sockios.h WRAP arch/arm/include/generated/uapi/asm/termbits.h WRAP arch/arm/include/generated/uapi/asm/termios.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-common.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-oabi.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-eabi.h INSTALL include/asm-generic (37 files) INSTALL include/drm (26 files) INSTALL include/linux (499 files) INSTALL include/linux/android (1 file) INSTALL include/linux/byteorder (2 files) INSTALL include/linux/caif (2 files) INSTALL include/linux/can (6 files) INSTALL include/linux/cifs (1 file) INSTALL include/linux/dvb (8 files) INSTALL include/linux/genwqe (1 file) INSTALL include/linux/hdlc (1 file) INSTALL include/linux/hsi (2 files) INSTALL include/linux/iio (2 files) INSTALL include/linux/isdn (1 file) INSTALL include/linux/mmc (1 file) INSTALL include/linux/netfilter (88 files) INSTALL include/linux/netfilter/ipset (4 files) INSTALL include/linux/netfilter_arp (2 files) INSTALL include/linux/netfilter_bridge (17 files) INSTALL include/linux/netfilter_ipv4 (9 files) INSTALL include/linux/netfilter_ipv6 (13 files) INSTALL include/linux/nfsd (5 files) INSTALL include/linux/raid (2 files) INSTALL include/linux/sched (1 file) INSTALL include/linux/spi (1 file) INSTALL include/linux/sunrpc (1 file) INSTALL include/linux/tc_act (15 files) INSTALL include/linux/tc_ematch (5 files) INSTALL include/linux/usb (13 files) INSTALL include/linux/wimax (1 file) INSTALL include/misc (2 files) INSTALL include/mtd (5 files) INSTALL include/rdma (25 files) INSTALL include/rdma/hfi (2 files) INSTALL include/scsi (4 files) INSTALL include/scsi/fc (4 files) INSTALL include/sound (16 files) INSTALL include/video (3 files) INSTALL include/xen (4 files) INSTALL include/asm (38 files) make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' CURRENT_KARCH=aarch64 TOOLCHAIN_TOP= make -f build/Bcmkernel.mk bcm_headers_install KERN_TARGET= make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' echo "======================================================" ====================================================== make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers bcm_headers_install EXTRAVERSION= LOCALVERSION= make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers' READING AG MAKEFILE LN_RULE_AG (NAME=CONFIG_BCM_BCA_LED,VAL=y,DIR=opensource/misc/bca_led_ctrl,IMPL=1) CONFIG_BCM_BCA_LED_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_LEGACY_LED_API,VAL=y,DIR=opensource/misc/bca_legacy_led,IMPL=1) CONFIG_BCM_BCA_LEGACY_LED_API_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PMC,VAL=y,DIR=opensource/misc/pmc,IMPL=1) CONFIG_BCM_PMC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_ARM_CPUIDLE,VAL=y,DIR=opensource/misc/cpuidle,IMPL=1) CONFIG_BCM_ARM_CPUIDLE_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_VREG_SYNC,VAL=y,DIR=opensource/misc/vregsync,IMPL=1) CONFIG_BCM_BCA_VREG_SYNC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_STRAP,VAL=y,DIR=opensource/misc/strap,IMPL=1) CONFIG_BCM_STRAP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_DGASP_DRV,VAL=y,DIR=opensource/misc/dgasp,IMPL=1) CONFIG_BCM_DGASP_DRV_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BUTTON,VAL=y,DIR=opensource/misc/button,IMPL=1) CONFIG_BCM_BUTTON_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_SFP,VAL=y,DIR=opensource/misc/bcmsfp,IMPL=1) CONFIG_BCM_SFP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_UBUS,VAL=y,DIR=opensource/misc/ubus,IMPL=1) CONFIG_BCM_UBUS_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_THERMAL,VAL=m,DIR=opensource/misc/thermal,IMPL=1) CONFIG_BCM_THERMAL_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_COMMON_CLK,VAL=y,DIR=opensource/misc/clk,IMPL=1) CONFIG_BCM_COMMON_CLK_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_RESET_BUTTON,VAL=y,DIR=opensource/misc/reset_button,IMPL=1) CONFIG_BCM_RESET_BUTTON_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_EXTINTR,VAL=y,DIR=opensource/misc/bca_extintr,IMPL=1) CONFIG_BCM_BCA_EXTINTR_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_OTP_DRV,VAL=y,DIR=opensource/misc/otp,IMPL=1) CONFIG_BCM_OTP_DRV_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_GPIO,VAL=y,DIR=opensource/misc/bca_gpio,IMPL=1) CONFIG_BCM_BCA_GPIO_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_PINCTRL,VAL=y,DIR=opensource/misc/bca_pinctrl,IMPL=1) CONFIG_BCM_BCA_PINCTRL_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_MEMC,VAL=y,DIR=opensource/misc/memc,IMPL=1) CONFIG_BCM_MEMC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCAP,VAL=m,DIR=opensource/char/pcap,IMPL=1) CONFIG_BCM_PCAP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCM,VAL=y,DIR=opensource/char/pcm,IMPL=1) CONFIG_BCM_PCM_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_MCAST,VAL=m,DIR=opensource/char/mcast,IMPL=1) CONFIG_BCM_MCAST_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_LIBS,VAL=m,DIR=opensource/char/bcmlibs,IMPL=1) CONFIG_BCM_LIBS_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BOOTSTATE,VAL=y,DIR=opensource/char/bcm_bootstate,IMPL=1) CONFIG_BCM_BOOTSTATE_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_OPTICALDET,VAL=y,DIR=opensource/char/opticaldet,IMPL=2) CONFIG_BCM_OPTICALDET_IMPL=2 LN_RULE_AG (NAME=CONFIG_BCM_BCA_USB,VAL=m,DIR=opensource/bus/usb,IMPL=1) CONFIG_BCM_BCA_USB_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCIE_HCD,VAL=m,DIR=opensource/bus/pci/host,IMPL=1) CONFIG_BCM_PCIE_HCD_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_ENET,VAL=m,DIR=opensource/net/enet,IMPL=7) CONFIG_BCM_ENET_IMPL=7 Installing bcm_headers mkdir -p /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/include/bcm963xx/* /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/opensource/include/bcm963xx/* /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ for i in `egrep -l '^bcm_headers_install:' /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/*/*/*/bcm96765/Makefile` ; \ do make -C `dirname $i` -f $i bcm_headers_install INC_BCMDRIVER_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers/ ; \ done make[6]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/opensource/char/bcm_knvram/impl1' echo BCMLIBS installing header BCMLIBS installing header echo cp -u -f --no-preserve=mode --preserve=timestamps -r ./include/wl_common_defs.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r ./include/wl_common_defs.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r ./include/wl_common_defs.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ make[6]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/opensource/char/bcm_knvram/impl1' make[6]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/opensource/char/bcmlibs/impl1' echo BCMLIBS installing header BCMLIBS installing header echo cp -u -f --no-preserve=mode --preserve=timestamps -r ../include/* /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r ../include/bcm_bitmap_pool_utils.h ../include/bcm_bitmap_utils.h ../include/idx_pool_util.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r ../include/* /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ make[6]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/opensource/char/bcmlibs/impl1' make[6]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/opensource/misc/otp/impl1' echo BCMLIBS installing header BCMLIBS installing header echo cp -u -f --no-preserve=mode --preserve=timestamps -r ./*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r ./bcm_otp_v1_map.h ./bcm_otp_v2_map.h ./bcm_otp_v2p5_map.h ./bcm_otp_v3_map.h ./otp_ioctl.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ cp -u -f --no-preserve=mode --preserve=timestamps -r ./*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/bcmdrivers//include/ make[6]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/opensource/misc/otp/impl1' make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' ln -s -f -T /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/include/uapi /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcm_local_kernel_include ln -s -f -T /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/arch/arm/include/uapi /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcm_local_kernel_arm_include default: make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' READING AG MAKEFILE LN_RULE_AG (NAME=CONFIG_BCM_BCA_LED,VAL=y,DIR=opensource/misc/bca_led_ctrl,IMPL=1) CONFIG_BCM_BCA_LED_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_LEGACY_LED_API,VAL=y,DIR=opensource/misc/bca_legacy_led,IMPL=1) CONFIG_BCM_BCA_LEGACY_LED_API_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PMC,VAL=y,DIR=opensource/misc/pmc,IMPL=1) CONFIG_BCM_PMC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_ARM_CPUIDLE,VAL=y,DIR=opensource/misc/cpuidle,IMPL=1) CONFIG_BCM_ARM_CPUIDLE_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_VREG_SYNC,VAL=y,DIR=opensource/misc/vregsync,IMPL=1) CONFIG_BCM_BCA_VREG_SYNC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_STRAP,VAL=y,DIR=opensource/misc/strap,IMPL=1) CONFIG_BCM_STRAP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_DGASP_DRV,VAL=y,DIR=opensource/misc/dgasp,IMPL=1) CONFIG_BCM_DGASP_DRV_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BUTTON,VAL=y,DIR=opensource/misc/button,IMPL=1) CONFIG_BCM_BUTTON_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_SFP,VAL=y,DIR=opensource/misc/bcmsfp,IMPL=1) CONFIG_BCM_SFP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_UBUS,VAL=y,DIR=opensource/misc/ubus,IMPL=1) CONFIG_BCM_UBUS_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_THERMAL,VAL=m,DIR=opensource/misc/thermal,IMPL=1) CONFIG_BCM_THERMAL_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_COMMON_CLK,VAL=y,DIR=opensource/misc/clk,IMPL=1) CONFIG_BCM_COMMON_CLK_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_RESET_BUTTON,VAL=y,DIR=opensource/misc/reset_button,IMPL=1) CONFIG_BCM_RESET_BUTTON_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_EXTINTR,VAL=y,DIR=opensource/misc/bca_extintr,IMPL=1) CONFIG_BCM_BCA_EXTINTR_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_OTP_DRV,VAL=y,DIR=opensource/misc/otp,IMPL=1) CONFIG_BCM_OTP_DRV_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_GPIO,VAL=y,DIR=opensource/misc/bca_gpio,IMPL=1) CONFIG_BCM_BCA_GPIO_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BCA_PINCTRL,VAL=y,DIR=opensource/misc/bca_pinctrl,IMPL=1) CONFIG_BCM_BCA_PINCTRL_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_MEMC,VAL=y,DIR=opensource/misc/memc,IMPL=1) CONFIG_BCM_MEMC_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCAP,VAL=m,DIR=opensource/char/pcap,IMPL=1) CONFIG_BCM_PCAP_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCM,VAL=y,DIR=opensource/char/pcm,IMPL=1) CONFIG_BCM_PCM_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_MCAST,VAL=m,DIR=opensource/char/mcast,IMPL=1) CONFIG_BCM_MCAST_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_LIBS,VAL=m,DIR=opensource/char/bcmlibs,IMPL=1) CONFIG_BCM_LIBS_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_BOOTSTATE,VAL=y,DIR=opensource/char/bcm_bootstate,IMPL=1) CONFIG_BCM_BOOTSTATE_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_OPTICALDET,VAL=y,DIR=opensource/char/opticaldet,IMPL=2) CONFIG_BCM_OPTICALDET_IMPL=2 LN_RULE_AG (NAME=CONFIG_BCM_BCA_USB,VAL=m,DIR=opensource/bus/usb,IMPL=1) CONFIG_BCM_BCA_USB_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_PCIE_HCD,VAL=m,DIR=opensource/bus/pci/host,IMPL=1) CONFIG_BCM_PCIE_HCD_IMPL=1 LN_RULE_AG (NAME=CONFIG_BCM_ENET,VAL=m,DIR=opensource/net/enet,IMPL=7) CONFIG_BCM_ENET_IMPL=7 done bcmdriver links grep: /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/net/wl/bcm96764L/main/components/router/Makefile.fw: No such file or directory check_prebuilt: BRCM_CHIP=6764L PROFILE_ARCH=armsfp PROFILE_KARCH=aarch64 WLTEST= BUILD_HND_MFG= BUILD_BCM_WLAN_NO_MFGBIN=y wl: make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' CURRENT_KARCH=aarch64 TOOLCHAIN_TOP= make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build -f Bcmkernel.mk bcmkernel_headers_install INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/aarch64 KERN_TARGET= make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make ARCH=arm64 -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19 KERN_TARGET= INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/aarch64 PRODUCT_NAME=be230v1 SHELL=/bin/bash PROFILE=TP6764L IPLATFORM_ROOTFS=/home/xgd22/workdir/be230v2/Iplatform/build/../image/be230v1/rootfs bcmkernel_headers_install EXTRAVERSION= LOCALVERSION= make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' Install bcmkernel/include/uapi headers cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcmkernel/include/uapi/linux/*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/aarch64/include/linux/ cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcmkernel/include/uapi/linux/netfilter/*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/aarch64/include/linux/netfilter/ cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcmkernel/include/uapi/linux/netfilter_bridge/*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/aarch64/include/linux/netfilter_bridge/ make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' CURRENT_KARCH=arm TOOLCHAIN_TOP= make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build -f Bcmkernel.mk bcmkernel_headers_install INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/arm KERN_TARGET= make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make ARCH=arm -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19 KERN_TARGET= INSTALL_HDR_PATH=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/arm PRODUCT_NAME=be230v1 SHELL=/bin/bash PROFILE=TP6764L IPLATFORM_ROOTFS=/home/xgd22/workdir/be230v2/Iplatform/build/../image/be230v1/rootfs bcmkernel_headers_install EXTRAVERSION= LOCALVERSION= make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' Install bcmkernel/include/uapi headers cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcmkernel/include/uapi/linux/*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/arm/include/linux/ cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcmkernel/include/uapi/linux/netfilter/*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/arm/include/linux/netfilter/ cp -u -f --no-preserve=mode --preserve=timestamps -r /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/bcmkernel/include/uapi/linux/netfilter_bridge/*.h /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/fs.build/kernel/arm/include/linux/netfilter_bridge/ make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/build' make -C /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/net/wl/bcm96765 PROFILE_FILE=/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/targets/TP6764L/TP6764L version make[4]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/net/wl/impl103' grep: /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/net/wl/bcm96764L/main/components/router/Makefile.fw: No such file or directory make -C main/components/router oldconfig make[5]: Entering directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/net/wl/impl103' make[5]: *** main/components/router: No such file or directory. Stop. make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/net/wl/impl103' Makefile:102: recipe for target 'oldconfig' failed make[4]: *** [oldconfig] Error 2 make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bcmdrivers/broadcom/net/wl/impl103' build/Makefile:825: recipe for target 'hnd_dongle' failed make[3]: *** [hnd_dongle] Error 2 make[3]: *** Waiting for unfinished jobs.... Building bcm CC lib/libfdt/fdt.c CC lib/libfdt/fdt_addresses.c CC lib/libfdt/fdt_empty_tree.c CC lib/libfdt/fdt_ro.c CC lib/libfdt/fdt_rw.c CC lib/libfdt/fdt_strerror.c CC lib/libfdt/fdt_sw.c CC lib/libfdt/fdt_wip.c CC lib/libc/abort.c CC lib/libc/assert.c CC lib/libc/exit.c CC lib/libc/memchr.c CC lib/libc/memcmp.c CC lib/libc/memcpy.c CC lib/libc/memmove.c CC lib/libc/memrchr.c CC lib/libc/memset.c CC lib/libc/printf.c CC lib/libc/putchar.c CC lib/libc/puts.c CC lib/libc/snprintf.c CC lib/libc/strchr.c CC lib/libc/strcmp.c CC lib/libc/strlcat.c CC lib/libc/strlcpy.c CC lib/libc/strlen.c CC lib/libc/strncmp.c CC lib/libc/strnlen.c CC lib/libc/strrchr.c CC lib/libc/strtok.c CC lib/libc/strtoul.c CC lib/libc/strtoll.c CC lib/libc/strtoull.c CC lib/libc/strtol.c AS lib/libc/aarch64/setjmp.S CC bl31/bl31_context_mgmt.c CC bl31/bl31_main.c CC bl31/interrupt_mgmt.c CC common/runtime_svc.c CC drivers/arm/gic/v2/gicdv2_helpers.c CC drivers/arm/gic/v2/gicv2_helpers.c CC drivers/arm/gic/v2/gicv2_main.c CC drivers/delay_timer/delay_timer.c CC drivers/delay_timer/generic_delay_timer.c CC lib/cpus/errata_report.c CC lib/el3_runtime/aarch64/context_mgmt.c CC lib/el3_runtime/cpu_data_array.c CC lib/extensions/spe/spe.c CC lib/extensions/sve/sve.c CC lib/locks/bakery/bakery_lock_coherent.c CC lib/psci/psci_common.c CC lib/psci/psci_main.c CC lib/psci/psci_mem_protect.c CC lib/psci/psci_off.c CC lib/psci/psci_on.c CC lib/psci/psci_setup.c CC lib/psci/psci_suspend.c CC lib/psci/psci_system_off.c CC lib/xlat_tables/aarch64/xlat_tables.c CC lib/xlat_tables/xlat_tables_common.c CC plat/arm/common/arm_common.c CC plat/bcm/bcm_gic.c CC plat/bcm/brcm_bl31_setup.c CC plat/bcm/drivers/pmc_cpu_core.c CC plat/bcm/drivers/pmc_drv.c CC plat/bcm/topology.c CC plat/common/plat_psci_common.c CC services/arm_arch_svc/arm_arch_svc_setup.c CC services/std_svc/std_svc_setup.c CC common/bl_common.c CC common/tf_log.c CC drivers/console/multi_console.c CC plat/common/plat_bl_common.c CC plat/common/plat_log_common.c CC plat/common/aarch64/plat_common.c CC lib/compiler-rt/builtins/popcountdi2.c CC lib/compiler-rt/builtins/popcountsi2.c CC plat/bcm/brcm_pm.c AS bl31/aarch64/bl31_entrypoint.S AS bl31/aarch64/crash_reporting.S AS bl31/aarch64/ea_delegate.S AS bl31/aarch64/runtime_exceptions.S AS lib/cpus/aarch64/cortex_a53.S AS lib/cpus/aarch64/dsu_helpers.S AS lib/cpus/aarch64/cpu_helpers.S AS lib/cpus/aarch64/runtime_errata.S AS lib/cpus/aarch64/wa_cve_2017_5715_bpiall.S AS lib/cpus/aarch64/wa_cve_2017_5715_mmu.S AS lib/el3_runtime/aarch64/context.S AS lib/el3_runtime/aarch64/cpu_data.S AS lib/locks/exclusive/aarch64/spinlock.S AS lib/psci/aarch64/psci_helpers.S AS plat/bcm/aarch64/plat_helpers.S AS plat/common/aarch64/platform_mp_stack.S AS common/aarch64/debug.S AS lib/aarch64/cache_helpers.S AS lib/aarch64/misc_helpers.S AS plat/common/aarch64/platform_helpers.S AS drivers/arm/pl011/aarch64/pl011_console.S PP bl31/bl31.ld.S AR /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8/build/bcm/release/lib/libfdt.a AR /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8/build/bcm/release/lib/libc.a LD /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8/build/bcm/release/bl31/bl31.elf BIN /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8/build/bcm/release/bl31.bin OD /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8/build/bcm/release/bl31/bl31.dump Built /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8/build/bcm/release/bl31.bin successfully make[5]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/arm-trusted-firmware-2.8' make[4]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf' echo "Compressing ARM Trusted Firmware using lzma" Compressing ARM Trusted Firmware using lzma /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/cmplzma -k -2 -lzma /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/armtf.elf /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/armtf.bin /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/armtf.lz using LZMA compression Code text starts: textAddr=0x00000000 Program entry point: 0x00004000, /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/hostTools/lzmacmd e /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/armtf.bin /home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04/bootloaders/armtf/armtf.bin.lzma.tmp -d22 -lp2 -lc1 LZMA 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Before compression: 45145 After compression (level=2): 12279 Percent Compression = 72.80 make[3]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' build/Makefile:34: recipe for target 'all' failed make[2]: *** [all] Error 2 make[2]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' Makefile:18: recipe for target 'default' failed make[1]: *** [default] Error 2 make[1]: Leaving directory '/home/xgd22/workdir/be230v2/bcm504L04/bcm963xx_5.04L.04' /home/xgd22/workdir/be230v2/Iplatform/build/product_configs/be230v1/product.mk:452: recipe for target 'sdk_all' failed make: *** [sdk_all] Error 2检查一下这段是什么问题导致的编译错误
09-23
// SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2021, Intel Corporation. #include <linux/bitfield.h> #include <linux/crc8.h> #include <linux/dma-mapping.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/mfd/syscon.h> #include <linux/miscdevice.h> #include <linux/module.h> #include <linux/of_address.h> #include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/poll.h> #include <linux/regmap.h> #include <uapi/linux/aspeed-espi-mmbi.h> #include <dt-bindings/mmbi/protocols.h> #define DEVICE_NAME "mmbi" #define MAX_NO_OF_SUPPORTED_CHANNELS 8 #define MAX_NO_OF_SUPPORTED_PROTOCOLS 5 /* 20 Bits for H2B/B2H Write/Read Pointers */ #define H2B_WRITE_POINTER_MASK GENMASK(19, 0) #define B2H_READ_POINTER_MASK GENMASK(19, 0) #define MMBI_HDR_LENGTH_MASK GENMASK(23, 0) #define MMBI_HDR_TYPE_MASK GENMASK(31, 24) #define HOST_RESET_REQUEST_BIT BIT(31) #define HOST_READY_BIT BIT(31) #define ESPI_SCI_STATUS_BIT BIT(24) #define GET_H2B_WRITE_POINTER(x) ((x) & H2B_WRITE_POINTER_MASK) #define GET_B2H_READ_POINTER(x) ((x) & B2H_READ_POINTER_MASK) #define GET_HOST_RESET_REQ_BIT(x) ((x) & HOST_RESET_REQUEST_BIT) #define GET_HOST_READY_BIT(x) ((x) & HOST_READY_BIT) #define HOST_READ_SCI_STATUS_BIT(x) ((x) & ESPI_SCI_STATUS_BIT) #define MMBI_CRC8_POLYNOMIAL 0x07 DECLARE_CRC8_TABLE(mmbi_crc8_table); typedef u8 protocol_type; struct host_rop { unsigned int b2h_wp : 20; /* Offset where BMC can write next data in B2H */ unsigned int reserved1 : 11; unsigned int b_rdy : 1; /* BMC ready bit */ unsigned int h2b_rp : 20; /* Offset till where bmc read data in H2B */ unsigned int reserved2 : 11; unsigned int b_rst : 1; /* BMC reset request bit */ }; struct host_rwp { unsigned int h2b_wp : 20; /* Offset where HOST can write next data in H2B */ unsigned int reserved1 : 11; unsigned int h_rdy : 1; /* Host ready bit */ unsigned int b2h_rp : 20; /* Offset till where host read data in B2H */ unsigned int reserved2 : 11; unsigned int h_rst : 1; /* host reset request bit */ }; struct buffer_type_desc { u32 host_rop_p; u32 host_rwp_p; u8 msg_protocol_type; u8 host_int_type; u16 global_sys_interrupt; u8 bmc_int_type; u32 bmc_int_a; u8 bmc_int_v; } __packed; struct mmbi_cap_desc { u8 signature[6]; u8 version; u8 instance_num; u32 nex_inst_base_addr; u32 b2h_ba; /* B2H buffer base offset (i.e 0x48) */ u32 h2b_ba; /* H2B buffer base offset (i.e 0x08) */ u16 b2h_d; /* Multiple of 16 Bytes (Max 1MB) */ u16 h2b_d; /* multiples of 16 bytes (Max 1MB) */ u8 buffer_type; /* Type of buffer in B2H/H2B */ u8 reserved1[7]; struct buffer_type_desc bt_desc; /* 18 bytes */ u8 reserved2[13]; u8 crc8; /* CRC-8-CCITT of the whole data structure (bytes 0 to 62) */ } __packed; struct mmbi_header { u32 data; }; struct aspeed_mmbi_protocol { struct miscdevice miscdev; struct aspeed_mmbi_channel *chan_ref; protocol_type type; bool data_available; /* * If user space application is opened for read, then only process * the data and copy to userspace. Otherwise, discard the command and * process the remaining commands (can be different protocol type) */ bool process_data; wait_queue_head_t queue; }; struct aspeed_mmbi_channel { struct aspeed_mmbi_protocol protocol[MAX_NO_OF_SUPPORTED_PROTOCOLS]; struct aspeed_espi_mmbi *priv; u8 chan_num; u8 supported_protocols[MAX_NO_OF_SUPPORTED_PROTOCOLS]; u32 b2h_cb_size; u32 h2b_cb_size; u8 *desc_vmem; u8 *hrop_vmem; u8 *b2h_cb_vmem; u8 *hrwp_vmem; u8 *h2b_cb_vmem; bool enabled; }; struct aspeed_espi_mmbi { struct regmap *map; struct regmap *pmap; struct regmap *lpc_map; struct device *dev; int irq; phys_addr_t host_map_addr; dma_addr_t mmbi_phys_addr; resource_size_t mmbi_size; u8 *dma_vaddr; struct aspeed_mmbi_channel chan[MAX_NO_OF_SUPPORTED_CHANNELS]; }; static const struct regmap_config aspeed_espi_mmbi_regmap_cfg = { .reg_bits = 32, .reg_stride = 4, .val_bits = 32, .max_register = 0x04C, }; static void raise_sci_interrupt(struct aspeed_mmbi_channel *channel) { u32 val; int retry; struct regmap *lpc_regmap = channel->priv->lpc_map; dev_dbg(channel->priv->dev, "Raising SCI interrupt...\n"); regmap_write_bits(lpc_regmap, AST_LPC_ACPIB7B4, LPC_BMC_TRIG_SCI_EVT_EN, LPC_BMC_TRIG_SCI_EVT_EN); regmap_write_bits(lpc_regmap, AST_LPC_SWCR0704, LPC_BMC_TRIG_WAKEUP_EVT_EN, LPC_BMC_TRIG_WAKEUP_EVT_EN); regmap_write_bits(lpc_regmap, AST_LPC_SWCR0B08, LPC_BMC_TRIG_WAKEUP_EVT, LPC_BMC_TRIG_WAKEUP_EVT); /* * Just asserting the SCI VW will trigger the SCI event continuosly. * So BMC must deassert SCI VW to avoid it. * ESPI098[24] reading will confirm Host read data or not. * - 0 means host read the data * - 1 means host not yet read data, so retry with 1us delay. */ retry = 30; while (retry) { if (regmap_read(channel->priv->pmap, ASPEED_ESPI_SYS_EVENT, &val)) { dev_err(channel->priv->dev, "Unable to read ESPI098\n"); break; } if (HOST_READ_SCI_STATUS_BIT(val) == 0) break; retry--; dev_dbg(channel->priv->dev, "Host SCI handler not invoked(ESPI098: 0x%0x), so retry(%d) after 1us...\n", val, retry); udelay(1); } regmap_write_bits(lpc_regmap, AST_LPC_SWCR0300, LPC_BMC_TRIG_WAKEUP_EVT_STS, LPC_BMC_TRIG_WAKEUP_EVT_STS); regmap_write_bits(lpc_regmap, AST_LPC_ACPIB3B0, LPC_BMC_TRIG_SCI_EVT_STS, LPC_BMC_TRIG_SCI_EVT_STS); } static int read_host_rwp_val(struct aspeed_mmbi_channel *channel, u32 reg, u32 *val) { int rc; rc = regmap_read(channel->priv->map, reg, val); if (rc) { dev_err(channel->priv->dev, "Unable to read Host RWP pointer\n"); return rc; } return 0; } static int get_b2h_avail_buf_len(struct aspeed_mmbi_channel *channel, ssize_t *avail_buf_len) { struct host_rop hrop; u32 b2h_rp, h_rwp1; if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP1_INSTANCE0, &h_rwp1)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return -EAGAIN; } b2h_rp = GET_B2H_READ_POINTER(h_rwp1); dev_dbg(channel->priv->dev, "MMBI HRWP - b2h_rp: 0x%0x\n", b2h_rp); memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); dev_dbg(channel->priv->dev, "HROP - b2h_wp: 0x%0x, h2b_rp: 0x%0x", hrop.b2h_wp, hrop.h2b_rp); if (hrop.b2h_wp >= b2h_rp) *avail_buf_len = channel->b2h_cb_size - hrop.b2h_wp + b2h_rp; else *avail_buf_len = b2h_rp - hrop.b2h_wp; return 0; } static int get_mmbi_header(struct aspeed_mmbi_channel *channel, u32 *data_length, u8 *type, u32 *unread_data_len) { u32 h2b_wp, b2h_rp, h_rwp0, h_rwp1; struct mmbi_header header; struct host_rop hrop; memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); dev_dbg(channel->priv->dev, "MMBI HROP - b2h_wp: 0x%0x, h2b_rp: 0x%0x\n", hrop.b2h_wp, hrop.h2b_rp); if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP0_INSTANCE0, &h_rwp0)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return -EAGAIN; } if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP1_INSTANCE0, &h_rwp1)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return -EAGAIN; } h2b_wp = GET_H2B_WRITE_POINTER(h_rwp0); b2h_rp = GET_B2H_READ_POINTER(h_rwp1); dev_dbg(channel->priv->dev, "MMBI HRWP - h2b_wp: 0x%0x, b2h_rp: 0x%0x\n", h2b_wp, b2h_rp); if (h2b_wp >= hrop.h2b_rp) *unread_data_len = h2b_wp - hrop.h2b_rp; else *unread_data_len = channel->h2b_cb_size - hrop.h2b_rp + h2b_wp; if (*unread_data_len < sizeof(struct mmbi_header)) { dev_dbg(channel->priv->dev, "No data to read(%d -%d)\n", h2b_wp, hrop.h2b_rp); return -EAGAIN; } dev_dbg(channel->priv->dev, "READ MMBI header from: 0x%0x\n", (u32)(channel->h2b_cb_vmem + hrop.h2b_rp)); /* Extract MMBI protocol - protocol type and length */ if ((hrop.h2b_rp + sizeof(header)) <= channel->h2b_cb_size) { memcpy(&header, channel->h2b_cb_vmem + hrop.h2b_rp, sizeof(header)); } else { ssize_t chunk_len = channel->h2b_cb_size - hrop.h2b_rp; memcpy(&header, channel->h2b_cb_vmem + hrop.h2b_rp, chunk_len); memcpy(((u8 *)&header) + chunk_len, channel->h2b_cb_vmem, sizeof(header) - chunk_len); } *data_length = FIELD_GET(MMBI_HDR_LENGTH_MASK, header.data); *type = FIELD_GET(MMBI_HDR_TYPE_MASK, header.data); return 0; } static void raise_missing_sci(struct aspeed_mmbi_channel *channel) { struct host_rop hrop; u32 h_rwp0, h_rwp1, b2h_rptr; /* Rise SCI only if Host is READY (h_rdy is 1). */ if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP0_INSTANCE0, &h_rwp0)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return; } if (!GET_HOST_READY_BIT(h_rwp0)) { // Host is not ready, no point in raising the SCI return; } memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP1_INSTANCE0, &h_rwp1)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return; } b2h_rptr = GET_B2H_READ_POINTER(h_rwp1); if (hrop.b2h_wp == b2h_rptr) { // Host has read all outstanding SCI data, // Do not raise another SCI. return; } dev_dbg(channel->priv->dev, "Host not read the data yet, so rising SCI interrupt again...\n"); raise_sci_interrupt(channel); } static void update_host_rop(struct aspeed_mmbi_channel *channel, unsigned int w_len, unsigned int r_len) { struct host_rop hrop; memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); dev_dbg(channel->priv->dev, "MMBI HROP - b2h_wp: 0x%0x, h2b_rp: 0x%0x\n", hrop.b2h_wp, hrop.h2b_rp); /* Advance the B2H CB offset for next write */ if ((hrop.b2h_wp + w_len) <= channel->b2h_cb_size) hrop.b2h_wp += w_len; else hrop.b2h_wp = hrop.b2h_wp + w_len - channel->b2h_cb_size; /* Advance the H2B CB offset till where BMC read data */ if ((hrop.h2b_rp + r_len) <= channel->h2b_cb_size) hrop.h2b_rp += r_len; else hrop.h2b_rp = hrop.h2b_rp + r_len - channel->h2b_cb_size; /* * Clear BMC reset request state its set: * Set BMC reset request bit to 0 * Set BMC ready bit to 1 */ if (hrop.b_rst) { dev_dbg(channel->priv->dev, "Clearing BMC reset request state\n"); hrop.b_rst = 0; hrop.b_rdy = 1; } dev_dbg(channel->priv->dev, "Updating HROP - h2b_rp: 0x%0x, b2h_wp: 0x%0x\n", hrop.h2b_rp, hrop.b2h_wp); memcpy(channel->hrop_vmem, &hrop, sizeof(hrop)); /* * Raise SCI interrupt only if B2H buffer is updated * Don't raise SCI, after BMC read the H2B buffer */ if (w_len != 0) raise_sci_interrupt(channel); } static int send_bmc_reset_request(struct aspeed_mmbi_channel *channel) { struct host_rop hrop; memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); /* * Send MMBI buffer reset request: First BMC should clear its own * pointers, set Reset bit and reset BMC ready bit. * B2H Write pointer - must be set to zero * H2B read pointer - must be set to zero * BMC ready bit - Set to 0 * BMC reset bit - Set to 1 */ hrop.b2h_wp = 0; hrop.h2b_rp = 0; hrop.b_rdy = 0; hrop.b_rst = 1; dev_info(channel->priv->dev, "Send BMC reset request on MMBI channel(%d)\n", channel->chan_num); memcpy(channel->hrop_vmem, &hrop, sizeof(hrop)); /* Raise SCI interrupt */ raise_sci_interrupt(channel); return 0; } void check_host_reset_request(struct aspeed_mmbi_channel *channel) { struct host_rop hrop; u32 h_rwp1; if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP1_INSTANCE0, &h_rwp1)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return; } /* If its not host reset request, just discard */ if (!GET_HOST_RESET_REQ_BIT(h_rwp1)) return; /* Host requested for MMBI buffer reset */ memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); /* * When host request for reset MMBI buffer: * B2H Write pointer - must be set to zero * H2B read pointer - must be set to zero * BMC ready bit - No change (Set to 1) * BMC reset bit - No change (Set to 0) */ hrop.b2h_wp = 0; hrop.h2b_rp = 0; dev_info(channel->priv->dev, "Handle Host reset request on MMBI channel(%d)\n", channel->chan_num); memcpy(channel->hrop_vmem, &hrop, sizeof(hrop)); } void wake_up_device(struct aspeed_mmbi_channel *channel) { u32 req_data_len, unread_data_len; u8 type; int i; if (0 != get_mmbi_header(channel, &req_data_len, &type, &unread_data_len)) { /* Bail out as we can't read header */ return; } dev_dbg(channel->priv->dev, "%s: Length: 0x%0x, Protocol Type: %d\n", __func__, req_data_len, type); for (i = 0; channel->supported_protocols[i] != 0; i++) { if (type == channel->supported_protocols[i]) { /* * MMBI supports multiple protocols on each channel * If userspace application is not opened the device * for read /write the data, discard the data and * advance the HROP for processing next command. */ if (channel->protocol[i].process_data) { channel->protocol[i].data_available = true; wake_up(&channel->protocol[i].queue); } else { /* Discard data and advance the hrop */ update_host_rop(channel, 0, req_data_len + sizeof(struct mmbi_header)); } /* * Raise the missing SCI's by checking pointer for host * read acknowledgment. This will work around the Missing * SCI bug on host side. */ dev_warn(channel->priv->dev, "%s: Check and raise missing SCI\n", __func__); raise_missing_sci(channel); } } } static struct aspeed_mmbi_protocol *file_aspeed_espi_mmbi(struct file *file) { return container_of(file->private_data, struct aspeed_mmbi_protocol, miscdev); } static int mmbi_open(struct inode *inode, struct file *filp) { return 0; } static int mmbi_release(struct inode *inode, struct file *filp) { return 0; } static unsigned int mmbi_poll(struct file *filp, poll_table *wait) { struct aspeed_mmbi_protocol *protocol = file_aspeed_espi_mmbi(filp); poll_wait(filp, &protocol->queue, wait); return protocol->data_available ? POLLIN : 0; } static ssize_t mmbi_read(struct file *filp, char *buff, size_t count, loff_t *offp) { struct aspeed_mmbi_protocol *protocol = file_aspeed_espi_mmbi(filp); struct aspeed_mmbi_channel *channel = protocol->chan_ref; struct aspeed_espi_mmbi *priv = channel->priv; struct host_rop hrop; ssize_t rd_offset, rd_len; ssize_t ret; u32 unread_data_len, req_data_len; u8 type; protocol->process_data = true; if (!protocol->data_available && (filp->f_flags & O_NONBLOCK)) { // Work around: The lack of response might be cause by missing SCI // (host didn't consume the last message), check the buffer state // and retry if it's needed raise_missing_sci(channel); return -EAGAIN; } dev_dbg(priv->dev, "%s: count:%d, Type: %d\n", __func__, count, protocol->type); ret = wait_event_interruptible(protocol->queue, protocol->data_available); if (ret == -ERESTARTSYS) { ret = -EINTR; goto err_out; } ret = get_mmbi_header(channel, &req_data_len, &type, &unread_data_len); if (ret != 0) { /* Bail out as we can't read header. */ goto err_out; } dev_dbg(priv->dev, "%s: Length: 0x%0x, Protocol Type: %d, Unread data: %d\n", __func__, req_data_len, type, unread_data_len); if (req_data_len > count) { dev_err(priv->dev, "Data exceeding user space limit: %d\n", count); ret = -EFAULT; /* Discard data and advance the hrop */ update_host_rop(channel, 0, req_data_len + sizeof(struct mmbi_header)); goto err_out; } /* Check is data belongs to this device, if not wake_up corresponding device. */ if (type != protocol->type) { ret = -EFAULT; goto err_out; } memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); if ((hrop.h2b_rp + sizeof(struct mmbi_header)) <= channel->h2b_cb_size) { rd_offset = hrop.h2b_rp + sizeof(struct mmbi_header); } else { rd_offset = hrop.h2b_rp + sizeof(struct mmbi_header) - channel->h2b_cb_size; } rd_len = req_data_len; /* Extract data and copy to user space application */ dev_dbg(priv->dev, "READ MMBI Data from: 0x%0x and length: %d\n", (u32)(channel->h2b_cb_vmem + rd_offset), rd_len); if (unread_data_len < sizeof(struct mmbi_header) + rd_len) { dev_err(priv->dev, "Invalid H2B buffer (Read msg length: %d)\n", rd_len); ret = -EFAULT; goto err_out; } if ((channel->h2b_cb_size - rd_offset) >= rd_len) { if (copy_to_user(buff, channel->h2b_cb_vmem + rd_offset, rd_len)) { dev_err(priv->dev, "Failed to copy data to user space\n"); ret = -EFAULT; goto err_out; } rd_offset += rd_len; } else { ssize_t chunk_len; chunk_len = channel->h2b_cb_size - rd_offset; if (copy_to_user(buff, channel->h2b_cb_vmem + rd_offset, chunk_len)) { dev_err(priv->dev, "Failed to copy data to user space\n"); ret = -EFAULT; goto err_out; } rd_offset = 0; if (copy_to_user(buff + chunk_len, channel->h2b_cb_vmem + rd_offset, rd_len - chunk_len)) { dev_err(priv->dev, "Failed to copy data to user space\n"); ret = -EFAULT; goto err_out; } rd_offset += (rd_len - chunk_len); } *offp += rd_len; ret = rd_len; update_host_rop(channel, 0, rd_len + sizeof(struct mmbi_header)); dev_dbg(priv->dev, "%s: Return length: %d\n", __func__, ret); err_out: /* * Raise the missing SCI's by checking pointer for host * read acknowledgment. This will work around the Missing * SCI bug on host side. * */ dev_warn(priv->dev, "%s: Check and raise missing SCI\n", __func__); raise_missing_sci(channel); protocol->data_available = false; wake_up_device(channel); return ret; } static ssize_t mmbi_write(struct file *filp, const char *buffer, size_t len, loff_t *offp) { struct aspeed_mmbi_protocol *protocol = file_aspeed_espi_mmbi(filp); struct aspeed_mmbi_channel *channel = protocol->chan_ref; struct aspeed_espi_mmbi *priv = channel->priv; struct mmbi_header header; struct host_rop hrop; ssize_t wt_offset; ssize_t avail_buf_len; ssize_t chunk_len; ssize_t end_offset; u32 h_rwp0; dev_dbg(priv->dev, "%s: length:%d , type: %d\n", __func__, len, protocol->type); if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP0_INSTANCE0, &h_rwp0)) { dev_err(priv->dev, "Failed to read Host RWP\n"); return -EAGAIN; } /* If Host READY bit is not set, Just discard the write. */ if (!GET_HOST_READY_BIT(h_rwp0)) { dev_dbg(channel->priv->dev, "Host not ready, discarding request...\n"); return -EAGAIN; } if (get_b2h_avail_buf_len(channel, &avail_buf_len)) { dev_dbg(priv->dev, "Failed to B2H empty buffer len\n"); return -EAGAIN; } dev_dbg(priv->dev, "B2H buffer empty space: %d\n", avail_buf_len); /* Empty space should be more than write request data size */ if (avail_buf_len <= sizeof(header) || (len > (avail_buf_len - sizeof(header)))) { dev_err(priv->dev, "Not enough space(%d) in B2H buffer\n", avail_buf_len); return -ENOSPC; } /* Fill multi-protocol header */ header.data = ((protocol->type << 24) + len); memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); wt_offset = hrop.b2h_wp; end_offset = channel->b2h_cb_size; if ((end_offset - wt_offset) >= sizeof(header)) { memcpy(channel->b2h_cb_vmem + wt_offset, &header, sizeof(header)); wt_offset += sizeof(header); } else { chunk_len = end_offset - wt_offset; memcpy(channel->b2h_cb_vmem + wt_offset, &header, chunk_len); memcpy(channel->b2h_cb_vmem, &header + chunk_len, (sizeof(header) - chunk_len)); wt_offset = (sizeof(header) - chunk_len); } /* Write the data */ if ((end_offset - wt_offset) >= len) { if (copy_from_user(&channel->b2h_cb_vmem[wt_offset], buffer, len)) { return -EFAULT; } wt_offset += len; } else { chunk_len = end_offset - wt_offset; if (copy_from_user(&channel->b2h_cb_vmem[wt_offset], buffer, chunk_len)) { return -EFAULT; } wt_offset = 0; if (copy_from_user(&channel->b2h_cb_vmem[wt_offset], buffer + chunk_len, len - chunk_len)) { return -EFAULT; } wt_offset += len - chunk_len; } *offp += len; update_host_rop(channel, len + sizeof(struct mmbi_header), 0); return len; } static int get_mmbi_config(struct aspeed_mmbi_channel *channel, void __user *userbuf) { bool h_ready; struct host_rop hrop; struct aspeed_mmbi_get_config get_conf; u32 h2b_wptr, b2h_rptr, h_rwp0, h_rwp1; if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP0_INSTANCE0, &h_rwp0)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return -EAGAIN; } if (read_host_rwp_val(channel, ASPEED_MMBI_HRWP1_INSTANCE0, &h_rwp1)) { dev_err(channel->priv->dev, "Failed to read Host RWP\n"); return -EAGAIN; } h2b_wptr = GET_H2B_WRITE_POINTER(h_rwp0); b2h_rptr = GET_B2H_READ_POINTER(h_rwp1); h_ready = GET_HOST_READY_BIT(h_rwp0) ? true : false; memcpy(&hrop, channel->hrop_vmem, sizeof(struct host_rop)); get_conf.h_rdy = h_ready; get_conf.h2b_wp = h2b_wptr; get_conf.b2h_rp = b2h_rptr; get_conf.h2b_rp = hrop.h2b_rp; get_conf.b2h_wp = hrop.b2h_wp; if (copy_to_user(userbuf, &get_conf, sizeof(get_conf))) { dev_err(channel->priv->dev, "copy to user failed\n"); return -EFAULT; } return 0; } static int get_b2h_empty_space(struct aspeed_mmbi_channel *channel, void __user *userbuf) { struct aspeed_mmbi_get_empty_space empty_space; ssize_t avail_buf_len; if (get_b2h_avail_buf_len(channel, &avail_buf_len)) { dev_dbg(channel->priv->dev, "Failed to B2H empty buffer len\n"); return -EAGAIN; } dev_dbg(channel->priv->dev, "B2H buffer empty space: %d\n", avail_buf_len); empty_space.length = avail_buf_len; if (copy_to_user(userbuf, &empty_space, sizeof(empty_space))) { dev_err(channel->priv->dev, "copy to user failed\n"); return -EFAULT; } return 0; } static long mmbi_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct aspeed_mmbi_protocol *protocol = file_aspeed_espi_mmbi(filp); struct aspeed_mmbi_channel *channel = protocol->chan_ref; void __user *userbuf = (void __user *)arg; int ret; switch (cmd) { case ASPEED_MMBI_CTRL_IOCTL_GET_B2H_EMPTY_SPACE: ret = get_b2h_empty_space(channel, userbuf); break; case ASPEED_MMBI_CTRL_IOCTL_SEND_RESET_REQUEST: ret = send_bmc_reset_request(channel); break; case ASPEED_MMBI_CTRL_IOCTL_GET_CONFIG: ret = get_mmbi_config(channel, userbuf); break; default: dev_err(channel->priv->dev, "Command not found\n"); ret = -ENOTTY; } return ret; } static const struct file_operations aspeed_espi_mmbi_fops = { .owner = THIS_MODULE, .open = mmbi_open, .release = mmbi_release, .read = mmbi_read, .write = mmbi_write, .unlocked_ioctl = mmbi_ioctl, .poll = mmbi_poll }; static char *get_protocol_suffix(protocol_type type) { switch (type) { case MMBI_PROTOCOL_IPMI: return "ipmi"; case MMBI_PROTOCOL_SEAMLESS: return "seamless"; case MMBI_PROTOCOL_RAS_OFFLOAD: return "ras_offload"; case MMBI_PROTOCOL_MCTP: return "mctp"; case MMBI_PROTOCOL_NODE_MANAGER: return "nm"; } return NULL; } static struct mmbi_cap_desc mmbi_desc_init(struct aspeed_mmbi_channel channel) { struct mmbi_cap_desc ch_desc; memset(&ch_desc, 0, sizeof(ch_desc)); /* Per MMBI protoco spec, Set it to "$MMBI$" */ strncpy(ch_desc.signature, "$MMBI$", sizeof(ch_desc.signature)); ch_desc.version = 1; ch_desc.instance_num = channel.chan_num; /* * TODO: Add multi-channel support. Handcoded H2B start offset * to 0x8000 as we support single channel today. */ ch_desc.nex_inst_base_addr = 0; ch_desc.b2h_ba = sizeof(struct mmbi_cap_desc) + sizeof(struct host_rop); ch_desc.h2b_ba = 0x8000 + sizeof(struct host_rwp); ch_desc.b2h_d = 0x800; /* 32KB = 0x800 * 16 */ ch_desc.h2b_d = 0x800; /* 32KB = 0x800 * 16 */ ch_desc.buffer_type = 0x01; /* VMSCB */ ch_desc.bt_desc.host_rop_p = sizeof(struct mmbi_cap_desc); ch_desc.bt_desc.host_rwp_p = 0x8000; ch_desc.bt_desc.msg_protocol_type = 0x01; /* Multiple protocol type */ ch_desc.bt_desc.host_int_type = 0x01; /* SCI Triggered through eSPI VW */ ch_desc.bt_desc.global_sys_interrupt = 0x00; /* Not used */ ch_desc.bt_desc.bmc_int_type = 0x00; /* Auto - AST HW Interrupt */ ch_desc.bt_desc.bmc_int_a = 0x00; /* Not used, set to zero */ ch_desc.bt_desc.bmc_int_v = 0x00; /* Not used, set to zero */ ch_desc.crc8 = crc8(mmbi_crc8_table, (u8 *)&ch_desc, (size_t)(sizeof(ch_desc) - 1), 0); return ch_desc; } static int mmbi_channel_init(struct aspeed_espi_mmbi *priv, struct device_node *node, u8 idx) { struct device *dev = priv->dev; int rc; u8 i; u8 *h2b_vaddr, *b2h_vaddr; struct mmbi_cap_desc ch_desc; struct host_rop hrop; int no_of_protocols_enabled; u8 mmbi_supported_protocols[MAX_NO_OF_SUPPORTED_PROTOCOLS]; u32 b2h_size = (priv->mmbi_size / 2); u32 h2b_size = (priv->mmbi_size / 2); b2h_vaddr = priv->dma_vaddr; h2b_vaddr = priv->dma_vaddr + (priv->mmbi_size / 2); memset(&priv->chan[idx], 0, sizeof(struct aspeed_mmbi_channel)); priv->chan[idx].chan_num = idx; priv->chan[idx].desc_vmem = b2h_vaddr; priv->chan[idx].hrop_vmem = b2h_vaddr + sizeof(struct mmbi_cap_desc); priv->chan[idx].b2h_cb_vmem = b2h_vaddr + sizeof(struct mmbi_cap_desc) + sizeof(struct host_rop); priv->chan[idx].b2h_cb_size = b2h_size - sizeof(struct mmbi_cap_desc) - sizeof(struct host_rop); /* Set BMC ready bit */ memcpy(&hrop, priv->chan[idx].hrop_vmem, sizeof(hrop)); hrop.b_rdy = 1; memcpy(priv->chan[idx].hrop_vmem, &hrop, sizeof(hrop)); priv->chan[idx].hrwp_vmem = h2b_vaddr; priv->chan[idx].h2b_cb_vmem = h2b_vaddr + sizeof(struct host_rwp); priv->chan[idx].h2b_cb_size = h2b_size - sizeof(struct host_rwp); dev_dbg(priv->dev, "B2H mapped addr - desc: 0x%0x, hrop: 0x%0x, b2h_cb: 0x%0x\n", (size_t)priv->chan[idx].desc_vmem, (size_t)priv->chan[idx].hrop_vmem, (size_t)priv->chan[idx].b2h_cb_vmem); dev_dbg(priv->dev, "H2B mapped addr - hrwp: 0x%0x, h2b_cb: 0x%0x\n", (size_t)priv->chan[idx].hrwp_vmem, (size_t)priv->chan[idx].h2b_cb_vmem); dev_dbg(priv->dev, "B2H buffer size: 0x%0x\n", (size_t)priv->chan[idx].b2h_cb_size); dev_dbg(priv->dev, "H2B buffer size: 0x%0x\n", (size_t)priv->chan[idx].h2b_cb_size); /* Initialize the MMBI channel descriptor */ ch_desc = mmbi_desc_init(priv->chan[idx]); memcpy(priv->chan[idx].desc_vmem, &ch_desc, sizeof(ch_desc)); priv->chan[idx].enabled = true; if (!node) { dev_err(priv->dev, "mmbi protocol : no instance found\n"); goto err_destroy_channel; } no_of_protocols_enabled = of_property_count_u8_elems(node, "protocols"); if (no_of_protocols_enabled <= 0 || no_of_protocols_enabled > MAX_NO_OF_SUPPORTED_PROTOCOLS){ dev_err(dev, "No supported mmbi protocol\n"); goto err_destroy_channel; } rc = of_property_read_u8_array(node, "protocols", mmbi_supported_protocols, no_of_protocols_enabled); if (!rc) { memset(&priv->chan[idx].supported_protocols, 0, sizeof(priv->chan[idx].supported_protocols)); memcpy(&priv->chan[idx].supported_protocols, mmbi_supported_protocols, sizeof(mmbi_supported_protocols)); } for (i = 0; i < no_of_protocols_enabled; i++) { char *dev_name; u8 proto_type; proto_type = priv->chan[idx].supported_protocols[i]; dev_name = get_protocol_suffix(proto_type); if (!dev_name) { dev_err(dev, "Unable to get MMBI protocol suffix name\n"); goto err_destroy_channel; } priv->chan[idx].protocol[i].type = proto_type; priv->chan[idx].protocol[i].miscdev.name = devm_kasprintf(dev, GFP_KERNEL, "%s_%d_%s", DEVICE_NAME, idx, dev_name); priv->chan[idx].protocol[i].miscdev.minor = MISC_DYNAMIC_MINOR; priv->chan[idx].protocol[i].miscdev.fops = &aspeed_espi_mmbi_fops; priv->chan[idx].protocol[i].miscdev.parent = dev; rc = misc_register(&priv->chan[idx].protocol[i].miscdev); if (rc) { dev_err(dev, "Unable to register device\n"); goto err_destroy_channel; } /* Hold the back reference of channel */ priv->chan[idx].protocol[i].chan_ref = &priv->chan[idx]; priv->chan[idx].protocol[i].data_available = false; priv->chan[idx].protocol[i].process_data = false; init_waitqueue_head(&priv->chan[idx].protocol[i].queue); } priv->chan[idx].priv = priv; /* * When BMC goes for reset while host is in OS, SRAM memory will be * remapped and the content in memory will be lost. This include * host ready state which will block memory write transactions. * Ideally this reset has to be done while mapping memory(u-boot). * Since channel initialization (including descriptor) done at kernel, * So added channel reset also during driver load. Future, when staged * commands processing(IPMI commands for BIOS-BMC communication) is * enabled, this check should be moved to u-boot. */ if (send_bmc_reset_request(&priv->chan[idx])) dev_info(dev, "MMBI channel(%d) reset failed\n", idx); dev_info(dev, "MMBI Channel(%d) initialized successfully\n", idx); return 0; err_destroy_channel: if (b2h_vaddr) memunmap(b2h_vaddr); if (h2b_vaddr) memunmap(h2b_vaddr); priv->chan[idx].enabled = false; return -ENOMEM; } static irqreturn_t aspeed_espi_mmbi_irq(int irq, void *arg) { struct aspeed_espi_mmbi *priv = arg; u32 status; int idx; regmap_read(priv->map, ASPEED_MMBI_IRQ_STATUS, &status); /* Clear interrupt */ regmap_write(priv->map, ASPEED_MMBI_IRQ_STATUS, status); for (idx = 0; idx < MAX_NO_OF_SUPPORTED_CHANNELS; idx++) { /* * Host RWP 1: It gets updated after Host reads data and also * when host want to send reset MMBI buffer request. So * Handle reset request and ignore read pointer update. * Host RWP0: It gets updated when host write data on H2B, * So process the request by invoking corresponding device. */ if (!priv->chan[idx].enabled) continue; if ((status >> (idx * 2)) & HRWP1_READ_MASK) check_host_reset_request(&priv->chan[idx]); else wake_up_device(&priv->chan[idx]); } dev_dbg(priv->dev, "MMBI IRQ Status: %d\n", status); return IRQ_HANDLED; } static const struct of_device_id aspeed_espi_mmbi_match[] = { { .compatible = "aspeed,ast2600-espi-mmbi" }, {} }; MODULE_DEVICE_TABLE(of, aspeed_espi_mmbi_match); static int aspeed_espi_mmbi_probe(struct platform_device *pdev) { const struct of_device_id *dev_id; struct aspeed_espi_mmbi *priv; struct device_node *node; struct resource resm; void __iomem *regs; u32 reg_val, enable_irqs; int rc, i; dev_dbg(&pdev->dev, "MMBI: Probing MMBI devices...\n"); priv = devm_kzalloc(&pdev->dev, sizeof(struct aspeed_espi_mmbi), GFP_KERNEL); if (!priv) return -ENOMEM; priv->dev = &pdev->dev; dev_id = of_match_device(aspeed_espi_mmbi_match, priv->dev); if (!dev_id) { dev_err(priv->dev, "MMBI: Failed to match mmbi device\n"); return -EINVAL; } regs = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(regs)) { dev_err(priv->dev, "MMBI: Failed to get regmap!\n"); return PTR_ERR(regs); } /* MMBI register map */ priv->map = devm_regmap_init_mmio(priv->dev, regs, &aspeed_espi_mmbi_regmap_cfg); if (IS_ERR(priv->map)) { dev_err(priv->dev, "MMBI: Couldn't get regmap\n"); return -ENODEV; } /* ESI register map */ priv->pmap = syscon_regmap_lookup_by_phandle(priv->dev->of_node, "aspeed,espi"); if (IS_ERR(priv->pmap)) { dev_err(priv->dev, "MMBI: Failed to find ESPI regmap\n"); return PTR_ERR(priv->pmap); } /* LPC register map */ priv->lpc_map = syscon_regmap_lookup_by_phandle(priv->dev->of_node, "aspeed,lpc"); if (IS_ERR(priv->lpc_map)) { dev_err(priv->dev, "MMBI: Failed to find LPC regmap\n"); return PTR_ERR(priv->lpc_map); } /* If memory-region is described in device tree then store */ node = of_parse_phandle(priv->dev->of_node, "memory-region", 0); if (node) { rc = of_property_read_u32(priv->dev->of_node, "host-map-addr", &priv->host_map_addr); if (rc) { dev_info(priv->dev, "No host mapping address\n"); priv->host_map_addr = PCH_ESPI_LGMR_BASE_ADDRESS; } rc = of_address_to_resource(node, 0, &resm); of_node_put(node); if (!rc) { priv->mmbi_size = resource_size(&resm); priv->mmbi_phys_addr = resm.start; } else { priv->mmbi_size = ESPI_MMBI_TOTAL_SIZE; priv->mmbi_phys_addr = BMC_SRAM_BASE_ADDRESS; } } else { dev_dbg(priv->dev, "No DTS config, assign default MMBI Address\n"); priv->host_map_addr = PCH_ESPI_LGMR_BASE_ADDRESS; priv->mmbi_size = ESPI_MMBI_TOTAL_SIZE; priv->mmbi_phys_addr = BMC_SRAM_BASE_ADDRESS; } dev_dbg(priv->dev, "MMBI: HostAddr:0x%x, SramAddr:0x%x, Size: 0x%0x\n", priv->host_map_addr, priv->mmbi_phys_addr, priv->mmbi_size); priv->dma_vaddr = dma_alloc_coherent(priv->dev, priv->mmbi_size, &priv->mmbi_phys_addr, GFP_KERNEL); if (!priv->dma_vaddr) { dev_err(priv->dev, "MMBI: DMA memory allocation failed\n"); return -ENOMEM; } dev_dbg(priv->dev, "MMBI: DMA Addr: 0x%x\n", (u32)priv->dma_vaddr); memset(priv->dma_vaddr, 0, priv->mmbi_size); crc8_populate_msb(mmbi_crc8_table, MMBI_CRC8_POLYNOMIAL); /* eSPI Controller settings */ regmap_write(priv->pmap, ASPEED_ESPI_PC_RX_SADDR, priv->host_map_addr); regmap_write(priv->pmap, ASPEED_ESPI_PC_RX_TADDR, priv->mmbi_phys_addr); regmap_write(priv->pmap, ASPEED_ESPI_PC_RX_TADDRM, ASPEED_ESPI_PC_RX_TADDR_MASK); regmap_update_bits(priv->pmap, ASPEED_ESPI_CTRL2, ESPI_DISABLE_PERP_MEM_READ | ESPI_DISABLE_PERP_MEM_WRITE, 0); /* MMBI controller Settings */ regmap_read(priv->map, ASPEED_MMBI_CTRL, &reg_val); regmap_read(priv->map, ASPEED_MMBI_IRQ_ENABLE, &reg_val); regmap_write(priv->map, ASPEED_MMBI_CTRL, MMBI_ENABLE_FUNCTION | MMBI_TOTAL_SIZE_64K | MMBI_INSTANCE_SIZE_64K); regmap_write(priv->map, ASPEED_MMBI_IRQ_ENABLE, 0x03); dev_set_drvdata(priv->dev, priv); for_each_child_of_node(priv->dev->of_node, node) { rc = of_property_read_u32(node, "channel", &i); if (rc || i >= MAX_NO_OF_SUPPORTED_CHANNELS || priv->chan[i].enabled) continue; rc = mmbi_channel_init(priv, node, i); if (rc) { dev_err(priv->dev, "MMBI: Channel(%d) init failed\n", i); } else { enable_irqs += (0x03 << i); } } regmap_write(priv->map, ASPEED_MMBI_IRQ_ENABLE, enable_irqs); /* Enable IRQ */ priv->irq = platform_get_irq(pdev, 0); if (priv->irq < 0) { dev_err(priv->dev, "MMBI: No irq specified\n"); return priv->irq; } rc = devm_request_irq(priv->dev, priv->irq, aspeed_espi_mmbi_irq, IRQF_SHARED, dev_name(priv->dev), priv); if (rc) { dev_err(priv->dev, "MMBI: Unable to get IRQ\n"); return rc; } dev_dbg(priv->dev, "MMBI: aspeed MMBI driver loaded successfully\n"); return 0; } static int aspeed_espi_mmbi_remove(struct platform_device *pdev) { struct aspeed_espi_mmbi *priv = dev_get_drvdata(&pdev->dev); int i, j; dev_dbg(priv->dev, "MMBI: Removing MMBI device\n"); for (i = 0; i < MAX_NO_OF_SUPPORTED_CHANNELS; i++) { if (!priv->chan[i].enabled) continue; for (j = 0; priv->chan[i].supported_protocols[j] != 0; j++) misc_deregister(&priv->chan[i].protocol[j].miscdev); } if (priv->dma_vaddr) dma_free_coherent(priv->dev, priv->mmbi_size, priv->dma_vaddr, priv->mmbi_phys_addr); return 0; } static struct platform_driver aspeed_espi_mmbi_driver = { .driver = { .name = DEVICE_NAME, .of_match_table = aspeed_espi_mmbi_match, }, .probe = aspeed_espi_mmbi_probe, .remove = aspeed_espi_mmbi_remove, }; module_platform_driver(aspeed_espi_mmbi_driver); MODULE_AUTHOR("AppaRao Puli <apparao.puli@intel.com>"); MODULE_DESCRIPTION("MMBI Driver"); MODULE_LICENSE("GPL v2");(这是我的代码,他主要是将3个寄存器冲掉了,分别是ASPEED_ESPI_PC_RX_SADDR,ASPEED_ESPI_PC_RX_TADDR,ASPEED_ESPI_PC_RX_TADDRM)
09-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值