###################################################################################
#
# Neutrino 6.6.0 on the Freescale i.MX6Q Sabre-Lite Board, based on ARM Cortex A9-MPCore Platform
#
####################################################################################
#
# On-board devices:
# ----------------
#
# device:   i.MX6Q UART2
#       devc-sermx1 -e -F -S -c80000000 0x02020000,58
#
# device:   i.MX6Q I2C
#       i2c-mx35 -p 0x021A0000 -i68 -c66000000 --u 1
#       i2c-mx35 -p 0x021A4000 -i69 -c66000000 --u 2
#       i2c-mx35 -p 0x021A8000 -i70 -c66000000 --u 3
#
# device:   i.MX6Q USDHC controller
#      devb-mmcsd-mx6q-ddr3 mmcsd ioport=0x02198000,irq=56 verbose=5
#      devb-mmcsd-mx6q-ddr3 mmcsd ioport=0x0219C000,irq=57 verbose=5
#
# device:   i.MX6Q USB OTG (host mode) 
#      io-usb -c -dehci-mx28 ioport=0x02184300,irq=72,phy=0x020ca000,verbose=5,ioport=0x02184100,irq=75,phy=0x020c9000,verbose=5
#
# device:   i.MX6Q SSI Audio Controller (connected to SGTL5000 codec)
#      io-audio -d mx-mx6q-ts7970 mixer=input_mux=mic_in 
#
# device: SST 25VF016B SPI Flash Chip
#     devf-norspi-mx6_ts7970-ecspi
#
# device:   watchdog Timer
#      wdtkick
#
# device:   SRTC
# RTC:      rtc hw  or  rtc -s hw
#
# device: i.MX6Q FlexCAN
#     dev-can-mx35 can0
#
# device: i.MX6Q SATA Driver
#     devb-ahci ahci ioport=0x02200000,irq=71
############################################################################
[image=0x10800000]
[virtual=armle-v7,raw +compress] .bootstrap = {
	# Startup parameters:
	# '-c' -> configure bottom SD slot pin muxing to support Silex SDIO based WLAN module
	# '-m' -> enable D-Cache, MMU during startup, which will improve boot time if booting from a compressed IFS.	
	# '-W' -> enable watchdog
	startup-imx6x-ts7970 -m -v

	PATH=:/proc/boot:/bin:/sbin:/usr/bin:/usr/sbin LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/lib/dll procnto-instr -v
	
}
[+script] .script = {
# Initialise the console
    procmgr_symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2
    devc-sermx1 -e -F -S -u 1 -c80000000 0x02020000,58
    devc-sermx1 -e -F -S -u 2 -c80000000 0x021e8000,59
    devc-sermx1 -e -F -S -u 3 -c80000000 0x021ec000,60
    devc-sermx1 -e -F -S -u 4 -c80000000 0x021f0000,61
    devc-sermx1 -e -F -S -u 5 -c80000000 0x021f4000,62

    reopen
    display_msg Welcome to QNX Neutrino 6.6.0 on the Freescale i.MX6SDL TS-4900 (ARM Cortex-A9)
    slogger &

    # Start some common servers
    pipe &

    #######################################################################
    ## WatchDog utility
    ## If startup is given '-W' parameter then the 'wdtkick' utility MUST
    ## be uncommented below.
    #######################################################################
    #display_msg Starting watchdog...
    #wdtkick

    #######################################################################
    ## I2C driver
    #######################################################################
    display_msg Starting I2C1 driver (/dev/i2c1)...
    i2c-mx35 -p 0x021A0000 -i68 -c66000000 --u 1 
    display_msg Starting I2C2 driver (/dev/i2c2)...
    i2c-mx35 -p 0x021A4000 -i69 -c66000000 --u 2
    
    #######################################################################
    ## SD memory card driver
    #######################################################################
    display_msg Starting SD2 (microSD) memory card driver...
    devb-mmcsd-mx6q-ts7970 mmcsd ioport=0x02194000,irq=55 blk cache=2M disk name=hd 
    
    #######################################################################
    ## eMMC driver
    #######################################################################
    display_msg Starting SD3 (eMMC) memory chip driver...
    devb-mmcsd-mx6q-ts7970 cam verbose mmcsd ioport=0x02198000,irq=56 blk cache=2M disk name=emmc 
    

    #######################################################################
    ## SST 25VF016B SPI NOR Flash Chip
    ## Note that the spi-master resource manager must NOT be running
    ## at the same time as the SPI NOR Flash driver
    #######################################################################
    #devf-norspi-mx6_ts7970-ecspi

    #######################################################################
    ## CAN
    #######################################################################
    #dev-can-mx35 -t can0
    display_msg Starting CAN (/dev/can0) 
    dev-can-mx6x can0
    display_msg Starting CAN (/dev/can1) 
    dev-can-mx6x can1
    
    #######################################################################
    ## RTC
    #######################################################################
    display_msg Starting rtc utility...
    rtc isl12020

    #######################################################################
    ## AUDIO driver (needs I2C1 driver loaded first))
    #######################################################################
    io-audio -d mx-mx6q-ts7970 mixer=input_mux=mic_in 
    waitfor /dev/snd 4

    #######################################################################
    ## SATA driver NOT on iMX6 Solo
    #######################################################################
    # display_msg Starting SATA driver...
    # devb-ahci ahci ioport=0x02200000,irq=71 

    #######################################################################
    ## ECSPI driver
    ## The i.MX6Q Sabre-Lite has one directly accessible SPI based component - a SPI NOR Flash chip.
    ## Since the SPI NOR driver does not use the QNX SPI framework, there is no need to launch spi-master
    ## at all for this board.  That said the commands below provide examples of how to launch ECSPI drivers.
    ## Note that the parameters to spi-master will need to be adjusted depending on the hardware.
    ## Note also that the devf-norspi-mx6_ts7970-ecspi driver cannot be running at the same time as
    ## the spi-master driver
    #######################################################################

    display_msg Starting Enhanced SPI driver ECSPI1 (/dev/spi1)       
    spi-master -u1 -d mx51ecspi base=0x02008000,irq=63,loopback=1

    display_msg Starting Enhanced SPI driver ECSPI2 (/dev/spi2)
    spi-master -u2 -d mx51ecspi base=0x0200C000,irq=64,loopback=1

    display_msg Starting Enhanced SPI driver ECSPI3 (/dev/spi3)
    spi-master -u3 -d mx51ecspi base=0x02010000,irq=65,loopback=1

    # Starting Enhanced SPI driver ECSPI4 (/dev/spi4)
    # spi-master -u4 -d mx51ecspi base=0x02014000,irq=66,loopback=1

    # Starting Enhanced SPI driver ECSPI5 (/dev/spi5)
    # spi-master -u5 -d mx51ecspi base=0x02018000,irq=67,loopback=1

    #######################################################################
    ## Networking
    #######################################################################
    display_msg Starting Ethernet driver
    io-pkt-v6-hc -dmx6x
    waitfor /dev/socket

    #######################################################################
    ## USB Host 1
    ## If configuring the OTG port as device mode make sure to use
    ## the second io-usb commandline example below (i.e. only configure USB HOST1)
    #######################################################################
    #display_msg Starting USB host1 and OTG port (host mode)...
    #io-usb -c -dehci-mx28 ioport=0x02184300,irq=72,phy=0x020ca000,verbose=5,ioport=0x02184100,irq=75,phy=0x020c9000,verbose=5
    
    display_msg Starting USB host1...
    io-usb -c -dehci-mx28 ioport=0x02184300,irq=72,phy=0x020ca000,verbose=5
    waitfor /dev/io-usb/io-usb 10
    waitfor /dev/io-usb/devu-ehci-mx28.so 4

    #######################################################################
    ## USB OTG port (operating in device mode)...
    ## The commands below will configure the i.MX6 OTG port as a Mass Storage Device
    #######################################################################
   
    ##### Example of CDC-ACM (serial) device #####

    # Step 1 - Start USB device stack
    #io-usb-dcd -dusbser-mx6ts7970-ci ioport=0x02184000,irq=75
    #waitfor /dev/io-usb-dcd/io-usb 4
    #waitfor /dev/io-usb-dcd/devu-usbser-mx6ts7970-ci.so 4

    # Step 2 - Start USB CDC-ACM function driver and enable USB soft connect
    #devc-serusb_dcd -e -v -F -s -d iface_list=0,unit=1
    #waitfor /dev/serusb1
    #ulink_ctrl -l 1

    ##### Example of Mass Storage device #####
    # Step 1 - Create a ram disk
    #devb-ram ram capacity=16384,nodinit,cache=512k disk name=hd@10
    #waitfor /dev/hd10
    #fdisk /dev/hd10 add -t 6
    #mount -e /dev/hd10
    #waitfor /dev/hd10t6
    #mkdosfs /dev/hd10t6

    # Step 2 - Start device stack
    #io-usb-dcd -dusbumass-mx6ts7970-ci ioport=0x02184000,irq=75
    #waitfor /dev/io-usb-dcd/io-usb 4
    #waitfor /dev/io-usb-dcd/devu-usbumass-mx6ts7970-ci.so 4
       
    # Step 3 - Start Mass Storage function driver and enable USB soft connect
    #devu-umass_client-block -l lun=0,devno=1,iface=0,fname=/dev/hd10
    #ulink_ctrl -l 1

    ##### Example of NCM device (Ethernet over USB) #####
    # Step 1 - Start USB device stack
    #io-usb-dcd -dusbncm-mx6ts7970-ci ioport=0x02184000,irq=75
    #waitfor /dev/io-usb-dcd/io-usb 4
    #waitfor /dev/io-usb-dcd/devu-usbncm-mx6ts7970-ci.so 4

    # Step 2 - Start USB NCM function driver
    # For best performance attach the usbdnet driver to an existing io-pkt stack. Alternatively multiple
    # io-pkt stacks can be used (see SDP documentation for more details). 
    #mount -Tio-pkt -o mac=123456789abc,protocol=ncm devnp-usbdnet.so
    #ulink_ctrl -l1

    # Step 3 - Assign IP address to ncm interface using DHCP OR any static IP.
    #if_up -p ncm0
   
    #ifconfig ncm0 192.168.10.100
    # OR 
    #dhcp.client -i ncm0 -A0 &

    ###########################################################################################
    ## uncomment for DVFS support 
    ## Use dvfs_client to adjust minimum level of performance if necessary (refer to dvfs docs)
    ###########################################################################################
    # dvfsmgr-imx6 -c /etc/dvfs/config/imx6/dvfs_imx6.conf -v

    # Start the main shell

    [+session] ksh /proc/boot/.console.sh &
}

