xref: /openwifi/user_space/load_fpga_img.sh (revision 94847d8099d02464386e2c89892d4d135cf864f7)
1*94847d80SXianjun Jiao#!/bin/bash
2*94847d80SXianjun Jiao
3*94847d80SXianjun Jiao# Author: Xianjun Jiao
4*94847d80SXianjun Jiao# SPDX-FileCopyrightText: 2022 UGent
5*94847d80SXianjun Jiao# SPDX-License-Identifier: AGPL-3.0-or-later
6*94847d80SXianjun Jiao
7*94847d80SXianjun Jiao# get fpga image file name
8*94847d80SXianjun Jiaoif [[ -n $1 ]]; then
9*94847d80SXianjun Jiao  fpga_img_filename=$1
10*94847d80SXianjun Jiaoelse
11*94847d80SXianjun Jiao  fpga_img_filename=system_top.bit.bin
12*94847d80SXianjun Jiaofi
13*94847d80SXianjun Jiao
14*94847d80SXianjun Jiaofpga_type=$(cat /proc/device-tree/compatible)
15*94847d80SXianjun Jiaofpga_img_filename_core=${fpga_img_filename##*/}
16*94847d80SXianjun Jiaoecho $fpga_type
17*94847d80SXianjun Jiaoecho $fpga_img_filename
18*94847d80SXianjun Jiaoecho $fpga_img_filename_core
19*94847d80SXianjun Jiao
20*94847d80SXianjun Jiaoset -x
21*94847d80SXianjun Jiao
22*94847d80SXianjun Jiaoifconfig sdr0 down
23*94847d80SXianjun Jiaormmod sdr
24*94847d80SXianjun Jiao# rmmod mac80211
25*94847d80SXianjun Jiao# rmmod cfg80211
26*94847d80SXianjun Jiao# rmmod ad9361_drv
27*94847d80SXianjun Jiao# rmmod xilinx_dma.ko
28*94847d80SXianjun Jiaormmod openofdm_rx
29*94847d80SXianjun Jiaormmod openofdm_tx
30*94847d80SXianjun Jiaormmod rx_intf
31*94847d80SXianjun Jiaormmod tx_intf
32*94847d80SXianjun Jiaormmod xpu
33*94847d80SXianjun Jiao
34*94847d80SXianjun Jiaosleep 1
35*94847d80SXianjun Jiao
36*94847d80SXianjun Jiaoecho 0 > /sys/class/fpga_manager/fpga0/flags
37*94847d80SXianjun Jiaomkdir -p /lib/firmware
38*94847d80SXianjun Jiaocp $fpga_img_filename /lib/firmware/
39*94847d80SXianjun Jiaoecho $fpga_img_filename_core > /sys/class/fpga_manager/fpga0/firmware
40*94847d80SXianjun Jiao
41*94847d80SXianjun Jiao# insmod ad9361_drv.ko
42*94847d80SXianjun Jiao# sleep 1
43*94847d80SXianjun Jiao
44*94847d80SXianjun Jiaoif [ "$fpga_type" != "xlnx,zynq-7000" ]; then
45*94847d80SXianjun Jiao  SPI_DEVNAME="spi1.0"
46*94847d80SXianjun Jiao  DDS_DEVNAME="99024000.cf-ad9361-dds-core-lpc"
47*94847d80SXianjun Jiao  ADC_DEVNAME="99020000.cf-ad9361-lpc"
48*94847d80SXianjun Jiaoelse
49*94847d80SXianjun Jiao  SPI_DEVNAME="spi0.0"
50*94847d80SXianjun Jiao  DDS_DEVNAME="79024000.cf-ad9361-dds-core-lpc"
51*94847d80SXianjun Jiao  ADC_DEVNAME="79020000.cf-ad9361-lpc"
52*94847d80SXianjun Jiaofi
53*94847d80SXianjun Jiao
54*94847d80SXianjun Jiaowhile [ ! -d "/sys/bus/spi/drivers/ad9361/$SPI_DEVNAME" ]
55*94847d80SXianjun Jiaodo
56*94847d80SXianjun Jiao   echo "Waiting for /sys/bus/spi/drivers/ad9361/$SPI_DEVNAME"
57*94847d80SXianjun Jiao   sleep 0.2
58*94847d80SXianjun Jiaodone
59*94847d80SXianjun Jiaocd /sys/bus/spi/drivers/ad9361/
60*94847d80SXianjun Jiaoecho $SPI_DEVNAME > unbind
61*94847d80SXianjun Jiaoecho $SPI_DEVNAME > bind
62*94847d80SXianjun Jiao
63*94847d80SXianjun Jiaowhile [ ! -d "/sys/bus/platform/drivers/cf_axi_dds/$DDS_DEVNAME" ]
64*94847d80SXianjun Jiaodo
65*94847d80SXianjun Jiao   echo "Waiting for /sys/bus/platform/drivers/cf_axi_dds/$DDS_DEVNAME"
66*94847d80SXianjun Jiao   sleep 0.2
67*94847d80SXianjun Jiaodone
68*94847d80SXianjun Jiaocd /sys/bus/platform/drivers/cf_axi_dds/
69*94847d80SXianjun Jiaoecho $DDS_DEVNAME  > unbind
70*94847d80SXianjun Jiaoecho $DDS_DEVNAME  > bind
71*94847d80SXianjun Jiao
72*94847d80SXianjun Jiaowhile [ ! -d "/sys/bus/platform/drivers/cf_axi_adc/$ADC_DEVNAME" ]
73*94847d80SXianjun Jiaodo
74*94847d80SXianjun Jiao   echo "Waiting for /sys/bus/platform/drivers/cf_axi_adc/$ADC_DEVNAME"
75*94847d80SXianjun Jiao   sleep 0.2
76*94847d80SXianjun Jiaodone
77*94847d80SXianjun Jiaocd /sys/bus/platform/drivers/cf_axi_adc/
78*94847d80SXianjun Jiaoecho $ADC_DEVNAME  > unbind
79*94847d80SXianjun Jiaoecho $ADC_DEVNAME  > bind
80*94847d80SXianjun Jiao
81*94847d80SXianjun Jiaoset +x
82