MityCAMAC: Difference between revisions

From DaqWiki
Jump to navigation Jump to search
mNo edit summary
 
(45 intermediate revisions by the same user not shown)
Line 1: Line 1:
= CriticalLink MityARM =
= Links =
= Links =


* http://www.ti.com/lsds/ti/dsp/support/dev_tool/ccs_overview.page
* [[MityARM]]
* http://support.criticallink.com/redmine/projects/armc8-platforms/wiki
* inventory https://ladd00.triumf.ca/~daqinv/inventory3/public/index.php/daqinv/lists/162
* http://support.criticallink.com/redmine/projects/armc8-platforms/wiki/Root_Filesystem
* (dead) redmine project https://edev.triumf.ca/projects/edevel00195
* http://arago-project.org/wiki/index.php/Main_Page
* (dead) svn checkout https://edev.triumf.ca/svn/edevel00195
* http://support.criticallink.com/redmine/projects/armc8-platforms/wiki/Installing_Open_Embedded
* https://bitbucket.org/ttriumfdaq/gpmc-camac/src/master/
* http://processors.wiki.ti.com/index.php/AM335x_release_download_page
* firmware sources: see mess in daq00:/home/olchansk/daq/CAMAC-Crate-Controller. hint: never converted from svn to git.
* http://processors.wiki.ti.com/index.php/Sitara_SDK_5.05.00_Release_Notes
* http://downloads.ti.com/dsps/dsps_public_sw/am_bu/sdk/AM335xSDK/latest/exports/sitara-linuxsdk-sdg-05.05.00.00.pdf
* http://www.ti.com/tool/pinmuxtool


= Useful links =
= Getting Started =


* http://www.mitydsp.com/products-services/cpu-engines/mityarm-3359/
* For general information on the Critical Link ARM SOM, start here [[MityARM]]
* http://www.mitydsp.com/products-services/base-boards/mityarm-335x-dev-kit/
* Follow instruction at [[MityARM]] to login into Linux
* http://www.mitydsp.com/images/upload/File/MityARM-335X%20Development%20Kit.pdf
* Build and install GPMC-CAMAC drivers
* http://software-dl.ti.com/dsps/dsps_public_sw/am_bu/sdk/AM335xSDK/latest/index_FDS.html
* Load the FPGA firmware
 
* Run CAMAC tests
= minicom settings =
 
<pre>
    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyUSB0                              |
    | B - Lockfile Location    : /var/lock                                |
    | C -  Callin Program      :                                          |
    | D -  Callout Program      :                                          |
    | E -    Bps/Par/Bits      : 115200 8N1                                |
    | F - Hardware Flow Control : No                                        |
    | G - Software Flow Control : No                                        |
    |                                                                      |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+
 
+--------------------[Modem and dialing parameter setup]---------------------+
|                                                                            |
| A - Init string .........                                                  |
| B - Reset string ........                                                  |
| C - Dialing prefix #1.... ATDT                                            |
| D - Dialing suffix #1.... ^M                                              |
| E - Dialing prefix #2.... ATDP                                            |
| F - Dialing suffix #2.... ^M                                              |
| G - Dialing prefix #3.... ATX1DT                                          |
| H - Dialing suffix #3.... ;X4D^M                                          |
| I - Connect string ...... CONNECT                                          |
| J - No connect strings .. NO CARRIER            BUSY                      |
|                          NO DIALTONE          VOICE                      |
| K - Hang-up string ...... ~~+++~~ATH^M                                    |
| L - Dial cancel string .. ^M                                              |
|                                                                            |
| M - Dial time ........... 45      Q - Auto bps detect ..... No            |
| N - Delay before redial . 2      R - Modem has DCD line .. Yes            |
| O - Number of tries ..... 10      S - Status line shows ... DTE speed      |
| P - DTR drop time (0=no). 1      T - Multi-line untag .... No            |
|                                                                            |
| Change which setting?      (Return or Esc to exit)                        |
+----------------------------------------------------------------------------+
</pre>


= BOOTCONFIG =
= BOOTCONFIG =
Line 69: Line 25:
** boot from on-SoM NAND: all open, close [2], [3], [8], [9], [10], [11] (6 jumpers)
** boot from on-SoM NAND: all open, close [2], [3], [8], [9], [10], [11] (6 jumpers)


* CAMAC board:
* CAMAC board Rev1:
** top-to-bottom: B0..4,G0..5,R0 correspond to LCD_DATA[0..11] are SYSBOOT[0..11]
** top-to-bottom: B0..4,G0..5,R0 correspond to LCD_DATA[0..11] are SYSBOOT[0..11]
** boot from SD: all open, B3 closed
** boot from SD: all open, B3 closed
Line 119: Line 75:
= GPMC interface =
= GPMC interface =