# Redirect console messages
[type=link] /bin/sh=/proc/boot/ksh
[type=link] /dev/console=/dev/ser1
[type=link] /tmp=/dev/shmem

# Programs require the runtime linker (ldqnx.so) to be at a fixed location

# Shared libraries
libc.so
libm.so.2
libz.so.2

###########################################################################
## C++ lib required for GPU 
###########################################################################
libcpp.so.4

###########################################################################
## uncomment for USB Host Controller driver
###########################################################################
devu-ehci-mx28.so
libusbdi.so

###########################################################################
## uncomment for USB Device Controller drivers
###########################################################################
devu-usbumass-mx6ts7970-ci.so
devu-usbser-mx6ts7970-ci.so
devu-usbncm-mx6ts7970-ci.so
libusbdci.so

###########################################################################
## uncomment for USB Function drivers
###########################################################################
devnp-usbdnet.so

###########################################################################
## uncomment for libs needed for touch support
###########################################################################
devh-usb.so
libhiddi.so

###########################################################################
## uncomment for BLOCK driver
## substitute cam-xxx.so and fs-xxx.so with the cam drivers and filesystems
## required
###########################################################################
libcam.so
io-blk.so
cam-disk.so
cam-cdrom.so
fs-qnx6.so
fs-qnx4.so
fs-dos.so
fs-udf.so
fs-cd.so

