Add support for the Marvell Alaska 88E1543 PHY used in the WatchGuard
Firebox M200 and M300.
Signed-off-by: Stijn Tintel <[email protected]>
---
drivers/net/phy/marvell.c | 27 +++++++++++++++++++++++++++
include/linux/marvell_phy.h | 1 +
2 files changed, 28 insertions(+)
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 2702faf7b0f6..c510eda23069 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -3166,6 +3166,32 @@ static struct phy_driver marvell_drivers[] = {
.cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
.cable_test_get_status = marvell_vct7_cable_test_get_status,
},
+ {
+ .phy_id = MARVELL_PHY_ID_88E1543,
+ .phy_id_mask = MARVELL_PHY_ID_MASK,
+ .name = "Marvell 88E1543",
+ .probe = m88e1510_probe,
+ /* PHY_GBIT_FEATURES */
+ .flags = PHY_POLL_CABLE_TEST,
+ .config_init = marvell_config_init,
+ .config_aneg = m88e1510_config_aneg,
+ .read_status = marvell_read_status,
+ .ack_interrupt = marvell_ack_interrupt,
+ .config_intr = marvell_config_intr,
+ .did_interrupt = m88e1121_did_interrupt,
+ .resume = genphy_resume,
+ .suspend = genphy_suspend,
+ .read_page = marvell_read_page,
+ .write_page = marvell_write_page,
+ .get_sset_count = marvell_get_sset_count,
+ .get_strings = marvell_get_strings,
+ .get_stats = marvell_get_stats,
+ .get_tunable = m88e1540_get_tunable,
+ .set_tunable = m88e1540_set_tunable,
+ .cable_test_start = marvell_vct7_cable_test_start,
+ .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
+ .cable_test_get_status = marvell_vct7_cable_test_get_status,
+ },
{
.phy_id = MARVELL_PHY_ID_88E1545,
.phy_id_mask = MARVELL_PHY_ID_MASK,
@@ -3351,6 +3377,7 @@ static struct mdio_device_id __maybe_unused marvell_tbl[] = {
{ MARVELL_PHY_ID_88E1116R, MARVELL_PHY_ID_MASK },
{ MARVELL_PHY_ID_88E1510, MARVELL_PHY_ID_MASK },
{ MARVELL_PHY_ID_88E1540, MARVELL_PHY_ID_MASK },
+ { MARVELL_PHY_ID_88E1543, MARVELL_PHY_ID_MASK },
{ MARVELL_PHY_ID_88E1545, MARVELL_PHY_ID_MASK },
{ MARVELL_PHY_ID_88E3016, MARVELL_PHY_ID_MASK },
{ MARVELL_PHY_ID_88E6341_FAMILY, MARVELL_PHY_ID_MASK },
diff --git a/include/linux/marvell_phy.h b/include/linux/marvell_phy.h
index 0f06c2287b52..26a77a5b62fc 100644
--- a/include/linux/marvell_phy.h
+++ b/include/linux/marvell_phy.h
@@ -19,6 +19,7 @@
#define MARVELL_PHY_ID_88E1116R 0x01410e40
#define MARVELL_PHY_ID_88E1510 0x01410dd0
#define MARVELL_PHY_ID_88E1540 0x01410eb0
+#define MARVELL_PHY_ID_88E1543 0x01410ea2
#define MARVELL_PHY_ID_88E1545 0x01410ea0
#define MARVELL_PHY_ID_88E1548P 0x01410ec0
#define MARVELL_PHY_ID_88E3016 0x01410e60
--
2.35.1
Hi Stijn,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net/master]
[also build test ERROR on net-next/master horms-ipvs/master linus/master v5.17 next-20220401]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/intel-lab-lkp/linux/commits/Stijn-Tintel/net-phy-marvell-add-88E1543-support/20220404-013014
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git 692930cc435099580a4b9e32fa781b0688c18439
config: i386-randconfig-a013 (https://download.01.org/0day-ci/archive/20220404/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project c4a1b07d0979e7ff20d7d541af666d822d66b566)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/347a5d3810df9aea60a8ab28f6ca2060fce76830
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Stijn-Tintel/net-phy-marvell-add-88E1543-support/20220404-013014
git checkout 347a5d3810df9aea60a8ab28f6ca2060fce76830
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/net/phy/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
All errors (new ones prefixed by >>):
>> drivers/net/phy/marvell.c:3181:20: error: use of undeclared identifier 'm88e1121_did_interrupt'
.did_interrupt = m88e1121_did_interrupt,
^
>> drivers/net/phy/marvell.c:3364:1: error: invalid application of 'sizeof' to an incomplete type 'struct phy_driver[]'
module_phy_driver(marvell_drivers);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/phy.h:1827:35: note: expanded from macro 'module_phy_driver'
phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:55:32: note: expanded from macro 'ARRAY_SIZE'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^
include/linux/phy.h:1817:45: note: expanded from macro 'phy_module_driver'
return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
^~~~~~~
>> drivers/net/phy/marvell.c:3364:1: error: invalid application of 'sizeof' to an incomplete type 'struct phy_driver[]'
module_phy_driver(marvell_drivers);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/phy.h:1827:35: note: expanded from macro 'module_phy_driver'
phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:55:32: note: expanded from macro 'ARRAY_SIZE'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^
include/linux/phy.h:1822:40: note: expanded from macro 'phy_module_driver'
phy_drivers_unregister(__phy_drivers, __count); \
^~~~~~~
3 errors generated.
vim +/m88e1121_did_interrupt +3181 drivers/net/phy/marvell.c
2894
2895 static struct phy_driver marvell_drivers[] = {
2896 {
2897 .phy_id = MARVELL_PHY_ID_88E1101,
2898 .phy_id_mask = MARVELL_PHY_ID_MASK,
2899 .name = "Marvell 88E1101",
2900 /* PHY_GBIT_FEATURES */
2901 .probe = marvell_probe,
2902 .config_init = marvell_config_init,
2903 .config_aneg = m88e1101_config_aneg,
2904 .config_intr = marvell_config_intr,
2905 .handle_interrupt = marvell_handle_interrupt,
2906 .resume = genphy_resume,
2907 .suspend = genphy_suspend,
2908 .read_page = marvell_read_page,
2909 .write_page = marvell_write_page,
2910 .get_sset_count = marvell_get_sset_count,
2911 .get_strings = marvell_get_strings,
2912 .get_stats = marvell_get_stats,
2913 },
2914 {
2915 .phy_id = MARVELL_PHY_ID_88E1112,
2916 .phy_id_mask = MARVELL_PHY_ID_MASK,
2917 .name = "Marvell 88E1112",
2918 /* PHY_GBIT_FEATURES */
2919 .probe = marvell_probe,
2920 .config_init = m88e1112_config_init,
2921 .config_aneg = marvell_config_aneg,
2922 .config_intr = marvell_config_intr,
2923 .handle_interrupt = marvell_handle_interrupt,
2924 .resume = genphy_resume,
2925 .suspend = genphy_suspend,
2926 .read_page = marvell_read_page,
2927 .write_page = marvell_write_page,
2928 .get_sset_count = marvell_get_sset_count,
2929 .get_strings = marvell_get_strings,
2930 .get_stats = marvell_get_stats,
2931 .get_tunable = m88e1011_get_tunable,
2932 .set_tunable = m88e1011_set_tunable,
2933 },
2934 {
2935 .phy_id = MARVELL_PHY_ID_88E1111,
2936 .phy_id_mask = MARVELL_PHY_ID_MASK,
2937 .name = "Marvell 88E1111",
2938 /* PHY_GBIT_FEATURES */
2939 .probe = marvell_probe,
2940 .config_init = m88e1111gbe_config_init,
2941 .config_aneg = m88e1111_config_aneg,
2942 .read_status = marvell_read_status,
2943 .config_intr = marvell_config_intr,
2944 .handle_interrupt = marvell_handle_interrupt,
2945 .resume = genphy_resume,
2946 .suspend = genphy_suspend,
2947 .read_page = marvell_read_page,
2948 .write_page = marvell_write_page,
2949 .get_sset_count = marvell_get_sset_count,
2950 .get_strings = marvell_get_strings,
2951 .get_stats = marvell_get_stats,
2952 .get_tunable = m88e1111_get_tunable,
2953 .set_tunable = m88e1111_set_tunable,
2954 },
2955 {
2956 .phy_id = MARVELL_PHY_ID_88E1111_FINISAR,
2957 .phy_id_mask = MARVELL_PHY_ID_MASK,
2958 .name = "Marvell 88E1111 (Finisar)",
2959 /* PHY_GBIT_FEATURES */
2960 .probe = marvell_probe,
2961 .config_init = m88e1111gbe_config_init,
2962 .config_aneg = m88e1111_config_aneg,
2963 .read_status = marvell_read_status,
2964 .config_intr = marvell_config_intr,
2965 .handle_interrupt = marvell_handle_interrupt,
2966 .resume = genphy_resume,
2967 .suspend = genphy_suspend,
2968 .read_page = marvell_read_page,
2969 .write_page = marvell_write_page,
2970 .get_sset_count = marvell_get_sset_count,
2971 .get_strings = marvell_get_strings,
2972 .get_stats = marvell_get_stats,
2973 .get_tunable = m88e1111_get_tunable,
2974 .set_tunable = m88e1111_set_tunable,
2975 },
2976 {
2977 .phy_id = MARVELL_PHY_ID_88E1118,
2978 .phy_id_mask = MARVELL_PHY_ID_MASK,
2979 .name = "Marvell 88E1118",
2980 /* PHY_GBIT_FEATURES */
2981 .probe = marvell_probe,
2982 .config_init = m88e1118_config_init,
2983 .config_aneg = m88e1118_config_aneg,
2984 .config_intr = marvell_config_intr,
2985 .handle_interrupt = marvell_handle_interrupt,
2986 .resume = genphy_resume,
2987 .suspend = genphy_suspend,
2988 .read_page = marvell_read_page,
2989 .write_page = marvell_write_page,
2990 .get_sset_count = marvell_get_sset_count,
2991 .get_strings = marvell_get_strings,
2992 .get_stats = marvell_get_stats,
2993 },
2994 {
2995 .phy_id = MARVELL_PHY_ID_88E1121R,
2996 .phy_id_mask = MARVELL_PHY_ID_MASK,
2997 .name = "Marvell 88E1121R",
2998 .driver_data = DEF_MARVELL_HWMON_OPS(m88e1121_hwmon_ops),
2999 /* PHY_GBIT_FEATURES */
3000 .probe = marvell_probe,
3001 .config_init = marvell_1011gbe_config_init,
3002 .config_aneg = m88e1121_config_aneg,
3003 .read_status = marvell_read_status,
3004 .config_intr = marvell_config_intr,
3005 .handle_interrupt = marvell_handle_interrupt,
3006 .resume = genphy_resume,
3007 .suspend = genphy_suspend,
3008 .read_page = marvell_read_page,
3009 .write_page = marvell_write_page,
3010 .get_sset_count = marvell_get_sset_count,
3011 .get_strings = marvell_get_strings,
3012 .get_stats = marvell_get_stats,
3013 .get_tunable = m88e1011_get_tunable,
3014 .set_tunable = m88e1011_set_tunable,
3015 },
3016 {
3017 .phy_id = MARVELL_PHY_ID_88E1318S,
3018 .phy_id_mask = MARVELL_PHY_ID_MASK,
3019 .name = "Marvell 88E1318S",
3020 /* PHY_GBIT_FEATURES */
3021 .probe = marvell_probe,
3022 .config_init = m88e1318_config_init,
3023 .config_aneg = m88e1318_config_aneg,
3024 .read_status = marvell_read_status,
3025 .config_intr = marvell_config_intr,
3026 .handle_interrupt = marvell_handle_interrupt,
3027 .get_wol = m88e1318_get_wol,
3028 .set_wol = m88e1318_set_wol,
3029 .resume = genphy_resume,
3030 .suspend = genphy_suspend,
3031 .read_page = marvell_read_page,
3032 .write_page = marvell_write_page,
3033 .get_sset_count = marvell_get_sset_count,
3034 .get_strings = marvell_get_strings,
3035 .get_stats = marvell_get_stats,
3036 },
3037 {
3038 .phy_id = MARVELL_PHY_ID_88E1145,
3039 .phy_id_mask = MARVELL_PHY_ID_MASK,
3040 .name = "Marvell 88E1145",
3041 /* PHY_GBIT_FEATURES */
3042 .probe = marvell_probe,
3043 .config_init = m88e1145_config_init,
3044 .config_aneg = m88e1101_config_aneg,
3045 .config_intr = marvell_config_intr,
3046 .handle_interrupt = marvell_handle_interrupt,
3047 .resume = genphy_resume,
3048 .suspend = genphy_suspend,
3049 .read_page = marvell_read_page,
3050 .write_page = marvell_write_page,
3051 .get_sset_count = marvell_get_sset_count,
3052 .get_strings = marvell_get_strings,
3053 .get_stats = marvell_get_stats,
3054 .get_tunable = m88e1111_get_tunable,
3055 .set_tunable = m88e1111_set_tunable,
3056 },
3057 {
3058 .phy_id = MARVELL_PHY_ID_88E1149R,
3059 .phy_id_mask = MARVELL_PHY_ID_MASK,
3060 .name = "Marvell 88E1149R",
3061 /* PHY_GBIT_FEATURES */
3062 .probe = marvell_probe,
3063 .config_init = m88e1149_config_init,
3064 .config_aneg = m88e1118_config_aneg,
3065 .config_intr = marvell_config_intr,
3066 .handle_interrupt = marvell_handle_interrupt,
3067 .resume = genphy_resume,
3068 .suspend = genphy_suspend,
3069 .read_page = marvell_read_page,
3070 .write_page = marvell_write_page,
3071 .get_sset_count = marvell_get_sset_count,
3072 .get_strings = marvell_get_strings,
3073 .get_stats = marvell_get_stats,
3074 },
3075 {
3076 .phy_id = MARVELL_PHY_ID_88E1240,
3077 .phy_id_mask = MARVELL_PHY_ID_MASK,
3078 .name = "Marvell 88E1240",
3079 /* PHY_GBIT_FEATURES */
3080 .probe = marvell_probe,
3081 .config_init = m88e1112_config_init,
3082 .config_aneg = marvell_config_aneg,
3083 .config_intr = marvell_config_intr,
3084 .handle_interrupt = marvell_handle_interrupt,
3085 .resume = genphy_resume,
3086 .suspend = genphy_suspend,
3087 .read_page = marvell_read_page,
3088 .write_page = marvell_write_page,
3089 .get_sset_count = marvell_get_sset_count,
3090 .get_strings = marvell_get_strings,
3091 .get_stats = marvell_get_stats,
3092 .get_tunable = m88e1011_get_tunable,
3093 .set_tunable = m88e1011_set_tunable,
3094 },
3095 {
3096 .phy_id = MARVELL_PHY_ID_88E1116R,
3097 .phy_id_mask = MARVELL_PHY_ID_MASK,
3098 .name = "Marvell 88E1116R",
3099 /* PHY_GBIT_FEATURES */
3100 .probe = marvell_probe,
3101 .config_init = m88e1116r_config_init,
3102 .config_intr = marvell_config_intr,
3103 .handle_interrupt = marvell_handle_interrupt,
3104 .resume = genphy_resume,
3105 .suspend = genphy_suspend,
3106 .read_page = marvell_read_page,
3107 .write_page = marvell_write_page,
3108 .get_sset_count = marvell_get_sset_count,
3109 .get_strings = marvell_get_strings,
3110 .get_stats = marvell_get_stats,
3111 .get_tunable = m88e1011_get_tunable,
3112 .set_tunable = m88e1011_set_tunable,
3113 },
3114 {
3115 .phy_id = MARVELL_PHY_ID_88E1510,
3116 .phy_id_mask = MARVELL_PHY_ID_MASK,
3117 .name = "Marvell 88E1510",
3118 .driver_data = DEF_MARVELL_HWMON_OPS(m88e1510_hwmon_ops),
3119 .features = PHY_GBIT_FIBRE_FEATURES,
3120 .flags = PHY_POLL_CABLE_TEST,
3121 .probe = m88e1510_probe,
3122 .config_init = m88e1510_config_init,
3123 .config_aneg = m88e1510_config_aneg,
3124 .read_status = marvell_read_status,
3125 .config_intr = marvell_config_intr,
3126 .handle_interrupt = marvell_handle_interrupt,
3127 .get_wol = m88e1318_get_wol,
3128 .set_wol = m88e1318_set_wol,
3129 .resume = marvell_resume,
3130 .suspend = marvell_suspend,
3131 .read_page = marvell_read_page,
3132 .write_page = marvell_write_page,
3133 .get_sset_count = marvell_get_sset_count,
3134 .get_strings = marvell_get_strings,
3135 .get_stats = marvell_get_stats,
3136 .set_loopback = m88e1510_loopback,
3137 .get_tunable = m88e1011_get_tunable,
3138 .set_tunable = m88e1011_set_tunable,
3139 .cable_test_start = marvell_vct7_cable_test_start,
3140 .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
3141 .cable_test_get_status = marvell_vct7_cable_test_get_status,
3142 },
3143 {
3144 .phy_id = MARVELL_PHY_ID_88E1540,
3145 .phy_id_mask = MARVELL_PHY_ID_MASK,
3146 .name = "Marvell 88E1540",
3147 .driver_data = DEF_MARVELL_HWMON_OPS(m88e1510_hwmon_ops),
3148 /* PHY_GBIT_FEATURES */
3149 .flags = PHY_POLL_CABLE_TEST,
3150 .probe = marvell_probe,
3151 .config_init = marvell_1011gbe_config_init,
3152 .config_aneg = m88e1510_config_aneg,
3153 .read_status = marvell_read_status,
3154 .config_intr = marvell_config_intr,
3155 .handle_interrupt = marvell_handle_interrupt,
3156 .resume = genphy_resume,
3157 .suspend = genphy_suspend,
3158 .read_page = marvell_read_page,
3159 .write_page = marvell_write_page,
3160 .get_sset_count = marvell_get_sset_count,
3161 .get_strings = marvell_get_strings,
3162 .get_stats = marvell_get_stats,
3163 .get_tunable = m88e1540_get_tunable,
3164 .set_tunable = m88e1540_set_tunable,
3165 .cable_test_start = marvell_vct7_cable_test_start,
3166 .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
3167 .cable_test_get_status = marvell_vct7_cable_test_get_status,
3168 },
3169 {
3170 .phy_id = MARVELL_PHY_ID_88E1543,
3171 .phy_id_mask = MARVELL_PHY_ID_MASK,
3172 .name = "Marvell 88E1543",
3173 .probe = m88e1510_probe,
3174 /* PHY_GBIT_FEATURES */
3175 .flags = PHY_POLL_CABLE_TEST,
3176 .config_init = marvell_config_init,
3177 .config_aneg = m88e1510_config_aneg,
3178 .read_status = marvell_read_status,
3179 .ack_interrupt = marvell_ack_interrupt,
3180 .config_intr = marvell_config_intr,
> 3181 .did_interrupt = m88e1121_did_interrupt,
3182 .resume = genphy_resume,
3183 .suspend = genphy_suspend,
3184 .read_page = marvell_read_page,
3185 .write_page = marvell_write_page,
3186 .get_sset_count = marvell_get_sset_count,
3187 .get_strings = marvell_get_strings,
3188 .get_stats = marvell_get_stats,
3189 .get_tunable = m88e1540_get_tunable,
3190 .set_tunable = m88e1540_set_tunable,
3191 .cable_test_start = marvell_vct7_cable_test_start,
3192 .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
3193 .cable_test_get_status = marvell_vct7_cable_test_get_status,
3194 },
3195 {
3196 .phy_id = MARVELL_PHY_ID_88E1545,
3197 .phy_id_mask = MARVELL_PHY_ID_MASK,
3198 .name = "Marvell 88E1545",
3199 .driver_data = DEF_MARVELL_HWMON_OPS(m88e1510_hwmon_ops),
3200 .probe = marvell_probe,
3201 /* PHY_GBIT_FEATURES */
3202 .flags = PHY_POLL_CABLE_TEST,
3203 .config_init = marvell_1011gbe_config_init,
3204 .config_aneg = m88e1510_config_aneg,
3205 .read_status = marvell_read_status,
3206 .config_intr = marvell_config_intr,
3207 .handle_interrupt = marvell_handle_interrupt,
3208 .resume = genphy_resume,
3209 .suspend = genphy_suspend,
3210 .read_page = marvell_read_page,
3211 .write_page = marvell_write_page,
3212 .get_sset_count = marvell_get_sset_count,
3213 .get_strings = marvell_get_strings,
3214 .get_stats = marvell_get_stats,
3215 .get_tunable = m88e1540_get_tunable,
3216 .set_tunable = m88e1540_set_tunable,
3217 .cable_test_start = marvell_vct7_cable_test_start,
3218 .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
3219 .cable_test_get_status = marvell_vct7_cable_test_get_status,
3220 },
3221 {
3222 .phy_id = MARVELL_PHY_ID_88E3016,
3223 .phy_id_mask = MARVELL_PHY_ID_MASK,
3224 .name = "Marvell 88E3016",
3225 /* PHY_BASIC_FEATURES */
3226 .probe = marvell_probe,
3227 .config_init = m88e3016_config_init,
3228 .aneg_done = marvell_aneg_done,
3229 .read_status = marvell_read_status,
3230 .config_intr = marvell_config_intr,
3231 .handle_interrupt = marvell_handle_interrupt,
3232 .resume = genphy_resume,
3233 .suspend = genphy_suspend,
3234 .read_page = marvell_read_page,
3235 .write_page = marvell_write_page,
3236 .get_sset_count = marvell_get_sset_count,
3237 .get_strings = marvell_get_strings,
3238 .get_stats = marvell_get_stats,
3239 },
3240 {
3241 .phy_id = MARVELL_PHY_ID_88E6341_FAMILY,
3242 .phy_id_mask = MARVELL_PHY_ID_MASK,
3243 .name = "Marvell 88E6341 Family",
3244 .driver_data = DEF_MARVELL_HWMON_OPS(m88e1510_hwmon_ops),
3245 /* PHY_GBIT_FEATURES */
3246 .flags = PHY_POLL_CABLE_TEST,
3247 .probe = marvell_probe,
3248 .config_init = marvell_1011gbe_config_init,
3249 .config_aneg = m88e6390_config_aneg,
3250 .read_status = marvell_read_status,
3251 .config_intr = marvell_config_intr,
3252 .handle_interrupt = marvell_handle_interrupt,
3253 .resume = genphy_resume,
3254 .suspend = genphy_suspend,
3255 .read_page = marvell_read_page,
3256 .write_page = marvell_write_page,
3257 .get_sset_count = marvell_get_sset_count,
3258 .get_strings = marvell_get_strings,
3259 .get_stats = marvell_get_stats,
3260 .get_tunable = m88e1540_get_tunable,
3261 .set_tunable = m88e1540_set_tunable,
3262 .cable_test_start = marvell_vct7_cable_test_start,
3263 .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
3264 .cable_test_get_status = marvell_vct7_cable_test_get_status,
3265 },
3266 {
3267 .phy_id = MARVELL_PHY_ID_88E6390_FAMILY,
3268 .phy_id_mask = MARVELL_PHY_ID_MASK,
3269 .name = "Marvell 88E6390 Family",
3270 .driver_data = DEF_MARVELL_HWMON_OPS(m88e6390_hwmon_ops),
3271 /* PHY_GBIT_FEATURES */
3272 .flags = PHY_POLL_CABLE_TEST,
3273 .probe = marvell_probe,
3274 .config_init = marvell_1011gbe_config_init,
3275 .config_aneg = m88e6390_config_aneg,
3276 .read_status = marvell_read_status,
3277 .config_intr = marvell_config_intr,
3278 .handle_interrupt = marvell_handle_interrupt,
3279 .resume = genphy_resume,
3280 .suspend = genphy_suspend,
3281 .read_page = marvell_read_page,
3282 .write_page = marvell_write_page,
3283 .get_sset_count = marvell_get_sset_count,
3284 .get_strings = marvell_get_strings,
3285 .get_stats = marvell_get_stats,
3286 .get_tunable = m88e1540_get_tunable,
3287 .set_tunable = m88e1540_set_tunable,
3288 .cable_test_start = marvell_vct7_cable_test_start,
3289 .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
3290 .cable_test_get_status = marvell_vct7_cable_test_get_status,
3291 },
3292 {
3293 .phy_id = MARVELL_PHY_ID_88E6393_FAMILY,
3294 .phy_id_mask = MARVELL_PHY_ID_MASK,
3295 .name = "Marvell 88E6393 Family",
3296 .driver_data = DEF_MARVELL_HWMON_OPS(m88e6393_hwmon_ops),
3297 /* PHY_GBIT_FEATURES */
3298 .flags = PHY_POLL_CABLE_TEST,
3299 .probe = marvell_probe,
3300 .config_init = marvell_1011gbe_config_init,
3301 .config_aneg = m88e1510_config_aneg,
3302 .read_status = marvell_read_status,
3303 .config_intr = marvell_config_intr,
3304 .handle_interrupt = marvell_handle_interrupt,
3305 .resume = genphy_resume,
3306 .suspend = genphy_suspend,
3307 .read_page = marvell_read_page,
3308 .write_page = marvell_write_page,
3309 .get_sset_count = marvell_get_sset_count,
3310 .get_strings = marvell_get_strings,
3311 .get_stats = marvell_get_stats,
3312 .get_tunable = m88e1540_get_tunable,
3313 .set_tunable = m88e1540_set_tunable,
3314 .cable_test_start = marvell_vct7_cable_test_start,
3315 .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
3316 .cable_test_get_status = marvell_vct7_cable_test_get_status,
3317 },
3318 {
3319 .phy_id = MARVELL_PHY_ID_88E1340S,
3320 .phy_id_mask = MARVELL_PHY_ID_MASK,
3321 .name = "Marvell 88E1340S",
3322 .driver_data = DEF_MARVELL_HWMON_OPS(m88e1510_hwmon_ops),
3323 .probe = marvell_probe,
3324 /* PHY_GBIT_FEATURES */
3325 .config_init = marvell_1011gbe_config_init,
3326 .config_aneg = m88e1510_config_aneg,
3327 .read_status = marvell_read_status,
3328 .config_intr = marvell_config_intr,
3329 .handle_interrupt = marvell_handle_interrupt,
3330 .resume = genphy_resume,
3331 .suspend = genphy_suspend,
3332 .read_page = marvell_read_page,
3333 .write_page = marvell_write_page,
3334 .get_sset_count = marvell_get_sset_count,
3335 .get_strings = marvell_get_strings,
3336 .get_stats = marvell_get_stats,
3337 .get_tunable = m88e1540_get_tunable,
3338 .set_tunable = m88e1540_set_tunable,
3339 },
3340 {
3341 .phy_id = MARVELL_PHY_ID_88E1548P,
3342 .phy_id_mask = MARVELL_PHY_ID_MASK,
3343 .name = "Marvell 88E1548P",
3344 .driver_data = DEF_MARVELL_HWMON_OPS(m88e1510_hwmon_ops),
3345 .probe = marvell_probe,
3346 .features = PHY_GBIT_FIBRE_FEATURES,
3347 .config_init = marvell_1011gbe_config_init,
3348 .config_aneg = m88e1510_config_aneg,
3349 .read_status = marvell_read_status,
3350 .config_intr = marvell_config_intr,
3351 .handle_interrupt = marvell_handle_interrupt,
3352 .resume = genphy_resume,
3353 .suspend = genphy_suspend,
3354 .read_page = marvell_read_page,
3355 .write_page = marvell_write_page,
3356 .get_sset_count = marvell_get_sset_count,
3357 .get_strings = marvell_get_strings,
3358 .get_stats = marvell_get_stats,
3359 .get_tunable = m88e1540_get_tunable,
3360 .set_tunable = m88e1540_set_tunable,
3361 },
3362 };
3363
> 3364 module_phy_driver(marvell_drivers);
3365
--
0-DAY CI Kernel Test Service
https://01.org/lkp