0x8 = CS0
<pre>
0x9 = CS1
0x8 = CS0 - on-SoM NAND flash (boot loader)
0xa = CS2
0x9 = CS1 - not used
0xb = CS3
0xa = CS2 - not used
0xb = CS3 - CAMAC interface
</pre>


./gpmc 0x0a000000 0x12ff5678
./gpmc 0x0a000000 0x12ff5678
Line 134: Line 92:
* remaining address bits are used for encoding CAMAC operations
* remaining address bits are used for encoding CAMAC operations
* all GPMC registers are 32-bit wide
* all GPMC registers are 32-bit wide
== LEDs (Rev1) ==
<pre>
                      ----
gpmc            0x0008 |OO| 0x0040 ACB RQ (lemo output "request")
busy            0x0010 |OO| 0x0080 grant_in (lemo input)
ACB RQ          0x0020 |OO| 0x0100 ACB RI
-----------------------------------------------------
</pre>
== Front Panel LEMO connectors (Rev1) ==
<pre>
top
|
| busy out
| inhibit in
| grant in
| grant out
| request out
|
bottom
</pre>
== Install the software ==
* Get and build the software tools
<pre>
ssh daquser@armdaq02
mkdir packages
cd packages
git clone https://bitbucket.org/ttriumfdaq/gpmc-camac.git
cd gpmc-camac
make CROSS_COMPILE=
ls -l gpmc camac srunner_gpmc
</pre>
<pre>
-bash-4.2$ ls -l gpmc camac srunner_gpmc
-rwxrwxr-x 1 daquser users 668337 Dec  6 22:43 camac
-rwxrwxr-x 1 daquser users 654454 Dec  6 22:43 gpmc
-rwxrwxr-x 1 daquser users 692961 Dec  6 22:43 srunner_gpmc
-bash-4.2$
</pre>
* build kernel driver
<pre>
cd gpmc-camac/kernel-module
make CROSS_COMPILE=
ls -l gpmc_camac_module.ko
</pre>
<pre>
-bash-4.2$ ls -l gpmc_camac_module.ko
-rw-rw-r-- 1 daquser users 93154 Dec  6 22:48 gpmc_camac_module.ko
-bash-4.2$
</pre>
* if /daq/daqshare/olchansk is not available, building the kernel module will fail. To proceed, get the correct kernel sources and cross-compiler:
<pre>
cd ~/packages
git clone https://bitbucket.org/ttriumfdaq/linux-mityarm-335x.git
git clone https://dd1@bitbucket.org/ttriumfdaq/u-boot-mityarm-335x.git # not needed for building kernel module
cd gpmc-camac/kernel-module
edit Makefile, change KDIR to $HOME/packages/linux-mityarm-335x and CROSS_COMPILE=location of cross-compiler tools
</pre>
* Note: gpmc-camac kernel module for Linux kernel uImage-KO10 (uname -a "Linux armdaq02.triumf.ca 3.2.0-00377-gb23ecfb-dirty #33 Sun Nov 13 05:10:32 UTC 2016 armv7l armv7l armv7l GNU/Linux") *MUST* be built using native gcc (make CROSS_COMPILE=).
* install kernel drivers
<pre>
cd $HOME/packages/gpmc-camac/kernel-module
make install
su - ### login as root
### follow instructions printed by "make install"
</pre>
* verify that debugfs is mounted on /sys/kernel/debug: ls -l /sys/kernel/debug/omap_mux/
* run /etc/rc.local or reboot
== Firmware revisions ==
Run "./camac" to read the firmware revision number (reg0)
* 0x14120723 - ???
* 0x15012159 - working Rev1, old/new "done" bit.
* 0x15120106 - Rev2 AUX (ok on Rev1 board)
* 0x15120946 - Rev2 MASTER
* note: LAM register does not seem to work in these firmware (register 7 LAM bits are always 1)
== Firmware sources ==
Firmware sources are stored on the edev redmine system:
<pre>
svn checkout https://edev.triumf.ca/svn/edevel00195
</pre>


== Firmware update ==
== Firmware update ==


* test the activer serial flash programmer interface
* test the active serial flash programmer interface
<pre>
<pre>
$ ./srunner_gpmc -id -16 /dev/null
$ ./srunner_gpmc -id -16 /dev/null
================================================================
SRunner Version 1.2-GPMC-0xABCD-KO3 (POF, JIC support)
Altera Corporation
Configuration Devices: EPCS1, EPCS4, EPCS16, EPCS64 and EPCS128
================================================================


Operation: Identify EPCS Device
Operation: Identify EPCS Device
Line 154: Line 204:


Operation Completed!!!
Operation Completed!!!
</pre>
</pre>