###########################################################################
## uncomment for NETWORK driver
###########################################################################
devnp-mx6x.so
libsocket.so
# support asix based USB to Ethernet dongles
devnp-asix.so

###########################################################################
## uncomment for ECSPI
###########################################################################
spi-mx51ecspi.so

###########################################################################
## AUDIO
###########################################################################
deva-ctrl-mx-mx6q-ts7970.so
deva-util-restore.so
libasound.so
libasound.so.2
libaudio_manager.so.1

###########################################################################
### touchscreen driver for HannStar HSD100PXN1 10" display
############################################################################
libmtouch-egalax.so

###########################################################################
## SDMA
###########################################################################
libdma-sdma-imx6x.so

###########################################################################
## PPS
###########################################################################
libpps.so.1

###########################################################################
## CSM
###########################################################################
libcsm.so.1

###########################################################################
## Tracelog
###########################################################################
libtracelog.so.1

###########################################################################
## libcrypto
###########################################################################
libcrypto.so.2



#############
# Temporary for running cross-compiled test code
#############
libabe.so.1

###########################################################################
## Graphics support - screen
###########################################################################
libWFD.so.1
libinputevents.so.1
libkalman.so.1
libGAL-gc320v0.so.1
screen-gc320v0.so
/usr/lib/graphics/iMX6X/libWFDimx6x.so=graphics/iMX6X/libWFDimx6x.so
/usr/lib/graphics/iMX6X/libGalcore-3dvg.so=graphics/iMX6X/libGalcore-3dvg.so
/usr/lib/graphics/iMX6X/libimx6xCSCgamma-generic.so=graphics/iMX6X/libimx6xCSCgamma-generic.so

