Zynq SDIO WiFi



Introduction

The purpose of this page is to describe how to enable wireless connectivity for ZC702 running Linux.

HW/IP features

The two SDIO controllers are controlled and operate independently with the same feature set:
Host mode controller
  • Four I/O signals (MIO or EMIO)
  • Command, Clock, CD, WP, Pwr Ctrl (MIO or EMIO)
  • LED control, bus voltage (EMIO)
  • Interrupt or polling driven
  • AHB master-slave interface operating at the CPU_1x clock rate
  • Master mode for DMA transfers (with 1 KB FIFO)
  • Slave mode for register accesses
SDIO Specification 2.0
  • Low-speed, 1 KHz to 400 KHz
  • Full-speed, 1 MHz to 50 MHz (25 MB/sec)
  • High-speed and high-capacity memory cards

Features Supported by Driver

  • All the HW/IP features are supported by driver

Missing features, Known Issues, Limitations

None

Kernel Configuration

Devicetree

SD and eMMC

Test Procedure

Test Setup
Board: ZC702
Kernel: Linux 3.5 (uses uImage and uramdisk)
Wireless card in SDIO slot: Atheros AR6103 (see http://wireless.kernel.org/en/users/Drivers/Atheros)
Connection: Wired connection from host (192.168.1.2) to wireless access point (linksys, 192.168.1.1). Once the steps documented on this page have been followed, there will be a wireless connection between ZC702 (192.168.1.10) and the access point.

Boot Linux with Wireless Capabilities
Download and build Linux
See Getting Started for details on downloading and building Linux.

Download the latest Xilinx kernel:
Configure the kernel for Zynq:
To compile the SDIO wireless driver as a loadable kernel module, configure the kernel:
Build the kernel and the driver:
Build the device tree blob:

Result:
<linux build dir>/drivers/net/wireless/ath/ath6kl/ath6kl_sdio.ko
<linux build dir>/arch/arm/boot/uImage
<linux build dir>/arch/arm/boot/zynq-zc702.dtb
Create a root filesystem
See Zynq Root File System to produce a root filesystem.
Add the following files to the root filesystem (refer to the Add Files to Running Linux page for instructions).
  • Copy <linux build dir>/drivers/net/wireless/ath/ath6kl/ath6kl_sdio.ko to /root/ath6kl_sdio.koon the root filesystem (does not need to be located under /root).
  • Cross-compile iwconfig (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html) and copy it to the root filesystem (/usr/sbin).
    • If using Buildroot to create the rootfs, the configuration option to install this is BR2_PACKAGE_WIRELESS_TOOLS.

Download the latest firmware:
Add the following files to the root filesystem (refer to the Add Files to Running Linux page for instructions).
  • Copy <linux-firmware>/ath6k to /lib/firmware/ath6k on the root filesystem.
  • Copy /lib/firmware/ath6k/AR6003/hw2.1.1/bdata.SD31.bin to /lib/firmware/ath6k/AR6003/hw2.1.1/bdata.bin on the root filesystem. The following result might occur otherwise (as of 2012/10/09):
Result:
uramdisk.image.gz
Boot Linux on Zynq
-> ZC702 Boot From Flash for an example of how to boot from flash.
-> Boot From SD Card for an example of how to boot from an SD card.
*Note: Make sure to rename the device tree blob (*.dtb) to devicetree.dtb as this is what U-Boot expects for some of the boot modes (such as SD boot).
Enable wireless connectivity
Now that Linux is running on Zynq, it is time to enable wireless connectivity.
Load the wireless driver:
Setup wireless connection between the board and the host:

Expected Output

Now, there is a wireless connection between ZC702 and the host. This can be tested by issuing the following commands:

Mainline Status

This driver is currently in sync with mainline kernel 4.9

Change Log

2016.3
Summary:
  • None
2016.4
Summary:
  • None
2017.1
Summary:
  • None
2017.2
Summary:
  • None
2017.3
Summary:
  • None
2017.4
Summary:
  • None
2018.1
Summary:
  • None
2018.2
Summary:
  • None

2018.3
Summary:

  • None

2019.1
Summary:

  • None

2019.2

Summary:

  • None

2020.1
Summary:

  • None

2020.2
Summary:

  • None

Related Links