cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
bobdxcool
Contributor
Contributor
5,342 Views
Registered: ‎09-24-2015

UART 1 maximum speed and mmc0: Timeout waiting for hardware interrupt

I am running ubuntu based xillinux OS on my microzed board. I have connected a GSM modem to serial port UART1 (identified as PS1 on the Operating system). The issue I am facing is whenever I use the modem (as dial up modem using wvdial and generating an access pint via wifi module) at a baud rate of 115200 or above on this port, the error I get is mmc0: Timeout waiting for hardware interrupt. It hangs here. And then I have to reboot the microzed . However for speeds below 115200. it works well without any hanging issues. Why is this ? How can I resolve this ?

 

Edit: After a few seconds of getting mmc error, then comes
[ 168.436823] INFO: rcu_preempt self-detected stall on CPU { 0} (t=6000 jiffies g=420 c=419 q=370)

 

My device tree for reference:

 

/dts-v1/;

/ {
	model = "Xilinx Zynq";
	compatible = "xlnx,zynq-7000";
	#size-cells = <0x1>;
	#address-cells = <0x1>;

	amba@0 {
		phandle = <0x1>;
		linux,phandle = <0x1>;
		ranges;
		compatible = "xlnx,ps7-axi-interconnect-1.00.a", "simple-bus";
		#size-cells = <0x1>;
		#address-cells = <0x1>;

		leds {
			compatible = "gpio-leds";

			mmc_led {
				linux,default-trigger = "mmc0";
				gpios = <0x5 0x2f 0x0>;
				label = "mmc_led";
			};
		};

		ps7-xadc@f8007100 {
			reg = <0xf8007100 0x20>;
			interrupts = <0x0 0x7 0x4>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-xadc-1.00.a";
			clocks = <0x3 0xc>;
		};

		ps7-usb@e0002000 {
			reg = <0xe0002000 0x1000>;
			phy_type = "ulpi";
			interrupts = <0x0 0x15 0x4>;
			interrupt-parent = <0x2>;
			dr_mode = "host";
			compatible = "xlnx,ps7-usb-1.00.a";
			clocks = <0x3 0x1c>;
		};

		uartlite_1@42C10000 {
			clock = <0x5f5e100>;
			interrupts = <0x0 0x1e 0x1>;
			interrupt-parent = <0x2>;
			reg = <0x42c10000 0x10000>;
			compatible = "xlnx,axi-uartlite-2.0", "xlnx,xps-uartlite-1.00.a", "xlnx,xps-uartlite-1.02.a";
		};

		uartlite_0@42C00000 {
			clock = <0x5f5e100>;
			interrupts = <0x0 0x1d 0x1>;
			interrupt-parent = <0x2>;
			reg = <0x42c00000 0x10000>;
			compatible = "xlnx,axi-uartlite-2.0", "xlnx,xps-uartlite-1.00.a", "xlnx,xps-uartlite-1.02.a";
		};

		serial@e0000000 {
			xlnx,has-modem = <0x0>;
			reg = <0xe0000000 0x1000>;
			port-number = <0x1>;
			interrupts = <0x0 0x1b 0x4>;
			interrupt-parent = <0x2>;
			device_type = "serial";
			current-speed = <0x1c200>;
			compatible = "xlnx,ps7-uart-1.00.a", "xlnx,xuartps";
			clocks = <0x3 0x17 0x3 0x28>;
			clock-names = "ref_clk", "aper_clk";
		};

		serial@e0001000 {
			xlnx,has-modem = <0x0>;
			reg = <0xe0001000 0x1000>;
			port-number = <0x0>;
			interrupts = <0x0 0x32 0x4>;
			interrupt-parent = <0x2>;
			device_type = "serial";
			current-speed = <0x1c200>;
			compatible = "xlnx,ps7-uart-1.00.a", "xlnx,xuartps";
			clocks = <0x3 0x18 0x3 0x29>;
			clock-names = "ref_clk", "aper_clk";
		};

		ps7-ttc@f8001000 {
			reg = <0xf8001000 0x1000>;
			interrupts = <0x0 0xa 0x4 0x0 0xb 0x4 0x0 0xc 0x4>;
			interrupt-parent = <0x2>;
			interrupt-names = "ttc0", "ttc1", "ttc2";
			compatible = "xlnx,ps7-ttc-1.00.a", "cdns,ttc";
			clocks = <0x3 0x6>;
		};

		ps7-slcr@f8000000 {
			reg = <0xf8000000 0x1000>;
			compatible = "xlnx,ps7-slcr-1.00.a", "xlnx,zynq-slcr";

			clocks {
				#size-cells = <0x0>;
				#address-cells = <0x1>;

				clkc {
					phandle = <0x3>;
					linux,phandle = <0x3>;
					ps-clk-frequency = <0x1fca055>;
					fclk-enable = <0xf>;
					compatible = "xlnx,ps7-clkc";
					clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x", "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x", "dci", "lqspi", "smc", "pcap", "gem0", "gem1", "fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1", "sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1", "dma", "usb0_aper", "usb1_aper", "gem0_aper", "gem1_aper", "sdio0_aper", "sdio1_aper", "spi0_aper", "spi1_aper", "can0_aper", "can1_aper", "i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper", "gpio_aper", "lqspi_aper", "smc_aper", "swdt", "dbg_trc", "dbg_apb";
					#clock-cells = <0x1>;
				};
			};
		};

		ps7-sdio@e0100000 {
			sdhci,wp-broken;
			xlnx,has-power = <0x0>;
			reg = <0xe0100000 0x1000>;
			interrupts = <0x0 0x18 0x4>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-sdio-1.00.a", "generic-sdhci", "arasan,sdhci-8.9a";
			clocks = <0x3 0x15 0x3 0x20>;
			clock-names = "clk_xin", "clk_ahb";
			clock-frequency = <0x2faf080>;
		};

		ps7-scuwdt@f8f00620 {
			reg = <0xf8f00620 0xe0>;
			interrupts = <0x1 0xe 0x301>;
			interrupt-parent = <0x2>;
			device_type = "watchdog";
			compatible = "xlnx,ps7-scuwdt-1.00.a";
			clocks = <0x3 0x4>;
		};

		ps7-scutimer@f8f00600 {
			reg = <0xf8f00600 0x20>;
			interrupts = <0x1 0xd 0x301>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-scutimer-1.00.a", "arm,cortex-a9-twd-timer";
			clocks = <0x3 0x4>;
		};

		ps7-scugic@f8f01000 {
			phandle = <0x2>;
			linux,phandle = <0x2>;
			reg = <0xf8f01000 0x1000 0xf8f00100 0x100>;
			num_interrupts = <0x60>;
			num_cpus = <0x2>;
			interrupt-controller;
			compatible = "xlnx,ps7-scugic-1.00.a", "arm,cortex-a9-gic", "arm,gic";
			#size-cells = <0x1>;
			#interrupt-cells = <0x3>;
			#address-cells = <0x2>;
		};

		ps7-qspi-linear@fc000000 {
			reg = <0xfc000000 0x1000000>;
			compatible = "xlnx,ps7-qspi-linear-1.00.a";
			clocks = <0x3 0xa 0x3 0x2b>;
			clock-names = "ref_clk", "aper_clk";
		};

		ps7-qspi@e000d000 {
			#size-cells = <0x0>;
			#address-cells = <0x1>;
			xlnx,qspi-mode = <0x0>;
			xlnx,fb-clk = <0x1>;
			reg = <0xe000d000 0x1000>;
			num-chip-select = <0x1>;
			is-dual = <0x0>;
			interrupts = <0x0 0x13 0x4>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-qspi-1.00.a";
			clocks = <0x3 0xa 0x3 0x2b>;
			clock-names = "ref_clk", "aper_clk";

			flash@0 {
				#size-cells = <0x1>;
				#address-cells = <0x1>;
				spi-max-frequency = <0x2faf080>;
				reg = <0x0>;
				compatible = "n25q128";

				partition@qspi-bitstream {
					reg = <0xc00000 0x400000>;
					label = "qspi-bitstream";
				};

				partition@qspi-rootfs {
					reg = <0x620000 0x5e0000>;
					label = "qspi-rootfs";
				};

				partition@qspi-device-tree {
					reg = <0x600000 0x20000>;
					label = "qspi-device-tree";
				};

				partition@qspi-linux {
					reg = <0x100000 0x500000>;
					label = "qspi-linux";
				};

				partition@qspi-fsbl-uboot {
					reg = <0x0 0x100000>;
					label = "qspi-fsbl-uboot";
				};
			};
		};

		ps7-pl310@f8f02000 {
			reg = <0xf8f02000 0x1000>;
			interrupts = <0x0 0x2 0x4>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-pl310-1.00.a", "arm,pl310-cache";
			cache-unified;
			cache-level = <0x2>;
			arm,tag-latency = <0x2 0x2 0x2>;
			arm,data-latency = <0x3 0x2 0x2>;
		};

		ps7-ocmc@f800c000 {
			reg = <0xf800c000 0x1000>;
			interrupts = <0x0 0x3 0x4>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-ocmc-1.00.a", "xlnx,zynq-ocm-1.0";
		};

		ps7-iop-bus-config@e0200000 {
			reg = <0xe0200000 0x1000>;
			compatible = "xlnx,ps7-iop-bus-config-1.00.a";
		};

		ps7-gpio@e000a000 {
			phandle = <0x5>;
			linux,phandle = <0x5>;
			reg = <0xe000a000 0x1000>;
			interrupts = <0x0 0x14 0x4>;
			interrupt-parent = <0x2>;
			gpio-mask-low = <0xfe81>;
			gpio-mask-high = <0xc0000>;
			gpio-controller;
			emio-gpio-width = <0x40>;
			compatible = "xlnx,ps7-gpio-1.00.a";
			clocks = <0x3 0x2a>;
			#gpio-cells = <0x2>;
		};

		ps7-ethernet@e000b000 {
			xlnx,ptp-enet-clock = <0x69f6bcb>;
			xlnx,has-mdio = <0x1>;
			xlnx,eth-mode = <0x1>;
			reg = <0xe000b000 0x1000>;
			phy-mode = "rgmii-id";
			phy-handle = <0x4>;
			local-mac-address = [00 0a 35 00 01 22];
			interrupts = <0x0 0x16 0x4>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-ethernet-1.00.a";
			clocks = <0x3 0xd 0x3 0x1e>;
			clock-names = "ref_clk", "aper_clk";
			#size-cells = <0x0>;
			#address-cells = <0x1>;

			mdio {
				#size-cells = <0x0>;
				#address-cells = <0x1>;

				phy@0 {
					phandle = <0x4>;
					linux,phandle = <0x4>;
					reg = <0x0>;
					device_type = "ethernet-phy";
					compatible = "marvell,88e1510";
				};
			};
		};

		ps7-dma@f8003000 {
			reg = <0xf8003000 0x1000>;
			interrupts = <0x0 0xd 0x4 0x0 0xe 0x4 0x0 0xf 0x4 0x0 0x10 0x4 0x0 0x11 0x4 0x0 0x28 0x4 0x0 0x29 0x4 0x0 0x2a 0x4 0x0 0x2b 0x4>;
			interrupt-parent = <0x2>;
			interrupt-names = "abort", "dma0", "dma1", "dma2", "dma3", "dma4", "dma5", "dma6", "dma7";
			compatible = "xlnx,ps7-dma-1.00.a", "arm,primecell", "arm,pl330";
			clocks = <0x3 0x1b>;
			clock-names = "apb_pclk";
			#dma-requests = <0x4>;
			#dma-channels = <0x8>;
			#dma-cells = <0x1>;
		};

		ps7-dev-cfg@f8007000 {
			reg = <0xf8007000 0x100>;
			interrupts = <0x0 0x8 0x4>;
			interrupt-parent = <0x2>;
			compatible = "xlnx,ps7-dev-cfg-1.00.a";
			clocks = <0x3 0xc 0x3 0xf 0x3 0x10 0x3 0x11 0x3 0x12>;
			clock-names = "ref_clk", "fclk0", "fclk1", "fclk2", "fclk3";
		};

		ps7-ddrc@f8006000 {
			xlnx,has-ecc = <0x0>;
			reg = <0xf8006000 0x1000>;
			compatible = "xlnx,ps7-ddrc-1.00.a", "xlnx,ps7-ddrc";
		};
	};

	memory@0 {
		reg = <0x0 0x40000000>;
		device_type = "memory";
	};

	pmu {
		reg-names = "cpu0", "cpu1";
		reg = <0xf8891000 0x1000 0xf8893000 0x1000>;
		interrupts = <0x0 0x5 0x4 0x0 0x6 0x4>;
		interrupt-parent = <0x2>;
		compatible = "arm,cortex-a9-pmu";
	};

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

		cpu@1 {
			reg = <0x1>;
			interrupt-handle = <0x2>;
			i-cache-size = <0x8000>;
			i-cache-line-size = <0x20>;
			device_type = "cpu";
			d-cache-size = <0x8000>;
			d-cache-line-size = <0x20>;
			compatible = "arm,cortex-a9";
			bus-handle = <0x1>;
		};

		cpu@0 {
			reg = <0x0>;
			interrupt-handle = <0x2>;
			i-cache-size = <0x8000>;
			i-cache-line-size = <0x20>;
			device_type = "cpu";
			d-cache-size = <0x8000>;
			d-cache-line-size = <0x20>;
			compatible = "arm,cortex-a9";
			bus-handle = <0x1>;
		};
	};

	xillinux {
		board = "microzed";
	};

	chosen {
		linux,stdout-path = "/amba@0/serial@e0001000";
		bootargs = "console=ttyPS0,115200n8 consoleblank=0 root=/dev/mmcblk0p2 rw rootwait earlyprintk";
	};

	aliases {
		spi0 = "/amba@0/ps7-qspi@e000d000";
		serial3 = "/amba@0/uartlite_1@42C10000";
		serial2 = "/amba@0/uartlite_0@42C00000";
		serial1 = "/amba@0/serial@e0000000";
		serial0 = "/amba@0/serial@e0001000";
		ethernet0 = "/amba@0/ps7-ethernet@e000b000";
	};
};

 

0 Kudos
0 Replies