[search=../install/armle-v7/usr/lib/graphics/iMX6X] /usr/lib/graphics/iMX6X/libwfdcfg-imx6x-okaya.so=libwfdcfg-imx6x-okaya.so

[search=../install/armle-v7/usr/lib/graphics/iMX6X] /usr/lib/graphics/iMX6X/libwfdcfg-imx6x-hdmi.so=libwfdcfg-imx6x-hdmi.so
[search=../install/armle-v7/usr/lib/graphics/iMX6X] /usr/lib/graphics/iMX6X/graphics.conf=graphics.conf

###########################################################################
## Graphics support - apps
###########################################################################
libEGL.so.1
libscreen.so.1
/usr/lib/graphics/iMX6X/libGLESv1_CM.so.1=libGLESv1_CM.so.1
/usr/lib/graphics/iMX6X/libGLESv2.so.1=libGLESv2.so.1
/usr/lib/graphics/iMX6X/libEGL_viv.so=graphics/iMX6X/libEGL_viv.so
/usr/lib/graphics/iMX6X/libGLES_CM_viv.so=graphics/iMX6X/libGLES_CM_viv.so
/usr/lib/graphics/iMX6X/libGLESv2_viv.so=graphics/iMX6X/libGLESv2_viv.so
/usr/lib/graphics/iMX6X/libGLSLC.so=graphics/iMX6X/libGLSLC.so


# Executables
[data=c]
devc-sermx1

###########################################################################
## Screen executables
###########################################################################
/sbin/screen=screen
/usr/bin/gles1-gears=gles1-gears
/usr/bin/gles2-gears=gles2-gears
/usr/bin/sw-vsync=sw-vsync


###########################################################################
## TS Hardware Control Utility
###########################################################################
tshwctl
rtctemp
nvramctl

###########################################################################
## uncomment for NETWORK driver
###########################################################################
io-pkt-v6-hc
io-pkt-v4-hc
nicinfo
ping
ftp
fs-nfs3
fs-nfs2
fs-cifs
ifconfig
dhcp.client
if_up
inetd

###########################################################################
## Uncomment to use resolv.conf
###########################################################################
[ type=link] /etc/resolv.conf=/base/etc/resolv.conf


###########################################################################
## uncomment for CAN driver
###########################################################################
#dev-can-mx35
dev-can-mx6x
canctl

#######################################################################
## uncomment for RTC utility
#######################################################################
rtc


###########################################################################
## DVFS support 
###########################################################################
dvfsmgr-imx6
/etc/dvfs/config/imx6/dvfs_imx6.conf=../install/etc/dvfs/config/imx6/dvfs_imx6.conf



###########################################################################
## uncomment for REMOTE_DEBUG
###########################################################################
 devc-pty
 qconn
 /usr/bin/pdebug=pdebug


###########################################################################
## uncomment for Block driver
###########################################################################
devb-mmcsd-mx6q-ts7970
fdisk
mkdosfs



###########################################################################
## uncomment for SST 25VF016B Flash driver
## SPI Flash chip can be formatted like so: flashctl -p /dev/fs0p0 -e -f -m
## After formatting a partition will appear in /fs0p0
###########################################################################
devf-norspi-mx6_ts7970-ecspi
flashctl

###########################################################################
## uncomment for ECSPI
###########################################################################
spi-master

###########################################################################
## I2C driver
###########################################################################
i2c-mx35

###########################################################################
## AUDIO
###########################################################################
io-audio
wave
waverec
mix_ctl

###########################################################################
## Workaround needed for touchscreen driver (supports HannStar HSD100PXN1
## display).
###########################################################################
[type=link] /dev/devi=/dev/null

###########################################################################
## uncomment for Image Loading
###########################################################################
# img_codec_bmp.so
# img_codec_gif.so
# img_codec_jpg.so
# img_codec_png.so
# img_codec_sgi.so
# img_codec_tga.so

###########################################################################
## uncomment for Font loading
###########################################################################
# libFF-T2K.so.2

###########################################################################
## uncomment if graphics support is needed
###########################################################################
libdisputil.so.2