Line 161: Line 210:
<pre>
<pre>
$ ./srunner_gpmc -program -16 CAMAC_Crat_Controller.pof
$ ./srunner_gpmc -program -16 CAMAC_Crat_Controller.pof
================================================================


Operation: Programming EPCS
Operation: Programming EPCS
Line 269: Line 316:


Read-only 32-bit register:
Read-only 32-bit register:
<pre>
<pre>
31 - EXT_BUSY
31 - EXT_BUSY
Line 275: Line 323:
28 - EXT_GRANT_OUT
28 - EXT_GRANT_OUT
--
--
27 - ACL
27 - ACB ACL
26 - RI
26 - ACB RI
25 - not used
25 - ACB RQ
24 - not used
24 - not used
--
--
23..0 - CAMAC LAM from slots 24..1
23..0 - CAMAC LAM from slots 24..1
</pre>
== LEDs ==
<pre>
                      ----
gpmc            0x0008 |OO| 0x0040
busy            0x0010 |OO| 0x0080
inhibit        0x0020 |OO| 0x0100
-----------------------------------------------------
</pre>
</pre>


Line 295: Line 334:


<pre>
<pre>
./gpmc # initialize the GPMC interface
./gpmc 0x0b000000 # read firmware revision
./gpmc 0x0b000000 # read firmware revision
./gpmc 0x0b001000 2 # reconfigure the fpga
./gpmc 0x0b001000 2 # reconfigure the fpga
Line 309: Line 349:
</pre>
</pre>


= pinmux through debugfs =
* mount debugfs:
** echo "none /sys/kernel/debug debugfs defaults 0 0" >> /etc/fstab
** mount -a
** ls -l /sys/kernel/debug/omap_mux/
* show pinmux state:
** cat /sys/kernel/debug/omap_mux/board/core  | grep GPMC
* enable GPMC pins:
<pre>
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad8    ### AD pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad9    ### AD pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad10    ### AD pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad11    ### AD pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad12    ### AD pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad13    ### AD pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad14    ### AD pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_ad15    ### AD pin
echo 8 >> /sys/kernel/debug/omap_mux/gpmc_csn1    ### CS pin
echo 8 >> /sys/kernel/debug/omap_mux/gpmc_csn2    ### CS pin
echo 8 >> /sys/kernel/debug/omap_mux/gpmc_csn3    ### CS pin
echo 8 >> /sys/kernel/debug/omap_mux/gpmc_ben1    ### output pin
echo 30 >> /sys/kernel/debug/omap_mux/gpmc_clk    ### CLK has to be configured as in "input" pin
</pre>
= Work with the Fedora images =
* xz -d < Fedora-Minimal-armhfp-19-1-sda.raw.xz > Fedora-Minimal-armhfp-19-1-sda.raw
* fdisk -lu Fedora-Minimal-armhfp-19-1-sda.raw ### show the partition table:
<pre>
[root@ladd00 Fedora]# fdisk -lu Fedora-Minimal-armhfp-19-1-sda.raw
You must set cylinders.
You can do this from the extra functions menu.
Disk Fedora-Minimal-armhfp-19-1-sda.raw: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0007895f
                            Device Boot      Start        End      Blocks  Id  System
