diff options
author | Divy Le Ray <divy@chelsio.com> | 2007-08-29 22:15:52 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-08-31 07:29:08 -0400 |
commit | 47330077650a25d417155848516b2cba97999602 (patch) | |
tree | c2e34f0771a34dc74f30806b537b9f9b7a75b311 /drivers/net/cxgb3/t3_hw.c | |
parent | 5fbf816fe7d72bfdbf22bfec05b4ec3aa6849f72 (diff) |
- cxgb3 engine microcode load
Load the engine microcode when an interface
is brought up, instead of of doing it when the module
is loaded.
Loosen up tight binding between the driver and the
engine microcode version.
There is no need for microcode update with T3A boards.
Fix the file naming.
Do a better job at logging the loading activity.
Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/cxgb3/t3_hw.c')
-rw-r--r-- | drivers/net/cxgb3/t3_hw.c | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index dd3149d94ba8..b02d15daf5d9 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c | |||
@@ -848,16 +848,15 @@ static int t3_write_flash(struct adapter *adapter, unsigned int addr, | |||
848 | } | 848 | } |
849 | 849 | ||
850 | /** | 850 | /** |
851 | * t3_check_tpsram_version - read the tp sram version | 851 | * t3_get_tp_version - read the tp sram version |
852 | * @adapter: the adapter | 852 | * @adapter: the adapter |
853 | * @vers: where to place the version | ||
853 | * | 854 | * |
854 | * Reads the protocol sram version from serial eeprom. | 855 | * Reads the protocol sram version from sram. |
855 | */ | 856 | */ |
856 | int t3_check_tpsram_version(struct adapter *adapter) | 857 | int t3_get_tp_version(struct adapter *adapter, u32 *vers) |
857 | { | 858 | { |
858 | int ret; | 859 | int ret; |
859 | u32 vers; | ||
860 | unsigned int major, minor; | ||
861 | 860 | ||
862 | /* Get version loaded in SRAM */ | 861 | /* Get version loaded in SRAM */ |
863 | t3_write_reg(adapter, A_TP_EMBED_OP_FIELD0, 0); | 862 | t3_write_reg(adapter, A_TP_EMBED_OP_FIELD0, 0); |
@@ -866,7 +865,32 @@ int t3_check_tpsram_version(struct adapter *adapter) | |||
866 | if (ret) | 865 | if (ret) |
867 | return ret; | 866 | return ret; |
868 | 867 | ||
869 | vers = t3_read_reg(adapter, A_TP_EMBED_OP_FIELD1); | 868 | *vers = t3_read_reg(adapter, A_TP_EMBED_OP_FIELD1); |
869 | |||
870 | return 0; | ||
871 | } | ||
872 | |||
873 | /** | ||
874 | * t3_check_tpsram_version - read the tp sram version | ||
875 | * @adapter: the adapter | ||
876 | * @must_load: set to 1 if loading a new microcode image is required | ||
877 | * | ||
878 | * Reads the protocol sram version from flash. | ||
879 | */ | ||
880 | int t3_check_tpsram_version(struct adapter *adapter, int *must_load) | ||
881 | { | ||
882 | int ret; | ||
883 | u32 vers; | ||
884 | unsigned int major, minor; | ||
885 | |||
886 | if (adapter->params.rev == T3_REV_A) | ||
887 | return 0; | ||
888 | |||
889 | *must_load = 1; | ||
890 | |||
891 | ret = t3_get_tp_version(adapter, &vers); | ||
892 | if (ret) | ||
893 | return ret; | ||
870 | 894 | ||
871 | major = G_TP_VERSION_MAJOR(vers); | 895 | major = G_TP_VERSION_MAJOR(vers); |
872 | minor = G_TP_VERSION_MINOR(vers); | 896 | minor = G_TP_VERSION_MINOR(vers); |
@@ -874,6 +898,16 @@ int t3_check_tpsram_version(struct adapter *adapter) | |||
874 | if (major == TP_VERSION_MAJOR && minor == TP_VERSION_MINOR) | 898 | if (major == TP_VERSION_MAJOR && minor == TP_VERSION_MINOR) |
875 | return 0; | 899 | return 0; |
876 | 900 | ||
901 | if (major != TP_VERSION_MAJOR) | ||
902 | CH_ERR(adapter, "found wrong TP version (%u.%u), " | ||
903 | "driver needs version %d.%d\n", major, minor, | ||
904 | TP_VERSION_MAJOR, TP_VERSION_MINOR); | ||
905 | else { | ||
906 | *must_load = 0; | ||
907 | CH_ERR(adapter, "found wrong TP version (%u.%u), " | ||
908 | "driver compiled for version %d.%d\n", major, minor, | ||
909 | TP_VERSION_MAJOR, TP_VERSION_MINOR); | ||
910 | } | ||
877 | return -EINVAL; | 911 | return -EINVAL; |
878 | } | 912 | } |
879 | 913 | ||