Spear PCIe Gadget Driver:

Author
=============
Pratyush Anand (pratyush.anand@st.com)

Location
============
driver/misc/spear13xx_pcie_gadget.c

Supported Chip:
===================
SPEAr1300
SPEAr1310

Menuconfig option:
==========================
Device Drivers
	Misc devices
		PCIe gadget support for SPEAr13XX platform
purpose
===========
This driver has several nodes which can be read/written by configfs interface.
Its main purpose is to configure selected dual mode PCIe controller as device
and then program its various registers to configure it as a particular device
type. This driver can be used to show spear's PCIe device capability.

Description of different nodes:
=================================

read behavior of nodes:
------------------------------
link 		:gives ltssm status.
int_type 	:type of supported interrupt
no_of_msi 	:zero if MSI is not enabled by host. A positive value is the
		number of MSI vector granted.
vendor_id	:returns programmed vendor id (hex)
device_id	:returns programmed device id(hex)
bar0_size:	:returns size of bar0 in hex.
bar0_address	:returns address of bar0 mapped area in hex.
bar0_rw_offset	:returns offset of bar0 for which bar0_data will return value.
bar0_data	:returns data at bar0_rw_offset.

write behavior of nodes:
------------------------------
link 		:write UP to enable ltsmm DOWN to disable
int_type	:write interrupt type to be configured and (int_type could be
		INTA, MSI or NO_INT). Select MSI only when you have programmed
		no_of_msi node.
no_of_msi	:number of MSI vector needed.
inta		:write 1 to assert INTA and 0 to de-assert.
send_msi	:write MSI vector to be sent.
vendor_id	:write vendor id(hex) to be programmed.
device_id	:write device id(hex) to be programmed.
bar0_size	:write size of bar0 in hex. default bar0 size is 1000 (hex)
		bytes.
bar0_address	:write	address of bar0 mapped area in hex. (default mapping of
		bar0 is SYSRAM1(E0800000). Always program bar size before bar
		address. Kernel might modify bar size and address for alignment, so
		read back bar size and address after writing to cross check.
bar0_rw_offset	:write offset of bar0 for which	bar0_data will write value.
bar0_data	:write data to be written at bar0_rw_offset.

Node programming example
===========================
Program all PCIe registers in such a way that when this device is connected
to the PCIe host, then host sees this device as 1MB RAM.
#mount -t configfs none /Config
For nth PCIe Device Controller
# cd /config/pcie_gadget.n/
Now you have all the nodes in this directory.
program vendor id as 0x104a
# echo 104A >> vendor_id

program device id as 0xCD80
# echo CD80 >> device_id

program BAR0 size as 1MB
# echo 100000 >> bar0_size

check for programmed bar0 size
# cat bar0_size

Program BAR0 Address as DDR (0x2100000). This is the physical address of
memory, which is to be made visible to PCIe host. Similarly any other peripheral
can also be made visible to PCIe host. E.g., if you program base address of UART
as BAR0 address then when this device will be connected to a host, it will be
visible as UART.
# echo 2100000 >> bar0_address

program interrupt type : INTA
# echo INTA >> int_type

go for link up now.
# echo UP >> link

It will have to be insured that, once link up is done on gadget, then only host
is initialized and start to search PCIe devices on its port.

/*wait till link is up*/
# cat link
wait till it returns UP.

To assert INTA
# echo 1 >> inta

To de-assert INTA
# echo 0 >> inta

if MSI is to be used as interrupt, program no of msi vector needed (say4)
# echo 4 >> no_of_msi

select MSI as interrupt type
# echo MSI >> int_type

go for link up now
# echo UP >> link

wait till link is up
# cat link
An application can repetitively read this node till link is found UP. It can
sleep between two read.

wait till msi is enabled
# cat no_of_msi
Should return 4 (number of requested MSI vector)

to send msi vector 2
# echo 2 >> send_msi
#cd -
