Booting Linux kernel 4.9.76-ltsi-rt with Altera MAX10 10M50 (ACDS version 17.0)


#1

Hello!
I’m trying to run Linux kernel 4.9.76-ltsi-rt from altera opensources with buildroot 2017.11 on MAX10 FPGA Development kit with NIOS II, but it’s fail.
After downloading the image to the qspi flash, the system doesn’t respond. No messages in console. I’m using manual from https://rocketboards.org/foswiki/Documentation/AlteraMAX1010M50RevCDevelopmentKitLinuxSetupV170 The example from this manual works correctly.
Has anyone had such a problem? Can I debug the boot process (boot_loader_cfi.srec)?
I,m using:
Altera MAX10 10M50 Rev C development kit.
Quartus Prime Standart Edition 17.0
ACDS version 17.0
Sourcery CodeBench Lite 2017.05-4
kernel 4.9.76-ltsi-rt
rootfs buildroot 2017.11


#2

Hello, wapster,
could I ask You about bootloader? Do You compile U-Boot with Buildroot or do You use the bootloader image from reference design? And what about Device Tree Blob? Do You build Linux kernel image with Buildroot or separately?
Best regards, Jan Konečný.


#3

Thanks for the answer.
I use bootlodaer boot_loader_cfi as described in the reference design. No U-Boot.
I was able to start the kernel after adding .dts file to the configuration. At now the problem is that the system does not see qspi flash with jffs file system and rootfs. There is a kernel panic. What’s wrong?

10m50_devboard.dts

/dts-v1/;

