linux-mips
[Top] [All Lists]

[PATCH 4/7] MIPS: Cavium-Octeon: Add more chip specific feature tests.

To: linux-mips@linux-mips.org, ralf@linux-mips.org, gregkh@suse.de
Subject: [PATCH 4/7] MIPS: Cavium-Octeon: Add more chip specific feature tests.
From: David Daney <ddaney@caviumnetworks.com>
Date: Tue, 5 May 2009 17:35:19 -0700
Cc: David Daney <ddaney@caviumnetworks.com>
In-reply-to: <4A00DA84.5040101@caviumnetworks.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <4A00DA84.5040101@caviumnetworks.com>
Sender: linux-mips-bounce@linux-mips.org
The octeon-ethernet driver needs to check for additional chip specific
features, we add them to the octeon_has_feature() framework.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
---
 arch/mips/include/asm/octeon/octeon-feature.h |   27 +++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/arch/mips/include/asm/octeon/octeon-feature.h 
b/arch/mips/include/asm/octeon/octeon-feature.h
index 04fac68..ef24a7b 100644
--- a/arch/mips/include/asm/octeon/octeon-feature.h
+++ b/arch/mips/include/asm/octeon/octeon-feature.h
@@ -57,6 +57,13 @@ enum octeon_feature {
        OCTEON_FEATURE_RAID,
        /* Octeon has a builtin USB */
        OCTEON_FEATURE_USB,
+       /* Octeon IPD can run without using work queue entries */
+       OCTEON_FEATURE_NO_WPTR,
+       /* Octeon has DFA state machines */
+       OCTEON_FEATURE_DFA,
+       /* Octeon MDIO block supports clause 45 transactions for 10
+        * Gig support */
+       OCTEON_FEATURE_MDIO_CLAUSE_45,
 };
 
 static inline int cvmx_fuse_read(int fuse);
@@ -112,6 +119,26 @@ static inline int octeon_has_feature(enum octeon_feature 
feature)
        case OCTEON_FEATURE_USB:
                return !(OCTEON_IS_MODEL(OCTEON_CN38XX)
                         || OCTEON_IS_MODEL(OCTEON_CN58XX));
+       case OCTEON_FEATURE_NO_WPTR:
+               return (OCTEON_IS_MODEL(OCTEON_CN56XX)
+                        || OCTEON_IS_MODEL(OCTEON_CN52XX))
+                       && !OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X)
+                       && !OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X);
+       case OCTEON_FEATURE_DFA:
+               if (!OCTEON_IS_MODEL(OCTEON_CN38XX)
+                   && !OCTEON_IS_MODEL(OCTEON_CN31XX)
+                   && !OCTEON_IS_MODEL(OCTEON_CN58XX))
+                       return 0;
+               else if (OCTEON_IS_MODEL(OCTEON_CN3020))
+                       return 0;
+               else if (OCTEON_IS_MODEL(OCTEON_CN38XX_PASS1))
+                       return 1;
+               else
+                       return !cvmx_fuse_read(120);
+       case OCTEON_FEATURE_MDIO_CLAUSE_45:
+               return !(OCTEON_IS_MODEL(OCTEON_CN3XXX)
+                        || OCTEON_IS_MODEL(OCTEON_CN58XX)
+                        || OCTEON_IS_MODEL(OCTEON_CN50XX));
        }
        return 0;
 }
-- 
1.6.0.6


<Prev in Thread] Current Thread [Next in Thread>