* [PATCH 0/2] net: Add Keystone NetCP ethernet driver support
@ 2014-04-22 21:21 Santosh Shilimkar
2014-04-22 21:21 ` [PATCH 1/2] Documentation: dt: net: Add binding doc for Keystone NetCP ethernet driver Santosh Shilimkar
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Santosh Shilimkar @ 2014-04-22 21:21 UTC (permalink / raw)
To: linux-arm-kernel
Couple of patches to add Keystone NetCP ethernet driver support.
The network coprocessor (NetCP) is a hardware accelerator that processes
Ethernet packets. NetCP has a gigabit Ethernet (GbE) subsystem with a ethernet
switch sub-module to send and receive packets. NetCP also includes a packet
accelerator (PA) module to perform packet classification operations such as
header matching, and packet modification operations such as checksum
generation. NetCP can also optionally include a Security Accelerator(SA)
capable of performing IPSec operations on ingress/egress packets.
Keystone SoC's also have a 10 Gigabit Ethernet Subsystem (XGbE) which
includes a 3-port Ethernet switch sub-module capable of 10Gb/s and
1Gb/s rates per Ethernet port.
NetCP driver has a plug-in module architecture where each of the NetCP
sub-modules exist as a loadable kernel module which plug in to the netcp
core. These sub-modules are represented as "netcp-devices" in the dts
bindings. It is mandatory to have the ethernet switch sub-module for
the ethernet interface to be operational. Any other sub-module like the
PA is optional.
Both GBE and XGBE network processors supported using common driver. It
is also designed to handle future variants of NetCP.
Cc: David Miller <davem@davemloft.net>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Sandeep Nair <sandeep_n@ti.com>
Sandeep Nair (2):
Documentation: dt: net: Add binding doc for Keystone NetCP ethernet
driver
net: Add Keystone NetCP ethernet driver
.../devicetree/bindings/net/keystone-netcp.txt | 197 ++
drivers/net/ethernet/ti/Kconfig | 16 +-
drivers/net/ethernet/ti/Makefile | 4 +
drivers/net/ethernet/ti/netcp.h | 226 ++
drivers/net/ethernet/ti/netcp_core.c | 2194 ++++++++++++++++++++
drivers/net/ethernet/ti/netcp_ethss.c | 2177 +++++++++++++++++++
drivers/net/ethernet/ti/netcp_sgmii.c | 130 ++
drivers/net/ethernet/ti/netcp_xgbepcsr.c | 502 +++++
8 files changed, 5443 insertions(+), 3 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/keystone-netcp.txt
create mode 100644 drivers/net/ethernet/ti/netcp.h
create mode 100644 drivers/net/ethernet/ti/netcp_core.c
create mode 100644 drivers/net/ethernet/ti/netcp_ethss.c
create mode 100644 drivers/net/ethernet/ti/netcp_sgmii.c
create mode 100644 drivers/net/ethernet/ti/netcp_xgbepcsr.c
--
1.7.9.5
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] Documentation: dt: net: Add binding doc for Keystone NetCP ethernet driver
2014-04-22 21:21 [PATCH 0/2] net: Add Keystone NetCP ethernet driver support Santosh Shilimkar
@ 2014-04-22 21:21 ` Santosh Shilimkar
2014-04-22 22:02 ` [PATCH 0/2] net: Add Keystone NetCP ethernet driver support Stephen Hemminger
[not found] ` <1398201675-17379-3-git-send-email-santosh.shilimkar@ti.com>
2 siblings, 0 replies; 6+ messages in thread
From: Santosh Shilimkar @ 2014-04-22 21:21 UTC (permalink / raw)
To: linux-arm-kernel
From: Sandeep Nair <sandeep_n@ti.com>
The network coprocessor (NetCP) is a hardware accelerator that processes
Ethernet packets. NetCP has a gigabit Ethernet (GbE) subsystem with a ethernet
switch sub-module to send and receive packets. NetCP also includes a packet
accelerator (PA) module to perform packet classification operations such as
header matching, and packet modification operations such as checksum
generation. NetCP can also optionally include a Security Accelerator(SA)
capable of performing IPSec operations on ingress/egress packets.
Keystone SoC's also have a 10 Gigabit Ethernet Subsystem (XGbE) which
includes a 3-port Ethernet switch sub-module capable of 10Gb/s and
1Gb/s rates per Ethernet port.
NetCP Subsystem device tree layout looks something like below:
-----------------------------
NetCP subsystem(10G or 1G)
-----------------------------
|
|-> NetCP Devices -> |
| |-> GBE/XGBE Switch
| |
| |-> Packet Accelerator
| |
| |-> Security Accelerator
|
|
|
|-> NetCP Interfaces -> |
|-> Ethernet Port 0
|
|-> Ethernet Port 1
|
|-> Ethernet Port 2
|
|-> Ethernet Port 3
Common driver supports GBE as well XGBE network processors.
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Pawel Moll <pawel.moll@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
Cc: Kumar Gala <galak@codeaurora.org>
Cc: David Miller <davem@davemloft.net>
Signed-off-by: Sandeep Nair <sandeep_n@ti.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
---
.../devicetree/bindings/net/keystone-netcp.txt | 197 ++++++++++++++++++++
1 file changed, 197 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/keystone-netcp.txt
diff --git a/Documentation/devicetree/bindings/net/keystone-netcp.txt b/Documentation/devicetree/bindings/net/keystone-netcp.txt
new file mode 100644
index 0000000..a7d061b
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/keystone-netcp.txt
@@ -0,0 +1,197 @@
+This document describes the device tree bindings associated with the
+keystone network coprocessor(NetCP) driver support.
+
+The network coprocessor (NetCP) is a hardware accelerator that processes
+Ethernet packets. NetCP has a gigabit Ethernet (GbE) subsytem with a ethernet
+switch sub-module to send and receive packets. NetCP also includes a packet
+accelerator (PA) module to perform packet classification operations such as
+header matching, and packet modification operations such as checksum
+generation. NetCP can also optionally include a Security Accelerator (SA)
+capable of performing IPSec operations on ingress/egress packets.
+
+Keystone II SoC's also have a 10 Gigabit Ethernet Subsystem (XGbE) which
+includes a 3-port Ethernet switch sub-module capable of 10Gb/s and 1Gb/s rates
+per Ethernet port.
+
+Keystone NetCP driver has a plug-in module architecture where each of the NetCP
+sub-modules exist as a loadable kernel module which plug in to the netcp core.
+These sub-modules are represented as "netcp-devices" in the dts bindings. It is
+mandatory to have the ethernet switch sub-module for the ethernet interface to
+be operational. Any other sub-module like the PA is optional.
+
+NetCP Ethernet SubSystem Layout:
+
+-----------------------------
+ NetCP subsystem(10G or 1G)
+-----------------------------
+ |
+ |-> NetCP Devices -> |
+ | |-> GBE/XGBE Switch
+ | |
+ | |-> Packet Accelerator
+ | |
+ | |-> Security Accelerator
+ |
+ |
+ |
+ |-> NetCP Interfaces -> |
+ |-> Ethernet Port 0
+ |
+ |-> Ethernet Port 1
+ |
+ |-> Ethernet Port 2
+ |
+ |-> Ethernet Port 3
+
+
+NetCP subsystem properties:
+Required properties:
+- compatible: Should be "ti,netcp-1.0"
+- clocks: phandle to the reference clocks for the subsystem.
+- dma-id: Navigator packet dma instance id.
+
+Optional properties:
+- reg: register location and the size for the following register
+ regions in the specified order.
+ - Efuse MAC address register
+- dma-coherent: Present if dma operations are coherent
+- big-endian: Keystone devices can be operated in a mode where the DSP is in
+ the big endian mode. In such cases enable this option. This
+ option should also be enabled if the ARM is operated in
+ big endian mode with the DSP in little endian.
+
+NetCP device properties: Device specification for NetCP sub-modules.
+1Gb/10Gb (gbe/xgbe) ethernet switch sub-module specifications.
+Required properties:
+- label: Must be "netcp-gbe" for 1Gb & "netcp-xgbe" for 10Gb.
+- reg: register location and the size for the following register
+ regions in the specified order.
+ - subsystem registers
+ - serdes registers
+- tx-channel: the navigator packet dma channel number for tx.
+- tx-queue: the navigator queue number associated with the tx dma channel.
+- interfaces: specification for each of the switch port to be registered as a
+ network interface in the stack.
+-- slave-port: Switch port number, 0 based numbering.
+-- link-interface: type of link interface, supported options are
+ - mac<->mac auto negotiate mode: 0
+ - mac<->phy mode: 1
+ - mac<->mac forced mode: 2
+ - mac<->fiber mode: 3
+ - mac<->phy mode with no mdio: 4
+ - 10Gb mac<->phy mode : 10
+ - 10Gb mac<->mac forced mode : 11
+----phy-handle: phandle to PHY device
+
+Optional properties:
+- enable-ale: NetCP driver keeps the address learning feature in the ethernet
+ switch module disabled. This attribute is to enable the address
+ learning.
+- secondary-slave-ports: specification for each of the switch port not be
+ registered as a network interface. NetCP driver
+ will only initialize these ports and attach PHY
+ driver to them if needed.
+
+NetCP interface properties: Interface specification for NetCP sub-modules.
+Required properties:
+- rx-channel: the navigator packet dma channel number for rx.
+- rx-queue: the navigator queue number associated with rx dma channel.
+- rx-pool: specifies the number of descriptors to be used & the region-id
+ for creating the rx descriptor pool.
+- tx-pool: specifies the number of descriptors to be used & the region-id
+ for creating the tx descriptor pool.
+- rx-queue-depth: number of descriptors in each of the free descriptor
+ queue (FDQ) for the pktdma Rx flow. There can be at
+ present a maximum of 4 queues per Rx flow.
+- rx-buffer-size: the buffer size for each of the Rx flow FDQ.
+- tx-completion-queue: the navigator queue number where the descriptors are
+ recycled after Tx DMA completion.
+
+Optional properties:
+- efuse-mac: If this is 1, then the MAC address for the interface is
+ obtained from the device efuse mac address register
+- local-mac-address: the driver is designed to use the of_get_mac_address api
+ only if efuse-mac is 0. When efuse-mac is 0, the MAC
+ address is obtained from local-mac-address. If this
+ attribute is not present, then the driver will use a
+ random MAC address.
+- "netcp-device label": phandle to the device specification for each of NetCP
+ sub-module attached to this interface.
+
+Example binding:
+
+netcp: netcp at 2090000 {
+ reg = <0x2620110 0x8>;
+ reg-names = "efuse";
+ compatible = "ti,netcp-1.0";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ clocks = <&papllclk>, <&clkcpgmac>, <&chipclk12>;
+ dma-coherent;
+ /* big-endian; */
+ dma-id = <0>;
+
+ netcp-devices {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+ gbe at 0x2090000 {
+ label = "netcp-gbe";
+ reg = <0x2090000 0xf00>;
+ /* enable-ale; */
+ tx-queue = <648>;
+ tx-channel = <8>;
+
+ interfaces {
+ gbe0: interface-0 {
+ slave-port = <0>;
+ link-interface = <4>;
+ };
+ gbe1: interface-1 {
+ slave-port = <1>;
+ link-interface = <4>;
+ };
+ };
+
+ secondary-slave-ports {
+ port-2 {
+ slave-port = <2>;
+ link-interface = <2>;
+ };
+ port-3 {
+ slave-port = <3>;
+ link-interface = <2>;
+ };
+ };
+ };
+ };
+
+ netcp-interfaces {
+ interface-0 {
+ rx-channel = <22>;
+ rx-pool = <1024 12>;
+ tx-pool = <1024 12>;
+ rx-queue-depth = <128 128 0 0>;
+ rx-buffer-size = <1518 4096 0 0>;
+ rx-queue = <8704>;
+ tx-completion-queue = <8706>;
+ efuse-mac = <1>;
+ netcp-gbe = <&gbe0>;
+
+ };
+ interface-1 {
+ rx-channel = <23>;
+ rx-pool = <1024 12>;
+ tx-pool = <1024 12>;
+ rx-queue-depth = <128 128 0 0>;
+ rx-buffer-size = <1518 4096 0 0>;
+ rx-queue = <8705>;
+ tx-completion-queue = <8707>;
+ efuse-mac = <0>;
+ local-mac-address = [02 18 31 7e 3e 6f];
+ netcp-gbe = <&gbe1>;
+ };
+ };
+};
--
1.7.9.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 0/2] net: Add Keystone NetCP ethernet driver support
2014-04-22 21:21 [PATCH 0/2] net: Add Keystone NetCP ethernet driver support Santosh Shilimkar
2014-04-22 21:21 ` [PATCH 1/2] Documentation: dt: net: Add binding doc for Keystone NetCP ethernet driver Santosh Shilimkar
@ 2014-04-22 22:02 ` Stephen Hemminger
2014-04-22 23:56 ` Santosh Shilimkar
[not found] ` <1398201675-17379-3-git-send-email-santosh.shilimkar@ti.com>
2 siblings, 1 reply; 6+ messages in thread
From: Stephen Hemminger @ 2014-04-22 22:02 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, 22 Apr 2014 17:21:13 -0400
Santosh Shilimkar <santosh.shilimkar@ti.com> wrote:
> NetCP driver has a plug-in module architecture where each of the NetCP
> sub-modules exist as a loadable kernel module which plug in to the netcp
> core. These sub-modules are represented as "netcp-devices" in the dts
> bindings. It is mandatory to have the ethernet switch sub-module for
> the ethernet interface to be operational. Any other sub-module like the
> PA is optional.
Where is the implementation of these modules. You need to include
this as separate patch set. Also the hooks for these modules should all
be EXPORT_SYMBOL_GPL() to disallow proprietary modules.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 0/2] net: Add Keystone NetCP ethernet driver support
2014-04-22 22:02 ` [PATCH 0/2] net: Add Keystone NetCP ethernet driver support Stephen Hemminger
@ 2014-04-22 23:56 ` Santosh Shilimkar
0 siblings, 0 replies; 6+ messages in thread
From: Santosh Shilimkar @ 2014-04-22 23:56 UTC (permalink / raw)
To: linux-arm-kernel
On Tuesday 22 April 2014 06:02 PM, Stephen Hemminger wrote:
> On Tue, 22 Apr 2014 17:21:13 -0400
> Santosh Shilimkar <santosh.shilimkar@ti.com> wrote:
>
>> NetCP driver has a plug-in module architecture where each of the NetCP
>> sub-modules exist as a loadable kernel module which plug in to the netcp
>> core. These sub-modules are represented as "netcp-devices" in the dts
>> bindings. It is mandatory to have the ethernet switch sub-module for
>> the ethernet interface to be operational. Any other sub-module like the
>> PA is optional.
>
> Where is the implementation of these modules. You need to include
> this as separate patch set. Also the hooks for these modules should all
> be EXPORT_SYMBOL_GPL() to disallow proprietary modules.
>
There is no proprietary issue and all the hooks will be GPL. The plan is
to add them in another patch-set once the core driver gets merged. They need
some work to make them upstream ready.
Regards,
Santosh
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] net: Add Keystone NetCP ethernet driver
[not found] ` <1398201675-17379-3-git-send-email-santosh.shilimkar@ti.com>
@ 2014-04-24 16:47 ` David Miller
2014-04-24 21:04 ` Santosh Shilimkar
0 siblings, 1 reply; 6+ messages in thread
From: David Miller @ 2014-04-24 16:47 UTC (permalink / raw)
To: linux-arm-kernel
From: Santosh Shilimkar <santosh.shilimkar@ti.com>
Date: Tue, 22 Apr 2014 17:21:15 -0400
> +struct netcp_tx_pipe {
> + struct netcp_device *netcp_device;
> + void *dma_queue;
Indent *dma_queue the same as the other struct members.
> + unsigned dma_queue_id;
Use explicit "unsigned int".
> + unsigned dma_chan_id;
Likewise.
> +struct netcp_addr {
> + struct netcp_intf *netcp;
> + unsigned char addr[MAX_ADDR_LEN];
If this is just an ethernet driver, ETH_ALEN is more appropriate here.
> + unsigned tx_compl_qid;
Explicit "unsigned int" please. I'm not going to point out all of the other
instances, audit your entire submission for this problem please.
> +static inline u32 *netcp_push_psdata(struct netcp_packet *p_info,
> + unsigned bytes)
> +{
> + u32 *buf;
> + unsigned words;
Do not use tabs between the type and the variable name in local variable
declarations.
Please audit for and fix this in your entire submission.
> +static inline u32 hwval_to_host(bool big_endian, u32 hwval)
> +{
> + if (big_endian)
> + return be32_to_cpu(hwval);
> + else
> + return le32_to_cpu(hwval);
> +}
You're much better off having a set of methods, one for big endian and
one for little endian, that just straight line codes the appropriate endian
accesses.
These conditionals peppered all over the place are just ugly.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] net: Add Keystone NetCP ethernet driver
2014-04-24 16:47 ` [PATCH 2/2] net: Add Keystone NetCP ethernet driver David Miller
@ 2014-04-24 21:04 ` Santosh Shilimkar
0 siblings, 0 replies; 6+ messages in thread
From: Santosh Shilimkar @ 2014-04-24 21:04 UTC (permalink / raw)
To: linux-arm-kernel
On Thursday 24 April 2014 12:47 PM, David Miller wrote:
> From: Santosh Shilimkar <santosh.shilimkar@ti.com>
> Date: Tue, 22 Apr 2014 17:21:15 -0400
>
>> +struct netcp_tx_pipe {
>> + struct netcp_device *netcp_device;
>> + void *dma_queue;
>
> Indent *dma_queue the same as the other struct members.
>
sure
>> + unsigned dma_queue_id;
>
> Use explicit "unsigned int".
>
>> + unsigned dma_chan_id;
>
> Likewise.
>
ok
>> +struct netcp_addr {
>> + struct netcp_intf *netcp;
>> + unsigned char addr[MAX_ADDR_LEN];
>
> If this is just an ethernet driver, ETH_ALEN is more appropriate here.
>
Yep. Will use ETH_ALEN
>> + unsigned tx_compl_qid;
>
> Explicit "unsigned int" please. I'm not going to point out all of the other
> instances, audit your entire submission for this problem please.
>
Thats true... Will fix all instances of those.
>> +static inline u32 *netcp_push_psdata(struct netcp_packet *p_info,
>> + unsigned bytes)
>> +{
>> + u32 *buf;
>> + unsigned words;
>
> Do not use tabs between the type and the variable name in local variable
> declarations.
>
ok
> Please audit for and fix this in your entire submission.
>
Will Do.
>> +static inline u32 hwval_to_host(bool big_endian, u32 hwval)
>> +{
>> + if (big_endian)
>> + return be32_to_cpu(hwval);
>> + else
>> + return le32_to_cpu(hwval);
>> +}
>
> You're much better off having a set of methods, one for big endian and
> one for little endian, that just straight line codes the appropriate endian
> accesses.
>
good idea.
> These conditionals peppered all over the place are just ugly.
>
Agree. Will try to fit into some logical functions.
Thanks for the review David !!
regards,
Santosh
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-04-24 21:04 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-22 21:21 [PATCH 0/2] net: Add Keystone NetCP ethernet driver support Santosh Shilimkar
2014-04-22 21:21 ` [PATCH 1/2] Documentation: dt: net: Add binding doc for Keystone NetCP ethernet driver Santosh Shilimkar
2014-04-22 22:02 ` [PATCH 0/2] net: Add Keystone NetCP ethernet driver support Stephen Hemminger
2014-04-22 23:56 ` Santosh Shilimkar
[not found] ` <1398201675-17379-3-git-send-email-santosh.shilimkar@ti.com>
2014-04-24 16:47 ` [PATCH 2/2] net: Add Keystone NetCP ethernet driver David Miller
2014-04-24 21:04 ` Santosh Shilimkar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).