diff options
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 | ||