Fedora-Minimal-armhfp-19-1-sda.raw1            1953    1001953      500000+  83  Linux
Partition 1 does not end on cylinder boundary.
Fedora-Minimal-armhfp-19-1-sda.raw2        1001954    2001953      500000  83  Linux
Partition 2 does not end on cylinder boundary.
Fedora-Minimal-armhfp-19-1-sda.raw3        2001954    14697265    6347656  83  Linux
Partition 3 does not end on cylinder boundary.
</pre>
* mount -r -o loop,offset=1025000448 Fedora-Minimal-armhfp-19-1-sda.raw /mnt/tmp ### the offset value is the partition "Start" value multiplied by 512.
= NAND boot configuration =
* information from here: http://support.criticallink.com/redmine/projects/armc8-platforms/wiki/UBIFS_Nand_Boot
* boot MityARM CPU, login as root
* install MLO and u-boot:
<pre>
#yum install mtd-utils # get nandwrite and flash_erase
#cd /media/mmcblk0p1/
#mount /dev/mmcblk0p1 /mnt/tmp
#cd /mnt/tmp
# the MicroSD card labeled "F20" has the correct MLO and uboot in ~root:
cd ~root
flash_erase /dev/mtd1 0 0
nandwrite -p /dev/mtd1 MLO
flash_erase /dev/mtd2 0 0
nandwrite -p /dev/mtd2 MLO
flash_erase /dev/mtd3 0 0
nandwrite -p /dev/mtd3 MLO
flash_erase /dev/mtd4 0 0
nandwrite -p /dev/mtd4 MLO
flash_erase /dev/mtd5 0 0
nandwrite -p /dev/mtd5 u-boot.img
</pre>
* setup boot jumpers to boot from NAND flash:
<pre>
BOOTCONFIG [0..11]
::[:][:]::::[:][:][:][:]
</pre>
* (to boot from MMC/SD flash)
<pre>
BOOTCONFIG [0..11]
:::[:]::::::::
</pre>
* power off
* connect serial console
* power on
* on serial console: press <space> to get into the uboot shell
* (notice how u-boot complains about loading default environememt)
* on serial console, type these commands:
<pre>
setenv bootcmd_orig \'${bootcmd}\'
setenv bootcmd 'run net_boot'
setenv rootpath
saveenv
</pre>
<pre>
U-Boot# setenv bootcmd_orig \'${bootcmd}\'
U-Boot# setenv bootcmd 'run net_boot'
U-Boot# setenv rootpath
U-Boot# saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x300000 -- 100% complete.
Writing to NAND... OK
U-Boot#
</pre>
* cycle power
* again, press space to get into the uboto shell
* (notice how the complaints about default environement are gone)
* run net_boot
* (on dhcp server, observe how we get an IP address and try to load the linux kernel)
* on the dhcp server, add this to dhcpd.conf:
<pre>
<pre>
group {
./gpmc # initialize the GPMC interface
option routers 142.90.100.18;
./camac # read firmware revision, etc
option subnet-mask 255.255.224.0;
./camac --reboot # reboot the FPGA
option domain-name "triumf.ca";
./camac --scan # scan CAMAC crate
option domain-name-servers 142.90.100.19, 142.90.100.68;
./camac --gpmctest1 # test GPMC bus integrity - read/write test
default-lease-time infinite;
./camac --gpmctest2 # test GPMC bus integrity - both data and address read/write test
max-lease-time infinite;
./camac --testleds # test front panel LEDs - they should blink at 1Hz
 
./camac --testlemo # test front panel LEMOs - the voltages should alternate between 0V and ???V at 1Hz
filename "mityarm/uImage";
./camac r # read CAMAC register r, e.g. \"./camac 0\" to read register 0 - firmware revision
        next-server ladd00;
./camac w v # write CAMAC register w with value v, e.g. \"./camac 2 0xabcd\" to write 0xabcd to test register 2
option root-path "142.90.111.60:/data0/root/%s,v3,tcp,hard";
./camac n f a w # run a CAMAC cycle with given N, F, A, write data W
 
host lxdaq30-eth0 { fixed-address lxdaq30; option host-name "lxdaq30.triumf.ca"; hardware ethernet D4:94:A1:83:61:50; } # mityarm
        host lxdaq30-eth1 { fixed-address lxdaq30; option host-name "lxdaq30.triumf.ca"; hardware ethernet D4:94:A1:83:61:51; } # mityarm
}
</pre>
* on the dhcp server, put uImage from the MityArm SD flash card into /var/lib/tftpboot/mityarm
* on the dhcp server, "server dhcpd restart", "tail -100f /var/log/messages"
* on the MityArm serial console, reset, press <space> to get the u-boot prompt, say "run net_boot"
* on the dhcp server, observe we get an IP address, we tftp load "uImage", try to mount the root filesystem
* on the MityArm serial console, observe we get an IP address, tftp load the kernel, start the kernel, try to mount the root filesystem.
* root filesystem should be at /data0/root/lxdaq30.triumf.ca created by "rsync -av" of the SDflash root filesystem.
 
= Build U-Boot =
 
instructions: http://support.criticallink.com/redmine/projects/armc8-platforms/wiki/Das_U-Boot_Port
 
<pre>
git clone git://support.criticallink.com/home/git/u-boot-mityarm-335x.git
cd u-boot-mityarm-335x
#git pull
#git checkout release_20140214
git checkout u-boot-2013.10
make ARCH=arm CROSS_COMPILE=/ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/arm-arago-linux-gnueabi- mityarm335x_4kpage_config
make ARCH=arm CROSS_COMPILE=/ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/arm-arago-linux-gnueabi- mityarm335x_4kpage
</pre>
 
This creates:
 
<pre>
ladd00:u-boot-mityarm-335x$ ls -l MLO u-boot* tools/mkimage
-rw-r--r-- 1 olchansk users  38643 Dec  5 16:39 MLO
-rwxr-xr-x 1 olchansk users  70320 Dec  5 16:38 tools/mkimage
-rwxr-xr-x 1 olchansk users 1769651 Dec  5 16:39 u-boot
-rw-r--r-- 1 olchansk users  373252 Dec  5 16:39 u-boot.bin
-rw-r--r-- 1 olchansk users  373316 Dec  5 16:39 u-boot.img
-rw-r--r-- 1 olchansk users    846 Dec  5 16:39 u-boot.lds
-rw-r--r-- 1 olchansk users  107524 Dec  5 16:39 u-boot.map
-rw-r--r-- 1 olchansk users 1119828 Dec  5 16:39 u-boot.srec
ladd00:u-boot-mityarm-335x$
</pre>
 