/ {
	model = "Altera NiosII Max10";
	compatible = "altr,niosii-max10";
	#address-cells = <1>;
	#size-cells = <1>;

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu: cpu@0 {
			device_type = "cpu";
			compatible = "altr,nios2-1.1";
			reg = <0x00000000>;
			interrupt-controller;
			#interrupt-cells = <1>;
			altr,exception-addr = <0xc8000120>;
			altr,fast-tlb-miss-addr = <0xc0000100>;
			altr,has-div = <1>;
			altr,has-initda = <1>;
			altr,has-mmu = <1>;
			altr,has-mul = <1>;
			altr,implementation = "fast";
			altr,pid-num-bits = <8>;
			altr,reset-addr = <0xd4000000>;
			altr,tlb-num-entries = <256>;
			altr,tlb-num-ways = <16>;
			altr,tlb-ptr-sz = <8>;
			clock-frequency = <75000000>;
			dcache-line-size = <32>;
			dcache-size = <32768>;
			icache-line-size = <32>;
			icache-size = <32768>;
		};
	};

	memory {
		device_type = "memory";
		reg = <0x08000000 0x08000000>,
			<0x00000000 0x00000400>;
	};

	sopc0: sopc@0 {
		device_type = "soc";
		ranges;
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "altr,avalon", "simple-bus";
		bus-frequency = <75000000>;

		qspi: spi@0x180014a0 {
			compatible = "altr,quadspi-1.0";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x180014a0 0x00000020>,
				<0x14000000 0x04000000>;
			reg-names = "avl_csr", "avl_mem";
			interrupt-parent = <&cpu>;
			interrupts = <4>;

			flash0: n25q512a@0 {
					#address-cells = <1>;
					#size-cells = <1>;
					compatible = "n25q512a";
					reg = <0>; /* chip select */
					spi-max-frequency = <25000000>;
					m25p,fast-read;
					page-size = <256>;
					block-size = <16>; /* 2^16, 64KB */
					read-delay = <4>; /* delay value in read data capture register */
					tshsl-ns = <50>;
					tsd2d-ns = <50>;
					tchsh-ns = <4>;
					tslch-ns = <4>;
					cdns,page-size = <256>;
					cdns,block-size = <16>;
					cdns,tshsl-ns = <50>;
					cdns,tsd2d-ns = <50>;
					cdns,tchsh-ns = <4>;
					cdns,tslch-ns = <4>;

						partition@qspi-boot {
							/* 8MB for raw data. */
							label = "Flash 0 Raw Data";
							reg = <0x0 0xC00000>;
						};

						partition@qspi-rootfs {
							/* 56MB for jffs2 data. */
							label = "Flash 0 jffs2 Filesystem";
							reg = <0x00C00000 0x03600000>;
						};
			};
			
		};
		
		jtag_uart: serial@18001530 {
			compatible = "altr,juart-1.0";
			reg = <0x18001530 0x00000008>;
			interrupt-parent = <&cpu>;
			interrupts = <7>;
		};


		a_16550_uart_0: serial@18001600 {
			compatible = "altr,16550-FIFO32", "ns16550a";
			reg = <0x18001600 0x00000200>;
			interrupt-parent = <&cpu>;
			interrupts = <1>;
			auto-flow-control = <1>;
			clock-frequency = <50000000>;
			fifo-size = <32>;
			reg-io-width = <4>;
			reg-shift = <2>;
			tx-threshold = <16>;
		};

		sysid: sysid@18001528 {
			compatible = "altr,sysid-1.0";
			reg = <0x18001528 0x00000008>;
			id = <4207856382>;
			timestamp = <1431309290>;
		};

		rgmii_0_eth_tse_0: ethernet@400 {
			compatible = "altr,tse-msgdma-1.0", "altr,tse-1.0";
			reg = <0x00000400 0x00000400>,
				<0x00000820 0x00000020>,
				<0x00000800 0x00000020>,
				<0x000008c0 0x00000008>,
				<0x00000840 0x00000020>,
				<0x00000860 0x00000020>;
			reg-names = "control_port", "rx_csr", "rx_desc", "rx_resp", "tx_csr", "tx_desc";
			interrupt-parent = <&cpu>;
			interrupts = <2 3>;
			interrupt-names = "rx_irq", "tx_irq";
			rx-fifo-depth = <8192>;
			tx-fifo-depth = <8192>;
			address-bits = <48>;
			max-frame-size = <1518>;
			local-mac-address = [00 00 00 00 00 00];
			altr,has-supplementary-unicast;
			altr,enable-sup-addr = <1>;
			altr,has-hash-multicast-filter;
			altr,enable-hash = <1>;
			phy-mode = "rgmii-id";
			phy-handle = <&phy0>;
			rgmii_0_eth_tse_0_mdio: mdio {
				compatible = "altr,tse-mdio";
				#address-cells = <1>;
				#size-cells = <0>;
				phy0: ethernet-phy@0 {
					reg = <0>;
					device_type = "ethernet-phy";
				};
			};
		};

		enet_pll: clock@0 {
			compatible = "altr,pll-1.0";
			#clock-cells = <1>;

			enet_pll_c0: enet_pll_c0 {
				compatible = "fixed-clock";
				#clock-cells = <0>;
				clock-frequency = <125000000>;
				clock-output-names = "enet_pll-c0";
			};

			enet_pll_c1: enet_pll_c1 {
				compatible = "fixed-clock";
				#clock-cells = <0>;
				clock-frequency = <25000000>;
				clock-output-names = "enet_pll-c1";
			};

			enet_pll_c2: enet_pll_c2 {
				compatible = "fixed-clock";
				#clock-cells = <0>;
				clock-frequency = <2500000>;
				clock-output-names = "enet_pll-c2";
			};
		};

		sys_pll: clock@1 {
			compatible = "altr,pll-1.0";
			#clock-cells = <1>;

			sys_pll_c0: sys_pll_c0 {
				compatible = "fixed-clock";
				#clock-cells = <0>;
				clock-frequency = <100000000>;
				clock-output-names = "sys_pll-c0";
			};

			sys_pll_c1: sys_pll_c1 {
				compatible = "fixed-clock";
				#clock-cells = <0>;
				clock-frequency = <50000000>;
				clock-output-names = "sys_pll-c1";
			};

			sys_pll_c2: sys_pll_c2 {
				compatible = "fixed-clock";
				#clock-cells = <0>;
				clock-frequency = <75000000>;
				clock-output-names = "sys_pll-c2";
			};
		};

		sys_clk_timer: timer@18001440 {
			compatible = "altr,timer-1.0";
			reg = <0x18001440 0x00000020>;
			interrupt-parent = <&cpu>;
			interrupts = <0>;
			clock-frequency = <75000000>;
		};

		led_pio: gpio@180014d0 {
			compatible = "altr,pio-1.0";
			reg = <0x180014d0 0x00000010>;
			altr,gpio-bank-width = <4>;
			resetvalue = <15>;
			#gpio-cells = <2>;
			gpio-controller;
		};

		button_pio: gpio@180014c0 {
			compatible = "altr,pio-1.0";
			reg = <0x180014c0 0x00000010>;
			interrupt-parent = <&cpu>;
			interrupts = <6>;
			altr,gpio-bank-width = <3>;
			altr,interrupt-type = <2>;
			edge_type = <1>;
			level_trigger = <0>;
			resetvalue = <0>;
			#gpio-cells = <2>;
			gpio-controller;
		};

		sys_clk_timer_1: timer@880 {
			compatible = "altr,timer-1.0";
			reg = <0x00000880 0x00000020>;
			interrupt-parent = <&cpu>;
			interrupts = <5>;
			clock-frequency = <75000000>;
		};

		fpga_leds: leds {
			compatible = "gpio-leds";

			led_fpga0: fpga0 {
				label = "fpga_led0";
				gpios = <&led_pio 0 1>;
			};

			led_fpga1: fpga1 {
				label = "fpga_led1";
				gpios = <&led_pio 1 1>;
			};

			led_fpga2: fpga2 {
				label = "fpga_led2";
				gpios = <&led_pio 2 1>;
			};

			led_fpga3: fpga3 {
				label = "fpga_led3";
				gpios = <&led_pio 3 1>;
			};
		};
	};

	chosen {
		bootargs = "debug console=ttyS0,115200";
	};
};