###########################################################################
## uncomment for disk drivers (filesystems support)
###########################################################################
/sbin/fdisk=fdisk
/sbin/mkdosfs=mkdosfs
/sbin/mkqnx6fs=mkqnx6fs
/sbin/chkdosfs=chkdosfs
/sbin/chkqnx6fs=chkqnx6fs
/sbin/chkfsys=chkfsys
/usr/bin/fsysinfo=fsysinfo

###########################################################################
## uncomment for USB HOST stack and utils
###########################################################################
io-usb
usb

###########################################################################
## uncomment for USB HOST Device stack and utils
###########################################################################
io-usb-dcd
ulink_ctrl

###########################################################################
## uncomment for USB Function drivers
###########################################################################
devu-umass_client-block
devc-serusb_dcd

###########################################################################
## uncomment for WatchDog utility
###########################################################################
wdtkick

###########################################################################
## uncomment for SATA driver
###########################################################################
devb-ahci

###########################################################################
## uncomment for RAM disk driver
###########################################################################
devb-ram

###########################################################################
## Set environment and start the main shell
###########################################################################
[perms=0744] .console.sh={
echo setting env variables.

export SYSNAME=nto
export TERM=qansi
export HOME=/
export PATH=:/bin:/usr/bin:/sbin:/usr/sbin:/proc/boot
export LD_LIBRARY_PATH=:/lib:/usr/lib:/usr/lib/graphics/iMX6X:/lib/dll:/proc/boot
export GRAPHICS_ROOT=/usr/lib/graphics/iMX6X
export CfgHwRtc=isl12020

#start appsmedia-sample if it exists
appsmediaScript=/proc/boot/.start-appsmedia-sample
if [ -e "$appsmediaScript" ]; then
   #appsmedia-sample uses dhclinet instead of dhcp.client
   . "$appsmediaScript"
else
   dhcp.client  &

   #######################################################################
   ## Start the screen graphics
   #######################################################################
   echo Starting Screen Graphics...
   screen
   echo done.

   #######################################################################
   ## Driver for USB Mass Storage interface
   #######################################################################
   echo Launching devb-umass...
   devb-umass cam pnp &
   echo done
   
   mount -e /dev/hd0
   mount -tdos -o exe=all /dev/hd0t12 /base
   if [ ! -e /base/etc ]; then  mkdir /base/etc; fi
   
fi

#######################################################################
## REMOTE_DEBUG (gdb or Momentics)
##  - refer to the help documentation for the gdb, qconn and the IDE
##    for more information on remote debugging
##  - the commands shown require that NETWORK is enabled too
#######################################################################
devc-pty
waitfor /dev/ptyp0 4
waitfor /dev/socket 4
PATH=$PATH:/usr/bin qconn port=8000

ksh -l
}
###########################################################################
## general commands
###########################################################################
cp
ls
cat
ksh
pipe
pidin
uname
slogger
sloginfo
slay
mount
umount
use
date
shutdown
devb-umass
chmod
ln
rm
mv
sleep
random
dd
top
waitfor
mkdir
nslookup
route
ps
env

###########################################################################
## END OF BUILD SCRIPT
###########################################################################

###########################################################################
##
## INTERRUPT MAP (i.mx6DQ)
##
###########################################################################
##
##
## vector: 0 - 31
## device: reserved
##
## vector 32 - 158
## device: same IRQs as defined in i.MX6Q TRM
##
## vector 159
## device: reserved
##
## GPIO interrupts are cascaded.  Individual GPIO IRQs are defined below
## vector 160 - 175
## device: GPIO1[1 - 15]
##
## vector 176 - 191
## device: GPIO1[16 - 31]
##
## vector 192 - 207
## device: GPIO2[1 - 15]
##
## vector 208 - 223
## device: GPIO2[16 - 31]
##
## vector 224 - 239
## device: GPIO3[1 - 15]
##
## vector 240 - 255
## device: GPIO3[16 - 31]
##
## vector 256 - 271
## device: GPIO4[1 - 15]
##
## vector 272 - 287
## device: GPIO4[16 - 31]
##
## vector 288 - 303
## device: GPIO5[1 - 15]
##
## vector 305 - 319
## device: GPIO5[16 - 31]
##
## vector 320 - 335
## device: GPIO6[1 - 15]
##
## vector 336 - 351
## device: GPIO6[16 - 31]
##
## vector 352 - 367
## device: GPIO7[1 - 15]
##
## vector 368 - 383
## device: GPIO7[16 - 31]
##
###########################################################################