The files MLO and u-boot.img are used to boot the linux kernel.
 
The executable file tools/mkimage is used to build the linux kernel.
 
Build fw_printenv:
 
<pre>
1082  rm tools/env/fw_printenv
1083  make env HOSTCC=/ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/arm-arago-linux-gnueabi-gcc
</pre>
 
= Build linux kernel =
 
instructions: http://support.criticallink.com/redmine/projects/armc8-platforms/wiki/Linux_Kernel
 
<pre>
git clone git://support.criticallink.com/home/git/linux-mityarm-335x.git
cd linux-mityarm-335x
git checkout mityarm-linux-v3.2
cp ../am335x-pm-firmware.bin ./firmware/
make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- mityarm-335x-devkit_defconfig
make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- menuconfig
make ARCH=arm CROSS_COMPILE=/ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/arm-arago-linux-gnueabi- uImage
make ARCH=arm CROSS_COMPILE=/ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/arm-arago-linux-gnueabi- modules
make ARCH=arm CROSS_COMPILE=/ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/arm-arago-linux-gnueabi- INSTALL_MOD_PATH=../rootfs modules_install
</pre>
 
To build the kernel for the CAMAC board: (there are no kernel modules to build or install)
 
<pre>
git checkout triumf/camac
make ARCH=arm CROSS_COMPILE=/ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf- uImage -j6
cp arch/arm/boot/uImage /var/lib/tftpboot/mityarm/uImage
</pre>
 
If the above complains about missing "mkimage", do this:
<pre>
cp -pv ../u-boot-mityarm-335x/tools/mkimage /ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/arm-arago-linux-gnueabi-mkimage
cp -pv ../u-boot-mityarm-335x/tools/mkimage /ladd/data0/olchansk/MityARM/TI/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf-mkimage
</pre>
</pre>