Kernel log

Linux version 4.9.76-rt61-ltsi (root@debian64) (gcc version 7.2.1 20171018 (Sourcery CodeBench Lite 2017.11-14) ) #1 PREEMPT Wed Apr 4 15:56:56 MSK 2018
On node 0 totalpages: 65536
free_area_init_node: node 0, pgdat c83e7df8, node_mem_map c8409f00
Normal zone: 512 pages used for memmap
Normal zone: 0 pages reserved
Normal zone: 65536 pages, LIFO batch:15
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024
Kernel command line: debug console=ttyS0,115200
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Sorting __ex_table…
Memory: 124656K/262144K available (3141K kernel code, 93K rwdata, 648K rodata, 112K init, 110K bss, 137488K reserved, 0K cma-reserved)
Preemptible hierarchical RCU implementation.
Build-time adjustment of leaf fanout to 32.
NR_IRQS:64 nr_irqs:64 0
clocksource: nios2-clksrc: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 25483472618 ns
Calibrating delay loop (skipped), value calculated using timer frequency… 150.00 BogoMIPS (lpj=300000)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
devtmpfs: initialized
cpu cpu0: Error -2 creating of_node link
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
futex hash table entries: 256 (order: -1, 3072 bytes)
NET: Registered protocol family 16
clocksource: Switched to clocksource nios2-clksrc
NET: Registered protocol family 2
TCP established hash table entries: 2048 (order: 1, 8192 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
workingset: timestamp_bits=30 max_order=15 bucket_order=0
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
random: fast init done
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
console [ttyS0] disabled
18001600.serial: ttyS0 at MMIO 0x18001600 (irq = 2, base_baud = 3125000) is a Altera 16550 FIFO32
console [ttyS0] enabled
18001530.serial: ttyJ0 at MMIO 0x18001530 (irq = 7, base_baud = 0) is a Altera JTAG UART
loop: module loaded
libphy: Fixed MDIO Bus: probed
libphy: altera_tse: probed
altera_tse 400.ethernet (unnamed net_device) (uninitialized): MDIO bus altera_tse-0: created
altera_tse 400.ethernet: Altera TSE MAC version 17.1 at 0x00000400 irq 3/5
mousedev: PS/2 mouse device common for all mice
NET: Registered protocol family 17
List of all partitions:
No filesystem could mount root, tried:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
—[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)


#4

Hello,
I am sorry, I am not experienced with Your bootloader. However I mentioned that there is no “status” property of QSPI node at DTS file. Are You sure that bootloader is configured to enable hardware connections for QSPI correctly?
Could I ask about the kernel building and its configuration as well as the configuration of Buildroot?