xref: /openwifi/user_space/load_fpga_img.sh (revision e3155ac1e8f0e5b855901b894431799d190acd55)
194847d80SXianjun Jiao#!/bin/bash
294847d80SXianjun Jiao
394847d80SXianjun Jiao# Author: Xianjun Jiao
494847d80SXianjun Jiao# SPDX-FileCopyrightText: 2022 UGent
594847d80SXianjun Jiao# SPDX-License-Identifier: AGPL-3.0-or-later
694847d80SXianjun Jiao
794847d80SXianjun Jiao# get fpga image file name
894847d80SXianjun Jiaoif [[ -n $1 ]]; then
994847d80SXianjun Jiao  fpga_img_filename=$1
1094847d80SXianjun Jiaoelse
1194847d80SXianjun Jiao  fpga_img_filename=system_top.bit.bin
1294847d80SXianjun Jiaofi
1394847d80SXianjun Jiao
1494847d80SXianjun Jiaofpga_type=$(cat /proc/device-tree/compatible)
1594847d80SXianjun Jiaofpga_img_filename_core=${fpga_img_filename##*/}
1694847d80SXianjun Jiaoecho $fpga_type
1794847d80SXianjun Jiaoecho $fpga_img_filename
1894847d80SXianjun Jiaoecho $fpga_img_filename_core
1994847d80SXianjun Jiao
2094847d80SXianjun Jiaoset -x
2194847d80SXianjun Jiao
2294847d80SXianjun Jiaoifconfig sdr0 down
2394847d80SXianjun Jiaormmod sdr
2494847d80SXianjun Jiao# rmmod mac80211
2594847d80SXianjun Jiao# rmmod cfg80211
2694847d80SXianjun Jiao# rmmod ad9361_drv
2794847d80SXianjun Jiao# rmmod xilinx_dma.ko
2894847d80SXianjun Jiaormmod openofdm_rx
2994847d80SXianjun Jiaormmod openofdm_tx
3094847d80SXianjun Jiaormmod rx_intf
3194847d80SXianjun Jiaormmod tx_intf
3294847d80SXianjun Jiaormmod xpu
3394847d80SXianjun Jiao
3494847d80SXianjun Jiaosleep 1
3594847d80SXianjun Jiao
36e60c3d15SXianjun Jiaoif [ -f "$fpga_img_filename" ]; then
3794847d80SXianjun Jiao  echo 0 > /sys/class/fpga_manager/fpga0/flags
3894847d80SXianjun Jiao  mkdir -p /lib/firmware
39e60c3d15SXianjun Jiao  cp $fpga_img_filename /lib/firmware/ -rf
4094847d80SXianjun Jiao  echo $fpga_img_filename_core > /sys/class/fpga_manager/fpga0/firmware
41e60c3d15SXianjun Jiaofi
4294847d80SXianjun Jiao
4394847d80SXianjun Jiao# insmod ad9361_drv.ko
4494847d80SXianjun Jiao# sleep 1
4594847d80SXianjun Jiao
4694847d80SXianjun Jiaoif [ "$fpga_type" != "xlnx,zynq-7000" ]; then
4794847d80SXianjun Jiao  SPI_DEVNAME="spi1.0"
4894847d80SXianjun Jiao  DDS_DEVNAME="99024000.cf-ad9361-dds-core-lpc"
4994847d80SXianjun Jiao  ADC_DEVNAME="99020000.cf-ad9361-lpc"
5094847d80SXianjun Jiaoelse
5194847d80SXianjun Jiao  SPI_DEVNAME="spi0.0"
5294847d80SXianjun Jiao  DDS_DEVNAME="79024000.cf-ad9361-dds-core-lpc"
5394847d80SXianjun Jiao  ADC_DEVNAME="79020000.cf-ad9361-lpc"
5494847d80SXianjun Jiaofi
5594847d80SXianjun Jiao
5694847d80SXianjun Jiaowhile [ ! -d "/sys/bus/spi/drivers/ad9361/$SPI_DEVNAME" ]
5794847d80SXianjun Jiaodo
5894847d80SXianjun Jiao   echo "Waiting for /sys/bus/spi/drivers/ad9361/$SPI_DEVNAME"
5994847d80SXianjun Jiao   sleep 0.2
6094847d80SXianjun Jiaodone
6194847d80SXianjun Jiaocd /sys/bus/spi/drivers/ad9361/
6294847d80SXianjun Jiaoecho $SPI_DEVNAME > unbind
6394847d80SXianjun Jiaoecho $SPI_DEVNAME > bind
6494847d80SXianjun Jiao
65*e3155ac1SXianjun Jiao#while [ ! -d "/sys/bus/platform/drivers/cf_axi_dds/$DDS_DEVNAME" ]
66*e3155ac1SXianjun Jiao#do
67*e3155ac1SXianjun Jiao#   echo "Waiting for /sys/bus/platform/drivers/cf_axi_dds/$DDS_DEVNAME"
68*e3155ac1SXianjun Jiao#   sleep 0.2
69*e3155ac1SXianjun Jiao#done
70*e3155ac1SXianjun Jiao#cd /sys/bus/platform/drivers/cf_axi_dds/
71*e3155ac1SXianjun Jiao#echo $DDS_DEVNAME  > unbind
72*e3155ac1SXianjun Jiao#echo $DDS_DEVNAME  > bind
7394847d80SXianjun Jiao
7494847d80SXianjun Jiaowhile [ ! -d "/sys/bus/platform/drivers/cf_axi_adc/$ADC_DEVNAME" ]
7594847d80SXianjun Jiaodo
7694847d80SXianjun Jiao   echo "Waiting for /sys/bus/platform/drivers/cf_axi_adc/$ADC_DEVNAME"
7794847d80SXianjun Jiao   sleep 0.2
7894847d80SXianjun Jiaodone
7994847d80SXianjun Jiaocd /sys/bus/platform/drivers/cf_axi_adc/
8094847d80SXianjun Jiaoecho $ADC_DEVNAME  > unbind
8194847d80SXianjun Jiaoecho $ADC_DEVNAME  > bind
8294847d80SXianjun Jiao
8394847d80SXianjun Jiaoset +x
84