Line 527: Line 370:
** 8MB serial NOR flash: SPI1 interface
** 8MB serial NOR flash: SPI1 interface
** configuration EPROM: I2C1 interface (module serial number, ethernet MAC, etc)
** configuration EPROM: I2C1 interface (module serial number, ethernet MAC, etc)
** 256MB DDR2 or 512MB DDR3 RAM, 16-bit interface, 300MHz
** 256MB DDR2 or 512MB DDR3 RAM, 16-bit interface, 300 or 400MHz
** power management chip tps65910: I2C1, I2C2 interface, http://ladd00.triumf.ca/~olchansk/MityARM/Docs/tps65910.pdf
** power management chip tps65910: I2C1, I2C2 interface, http://ladd00.triumf.ca/~olchansk/MityARM/Docs/tps65910.pdf
* on CAMAC board:
* on CAMAC board:
** Micrel KSZ9021RL GigE ethernet PHY: Davinci_MDIO interface http://ladd00.triumf.ca/~olchansk/MityARM/Docs/ksz9021rl-rn_ds.pdf
** Micrel KSZ9021RL GigE ethernet PHY: Davinci_MDIO interface http://ladd00.triumf.ca/~olchansk/MityARM/Docs/ksz9021rl-rn_ds.pdf
** Altera Cyclone4 FPGA EP4CE30F23: GPMC bus
** Altera Cyclone4 FPGA EP4CE30F23: GPMC bus
= Create initramfs =
<pre>
cd .../rootfs
find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
</pre>
* in linux kernel menuconfig set initramfs to .../rootfs.cpio.gz
* make sure there is a "/init" in the initramfs - that's what is executed first
= Access U-Boot environement from Linux =
* create /etc/fw_env.config
<pre>
# MTD device name      Device offset  Env. size      Flash sector size
/dev/mtd6 0 0x20000 0x40000
</pre>
* run: /ladd/data0/olchansk/MityARM/Fedora/Fedora-Minimal-armhfp-19-1-part3/usr/bin/fw_printenv
* get fw_printenv for Fedora20: yum install uboot-tools
Note: ENV_SIZE comes from uboot include/configs/mityarm335x.h where it is defined as
<pre>
/* Always 128 KiB env size */
#define CONFIG_ENV_SIZE  (128 << 10)
</pre>
= Fedora 20 setup =
* disable unwanted services
<pre>
systemctl disable cups.path
systemctl disable systemd-ask-password-plymouth.path
systemctl disable systemd-ask-password-wall.path
systemctl disable auditd.service
systemctl disable firewalld.service
systemctl disable lvm2-lvmetad.service
systemctl disable lvm2-monitor.service
systemctl disable ModemManager.service
systemctl disable rngd.service
systemctl disable cups.socket
systemctl disable lvm2-lvmetad.socket
systemctl disable dm-event.socket
systemctl disable iscsid.socket
systemctl disable iscsiuio.socket
systemctl disable pcscd.socket
systemctl disable cryptsetup.target
systemctl disable NetworkManager
</pre>
* enable /etc/rc.local
<pre>
touch /etc/rc.d/rc.local
chmod a+rx /etc/rc.d/rc.local
ln -s rc.d/rc.local /etc/rc.local
</pre>
= Network boot configuration =
* add this to dhcpd.conf:
<pre>
#
# group for network booting MityARM machines
#
group {
        option routers 142.90.100.18;
        option subnet-mask 255.255.224.0;
        option domain-name "triumf.ca";
        option domain-name-servers 142.90.100.19, 142.90.100.68;
        default-lease-time infinite;
        max-lease-time infinite;
        filename "mityarm/uImage-KO7";
        next-server ladd00;
        option root-path "142.90.111.60:/data0/root/%s,v3,tcp,hard";
        host lxdaq30-512MB-linux { fixed-address lxdaq30; option host-name "lxdaq30.triumf.ca"; hardware ethernet 78:c5:e5:be:6b:6f; } # mityarm
        host lxdaq30-512MB-uboot { fixed-address lxdaq30; option host-name "lxdaq30.triumf.ca"; hardware ethernet 78:c5:e5:be:6b:70; } # mityarm
}
</pre>
* note how there are 2 entries for each mityarm module: one for uboot and one for linux - they seem to use different MAC addresses (different by 1)
* populate /var/lib/tftpboot/mityarm:
<pre>
mkdir -p /var/lib/tftpboot/mityarm
cd /var/lib/tftpboot/mityarm
wget http://daqshare.triumf.ca/~olchansk/MityARM/uImage-KO7
</pre>
* populate the NFS-Root filesystem:
<pre>
cd /nfsroot
wget http://daqshare.triumf.ca/~olchansk/MityARM/lxdaq30.triumf.ca-fedora20-20140811a.tgz
untar
rename to lxdaq30.triumf.ca (to match "%s" in DHCP root-path)
export to lxdaq30.triumf.ca with options (rw,async,no_root_squash)
add your ssh key to .../root/.ssh/authorized_keys
</pre>
* try to boot, look for DHCP messages (get the IP address), TFTP messages (loads uImage), NFS images (mounts the root filesystem)
* try to ping, try to ssh


= End =
= End =


AAA
AAA

Latest revision as of 14:00, 9 September 2021

Links

Getting Started

  • For general information on the Critical Link ARM SOM, start here MityARM
  • Follow instruction at MityARM to login into Linux
  • Build and install GPMC-CAMAC drivers
  • Load the FPGA firmware
  • Run CAMAC tests

BOOTCONFIG

BOOTCONFIG settings:

  • CL eval board:
    • BOOTCONFIG[0..11] are SYSBOOT[0..11]
    • boot from SD: all open, [3] closed
    • boot from on-SoM NAND: all open, close [2], [3], [8], [9], [10], [11] (6 jumpers)
  • CAMAC board Rev1:
    • top-to-bottom: B0..4,G0..5,R0 correspond to LCD_DATA[0..11] are SYSBOOT[0..11]
    • boot from SD: all open, B3 closed
    • boot from on-SoM NAND: all open, close B2, B3, G3, G4, G5, R0 (6 jumpers)

NOTES:

  • boot from EMAC1 requires PHY connection to RGMII1, CLeval and CAMAC boards connected PHY to RGMII2.

SYSBOOT modes: http://ladd00.triumf.ca/~olchansk/MityARM/Docs/spruh73g.pdf table 26-7

SYSBOOT[4..0]
00000 - reserved
00001 - UART0
00010 - UART0
00011 - UART0
00100 - UART0
00101 - UART0
00110 - EMAC1, SYSBOOT[7..6]: 00=MII, 01=RMII, 10=reserved, 11=RGMII
00111 - EMAC1
01000 - EMAC1
01001 - EMAC1
01010 - EMAC1
01011 - USB0
01100 - USB0
01101 - USB0
01110 - reserved
01111 - fast external boot
10000 - XIP
10001 - XIP
10010 - NAND
10011 - NAND
10100 - NAND
10101 - NAND-I2C
10110 - SPI0
10111 - MMC0 <---- default (boot from SD flash) - other bits - don't care
11000 - SPI0
11001 - SPI0
11010 - XIP
11011 - XIP
11100 - MMC1
11101 - reserved
11110 - reserved
11111 - fast external boot

