Sopc2DTS with Agilex 7
After generating a qsys_top.sopcinfo with quartus for the SocFPGA Agilex 7 design, i'm trying to get the .dts then the .dtb from it via sopc2dts. I'm encountring the following issue: $ java -jar sopc2dts.jar --input ../Bureau/qsys_top.sopcinfo --output essai_libs.dts --type dts --extra-component-libs sopc_components_altera.xml --extra-component-libs sopc_components_fps.xml --extra-component-libs sopc_components_labx.xml --extra-component-libs sopc_components_others.xml Unsupported interface kind: ftile_hssi_system_clock_source Unsupported interface kind: ftile_hssi_reference_clock_source Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_reference_clock_sink Unsupported interface kind: ftile_hssi_system_clock_sink ... Unsupported interface kind: ftile_hssi_system_clock_source Unsupported interface kind: ftile_hssi_reference_clock_source Component agilex_hps of class intel_agilex_hps is unknown Component emif_cal_0 of class altera_emif_cal is unknown Component emif_cal_1 of class altera_emif_cal is unknown Component emif_fpga of class altera_emif_fm is unknown Component emif_fpga_1 of class altera_emif_fm is unknown Component emif_hps of class altera_emif_fm_hps is unknown Component mm_ccb_0 of class mm_ccb is unknown Component mm_ccb_1 of class mm_ccb is unknown Component qsys_top_mux_ddr0 of class mux_ddr0 is unknown Component qsys_top_mux_ddr1 of class mux_ddr0 is unknown Component user_rst_clkgate_0 of class altera_s10_user_rst_clkgate is unknown Component agilex_hps of class intel_agilex_hps is unknown Component emif_cal_0 of class altera_emif_cal is unknown Component emif_cal_1 of class altera_emif_cal is unknown Component emif_fpga of class altera_emif_fm is unknown Component emif_fpga_1 of class altera_emif_fm is unknown Component emif_hps of class altera_emif_fm_hps is unknown Component mm_ccb_0 of class mm_ccb is unknown Component mm_ccb_1 of class mm_ccb is unknown Component qsys_top_mux_ddr0 of class mux_ddr0 is unknown Component qsys_top_mux_ddr1 of class mux_ddr0 is unknown Component user_rst_clkgate_0 of class altera_s10_user_rst_clkgate is unknown Component agilex_hps of class intel_agilex_hps is unknown Component emif_cal_0 of class altera_emif_cal is unknown Component emif_cal_1 of class altera_emif_cal is unknown Component emif_fpga of class altera_emif_fm is unknown Component emif_fpga_1 of class altera_emif_fm is unknown Component emif_hps of class altera_emif_fm_hps is unknown Component mm_ccb_0 of class mm_ccb is unknown Component mm_ccb_1 of class mm_ccb is unknown Component qsys_top_mux_ddr0 of class mux_ddr0 is unknown Component qsys_top_mux_ddr1 of class mux_ddr0 is unknown Component user_rst_clkgate_0 of class altera_s10_user_rst_clkgate is unknown Component xcvr_12a_bank_systemclk_f_0 of class systemclk_f is unknown Component xcvr_12a_bank_xcvr_12a_fmc_quad2 of class directphy_f is unknown Component xcvr_12a_bank_xcvr_12a_fmc_quad3 of class directphy_f is unknown Component xcvr_12a_bank_xcvr_12a_qsfp of class directphy_f is unknown Component xcvr_13a_qsys_fmc of class directphy_f is unknown Component xcvr_13a_qsys_qsfp1 of class directphy_f is unknown Component xcvr_13a_qsys_systemclk_f_0 of class systemclk_f is unknown Component xcvr_13c_qsys_fmc of class directphy_f is unknown Component xcvr_13c_qsys_systemclk_f_0 of class systemclk_f is unknown Unable to find a master of type CPU. Randomly selecting the first master we find (agilex_hps). How to fix this and have a complete and correct device tree that can be compiled into .dtb? I'm working with agilex 7. + if i wanna custom an OS and do it in the HPS of my board (like adding new modules using gpios), is it mandatory to add some blocks in the .dts ?2.7KViews0likes6Commentssopc2dts Errors
These are the errors showing when I run the sopc2dts command. I am using DE10 Standard FPGA. I have stored dtb files earlier with the image file on an sdcard and the FPGA loads well. However, the dtb generated with this doesn't work with the image file. Kindly help resolve these. $ sopc2dts --input hps_ethernet.sopcinfo --output socfpga.dtb --type dtb --board soc_system_board_info.xml --board hps_common_board_info.xml --bridge-removal all --clocks Component System_PLL of class altera_up_avalon_sys_sdram_pll is unknown Component System_PLL of class altera_up_avalon_sys_sdram_pll is unknown Component System_PLL of class altera_up_avalon_sys_sdram_pll is unknown Component System_PLL of class altera_up_avalon_sys_sdram_pll is unknown Point of view: 'hps_0_arm_a9_0' could not be found. Trying to find another one. DTAppend: Unable to find parent, null, for n25q512a@0. Adding to root DTAppend: Unable to find parent, null, for next-level-cache. Adding to root DTAppend: Unable to find parent, null, for next-level-cache. Adding to root DTAppend: Unable to find parent, null, for cache-unified. Adding to root DTAppend: Unable to find parent, null, for arm,tag-latency. Adding to root DTAppend: Unable to find parent, null, for arm,data-latency. Adding to root DTAppend: Unable to find parent, null, for status. Adding to root DTAppend: Unable to find parent, null, for reset-names. Adding to root DTAppend: Unable to find parent, null, for resets. Adding to root DTAppend: Unable to find parent, null, for phy-mode. Adding to root DTAppend: Unable to find parent, null, for snps,phy-addr. Adding to root DTAppend: Unable to find parent, null, for phy-addr. Adding to root DTAppend: Unable to find parent, null, for txc-skew-ps. Adding to root DTAppend: Unable to find parent, null, for rxc-skew-ps. Adding to root DTAppend: Unable to find parent, null, for txen-skew-ps. Adding to root DTAppend: Unable to find parent, null, for rxdv-skew-ps. Adding to root DTAppend: Unable to find parent, null, for rxd0-skew-ps. Adding to root DTAppend: Unable to find parent, null, for rxd1-skew-ps. Adding to root DTAppend: Unable to find parent, null, for rxd2-skew-ps. Adding to root DTAppend: Unable to find parent, null, for rxd3-skew-ps. Adding to root DTAppend: Unable to find parent, null, for txd0-skew-ps. Adding to root DTAppend: Unable to find parent, null, for txd1-skew-ps. Adding to root DTAppend: Unable to find parent, null, for txd2-skew-ps. Adding to root DTAppend: Unable to find parent, null, for txd3-skew-ps. Adding to root DTAppend: Unable to find parent, null, for max-frame-size. Adding to root DTAppend: Unable to find parent, null, for altr,sysmgr-syscon. Adding to root DTAppend: Unable to find parent, null, for reset-names. Adding to root DTAppend: Unable to find parent, null, for resets. Adding to root DTAppend: Unable to find parent, null, for reset-names. Adding to root DTAppend: Unable to find parent, null, for #reset-cells. Adding to root DTAppend: Unable to find parent, null, for speed-mode. Adding to root DTAppend: Unable to find parent, null, for clock-frequency. Adding to root DTAppend: Unable to find parent, null, for i2c-sda-falling-time-ns. Adding to root DTAppend: Unable to find parent, null, for i2c-scl-falling-time-ns. Adding to root DTAppend: Unable to find parent, null, for lcd@0. Adding to root DTAppend: Unable to find parent, null, for sdmmc_clk_divided. Adding to root DTAppend: Unable to find parent, null, for clocks. Adding to root DTAppend: Unable to find parent, null, for #address-cells. Adding to root DTAppend: Unable to find parent, null, for #size-cells. Adding to root DTAppend: Unable to find parent, null, for broken-cd. Adding to root DTAppend: Unable to find parent, null, for cap-mmc-highspeed. Adding to root DTAppend: Unable to find parent, null, for cap-sd-highspeed. Adding to root DTAppend: Unable to find parent, null, for bus-width. Adding to root DTAppend: Unable to find parent, null, for device-width. Adding to root DTAppend: Unable to find parent, null, for bank-width. Adding to root DTAppend: Unable to find parent, null, for compatible. Adding to root DTAppend: Unable to find parent, null, for altr,dw-mshc-ciu-div. Adding to root DTAppend: Unable to find parent, null, for altr,dw-mshc-sdr-timing. Adding to root DTAppend: Unable to find parent, null, for supports-highspeed. Adding to root DTAppend: Unable to find parent, null, for slot@0. Adding to root DTAppend: Unable to find parent, null, for cd. Adding to root DTAppend: Unable to find parent, null, for cd-gpios. Adding to root DTAppend: Unable to find parent, null, for vmmc-supply. Adding to root DTAppend: Unable to find parent, null, for vqmmc-supply. Adding to root DTAppend: Unable to find parent, null, for #address-cells. Adding to root DTAppend: Unable to find parent, null, for #size-cells. Adding to root DTAppend: Unable to find parent, null, for master-ref-clk. Adding to root DTAppend: Unable to find parent, null, for ext-decoder. Adding to root DTAppend: Unable to find parent, null, for spidev@0. Adding to root DTAppend: Unable to find parent, null, for snps,nr-gpios. Adding to root DTAppend: Unable to find parent, null, for snps,nr-gpios. Adding to root DTAppend: Unable to find parent, null, for phys. Adding to root2.3KViews0likes8CommentsLinux mSGDMA Driver Agilex 5
I am trying to use stream-to-memory DMA to move data. This is the design, showing the important Quartus connections: Which corresponds to this address config: # address map write_sdram = 0x00000000 read = NULL (has no meaning in streaming to MM mode) msgdma_csr = 0x22000040 msgdma_descriptor = 0x22000060 # msgdma offsets msgdma_csr_control = 0x4 + 0x22000040 = 0x22000044 msgdma_descriptor_write_low = 0x4 + 0x22000060 = 0x22000064 msgdma_descriptor_length = 0x8 + 0x22000060 = 0x22000068 msgdma_descriptor_control = 0xc + 0x22000060 = 0x2200006c The oscillator IP generates a group of known numbers, so the readbacks change each time - but are predictable and so the hardware is verifiable. In U-Boot; I have verified that this design. This script asks the DMA to make two transfers, and reads back the results each time. SOCFPGA_AGILEX5 # mw 0x22000044 0x1 # Stop Dispatcher SOCFPGA_AGILEX5 # mw 0x22000044 0x20 # Stop descriptors SOCFPGA_AGILEX5 # mw 0x22000044 0x2 # Reset Dispatcher SOCFPGA_AGILEX5 # mw 0x22000064 0x00000000 # Write address SOCFPGA_AGILEX5 # mw 0x22000068 0x8 # Write length in bytes SOCFPGA_AGILEX5 # md 0x22000040 1 # Check status 22000040: 00000002 .... SOCFPGA_AGILEX5 # mw 0x2200006c 0x02000000 # Wait for response SOCFPGA_AGILEX5 # sleep 1 SOCFPGA_AGILEX5 # mw 0x2200006c 0x82000000 # execute SOCFPGA_AGILEX5 # md 0x22000040 1 # Check status 22000040: 00000002 .... SOCFPGA_AGILEX5 # md 0x00000000 1 # read 00000000: 00000000 .... SOCFPGA_AGILEX5 # mw 0x22000044 0x2 # reset SOCFPGA_AGILEX5 # mw 0x2200006c 0x82000000 # execute SOCFPGA_AGILEX5 # md 0x00000000 1 # read 00000000: 67676767 .... When trying to do the same in linux using 'devmem2', I found that the readbacks did not change, so I decided to look for some examples. I found this stream-to-mapped mSGDMA driver built for the Cyclone V, and so re-purposed it. The driver example above both reads and writes to the device using the ‘dd’ utility in linux, but I am for now only interested in the read command. To do so I needed some information... Based on the .qsys design file output of my project, the mSGDMA block generates this interrupt: ... <altera:connection altera:kind="interrupt" altera:version="24.3" altera:start="subsys_hps.f2h_irq0_in" altera:end="msgdma_0.csr_irq"> <altera:connection_parameter altera:parameter_name="irqNumber" altera:parameter_value="2"> </altera:connection_parameter> </altera:connection> ... And according to the interrupt docs, the above csr interrupt value=2 maps to the GIC interrupt 51, which is 19 when referenced from the linux device tree. With this information, I have defined the following mSGDMA element in the .dts: ... msgdma_test: msgdma_test@22000000 { compatible = "msgdma_test"; reg = <0x0 0x22000000 0x0 0x100>; interrupt-parent = <&intc>; interrupts = <0 19 4>; }; ... Which only differs from the original in that it has a different interrupt number, and different base address - also accounting for the lwhps2fpga offset, due to it being the Agilex5 and not the Cyclone. The driver code from the REDS blog post has also been edited in the following way: I need to change a deprecated function in the main driver code: devm_ioremap_nocache to demv_ioremap. I want to see the data which has been moved - to do so have added an info print to the msgdma_read method: printk(KERN_INFO "MSGDMA: Read buffer content: %.*s\n", (int)read_ret, (char*)data->dma_buf_rd); There is only 1 interrupt, so we set data->msgdma1_irq = platform_get_irq(pdev, 0); Since there is no ability coded to fabric to perform msgdma_write - we can also remove memory allocations, remaps and references to msgdma0 and other write related objects. I think the following shows that the DMA is firing interrupts, and so I am confident that I have connected the correct interrupt: cat /proc/interrupts | grep msgdma 50: 2 0 0 0 GICv3 51 Level msgdma1 However, when looking at the kernel outputs after requesting reads via dd: $ dd if=/dev/msgdma_test of=/dev/null bs=8 count=1 $ dmesg | tail [ ... ] MSGDMA: Read buffer (hex): 00 00 00 00 00 00 00 00 [ ... ] MSGDMA: Read buffer (hex): 00 00 00 00 00 00 00 00 The driver code in question is included in msgdma.c and header_msgdma.c, attached to the post (This forum does not seem to like .h files...) I was hoping someone might have an idea of where I went wrong! Any helpers are much appreciated! Thanks for your time, KSolved2.2KViews0likes9CommentsUsing Uart IP with HPS(Cyclone V soc dev board)
Hi I'm using HPS and want to use the UART IP to create a FPGA module to make a connection between the host and the board. Here is the system HPS : Buffer ====> | FPGA: Uart module ====> | TTL to RS232 module ====> | Host I've read the example of the RS232 Max Baurd rate example and the IP guide. I don't know if the HPS support this example for I DID NOT USE THE NOIS II. Instead I'm using the HPS with HWLIB. In HWLIB there is a 16550 uart API. Is that related to the RS232 IP? Is there an example for HPS? Is it allowed to reach the 921600 baud rate? thank you for your time Best Wishes Alex1KViews0likes5Comments"DMA engine initialization failed" error when EMAC uses GMII interface
I am seeing the error given here when I boot the Agilex A5 (Quartus 24.3). This doc recommends to connect mac_tx_clk_i to a 2.5/25 MHz clock source 'correctly'. What does it mean, 'correctly'? There is a field in the HPS docs for this signal here, but this also does not specify what 'correctly' means. For further reference, I am trying to connect EMAC0 to EMAC1. Also here is the .dts: &gmac0 { status = "okay"; mac-mode = "gmii"; phy-mode = "gmii"; fixed-link { speed = <1000>; full-duplex; }; }; &gmac1 { status = "okay"; mac-mode = "gmii"; phy-mode = "gmii"; fixed-link { speed = <1000>; full-duplex; }; }; Many thanks! K911Views0likes3CommentsEMAC drivers Agilex5
I would like to use these Altera drivers (Driver 0, Driver 1) for the EMACs on the Agilex5. They seem to be compatible as followed: compatible = "altr,socfpga-stmmac-a10-s10", "snps,dwxgmac-2.10", "snps,dwxgmac"; My question is: is it possible to use these drivers without connecting to a PHY? Or do they need a PHY to be instantiated and tested? And if so - would the followin .dts change be sufficient? &gmac0 { status = "okay"; }; &gmac1 { status = "okay"; }; Thanks, KSolved890Views0likes4CommentsPMBUS Error During Configuration on Generated Example Design
Currently attempting to run the example Low Latency Ethernet 10G MAC on the Stratix 10 SX SoC H-Tile (1SV280HU2F50E1VGAS) devkit. I've generated the example design as stated in the Low Latency Ethernet 10G MAC Intel Stratix 10 FPGA IP Design Example User Guide. Working to try and load this design onto the above board but am running into an error shown on the image attached. This has been tested on two different H-Tile Stratix 10 devkits and the same issue occurs both times. I've attempted to load other designs which I've been told previously worked on these devkits and I am continually getting this error. This includes a previous iteration of the LL Ethernet 10G MAC design from a previous developer. I've spent some time looking at specific issues and off shoot solutions I've seen on Google but to no avail. Looking for some assistance pinning down what potentially is going on (whether its a board issue, a programmer issues, design issues, etc). Appreciate any assistance!485Views0likes2CommentsMain Features Released in 25.1.1
Main Features Released in 25.1.1: Initial support of the Agilex 3 device. Released GSRD for the Agilex 3 C-Series Development Kit. Reference: https://altera-fpga.github.io/rel-25.1.1/embedded-designs/agilex-3/c-series/gsrd/ug-gsrd-agx3/ DDR ECC support in the Agilex 5. Support of production Agilex 7 F-Series Crypto device. GSRD for DK-DEV-AGF0123FA dev kit (using production AGFD023R24C2E1VC ) replaces the DK-DEV-AGF027F1ES dev kit (using engineering sample AGFB027R24C2E2VR2). Reference: https://altera-fpga.github.io/rel-25.1.1/embedded-designs/agilex-7/f-series/fpga/gsrd/ug-gsrd-agx7f-fpga/ Support of USB 3.1 in Agilex 5 GSRDs. Support of booting from eMMC in ATF to Linux Direct boot for Agilex 5 device. Reference: https://altera-fpga.github.io/rel-25.1.1/embedded-designs/agilex-5/e-series/premium/boot-examples/ug-linux-boot-agx5e-premium/#boot-from-emmc_1 Removed generation of NAND binaries in Agilex 5 GSRD. Will be re-enabled when production devices get released.313Views0likes0CommentsValidating ECC Functionality on Custom Agilex 5 SOM in Linux Kernel
We are now looking to validate ECC (Error Correction Code) functionality on our custom Agilex 5 System-on-Module (SOM) running Linux. Our objective is to ensure that ECC is correctly enabled and functioning across all relevant memory regions, and that error detection and correction mechanisms are properly integrated at the kernel level. Could you please provide guidance on the necessary kernel configurations, device tree modifications, and available tools or procedures to test and monitor ECC behavior on this platform? Any documentation or reference designs specific to Agilex 5 ECC support would be highly valuable.162Views0likes7CommentsCyclone5 SoC: U-Boot not detecting USB-HUB
Hello there, I'm working on a design on top of a Chameleon96 Board (CycloneV based), featuring a USB OTG Chip USB3300, and connected to it an USB 2513B Hub. My issue is that neither U-Boot or Linux are able to detect the USB Hub connected to the USB3300. This used to work with older U-Boot versions and are still working on my board, but I was not able to reproduce such behavior with up-to-date versions (cloned from https://github.com/altera-fpga/u-boot-socfpga and https://github.com/altera-fpga/linux-socfpga). The Chameleon96 has two GPIO pins to control the reset of the mentioned USB chips, with a fixed configuration on the USB 2513B (the I2C interface is not exposed). With my version (U-Boot 2025.07-gd4f268660a70-dirty and Linux 6.12.33-g3234b1ed8956), the USB OTG is detected and the hub registered with logs like the following: [ 0.883275] dwc2 ffb40000.usb: supply vusb_d not found, using dummy regulator [ 0.890619] dwc2 ffb40000.usb: supply vusb_a not found, using dummy regulator [ 0.898034] dwc2 ffb40000.usb: Configuration mismatch. dr_mode forced to host [ 0.905721] dwc2 ffb40000.usb: DWC OTG Controller [ 0.910454] dwc2 ffb40000.usb: new USB bus registered, assigned bus number 1 [ 0.917571] dwc2 ffb40000.usb: irq 32, io mem 0xffb40000 [ 0.923324] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, b2 [ 0.931588] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber1 [ 0.938800] usb usb1: Product: DWC OTG Controller [ 0.943509] usb usb1: Manufacturer: Linux 6.12.33-g3234b1ed8956 dwc2_hsotg [ 0.950362] usb usb1: SerialNumber: ffb40000.usb [ 0.955682] hub 1-0:1.0: USB hub found [ 0.959499] hub 1-0:1.0: 1 port detected but the connected USB hub never shows up. Similarly 'usb start' from the U-Boot prompt just shows something called U-Boot Root Hub: => usb start starting USB... USB DWC2 Bus usb@ffb40000: 1 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found => usb tree USB device tree: 1 Hub (480 Mb/s, 0mA) U-Boot Root Hub Older u-boot versions (and linux) are able to detect the USB hub after 'usb start'. In this case, the root hub is named DWT OTC RootHub, and I don't know if this is just a change of naming somewhere or something wrong is also happening while detecting the USB3300 Hub: SOCFPGA_CHAMELEON96 # usb start (Re)start USB... USB0: Core Release: 2.93a scanning bus 0 for devices... 2 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found SOCFPGA_CHAMELEON96 # usb tree USB device tree: 1 Hub (480 Mb/s, 0mA) | DWC OTG RootHub | +-2 Hub (480 Mb/s, 2mA) the linux kernel (4.1.33-ltsi-altera) is also able to detect the USB Hub as can be seen in these logs: [ 0.913203] ffb40000.usb supply vusb_d not found, using dummy regulator [ 0.919864] ffb40000.usb supply vusb_a not found, using dummy regulator [ 0.957196] dwc2 ffb40000.usb: EPs: 16, dedicated fifos, 8064 entries in SPRM [ 1.817295] dwc2 ffb40000.usb: DWC OTG Controller [ 1.822011] dwc2 ffb40000.usb: new USB bus registered, assigned bus number 1 [ 1.829076] dwc2 ffb40000.usb: irq 44, io mem 0x00000000 [ 1.834617] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 1.841394] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber1 [ 1.848596] usb usb1: Product: DWC OTG Controller [ 1.853282] usb usb1: Manufacturer: Linux 4.1.33-ltsi-altera-svn260 dwc2_hsog [ 1.860481] usb usb1: SerialNumber: ffb40000.usb [ 1.865670] hub 1-0:1.0: USB hub found [ 1.869457] hub 1-0:1.0: 1 port detected ... [ 2.367190] usb 1-1: new high-speed USB device number 2 using dwc2 [ 2.577385] usb 1-1: New USB device found, idVendor=0424, idProduct=2513 [ 2.584069] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 2.591939] hub 1-1:1.0: USB hub found [ 2.595782] hub 1-1:1.0: 3 ports detected I think I've ported all the needed configuration to the u-boot sources (basically resetting the USB hub using the attached GPIOs, and I also tried the reset sequence manually from U-Boot with the gpio command) and I'm not able to figure out how to find where the issue might be. I've forked u-boot sources here: https://github.com/teiram/u-boot-socfpga/, using the socfpga_chameleon96_defconfig configuration. Could you please support me in order to troubleshoot what the issue might be? I tried to backport my changes to some different branches on u-boot-socpfga but got the same results or even worse (no boot at all). I also have sources for a working U-Boot but they are quite old and the configuration changed sensibly since. I think all the needed options are set. Cheers, Manuel142Views0likes13Comments