cpsw: add a DT field for the active time stamping port
authorRichard Cochran <richardcochran@gmail.com>
Mon, 29 Oct 2012 08:45:18 +0000 (08:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 1 Nov 2012 16:21:32 +0000 (12:21 -0400)
Because time stamping on both external ports of the switch simultaneously
is positively useless from the application's point of view, this patch
provides a DT configuration method to choose the active port.

Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/devicetree/bindings/net/cpsw.txt
drivers/net/ethernet/ti/cpsw.c
include/linux/platform_data/cpsw.h

index dba014fc5e7b99d56326e886b7265eb696559b90..9f61f2b51681648c2ff714d13a891f69ccbb24be 100644 (file)
@@ -23,6 +23,7 @@ Required properties:
 - mac_control          : Specifies Default MAC control register content
                          for the specific platform
 - slaves               : Specifies number for slaves
+- cpts_active_slave    : Specifies the slave to use for time stamping
 - slave_reg_ofs                : Specifies slave register offset
 - sliver_reg_ofs       : Specifies slave sliver register offset
 - phy_id               : Specifies slave phy id
@@ -60,6 +61,7 @@ Examples:
                rx_descs = <64>;
                mac_control = <0x20>;
                slaves = <2>;
+               cpts_active_slave = <0>;
                cpsw_emac0: slave@0 {
                        slave_reg_ofs = <0x200>;
                        sliver_reg_ofs = <0xd80>;
@@ -95,6 +97,7 @@ Examples:
                rx_descs = <64>;
                mac_control = <0x20>;
                slaves = <2>;
+               cpts_active_slave = <0>;
                cpsw_emac0: slave@0 {
                        slave_reg_ofs = <0x200>;
                        sliver_reg_ofs = <0xd80>;
index f1af5e08cabb7aef02c0e71817638bbad60608a3..f16579123c1bd595d5753ec83499c70f90d03931 100644 (file)
@@ -847,6 +847,13 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
        }
        data->slaves = prop;
 
+       if (of_property_read_u32(node, "cpts_active_slave", &prop)) {
+               pr_err("Missing cpts_active_slave property in the DT.\n");
+               ret = -EINVAL;
+               goto error_ret;
+       }
+       data->cpts_active_slave = prop;
+
        data->slave_data = kzalloc(sizeof(struct cpsw_slave_data) *
                                   data->slaves, GFP_KERNEL);
        if (!data->slave_data) {
index a052b1dca9573fd00af21a2555898e3abdce239f..15a077eb0689266a36fb6e2708ad0d943910aed2 100644 (file)
@@ -33,6 +33,7 @@ struct cpsw_platform_data {
 
        u32     slaves;         /* number of slave cpgmac ports */
        struct cpsw_slave_data  *slave_data;
+       u32     cpts_active_slave; /* time stamping slave */
 
        u32     ale_reg_ofs;    /* address lookup engine reg offset */
        u32     ale_entries;    /* ale table size */