GPMC interface

0x8 = CS0 - on-SoM NAND flash (boot loader)
0x9 = CS1 - not used
0xa = CS2 - not used
0xb = CS3 - CAMAC interface

./gpmc 0x0a000000 0x12ff5678

CAMAC interface

General information:

  • CAMAC interface responds to GPMC CS3
  • the host CPU should always issue 32-bit read and write cycles on even addresses (last 2 bits of address set to 0)
  • address bits 15..12 address the FPGA GPMC registers (4 bits, 16 registers)
  • remaining address bits are used for encoding CAMAC operations
  • all GPMC registers are 32-bit wide

LEDs (Rev1)

                       ----
gpmc            0x0008 |OO| 0x0040 ACB RQ (lemo output "request")
busy            0x0010 |OO| 0x0080 grant_in (lemo input)
ACB RQ          0x0020 |OO| 0x0100 ACB RI
-----------------------------------------------------

Front Panel LEMO connectors (Rev1)

top
|
| busy out
| inhibit in
| grant in
| grant out
| request out
|
bottom

Install the software

  • Get and build the software tools
ssh daquser@armdaq02
mkdir packages
cd packages
git clone https://bitbucket.org/ttriumfdaq/gpmc-camac.git
cd gpmc-camac
make CROSS_COMPILE=
ls -l gpmc camac srunner_gpmc
-bash-4.2$ ls -l gpmc camac srunner_gpmc
-rwxrwxr-x 1 daquser users 668337 Dec  6 22:43 camac
-rwxrwxr-x 1 daquser users 654454 Dec  6 22:43 gpmc
-rwxrwxr-x 1 daquser users 692961 Dec  6 22:43 srunner_gpmc
-bash-4.2$ 
  • build kernel driver
cd gpmc-camac/kernel-module
make CROSS_COMPILE=
ls -l gpmc_camac_module.ko
-bash-4.2$ ls -l gpmc_camac_module.ko
-rw-rw-r-- 1 daquser users 93154 Dec  6 22:48 gpmc_camac_module.ko
-bash-4.2$ 
  • if /daq/daqshare/olchansk is not available, building the kernel module will fail. To proceed, get the correct kernel sources and cross-compiler:
cd ~/packages
git clone https://bitbucket.org/ttriumfdaq/linux-mityarm-335x.git
git clone https://dd1@bitbucket.org/ttriumfdaq/u-boot-mityarm-335x.git # not needed for building kernel module
cd gpmc-camac/kernel-module
edit Makefile, change KDIR to $HOME/packages/linux-mityarm-335x and CROSS_COMPILE=location of cross-compiler tools
  • Note: gpmc-camac kernel module for Linux kernel uImage-KO10 (uname -a "Linux armdaq02.triumf.ca 3.2.0-00377-gb23ecfb-dirty #33 Sun Nov 13 05:10:32 UTC 2016 armv7l armv7l armv7l GNU/Linux") *MUST* be built using native gcc (make CROSS_COMPILE=).
  • install kernel drivers
cd $HOME/packages/gpmc-camac/kernel-module
make install
su - ### login as root
### follow instructions printed by "make install"
  • verify that debugfs is mounted on /sys/kernel/debug: ls -l /sys/kernel/debug/omap_mux/
  • run /etc/rc.local or reboot

Firmware revisions

Run "./camac" to read the firmware revision number (reg0)

  • 0x14120723 - ???
  • 0x15012159 - working Rev1, old/new "done" bit.
  • 0x15120106 - Rev2 AUX (ok on Rev1 board)
  • 0x15120946 - Rev2 MASTER
  • note: LAM register does not seem to work in these firmware (register 7 LAM bits are always 1)

Firmware sources

Firmware sources are stored on the edev redmine system:

svn checkout https://edev.triumf.ca/svn/edevel00195

Firmware update

  • test the active serial flash programmer interface
$ ./srunner_gpmc -id -16 /dev/null

Operation: Identify EPCS Device
bb_open!
Info: Found GPMC 0xABCD FlashProgrammer interface.

Info: Silicon ID - 0x14 
Info: Serial Configuration Device - EPCS16

Operation Completed!!!
  • write pof file to flash memory
$ ./srunner_gpmc -program -16 CAMAC_Crat_Controller.pof

Operation: Programming EPCS
Info: Programming file: "CAMAC_Crat_Controller.pof" opened.
Info: File size: 2097359 bytes.
Skipping POF file header: start of data at 154, file size 2097359, remain 2097205, modulo 1024 = 53
Final file size 2097152
bb_open!
Info: Found GPMC 0xABCD FlashProgrammer interface.

