Subject: [PATCH 2/3] soc: keystone: add QMSS driver

From: [email-masked] (Santosh Shilimkar)
Date: Tue, 4 Mar 2014 15:51:25 +0800

On Tuesday 04 March 2014 12:41 AM, Kumar Gala wrote:
> 
> On Feb 28, 2014, at 5:18 PM, Santosh Shilimkar <[email-masked]> wrote:
> 
>> From: Sandeep Nair <[email-masked]>
>>
>> The QMSS (Queue Manager Sub System) found on Keystone SOCs is one of
>> the main hardware sub system which forms the backbone of the Keystone
>> Multi-core Navigator. QMSS consist of queue managers, packed-data structure
>> processors(PDSP), linking RAM, descriptor pools and infrastructure
>> Packet DMA.
>>
>> The Queue Manager is a hardware module that is responsible for accelerating
>> management of the packet queues. Packets are queued/de-queued by writing or
>> reading descriptor address to a particular memory mapped location. The PDSPs
>> perform QMSS related functions like accumulation, QoS, or event management.
>> Linking RAM registers are used to link the descriptors which are stored in
>> descriptor RAM. Descriptor RAM is configurable as internal or external memory.
>>
>> The QMSS driver manages the PDSP setups, linking RAM regions,
>> queue pool management (allocation, push, pop and notify) and descriptor
>> pool management. The specifics on the device tree bindings for
>> QMSS can be found in:
>>        Documentation/devicetree/bindings/soc/keystone-qmss.txt
>>
>> Cc: Greg Kroah-Hartman <[email-masked]>
>> Cc: Kumar Gala <[email-masked]>
>> Cc: Olof Johansson <[email-masked]>
>> Cc: Arnd Bergmann <[email-masked]>
>> Cc: Grant Likely <[email-masked]>
>> Cc: Rob Herring <[email-masked]>
>> Cc: Mark Rutland <[email-masked]>
>> Signed-off-by: Sandeep Nair <[email-masked]>
>> Signed-off-by: Santosh Shilimkar <[email-masked]>
>> ---
>> .../devicetree/bindings/soc/keystone-qmss.txt      |  209 +++
>> drivers/Kconfig                                    |    2 +
>> drivers/Makefile                                   |    3 +
>> drivers/soc/Kconfig                                |    2 +
>> drivers/soc/Makefile                               |    5 +
>> drivers/soc/keystone/Kconfig                       |   15 +
>> drivers/soc/keystone/Makefile                      |    5 +
>> drivers/soc/keystone/qmss_acc.c                    |  591 ++++++++
>> drivers/soc/keystone/qmss_queue.c                  | 1533 ++++++++++++++++++++
>> drivers/soc/keystone/qmss_queue.h                  |  236 +++
> 
> So this should be drivers/soc/ti, much like we use vendor in drivers/net/ethernet
> 
Agree. I will change that.

>> include/linux/soc/keystone_qmss.h                  |  390 +++++
> 
> include/linux/soc/ti/
> 
>> 11 files changed, 2991 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/soc/keystone-qmss.txt
>> create mode 100644 drivers/soc/Makefile
>> create mode 100644 drivers/soc/keystone/Kconfig
>> create mode 100644 drivers/soc/keystone/Makefile
>> create mode 100644 drivers/soc/keystone/qmss_acc.c
>> create mode 100644 drivers/soc/keystone/qmss_queue.c
>> create mode 100644 drivers/soc/keystone/qmss_queue.h
>> create mode 100644 include/linux/soc/keystone_qmss.h
> 
> [snip]
> 
>> diff --git a/drivers/Kconfig b/drivers/Kconfig
>> index 37f955f..3220516 100644
>> --- a/drivers/Kconfig
>> +++ b/drivers/Kconfig
>> @@ -146,6 +146,8 @@ source "drivers/remoteproc/Kconfig"
>>
>> source "drivers/rpmsg/Kconfig"
>>
>> +source "drivers/soc/Kconfig"
>> +
>> source "drivers/devfreq/Kconfig"
>>
>> source "drivers/extcon/Kconfig"
>> diff --git a/drivers/Makefile b/drivers/Makefile
>> index 0d8e2a4..0c22db8 100644
>> --- a/drivers/Makefile
>> +++ b/drivers/Makefile
>> @@ -146,6 +146,9 @@ obj-$(CONFIG_IOMMU_SUPPORT)	+= iommu/
>> obj-$(CONFIG_REMOTEPROC)	+= remoteproc/
>> obj-$(CONFIG_RPMSG)		+= rpmsg/
>>
>> +# SOC specific drivers
>> +obj-y				+= soc/
>> +
>> # Virtualization drivers
>> obj-$(CONFIG_VIRT_DRIVERS)	+= virt/
>> obj-$(CONFIG_HYPERV)		+= hv/
>> diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig
>> index 2f9d7d0..59980bd 100644
>> --- a/drivers/soc/Kconfig
>> +++ b/drivers/soc/Kconfig
>> @@ -1,3 +1,5 @@
>> menu "SOC specific Drivers"
>>
>> +source "drivers/soc/keystone/Kconfig"
>> +
>> endmenu
>> diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile
>> new file mode 100644
>> index 0000000..c5d141e
>> --- /dev/null
>> +++ b/drivers/soc/Makefile
>> @@ -0,0 +1,5 @@
>> +#
>> +# Makefile for the Linux kernel SOC specific device drivers.
>> +#
>> +
>> +obj-$(CONFIG_ARCH_KEYSTONE)		+= keystone/
>> diff --git a/drivers/soc/keystone/Kconfig b/drivers/soc/keystone/Kconfig
>> new file mode 100644
>> index 0000000..0b3131b
>> --- /dev/null
>> +++ b/drivers/soc/keystone/Kconfig
>> @@ -0,0 +1,15 @@
>> +#
>> +# TI Keystone Soc drivers
>> +#
>> +
> 
> We should have this be something like:
> 
> menuconfig SOC_TI
> 	bool ?TI SoC support?
> 	
> 
> if SOC_TI
> 
>> +config KEYSTONE_QMSS
>> +	tristate "Keystone Queue Manager Sub System"
>> +	depends on ARCH_KEYSTONE
>> +	help
>> +	  Say y here to support the Keystone Hardware Queue Manager support.
>> +	  The Queue Manager is a hardware module that is responsible for
>> +	  accelerating management of the packet queues. Packets are queued/
>> +	  de-queued by writing/reading descriptor address to a particular
>> +	  memory mapped location in the Queue Manager module.
>> +
>> +	  If unsure, say N.
> 
> endif # SOC_TI
> 
Make sense.Will update the patch accordingly.

Regards,
Santosh