Info: Silicon ID - 0x14 
Info: Serial Configuration Device - EPCS16
Info: Erasing...
....................Info: Erase Done
Info: Start programming process.

Info: Programming 8192 pages...
Info: Programming successful
bb_close!

Operation Completed!!!
  • reboot the FPGA
lxdaq30:LINUX$ ./camac --reboot
CAMAC firmware: 0x14120407
rebooting FPGA...
CAMAC firmware: 0x14120711
lxdaq30:LINUX$ 

Register 1 - command

Write-only 32 bit register:

command 1: CMD_reset: 0x
command 2: CMD_reconfigure
command 3: CMD_TestMode
command 4: CMD_Zero
command 5: CMD_Clear
command 6: CMD_Inhibit
command 7: CMD_WriteLED: 0xXXXX0007 -> write 0xXXXX to the LED bus

Register 2 - test read/write register

32-bit read/write register for testing GPMC bus communications

Register 3 - FPGA flash programmer

active-serial flash programmer interface (see srunner, srunner_vme and srunner_gpmc).

Register 4 and 5 - CAMAC command, write data and read data

A write cycle to the GPMC bus carries 16 bits of address and 32 bits of data:

Address 16 bits (Quartus cmd_A[15..0])
----
15..12 - GPMC register address 
--
11 - not used
10 - not used
9 - not used
8..4 - CAMAC N[4..0]
--
3 - CAMAC F[4]
2 - CAMAC_start - set this bit to 1 to trigger a CAMAC operation. Value 0 is for testing the communications without running the CAMAC sequencer.
1 - not accessible
0 - not accessible
----

Data 32 bits: (Quartus cmd_D[31..0])
----
31..28 - CAMAC F[3..0]. (CAMAC F[4] is cmd_A[3])
27..24 - CAMAC A[3..0]
--
23..0 - CAMAC write lines W[24..1]
----

To verify correct data transmission on the GPMC bus and correct latching of the data in the CAMAC part of the FPGA, the 32 bits of data can be read back through register 4 and the 16 bits of address can be read through the low 16 bits of register 5. Reading from these registers is not necessary for operating CAMAC cycles.

Register 6 - CAMAC status and read data

Read-only 32 bit register:

31 - not used
30 - not used
29 - not used
28 - BUSY_OUT
--
27 - BUSY
26 - set to 1 when CAMAC cycle is finished and new data is ready
25 - CMD_ACCPT
24 - RESPONSE
--
23..0 - CAMAC read data[24..1]

Register 7 - CAMAC LAM and interface status

Read-only 32-bit register:

31 - EXT_BUSY
30 - EXT_INHIBIT
29 - EXT_GRANT_IN
28 - EXT_GRANT_OUT
--
27 - ACB ACL
26 - ACB RI
25 - ACB RQ
24 - not used
--
23..0 - CAMAC LAM from slots 24..1

Software commands

./gpmc # initialize the GPMC interface
./gpmc 0x0b000000 # read firmware revision
./gpmc 0x0b001000 2 # reconfigure the fpga
./srunner_gpmc -id -64 /dev/null # use the flash programmer to read the flash chip identity
./srunner_gpmc -program -16 ../QUARTUS/output_files/CAMAC_Crat_Controller.pof # write POF file into the flash (remember to do an FPGA reconfigure to reboot into the new firmware)
./gpmc 0x0b001000 0x01f80007 # write to the LEDs
./gpmc 0x0b0040ac 0x00123456 # run some camac cycle
./gpmc 0x0b001000 0x80000003 # enable test mode
./gpmc 0x0b004174 0x00123456 # read from slot 23 - "manual input register"
./gpmc 0x0b00416c 0x00000000 # write to slot 22 - dataway display
./gpmc 0x0b00416c 0x00ffffff # write to slot 22 - dataway display
./gpmc 0x0b006000 # read CAMAC read data and status
./gpmc 0x0a00012c # reconfigure FPGA thorugh the CS2 line
./gpmc # initialize the GPMC interface
./camac # read firmware revision, etc
./camac --reboot # reboot the FPGA
./camac --scan # scan CAMAC crate
./camac --gpmctest1 # test GPMC bus integrity - read/write test
./camac --gpmctest2 # test GPMC bus integrity - both data and address read/write test
./camac --testleds # test front panel LEDs - they should blink at 1Hz
./camac --testlemo # test front panel LEMOs - the voltages should alternate between 0V and ???V at 1Hz
./camac r # read CAMAC register r, e.g. \"./camac 0\" to read register 0 - firmware revision
./camac w v # write CAMAC register w with value v, e.g. \"./camac 2 0xabcd\" to write 0xabcd to test register 2
./camac n f a w # run a CAMAC cycle with given N, F, A, write data W

List of on-board hardware

End

AAA