[ardb:efi-psci 3/3] include/linux/efi.h:1156:2: error: implicit declaration of function 'arch_efi_call_virt_setup'
by kernel test robot
tree: git://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git efi-psci
head: d78fdf5ff0f616e7923deb07ecce44ca3eb12788
commit: d78fdf5ff0f616e7923deb07ecce44ca3eb12788 [3/3] efi: arm: implement PSCI method backed by EFI runtime code
config: arm-allyesconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
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://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git/commit/?id...
git remote add ardb git://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git
git fetch --no-tags ardb efi-psci
git checkout d78fdf5ff0f616e7923deb07ecce44ca3eb12788
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/firmware/psci/psci.c:12:
drivers/firmware/psci/psci.c: In function '__invoke_psci_fn_efi':
>> include/linux/efi.h:1156:2: error: implicit declaration of function 'arch_efi_call_virt_setup' [-Werror=implicit-function-declaration]
1156 | arch_efi_call_virt_setup(); \
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/firmware/psci/psci.c:137:9: note: in expansion of macro 'efi_call_virt_pointer'
137 | return efi_call_virt_pointer((&efi_psci), psci_handler, function_id,
| ^~~~~~~~~~~~~~~~~~~~~
>> include/linux/efi.h:1159:8: error: implicit declaration of function 'arch_efi_call_virt' [-Werror=implicit-function-declaration]
1159 | __s = arch_efi_call_virt(p, f, args); \
| ^~~~~~~~~~~~~~~~~~
drivers/firmware/psci/psci.c:137:9: note: in expansion of macro 'efi_call_virt_pointer'
137 | return efi_call_virt_pointer((&efi_psci), psci_handler, function_id,
| ^~~~~~~~~~~~~~~~~~~~~
>> drivers/firmware/psci/psci.c:137:44: error: 'psci_handler' undeclared (first use in this function); did you mean 'proc_handler'?
137 | return efi_call_virt_pointer((&efi_psci), psci_handler, function_id,
| ^~~~~~~~~~~~
include/linux/efi.h:1159:30: note: in definition of macro 'efi_call_virt_pointer'
1159 | __s = arch_efi_call_virt(p, f, args); \
| ^
drivers/firmware/psci/psci.c:137:44: note: each undeclared identifier is reported only once for each function it appears in
137 | return efi_call_virt_pointer((&efi_psci), psci_handler, function_id,
| ^~~~~~~~~~~~
include/linux/efi.h:1159:30: note: in definition of macro 'efi_call_virt_pointer'
1159 | __s = arch_efi_call_virt(p, f, args); \
| ^
>> include/linux/efi.h:1162:2: error: implicit declaration of function 'arch_efi_call_virt_teardown' [-Werror=implicit-function-declaration]
1162 | arch_efi_call_virt_teardown(); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/firmware/psci/psci.c:137:9: note: in expansion of macro 'efi_call_virt_pointer'
137 | return efi_call_virt_pointer((&efi_psci), psci_handler, function_id,
| ^~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/arch_efi_call_virt_setup +1156 include/linux/efi.h
33b6d03469b220 Thiebaud Weksteen 2017-09-20 1130
80e75596079f0a Alex Thorlton 2016-06-25 1131 /*
80e75596079f0a Alex Thorlton 2016-06-25 1132 * Arch code can implement the following three template macros, avoiding
80e75596079f0a Alex Thorlton 2016-06-25 1133 * reptition for the void/non-void return cases of {__,}efi_call_virt():
80e75596079f0a Alex Thorlton 2016-06-25 1134 *
80e75596079f0a Alex Thorlton 2016-06-25 1135 * * arch_efi_call_virt_setup()
80e75596079f0a Alex Thorlton 2016-06-25 1136 *
80e75596079f0a Alex Thorlton 2016-06-25 1137 * Sets up the environment for the call (e.g. switching page tables,
80e75596079f0a Alex Thorlton 2016-06-25 1138 * allowing kernel-mode use of floating point, if required).
80e75596079f0a Alex Thorlton 2016-06-25 1139 *
80e75596079f0a Alex Thorlton 2016-06-25 1140 * * arch_efi_call_virt()
80e75596079f0a Alex Thorlton 2016-06-25 1141 *
80e75596079f0a Alex Thorlton 2016-06-25 1142 * Performs the call. The last expression in the macro must be the call
80e75596079f0a Alex Thorlton 2016-06-25 1143 * itself, allowing the logic to be shared by the void and non-void
80e75596079f0a Alex Thorlton 2016-06-25 1144 * cases.
80e75596079f0a Alex Thorlton 2016-06-25 1145 *
80e75596079f0a Alex Thorlton 2016-06-25 1146 * * arch_efi_call_virt_teardown()
80e75596079f0a Alex Thorlton 2016-06-25 1147 *
80e75596079f0a Alex Thorlton 2016-06-25 1148 * Restores the usual kernel environment once the call has returned.
80e75596079f0a Alex Thorlton 2016-06-25 1149 */
80e75596079f0a Alex Thorlton 2016-06-25 1150
80e75596079f0a Alex Thorlton 2016-06-25 1151 #define efi_call_virt_pointer(p, f, args...) \
80e75596079f0a Alex Thorlton 2016-06-25 1152 ({ \
80e75596079f0a Alex Thorlton 2016-06-25 1153 efi_status_t __s; \
80e75596079f0a Alex Thorlton 2016-06-25 1154 unsigned long __flags; \
80e75596079f0a Alex Thorlton 2016-06-25 1155 \
80e75596079f0a Alex Thorlton 2016-06-25 @1156 arch_efi_call_virt_setup(); \
80e75596079f0a Alex Thorlton 2016-06-25 1157 \
13b210ddf474d9 Julien Thierry 2019-01-31 1158 __flags = efi_call_virt_save_flags(); \
80e75596079f0a Alex Thorlton 2016-06-25 @1159 __s = arch_efi_call_virt(p, f, args); \
80e75596079f0a Alex Thorlton 2016-06-25 1160 efi_call_virt_check_flags(__flags, __stringify(f)); \
80e75596079f0a Alex Thorlton 2016-06-25 1161 \
80e75596079f0a Alex Thorlton 2016-06-25 @1162 arch_efi_call_virt_teardown(); \
80e75596079f0a Alex Thorlton 2016-06-25 1163 \
80e75596079f0a Alex Thorlton 2016-06-25 1164 __s; \
80e75596079f0a Alex Thorlton 2016-06-25 1165 })
80e75596079f0a Alex Thorlton 2016-06-25 1166
:::::: The code at line 1156 was first introduced by commit
:::::: 80e75596079f0a41f905836ad0ccaac68ba33612 efi: Convert efi_call_virt() to efi_call_virt_pointer()
:::::: TO: Alex Thorlton <athorlton(a)sgi.com>
:::::: CC: Ingo Molnar <mingo(a)kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
Re: [PATCH v5 2/4] USB: misc: Add onboard_usb_hub driver
by kernel test robot
Hi Matthias,
I love your patch! Perhaps something to improve:
[auto build test WARNING on usb/usb-testing]
[also build test WARNING on robh/for-next char-misc/char-misc-testing v5.11-rc7 next-20210125]
[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/0day-ci/linux/commits/Matthias-Kaehlcke/USB-misc-Add-o...
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 9.3.0
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/0day-ci/linux/commit/15c43f13a680dab0efc2816a9d632d9d6...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Matthias-Kaehlcke/USB-misc-Add-onboard_usb_hub-driver/20210211-011551
git checkout 15c43f13a680dab0efc2816a9d632d9d6482b6fc
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sh
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
>> drivers/usb/misc/onboard_usb_hub.c:277:6: warning: no previous prototype for 'of_is_onboard_usb_hub' [-Wmissing-prototypes]
277 | bool of_is_onboard_usb_hub(const struct device_node *np)
| ^~~~~~~~~~~~~~~~~~~~~
drivers/usb/misc/onboard_usb_hub.c: In function 'onboard_hub_probe':
>> drivers/usb/misc/onboard_usb_hub.c:234:8: warning: ignoring return value of 'driver_attach', declared with attribute warn_unused_result [-Wunused-result]
234 | (void)driver_attach(&onboard_hub_usbdev_driver.drvwrap.driver);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for SND_ATMEL_SOC_PDC
Depends on SOUND && !UML && SND && SND_SOC && SND_ATMEL_SOC && HAS_DMA
Selected by
- SND_ATMEL_SOC_SSC && SOUND && !UML && SND && SND_SOC && SND_ATMEL_SOC
- SND_ATMEL_SOC_SSC_PDC && SOUND && !UML && SND && SND_SOC && SND_ATMEL_SOC && ATMEL_SSC
vim +/of_is_onboard_usb_hub +277 drivers/usb/misc/onboard_usb_hub.c
199
200 static int onboard_hub_probe(struct platform_device *pdev)
201 {
202 struct device *dev = &pdev->dev;
203 struct onboard_hub *hub;
204 int err;
205
206 hub = devm_kzalloc(dev, sizeof(*hub), GFP_KERNEL);
207 if (!hub)
208 return -ENOMEM;
209
210 hub->vdd = devm_regulator_get(dev, "vdd");
211 if (IS_ERR(hub->vdd))
212 return PTR_ERR(hub->vdd);
213
214 hub->dev = dev;
215 mutex_init(&hub->lock);
216 INIT_LIST_HEAD(&hub->udev_list);
217
218 dev_set_drvdata(dev, hub);
219
220 err = devm_device_add_group(dev, &onboard_hub_sysfs_group);
221 if (err) {
222 dev_err(dev, "failed to create sysfs entries: %d\n", err);
223 return err;
224 }
225
226 err = onboard_hub_power_on(hub);
227 if (err)
228 return err;
229
230 /*
231 * The USB driver might have been detached from the USB devices by
232 * onboard_hub_remove() make sure to re-attach it if needed.
233 */
> 234 (void)driver_attach(&onboard_hub_usbdev_driver.drvwrap.driver);
235
236 return 0;
237 }
238
239 static int onboard_hub_remove(struct platform_device *pdev)
240 {
241 struct onboard_hub *hub = dev_get_drvdata(&pdev->dev);
242 struct udev_node *node;
243 struct usb_device *udev;
244
245 hub->going_away = true;
246
247 mutex_lock(&hub->lock);
248
249 /* unbind the USB devices to avoid dangling references to this device */
250 while (!list_empty(&hub->udev_list)) {
251 node = list_first_entry(&hub->udev_list, struct udev_node, list);
252 udev = node->udev;
253
254 /*
255 * Unbinding the driver will call onboard_hub_remove_usbdev(),
256 * which acquires hub->lock. We must release the lock first.
257 */
258 get_device(&udev->dev);
259 mutex_unlock(&hub->lock);
260 device_release_driver(&udev->dev);
261 put_device(&udev->dev);
262 mutex_lock(&hub->lock);
263 }
264
265 mutex_unlock(&hub->lock);
266
267 return onboard_hub_power_off(hub);
268 }
269
270 static const struct of_device_id onboard_hub_match[] = {
271 { .compatible = "usbbda,411" },
272 { .compatible = "usbbda,5411" },
273 {}
274 };
275 MODULE_DEVICE_TABLE(of, onboard_hub_match);
276
> 277 bool of_is_onboard_usb_hub(const struct device_node *np)
278 {
279 return !!of_match_node(onboard_hub_match, np);
280 }
281 EXPORT_SYMBOL_GPL(of_is_onboard_usb_hub);
282
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
[iommu:x86/vt-d 10/12] drivers/iommu/intel/iommu.c:5468:21: error: initialization of 'void iommu_domain from incompatible pointer type 'void iommu_domain long unsigned int, size_t)' {aka 'void iommu_domain long unsigned int, long uns...
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git x86/vt-d
head: 31a75cbbb9274cf8185f402904bf11386917870b
commit: 933fcd01e97e2ba29880dd5f1239365e40094950 [10/12] iommu/vt-d: Add iotlb_sync_map callback
config: x86_64-rhel-8.3 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git/commit/?id...
git remote add iommu https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
git fetch --no-tags iommu x86/vt-d
git checkout 933fcd01e97e2ba29880dd5f1239365e40094950
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
>> drivers/iommu/intel/iommu.c:5468:21: error: initialization of 'void (*)(struct iommu_domain *)' from incompatible pointer type 'void (*)(struct iommu_domain *, long unsigned int, size_t)' {aka 'void (*)(struct iommu_domain *, long unsigned int, long unsigned int)'} [-Werror=incompatible-pointer-types]
5468 | .iotlb_sync_map = intel_iommu_iotlb_sync_map,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iommu/intel/iommu.c:5468:21: note: (near initialization for 'intel_iommu_ops.iotlb_sync_map')
cc1: some warnings being treated as errors
vim +5468 drivers/iommu/intel/iommu.c
5455
5456 const struct iommu_ops intel_iommu_ops = {
5457 .capable = intel_iommu_capable,
5458 .domain_alloc = intel_iommu_domain_alloc,
5459 .domain_free = intel_iommu_domain_free,
5460 .domain_get_attr = intel_iommu_domain_get_attr,
5461 .domain_set_attr = intel_iommu_domain_set_attr,
5462 .attach_dev = intel_iommu_attach_device,
5463 .detach_dev = intel_iommu_detach_device,
5464 .aux_attach_dev = intel_iommu_aux_attach_device,
5465 .aux_detach_dev = intel_iommu_aux_detach_device,
5466 .aux_get_pasid = intel_iommu_aux_get_pasid,
5467 .map = intel_iommu_map,
> 5468 .iotlb_sync_map = intel_iommu_iotlb_sync_map,
5469 .unmap = intel_iommu_unmap,
5470 .flush_iotlb_all = intel_flush_iotlb_all,
5471 .iotlb_sync = intel_iommu_tlb_sync,
5472 .iova_to_phys = intel_iommu_iova_to_phys,
5473 .probe_device = intel_iommu_probe_device,
5474 .probe_finalize = intel_iommu_probe_finalize,
5475 .release_device = intel_iommu_release_device,
5476 .get_resv_regions = intel_iommu_get_resv_regions,
5477 .put_resv_regions = generic_iommu_put_resv_regions,
5478 .device_group = intel_iommu_device_group,
5479 .dev_has_feat = intel_iommu_dev_has_feat,
5480 .dev_feat_enabled = intel_iommu_dev_feat_enabled,
5481 .dev_enable_feat = intel_iommu_dev_enable_feat,
5482 .dev_disable_feat = intel_iommu_dev_disable_feat,
5483 .is_attach_deferred = intel_iommu_is_attach_deferred,
5484 .def_domain_type = device_def_domain_type,
5485 .pgsize_bitmap = INTEL_IOMMU_PGSIZES,
5486 #ifdef CONFIG_INTEL_IOMMU_SVM
5487 .cache_invalidate = intel_iommu_sva_invalidate,
5488 .sva_bind_gpasid = intel_svm_bind_gpasid,
5489 .sva_unbind_gpasid = intel_svm_unbind_gpasid,
5490 .sva_bind = intel_svm_bind,
5491 .sva_unbind = intel_svm_unbind,
5492 .sva_get_pasid = intel_svm_get_pasid,
5493 .page_response = intel_svm_page_response,
5494 #endif
5495 };
5496
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
Re: [RFC bpf-next] bpf: devmap: move drop error path to devmpap for XDP_REDIRECT
by kernel test robot
Hi Lorenzo,
[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Lorenzo-Bianconi/bpf-devmap-move...
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: c6x-randconfig-r011-20210209 (attached as .config)
compiler: c6x-elf-gcc (GCC) 9.3.0
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/0day-ci/linux/commit/96ef538bb5cf75f19f3973722e4f66c7f...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Lorenzo-Bianconi/bpf-devmap-move-drop-error-path-to-devmpap-for-XDP_REDIRECT/20210210-222154
git checkout 96ef538bb5cf75f19f3973722e4f66c7f65781db
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=c6x
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
drivers/net/ethernet/socionext/netsec.c: In function 'netsec_xdp_xmit':
>> drivers/net/ethernet/socionext/netsec.c:1787:12: error: invalid storage class for function 'netsec_xdp_setup'
1787 | static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1787:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
1787 | static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1813:12: error: invalid storage class for function 'netsec_xdp'
1813 | static int netsec_xdp(struct net_device *ndev, struct netdev_bpf *xdp)
| ^~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1836:14: error: initializer element is not constant
1836 | .ndo_bpf = netsec_xdp,
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:1836:14: note: (near initialization for 'netsec_netdev_ops.ndo_bpf')
>> drivers/net/ethernet/socionext/netsec.c:1839:12: error: invalid storage class for function 'netsec_of_probe'
1839 | static int netsec_of_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1868:12: error: invalid storage class for function 'netsec_acpi_probe'
1868 | static int netsec_acpi_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1900:13: error: invalid storage class for function 'netsec_unregister_mdio'
1900 | static void netsec_unregister_mdio(struct netsec_priv *priv)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1912:12: error: invalid storage class for function 'netsec_register_mdio'
1912 | static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1977:12: error: invalid storage class for function 'netsec_probe'
1977 | static int netsec_probe(struct platform_device *pdev)
| ^~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2140:12: error: invalid storage class for function 'netsec_remove'
2140 | static int netsec_remove(struct platform_device *pdev)
| ^~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2189:1: warning: 'alias' attribute ignored [-Wattributes]
2189 | MODULE_DEVICE_TABLE(of, netsec_dt_ids);
| ^~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: error: initializer element is not constant
2200 | .probe = netsec_probe,
| ^~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: note: (near initialization for 'netsec_driver.probe')
drivers/net/ethernet/socionext/netsec.c:2201:12: error: initializer element is not constant
2201 | .remove = netsec_remove,
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2201:12: note: (near initialization for 'netsec_driver.remove')
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
>> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid storage class for function 'netsec_driver_init'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:259:19: note: in definition of macro 'module_driver'
259 | static int __init __driver##_init(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/module.h:132:42: error: invalid storage class for function '__inittest'
132 | static inline initcall_t __maybe_unused __inittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:263:1: note: in expansion of macro 'module_init'
263 | module_init(__driver##_init); \
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute ignored [-Wattributes]
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
>> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid storage class for function 'netsec_driver_exit'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:264:20: note: in definition of macro 'module_driver'
264 | static void __exit __driver##_exit(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
>> include/linux/device/driver.h:264:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
264 | static void __exit __driver##_exit(void) \
| ^~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/module.h:138:42: error: invalid storage class for function '__exittest'
138 | static inline exitcall_t __maybe_unused __exittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:268:1: note: in expansion of macro 'module_exit'
268 | module_exit(__driver##_exit);
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute ignored [-Wattributes]
In file included from include/linux/module.h:21,
from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/moduleparam.h:24:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
24 | static const char __UNIQUE_ID(name)[] \
| ^~~~~~
include/linux/module.h:163:32: note: in expansion of macro '__MODULE_INFO'
163 | #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
| ^~~~~~~~~~~~~
include/linux/module.h:233:32: note: in expansion of macro 'MODULE_INFO'
233 | #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
| ^~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2211:1: note: in expansion of macro 'MODULE_AUTHOR'
2211 | MODULE_AUTHOR("Jassi Brar <jaswinder.singh(a)linaro.org>");
| ^~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2214:1: error: expected declaration or statement at end of input
2214 | MODULE_LICENSE("GPL");
| ^~~~~~~~~~~~~~
At top level:
drivers/net/ethernet/socionext/netsec.c:1755:12: warning: 'netsec_xdp_xmit' defined but not used [-Wunused-function]
1755 | static int netsec_xdp_xmit(struct net_device *ndev, int n,
| ^~~~~~~~~~~~~~~
vim +/netsec_xdp_setup +1787 drivers/net/ethernet/socionext/netsec.c
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1786
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1787 static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1788 struct netlink_ext_ack *extack)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1789 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1790 struct net_device *dev = priv->ndev;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1791 struct bpf_prog *old_prog;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1792
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1793 /* For now just support only the usual MTU sized frames */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1794 if (prog && dev->mtu > 1500) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1795 NL_SET_ERR_MSG_MOD(extack, "Jumbo frames not supported on XDP");
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1796 return -EOPNOTSUPP;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1797 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1798
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1799 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1800 netsec_netdev_stop(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1801
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1802 /* Detach old prog, if any */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1803 old_prog = xchg(&priv->xdp_prog, prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1804 if (old_prog)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1805 bpf_prog_put(old_prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1806
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1807 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1808 netsec_netdev_open(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1809
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1810 return 0;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1811 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1812
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1813 static int netsec_xdp(struct net_device *ndev, struct netdev_bpf *xdp)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1814 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1815 struct netsec_priv *priv = netdev_priv(ndev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1816
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1817 switch (xdp->command) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1818 case XDP_SETUP_PROG:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1819 return netsec_xdp_setup(priv, xdp->prog, xdp->extack);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1820 default:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1821 return -EINVAL;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1822 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1823 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1824
533dd11a12f698c Jassi Brar 2018-01-06 1825 static const struct net_device_ops netsec_netdev_ops = {
533dd11a12f698c Jassi Brar 2018-01-06 1826 .ndo_init = netsec_netdev_init,
533dd11a12f698c Jassi Brar 2018-01-06 1827 .ndo_uninit = netsec_netdev_uninit,
533dd11a12f698c Jassi Brar 2018-01-06 1828 .ndo_open = netsec_netdev_open,
533dd11a12f698c Jassi Brar 2018-01-06 1829 .ndo_stop = netsec_netdev_stop,
533dd11a12f698c Jassi Brar 2018-01-06 1830 .ndo_start_xmit = netsec_netdev_start_xmit,
533dd11a12f698c Jassi Brar 2018-01-06 1831 .ndo_set_features = netsec_netdev_set_features,
533dd11a12f698c Jassi Brar 2018-01-06 1832 .ndo_set_mac_address = eth_mac_addr,
533dd11a12f698c Jassi Brar 2018-01-06 1833 .ndo_validate_addr = eth_validate_addr,
c5d19a6ecfce72d Heiner Kallweit 2020-01-21 1834 .ndo_do_ioctl = phy_do_ioctl,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1835 .ndo_xdp_xmit = netsec_xdp_xmit,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1836 .ndo_bpf = netsec_xdp,
533dd11a12f698c Jassi Brar 2018-01-06 1837 };
533dd11a12f698c Jassi Brar 2018-01-06 1838
533dd11a12f698c Jassi Brar 2018-01-06 @1839 static int netsec_of_probe(struct platform_device *pdev,
8e850f25b5812ae Masahisa Kojima 2018-10-23 1840 struct netsec_priv *priv, u32 *phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1841 {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1842 int err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1843
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1844 err = of_get_phy_mode(pdev->dev.of_node, &priv->phy_interface);
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1845 if (err) {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1846 dev_err(&pdev->dev, "missing required property 'phy-mode'\n");
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1847 return err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1848 }
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1849
533dd11a12f698c Jassi Brar 2018-01-06 1850 priv->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
533dd11a12f698c Jassi Brar 2018-01-06 1851 if (!priv->phy_np) {
533dd11a12f698c Jassi Brar 2018-01-06 1852 dev_err(&pdev->dev, "missing required property 'phy-handle'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1853 return -EINVAL;
533dd11a12f698c Jassi Brar 2018-01-06 1854 }
533dd11a12f698c Jassi Brar 2018-01-06 1855
8e850f25b5812ae Masahisa Kojima 2018-10-23 1856 *phy_addr = of_mdio_parse_addr(&pdev->dev, priv->phy_np);
8e850f25b5812ae Masahisa Kojima 2018-10-23 1857
533dd11a12f698c Jassi Brar 2018-01-06 1858 priv->clk = devm_clk_get(&pdev->dev, NULL); /* get by 'phy_ref_clk' */
533dd11a12f698c Jassi Brar 2018-01-06 1859 if (IS_ERR(priv->clk)) {
533dd11a12f698c Jassi Brar 2018-01-06 1860 dev_err(&pdev->dev, "phy_ref_clk not found\n");
533dd11a12f698c Jassi Brar 2018-01-06 1861 return PTR_ERR(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1862 }
533dd11a12f698c Jassi Brar 2018-01-06 1863 priv->freq = clk_get_rate(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1864
533dd11a12f698c Jassi Brar 2018-01-06 1865 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 1866 }
533dd11a12f698c Jassi Brar 2018-01-06 1867
533dd11a12f698c Jassi Brar 2018-01-06 @1868 static int netsec_acpi_probe(struct platform_device *pdev,
533dd11a12f698c Jassi Brar 2018-01-06 1869 struct netsec_priv *priv, u32 *phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1870 {
533dd11a12f698c Jassi Brar 2018-01-06 1871 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1872
533dd11a12f698c Jassi Brar 2018-01-06 1873 if (!IS_ENABLED(CONFIG_ACPI))
533dd11a12f698c Jassi Brar 2018-01-06 1874 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1875
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1876 /* ACPI systems are assumed to configure the PHY in firmware, so
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1877 * there is really no need to discover the PHY mode from the DSDT.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1878 * Since firmware is known to exist in the field that configures the
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1879 * PHY correctly but passes the wrong mode string in the phy-mode
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1880 * device property, we have no choice but to ignore it.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1881 */
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1882 priv->phy_interface = PHY_INTERFACE_MODE_NA;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1883
533dd11a12f698c Jassi Brar 2018-01-06 1884 ret = device_property_read_u32(&pdev->dev, "phy-channel", phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 1885 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1886 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1887 "missing required property 'phy-channel'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1888 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1889 }
533dd11a12f698c Jassi Brar 2018-01-06 1890
533dd11a12f698c Jassi Brar 2018-01-06 1891 ret = device_property_read_u32(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1892 "socionext,phy-clock-frequency",
533dd11a12f698c Jassi Brar 2018-01-06 1893 &priv->freq);
533dd11a12f698c Jassi Brar 2018-01-06 1894 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 1895 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1896 "missing required property 'socionext,phy-clock-frequency'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1897 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1898 }
533dd11a12f698c Jassi Brar 2018-01-06 1899
533dd11a12f698c Jassi Brar 2018-01-06 @1900 static void netsec_unregister_mdio(struct netsec_priv *priv)
533dd11a12f698c Jassi Brar 2018-01-06 1901 {
533dd11a12f698c Jassi Brar 2018-01-06 1902 struct phy_device *phydev = priv->phydev;
533dd11a12f698c Jassi Brar 2018-01-06 1903
533dd11a12f698c Jassi Brar 2018-01-06 1904 if (!dev_of_node(priv->dev) && phydev) {
533dd11a12f698c Jassi Brar 2018-01-06 1905 phy_device_remove(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1906 phy_device_free(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1907 }
533dd11a12f698c Jassi Brar 2018-01-06 1908
533dd11a12f698c Jassi Brar 2018-01-06 1909 mdiobus_unregister(priv->mii_bus);
533dd11a12f698c Jassi Brar 2018-01-06 1910 }
533dd11a12f698c Jassi Brar 2018-01-06 1911
533dd11a12f698c Jassi Brar 2018-01-06 @1912 static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1913 {
533dd11a12f698c Jassi Brar 2018-01-06 1914 struct mii_bus *bus;
533dd11a12f698c Jassi Brar 2018-01-06 1915 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1916
533dd11a12f698c Jassi Brar 2018-01-06 1917 bus = devm_mdiobus_alloc(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1918 if (!bus)
533dd11a12f698c Jassi Brar 2018-01-06 1919 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 1920
533dd11a12f698c Jassi Brar 2018-01-06 1921 snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(priv->dev));
533dd11a12f698c Jassi Brar 2018-01-06 1922 bus->priv = priv;
533dd11a12f698c Jassi Brar 2018-01-06 1923 bus->name = "SNI NETSEC MDIO";
533dd11a12f698c Jassi Brar 2018-01-06 1924 bus->read = netsec_phy_read;
533dd11a12f698c Jassi Brar 2018-01-06 1925 bus->write = netsec_phy_write;
533dd11a12f698c Jassi Brar 2018-01-06 1926 bus->parent = priv->dev;
533dd11a12f698c Jassi Brar 2018-01-06 1927 priv->mii_bus = bus;
533dd11a12f698c Jassi Brar 2018-01-06 1928
533dd11a12f698c Jassi Brar 2018-01-06 1929 if (dev_of_node(priv->dev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1930 struct device_node *mdio_node, *parent = dev_of_node(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1931
533dd11a12f698c Jassi Brar 2018-01-06 1932 mdio_node = of_get_child_by_name(parent, "mdio");
533dd11a12f698c Jassi Brar 2018-01-06 1933 if (mdio_node) {
533dd11a12f698c Jassi Brar 2018-01-06 1934 parent = mdio_node;
533dd11a12f698c Jassi Brar 2018-01-06 1935 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1936 /* older f/w doesn't populate the mdio subnode,
533dd11a12f698c Jassi Brar 2018-01-06 1937 * allow relaxed upgrade of f/w in due time.
533dd11a12f698c Jassi Brar 2018-01-06 1938 */
533dd11a12f698c Jassi Brar 2018-01-06 1939 dev_info(priv->dev, "Upgrade f/w for mdio subnode!\n");
533dd11a12f698c Jassi Brar 2018-01-06 1940 }
533dd11a12f698c Jassi Brar 2018-01-06 1941
533dd11a12f698c Jassi Brar 2018-01-06 1942 ret = of_mdiobus_register(bus, parent);
533dd11a12f698c Jassi Brar 2018-01-06 1943 of_node_put(mdio_node);
533dd11a12f698c Jassi Brar 2018-01-06 1944
533dd11a12f698c Jassi Brar 2018-01-06 1945 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1946 dev_err(priv->dev, "mdiobus register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1947 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1948 }
533dd11a12f698c Jassi Brar 2018-01-06 1949 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1950 /* Mask out all PHYs from auto probing. */
533dd11a12f698c Jassi Brar 2018-01-06 1951 bus->phy_mask = ~0;
533dd11a12f698c Jassi Brar 2018-01-06 1952 ret = mdiobus_register(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1953 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1954 dev_err(priv->dev, "mdiobus register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1955 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1956 }
533dd11a12f698c Jassi Brar 2018-01-06 1957
533dd11a12f698c Jassi Brar 2018-01-06 1958 priv->phydev = get_phy_device(bus, phy_addr, false);
533dd11a12f698c Jassi Brar 2018-01-06 1959 if (IS_ERR(priv->phydev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1960 ret = PTR_ERR(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1961 dev_err(priv->dev, "get_phy_device err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1962 priv->phydev = NULL;
533dd11a12f698c Jassi Brar 2018-01-06 1963 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1964 }
533dd11a12f698c Jassi Brar 2018-01-06 1965
533dd11a12f698c Jassi Brar 2018-01-06 1966 ret = phy_device_register(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1967 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1968 mdiobus_unregister(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1969 dev_err(priv->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1970 "phy_device_register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1971 }
533dd11a12f698c Jassi Brar 2018-01-06 1972 }
533dd11a12f698c Jassi Brar 2018-01-06 1973
533dd11a12f698c Jassi Brar 2018-01-06 1974 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1975 }
533dd11a12f698c Jassi Brar 2018-01-06 1976
533dd11a12f698c Jassi Brar 2018-01-06 @1977 static int netsec_probe(struct platform_device *pdev)
533dd11a12f698c Jassi Brar 2018-01-06 1978 {
533dd11a12f698c Jassi Brar 2018-01-06 1979 struct resource *mmio_res, *eeprom_res, *irq_res;
533dd11a12f698c Jassi Brar 2018-01-06 1980 u8 *mac, macbuf[ETH_ALEN];
533dd11a12f698c Jassi Brar 2018-01-06 1981 struct netsec_priv *priv;
533dd11a12f698c Jassi Brar 2018-01-06 1982 u32 hw_ver, phy_addr = 0;
533dd11a12f698c Jassi Brar 2018-01-06 1983 struct net_device *ndev;
533dd11a12f698c Jassi Brar 2018-01-06 1984 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1985
533dd11a12f698c Jassi Brar 2018-01-06 1986 mmio_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1987 if (!mmio_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1988 dev_err(&pdev->dev, "No MMIO resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1989 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1990 }
533dd11a12f698c Jassi Brar 2018-01-06 1991
533dd11a12f698c Jassi Brar 2018-01-06 1992 eeprom_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
533dd11a12f698c Jassi Brar 2018-01-06 1993 if (!eeprom_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1994 dev_info(&pdev->dev, "No EEPROM resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1995 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1996 }
533dd11a12f698c Jassi Brar 2018-01-06 1997
533dd11a12f698c Jassi Brar 2018-01-06 1998 irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1999 if (!irq_res) {
533dd11a12f698c Jassi Brar 2018-01-06 2000 dev_err(&pdev->dev, "No IRQ resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 2001 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2002 }
533dd11a12f698c Jassi Brar 2018-01-06 2003
533dd11a12f698c Jassi Brar 2018-01-06 2004 ndev = alloc_etherdev(sizeof(*priv));
533dd11a12f698c Jassi Brar 2018-01-06 2005 if (!ndev)
533dd11a12f698c Jassi Brar 2018-01-06 2006 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 2007
533dd11a12f698c Jassi Brar 2018-01-06 2008 priv = netdev_priv(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2009
533dd11a12f698c Jassi Brar 2018-01-06 2010 spin_lock_init(&priv->reglock);
533dd11a12f698c Jassi Brar 2018-01-06 2011 SET_NETDEV_DEV(ndev, &pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2012 platform_set_drvdata(pdev, priv);
533dd11a12f698c Jassi Brar 2018-01-06 2013 ndev->irq = irq_res->start;
533dd11a12f698c Jassi Brar 2018-01-06 2014 priv->dev = &pdev->dev;
533dd11a12f698c Jassi Brar 2018-01-06 2015 priv->ndev = ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2016
533dd11a12f698c Jassi Brar 2018-01-06 2017 priv->msg_enable = NETIF_MSG_TX_ERR | NETIF_MSG_HW | NETIF_MSG_DRV |
533dd11a12f698c Jassi Brar 2018-01-06 2018 NETIF_MSG_LINK | NETIF_MSG_PROBE;
533dd11a12f698c Jassi Brar 2018-01-06 2019
533dd11a12f698c Jassi Brar 2018-01-06 2020 priv->ioaddr = devm_ioremap(&pdev->dev, mmio_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2021 resource_size(mmio_res));
533dd11a12f698c Jassi Brar 2018-01-06 2022 if (!priv->ioaddr) {
533dd11a12f698c Jassi Brar 2018-01-06 2023 dev_err(&pdev->dev, "devm_ioremap() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2024 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2025 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2026 }
533dd11a12f698c Jassi Brar 2018-01-06 2027
533dd11a12f698c Jassi Brar 2018-01-06 2028 priv->eeprom_base = devm_ioremap(&pdev->dev, eeprom_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2029 resource_size(eeprom_res));
533dd11a12f698c Jassi Brar 2018-01-06 2030 if (!priv->eeprom_base) {
533dd11a12f698c Jassi Brar 2018-01-06 2031 dev_err(&pdev->dev, "devm_ioremap() failed for EEPROM\n");
533dd11a12f698c Jassi Brar 2018-01-06 2032 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2033 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2034 }
533dd11a12f698c Jassi Brar 2018-01-06 2035
533dd11a12f698c Jassi Brar 2018-01-06 2036 mac = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf));
533dd11a12f698c Jassi Brar 2018-01-06 2037 if (mac)
533dd11a12f698c Jassi Brar 2018-01-06 2038 ether_addr_copy(ndev->dev_addr, mac);
533dd11a12f698c Jassi Brar 2018-01-06 2039
533dd11a12f698c Jassi Brar 2018-01-06 2040 if (priv->eeprom_base &&
533dd11a12f698c Jassi Brar 2018-01-06 2041 (!mac || !is_valid_ether_addr(ndev->dev_addr))) {
533dd11a12f698c Jassi Brar 2018-01-06 2042 void __iomem *macp = priv->eeprom_base +
533dd11a12f698c Jassi Brar 2018-01-06 2043 NETSEC_EEPROM_MAC_ADDRESS;
533dd11a12f698c Jassi Brar 2018-01-06 2044
533dd11a12f698c Jassi Brar 2018-01-06 2045 ndev->dev_addr[0] = readb(macp + 3);
533dd11a12f698c Jassi Brar 2018-01-06 2046 ndev->dev_addr[1] = readb(macp + 2);
533dd11a12f698c Jassi Brar 2018-01-06 2047 ndev->dev_addr[2] = readb(macp + 1);
533dd11a12f698c Jassi Brar 2018-01-06 2048 ndev->dev_addr[3] = readb(macp + 0);
533dd11a12f698c Jassi Brar 2018-01-06 2049 ndev->dev_addr[4] = readb(macp + 7);
533dd11a12f698c Jassi Brar 2018-01-06 2050 ndev->dev_addr[5] = readb(macp + 6);
533dd11a12f698c Jassi Brar 2018-01-06 2051 }
533dd11a12f698c Jassi Brar 2018-01-06 2052
533dd11a12f698c Jassi Brar 2018-01-06 2053 if (!is_valid_ether_addr(ndev->dev_addr)) {
533dd11a12f698c Jassi Brar 2018-01-06 2054 dev_warn(&pdev->dev, "No MAC address found, using random\n");
533dd11a12f698c Jassi Brar 2018-01-06 2055 eth_hw_addr_random(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2056 }
533dd11a12f698c Jassi Brar 2018-01-06 2057
533dd11a12f698c Jassi Brar 2018-01-06 2058 if (dev_of_node(&pdev->dev))
8e850f25b5812ae Masahisa Kojima 2018-10-23 2059 ret = netsec_of_probe(pdev, priv, &phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2060 else
533dd11a12f698c Jassi Brar 2018-01-06 2061 ret = netsec_acpi_probe(pdev, priv, &phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2062 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2063 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2064
8e850f25b5812ae Masahisa Kojima 2018-10-23 2065 priv->phy_addr = phy_addr;
8e850f25b5812ae Masahisa Kojima 2018-10-23 2066
533dd11a12f698c Jassi Brar 2018-01-06 2067 if (!priv->freq) {
533dd11a12f698c Jassi Brar 2018-01-06 2068 dev_err(&pdev->dev, "missing PHY reference clock frequency\n");
533dd11a12f698c Jassi Brar 2018-01-06 2069 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2070 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2071 }
533dd11a12f698c Jassi Brar 2018-01-06 2072
533dd11a12f698c Jassi Brar 2018-01-06 2073 /* default for throughput */
533dd11a12f698c Jassi Brar 2018-01-06 2074 priv->et_coalesce.rx_coalesce_usecs = 500;
533dd11a12f698c Jassi Brar 2018-01-06 2075 priv->et_coalesce.rx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2076 priv->et_coalesce.tx_coalesce_usecs = 500;
533dd11a12f698c Jassi Brar 2018-01-06 2077 priv->et_coalesce.tx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2078
533dd11a12f698c Jassi Brar 2018-01-06 2079 ret = device_property_read_u32(&pdev->dev, "max-frame-size",
533dd11a12f698c Jassi Brar 2018-01-06 2080 &ndev->max_mtu);
533dd11a12f698c Jassi Brar 2018-01-06 2081 if (ret < 0)
533dd11a12f698c Jassi Brar 2018-01-06 2082 ndev->max_mtu = ETH_DATA_LEN;
533dd11a12f698c Jassi Brar 2018-01-06 2083
533dd11a12f698c Jassi Brar 2018-01-06 2084 /* runtime_pm coverage just for probe, open/close also cover it */
533dd11a12f698c Jassi Brar 2018-01-06 2085 pm_runtime_enable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2086 pm_runtime_get_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2087
533dd11a12f698c Jassi Brar 2018-01-06 2088 hw_ver = netsec_read(priv, NETSEC_REG_F_TAIKI_VER);
533dd11a12f698c Jassi Brar 2018-01-06 2089 /* this driver only supports F_TAIKI style NETSEC */
533dd11a12f698c Jassi Brar 2018-01-06 2090 if (NETSEC_F_NETSEC_VER_MAJOR_NUM(hw_ver) !=
533dd11a12f698c Jassi Brar 2018-01-06 2091 NETSEC_F_NETSEC_VER_MAJOR_NUM(NETSEC_REG_NETSEC_VER_F_TAIKI)) {
533dd11a12f698c Jassi Brar 2018-01-06 2092 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2093 goto pm_disable;
533dd11a12f698c Jassi Brar 2018-01-06 2094 }
533dd11a12f698c Jassi Brar 2018-01-06 2095
533dd11a12f698c Jassi Brar 2018-01-06 2096 dev_info(&pdev->dev, "hardware revision %d.%d\n",
533dd11a12f698c Jassi Brar 2018-01-06 2097 hw_ver >> 16, hw_ver & 0xffff);
533dd11a12f698c Jassi Brar 2018-01-06 2098
b6311b7bea41963 Ilias Apalodimas 2018-08-10 2099 netif_napi_add(ndev, &priv->napi, netsec_napi_poll, NAPI_POLL_WEIGHT);
533dd11a12f698c Jassi Brar 2018-01-06 2100
533dd11a12f698c Jassi Brar 2018-01-06 2101 ndev->netdev_ops = &netsec_netdev_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2102 ndev->ethtool_ops = &netsec_ethtool_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2103
533dd11a12f698c Jassi Brar 2018-01-06 2104 ndev->features |= NETIF_F_HIGHDMA | NETIF_F_RXCSUM | NETIF_F_GSO |
533dd11a12f698c Jassi Brar 2018-01-06 2105 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
533dd11a12f698c Jassi Brar 2018-01-06 2106 ndev->hw_features = ndev->features;
533dd11a12f698c Jassi Brar 2018-01-06 2107
533dd11a12f698c Jassi Brar 2018-01-06 2108 priv->rx_cksum_offload_flag = true;
533dd11a12f698c Jassi Brar 2018-01-06 2109
533dd11a12f698c Jassi Brar 2018-01-06 2110 ret = netsec_register_mdio(priv, phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2111 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2112 goto unreg_napi;
533dd11a12f698c Jassi Brar 2018-01-06 2113
312564269535892 Ard Biesheuvel 2018-05-25 2114 if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40)))
312564269535892 Ard Biesheuvel 2018-05-25 2115 dev_warn(&pdev->dev, "Failed to set DMA mask\n");
533dd11a12f698c Jassi Brar 2018-01-06 2116
533dd11a12f698c Jassi Brar 2018-01-06 2117 ret = register_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2118 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 2119 netif_err(priv, probe, ndev, "register_netdev() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2120 goto unreg_mii;
533dd11a12f698c Jassi Brar 2018-01-06 2121 }
533dd11a12f698c Jassi Brar 2018-01-06 2122
533dd11a12f698c Jassi Brar 2018-01-06 2123 pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2124 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 2125
533dd11a12f698c Jassi Brar 2018-01-06 2126 unreg_mii:
533dd11a12f698c Jassi Brar 2018-01-06 2127 netsec_unregister_mdio(priv);
533dd11a12f698c Jassi Brar 2018-01-06 2128 unreg_napi:
533dd11a12f698c Jassi Brar 2018-01-06 2129 netif_napi_del(&priv->napi);
533dd11a12f698c Jassi Brar 2018-01-06 2130 pm_disable:
533dd11a12f698c Jassi Brar 2018-01-06 2131 pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2132 pm_runtime_disable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2133 free_ndev:
533dd11a12f698c Jassi Brar 2018-01-06 2134 free_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2135 dev_err(&pdev->dev, "init failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2136
533dd11a12f698c Jassi Brar 2018-01-06 2137 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 2138 }
533dd11a12f698c Jassi Brar 2018-01-06 2139
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
[hyperv-linux:hyperv-next 22/32] arch/x86/hyperv/hv_init.c:366:21: sparse: sparse: incorrect type in assignment (different address spaces)
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git hyperv-next
head: 9c9e1c68259d6cf8a348289fd13ed8f320c0d662
commit: df3ae25f31b1f0ed6560c207a975abb2d4f87722 [22/32] x86/hyperv: extract partition ID from Microsoft Hypervisor if necessary
config: x86_64-randconfig-s022-20210209 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-215-g0fb77bb6-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git/commit/?...
git remote add hyperv-linux https://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git
git fetch --no-tags hyperv-linux hyperv-next
git checkout df3ae25f31b1f0ed6560c207a975abb2d4f87722
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
"sparse warnings: (new ones prefixed by >>)"
arch/x86/hyperv/hv_init.c:90:30: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got void [noderef] __percpu ** @@
arch/x86/hyperv/hv_init.c:90:30: sparse: expected void const [noderef] __percpu *__vpp_verify
arch/x86/hyperv/hv_init.c:90:30: sparse: got void [noderef] __percpu **
arch/x86/hyperv/hv_init.c:95:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got void [noderef] __percpu ** @@
arch/x86/hyperv/hv_init.c:95:39: sparse: expected void const [noderef] __percpu *__vpp_verify
arch/x86/hyperv/hv_init.c:95:39: sparse: got void [noderef] __percpu **
arch/x86/hyperv/hv_init.c:227:30: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got void [noderef] __percpu ** @@
arch/x86/hyperv/hv_init.c:227:30: sparse: expected void const [noderef] __percpu *__vpp_verify
arch/x86/hyperv/hv_init.c:227:30: sparse: got void [noderef] __percpu **
arch/x86/hyperv/hv_init.c:234:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got void [noderef] __percpu ** @@
arch/x86/hyperv/hv_init.c:234:39: sparse: expected void const [noderef] __percpu *__vpp_verify
arch/x86/hyperv/hv_init.c:234:39: sparse: got void [noderef] __percpu **
arch/x86/hyperv/hv_init.c:366:24: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got void [noderef] __percpu ** @@
arch/x86/hyperv/hv_init.c:366:24: sparse: expected void const [noderef] __percpu *__vpp_verify
arch/x86/hyperv/hv_init.c:366:24: sparse: got void [noderef] __percpu **
>> arch/x86/hyperv/hv_init.c:366:21: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct hv_get_partition_id *output_page @@ got void [noderef] __percpu * @@
arch/x86/hyperv/hv_init.c:366:21: sparse: expected struct hv_get_partition_id *output_page
arch/x86/hyperv/hv_init.c:366:21: sparse: got void [noderef] __percpu *
arch/x86/hyperv/hv_init.c:407:31: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void [noderef] __percpu **extern [addressable] [toplevel] hyperv_pcpu_input_arg @@ got void *[noderef] __percpu * @@
arch/x86/hyperv/hv_init.c:407:31: sparse: expected void [noderef] __percpu **extern [addressable] [toplevel] hyperv_pcpu_input_arg
arch/x86/hyperv/hv_init.c:407:31: sparse: got void *[noderef] __percpu *
arch/x86/hyperv/hv_init.c:413:40: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void [noderef] __percpu **extern [addressable] [toplevel] hyperv_pcpu_output_arg @@ got void *[noderef] __percpu * @@
arch/x86/hyperv/hv_init.c:413:40: sparse: expected void [noderef] __percpu **extern [addressable] [toplevel] hyperv_pcpu_output_arg
arch/x86/hyperv/hv_init.c:413:40: sparse: got void *[noderef] __percpu *
vim +366 arch/x86/hyperv/hv_init.c
358
359 static void __init hv_get_partition_id(void)
360 {
361 struct hv_get_partition_id *output_page;
362 u64 status;
363 unsigned long flags;
364
365 local_irq_save(flags);
> 366 output_page = *this_cpu_ptr(hyperv_pcpu_output_arg);
367 status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page);
368 if ((status & HV_HYPERCALL_RESULT_MASK) != HV_STATUS_SUCCESS) {
369 /* No point in proceeding if this failed */
370 pr_err("Failed to get partition ID: %lld\n", status);
371 BUG();
372 }
373 hv_current_partition_id = output_page->partition_id;
374 local_irq_restore(flags);
375 }
376
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
Re: [PATCH 7/8] iwlwifi: pnvm: implement reading PNVM from UEFI
by kernel test robot
Hi Luca,
I love your patch! Yet something to improve:
[auto build test ERROR on wireless-drivers-next/master]
[also build test ERROR on wireless-drivers/master linus/master v5.11-rc7]
[cannot apply to next-20210125]
[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/0day-ci/linux/commits/Luca-Coelho/iwlwifi-updates-inte...
base: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-ne... master
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
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/0day-ci/linux/commit/477683319e91793d94debf7f0c0019a31...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Luca-Coelho/iwlwifi-updates-intended-for-v5-12-2021-02-10-part-2/20210210-233911
git checkout 477683319e91793d94debf7f0c0019a31e6cde3f
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
>> drivers/net/wireless/intel/iwlwifi/fw/pnvm.c:228:28: warning: "LINUX_VERSION_IS_GEQ" is not defined, evaluates to 0 [-Wundef]
228 | #if defined(CONFIG_EFI) && LINUX_VERSION_IS_GEQ(5,4,0)
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/wireless/intel/iwlwifi/fw/pnvm.c:228:48: error: missing binary operator before token "("
228 | #if defined(CONFIG_EFI) && LINUX_VERSION_IS_GEQ(5,4,0)
| ^
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for FRAME_POINTER
Depends on DEBUG_KERNEL && (M68K || UML || SUPERH) || ARCH_WANT_FRAME_POINTERS
Selected by
- FAULT_INJECTION_STACKTRACE_FILTER && FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT && !X86_64 && !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86
vim +228 drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
222
223 /*
224 * This is known to be broken on v4.19 and to work on v5.4. Until we
225 * figure out why this is the case and how to make it work, simply
226 * disable the feature in old kernels.
227 */
> 228 #if defined(CONFIG_EFI) && LINUX_VERSION_IS_GEQ(5,4,0)
229
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
[djwong-xfs:reserve-rt-metadata-space 129/219] fs/xfs/libxfs/xfs_swapext.c:239:17: warning: variable 'qflag' set but not used
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git reserve-rt-metadata-space
head: 1cc2dc6cc907783eca0a0665605e0a9e7e8d9bfd
commit: cb6f96a35342bcb1c9d3ed6012feaf2249f3922c [129/219] xfs: create deferred log items for extent swapping
config: x86_64-randconfig-r006-20210209 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git/comm...
git remote add djwong-xfs https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git
git fetch --no-tags djwong-xfs reserve-rt-metadata-space
git checkout cb6f96a35342bcb1c9d3ed6012feaf2249f3922c
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
fs/xfs/libxfs/xfs_swapext.c: In function 'xfs_swapext_finish_one':
>> fs/xfs/libxfs/xfs_swapext.c:239:17: warning: variable 'qflag' set but not used [-Wunused-but-set-variable]
239 | unsigned int qflag;
| ^~~~~
vim +/qflag +239 fs/xfs/libxfs/xfs_swapext.c
231
232 /* Finish one extent swap, possibly log more. */
233 int
234 xfs_swapext_finish_one(
235 struct xfs_trans *tp,
236 struct xfs_swapext_intent *sxi)
237 {
238 struct xfs_bmbt_irec irec1, irec2;
> 239 unsigned int qflag;
240 int whichfork;
241 int nimaps;
242 int bmap_flags;
243 int error;
244
245 whichfork = (sxi->sxi_flags & XFS_SWAP_EXTENT_ATTR_FORK) ?
246 XFS_ATTR_FORK : XFS_DATA_FORK;
247 bmap_flags = xfs_bmapi_aflag(whichfork);
248 qflag = XFS_IS_REALTIME_INODE(sxi->sxi_ip1) ? XFS_TRANS_DQ_RTBCOUNT :
249 XFS_TRANS_DQ_BCOUNT;
250
251 while (sxi->sxi_blockcount > 0) {
252 int64_t ip1_delta = 0, ip2_delta = 0;
253
254 /* Read extent from the first file */
255 nimaps = 1;
256 error = xfs_bmapi_read(sxi->sxi_ip1, sxi->sxi_startoff1,
257 sxi->sxi_blockcount, &irec1, &nimaps,
258 bmap_flags);
259 if (error)
260 return error;
261 if (nimaps != 1 ||
262 irec1.br_startblock == DELAYSTARTBLOCK ||
263 irec1.br_startoff != sxi->sxi_startoff1) {
264 /*
265 * We should never get no mapping or a delalloc extent
266 * or something that doesn't match what we asked for,
267 * since the caller flushed both inodes and we hold the
268 * ILOCKs for both inodes.
269 */
270 ASSERT(0);
271 return -EINVAL;
272 }
273
274 /*
275 * If the caller told us to ignore sparse areas of file1, jump
276 * ahead to the next region.
277 */
278 if ((sxi->sxi_flags & XFS_SWAP_EXTENT_SKIP_FILE1_HOLES) &&
279 irec1.br_startblock == HOLESTARTBLOCK) {
280 trace_xfs_swapext_extent1(sxi->sxi_ip1, &irec1);
281
282 sxi->sxi_startoff1 += irec1.br_blockcount;
283 sxi->sxi_startoff2 += irec1.br_blockcount;
284 sxi->sxi_blockcount -= irec1.br_blockcount;
285 continue;
286 }
287
288 /* Read extent from the second file */
289 nimaps = 1;
290 error = xfs_bmapi_read(sxi->sxi_ip2, sxi->sxi_startoff2,
291 irec1.br_blockcount, &irec2, &nimaps,
292 bmap_flags);
293 if (error)
294 return error;
295 if (nimaps != 1 ||
296 irec2.br_startblock == DELAYSTARTBLOCK ||
297 irec2.br_startoff != sxi->sxi_startoff2) {
298 /*
299 * We should never get no mapping or a delalloc extent
300 * or something that doesn't match what we asked for,
301 * since the caller flushed both inodes and we hold the
302 * ILOCKs for both inodes.
303 */
304 ASSERT(0);
305 return -EINVAL;
306 }
307
308 /*
309 * We can only swap as many blocks as the smaller of the two
310 * extent maps.
311 */
312 irec1.br_blockcount = min(irec1.br_blockcount,
313 irec2.br_blockcount);
314
315 trace_xfs_swapext_extent1(sxi->sxi_ip1, &irec1);
316 trace_xfs_swapext_extent2(sxi->sxi_ip2, &irec2);
317
318 /*
319 * Two extents mapped to the same physical block must not have
320 * different states; that's filesystem corruption. Move on to
321 * the next extent if they're both holes or both the same
322 * physical extent.
323 */
324 if (irec1.br_startblock == irec2.br_startblock) {
325 if (irec1.br_state != irec2.br_state)
326 return -EFSCORRUPTED;
327
328 sxi->sxi_startoff1 += irec1.br_blockcount;
329 sxi->sxi_startoff2 += irec1.br_blockcount;
330 sxi->sxi_blockcount -= irec1.br_blockcount;
331 continue;
332 }
333
334 /* Update quota accounting. */
335 if (xfs_bmap_is_real_extent(&irec1)) {
336 ip1_delta -= irec1.br_blockcount;
337 ip2_delta += irec1.br_blockcount;
338 }
339 if (xfs_bmap_is_real_extent(&irec2)) {
340 ip1_delta += irec2.br_blockcount;
341 ip2_delta -= irec2.br_blockcount;
342 }
343 xfs_trans_mod_dquot_byino(tp, sxi->sxi_ip1, qflag, ip1_delta);
344 xfs_trans_mod_dquot_byino(tp, sxi->sxi_ip2, qflag, ip2_delta);
345
346 /* Remove both mappings. */
347 xfs_bmap_unmap_extent(tp, sxi->sxi_ip1, whichfork, &irec1);
348 xfs_bmap_unmap_extent(tp, sxi->sxi_ip2, whichfork, &irec2);
349
350 /*
351 * Re-add both mappings. We swap the file offsets between the
352 * two maps and add the opposite map, which has the effect of
353 * filling the logical offsets we just unmapped, but with with
354 * the physical mapping information swapped.
355 */
356 swap(irec1.br_startoff, irec2.br_startoff);
357 xfs_bmap_map_extent(tp, sxi->sxi_ip1, whichfork, &irec2);
358 xfs_bmap_map_extent(tp, sxi->sxi_ip2, whichfork, &irec1);
359
360 /* Make sure we're not mapping extents past EOF. */
361 if (whichfork == XFS_DATA_FORK) {
362 xfs_swapext_update_size(tp, sxi->sxi_ip1, &irec2,
363 sxi->sxi_isize1);
364 xfs_swapext_update_size(tp, sxi->sxi_ip2, &irec1,
365 sxi->sxi_isize2);
366 }
367
368 /*
369 * Advance our cursor and exit. The caller (either defer ops
370 * or log recovery) will log the SXD item, and if *blockcount
371 * is nonzero, it will log a new SXI item for the remainder
372 * and call us back.
373 */
374 sxi->sxi_startoff1 += irec1.br_blockcount;
375 sxi->sxi_startoff2 += irec1.br_blockcount;
376 sxi->sxi_blockcount -= irec1.br_blockcount;
377 break;
378 }
379
380 /*
381 * If the caller asked us to exchange the file sizes and we're done
382 * moving extents, update the ondisk file sizes now.
383 */
384 if (sxi->sxi_blockcount == 0 &&
385 (sxi->sxi_flags & XFS_SWAP_EXTENT_SET_SIZES)) {
386 sxi->sxi_ip1->i_d.di_size = sxi->sxi_isize1;
387 sxi->sxi_ip2->i_d.di_size = sxi->sxi_isize2;
388
389 xfs_trans_log_inode(tp, sxi->sxi_ip1, XFS_ILOG_CORE);
390 xfs_trans_log_inode(tp, sxi->sxi_ip2, XFS_ILOG_CORE);
391 }
392
393 if (xfs_swapext_has_more_work(sxi))
394 trace_xfs_swapext_defer(tp->t_mountp, sxi);
395
396 return 0;
397 }
398
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
Re: [RFC bpf-next] bpf: devmap: move drop error path to devmpap for XDP_REDIRECT
by kernel test robot
Hi Lorenzo,
[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Lorenzo-Bianconi/bpf-devmap-move...
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: arm-randconfig-s032-20210209 (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-215-g0fb77bb6-dirty
# https://github.com/0day-ci/linux/commit/96ef538bb5cf75f19f3973722e4f66c7f...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Lorenzo-Bianconi/bpf-devmap-move-drop-error-path-to-devmpap-for-XDP_REDIRECT/20210210-222154
git checkout 96ef538bb5cf75f19f3973722e4f66c7f65781db
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
drivers/net/ethernet/socionext/netsec.c: In function 'netsec_xdp_xmit':
>> drivers/net/ethernet/socionext/netsec.c:1787:12: error: invalid storage class for function 'netsec_xdp_setup'
1787 | static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1787:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
1787 | static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1813:12: error: invalid storage class for function 'netsec_xdp'
1813 | static int netsec_xdp(struct net_device *ndev, struct netdev_bpf *xdp)
| ^~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1836:14: error: initializer element is not constant
1836 | .ndo_bpf = netsec_xdp,
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:1836:14: note: (near initialization for 'netsec_netdev_ops.ndo_bpf')
>> drivers/net/ethernet/socionext/netsec.c:1839:12: error: invalid storage class for function 'netsec_of_probe'
1839 | static int netsec_of_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1868:12: error: invalid storage class for function 'netsec_acpi_probe'
1868 | static int netsec_acpi_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1900:13: error: invalid storage class for function 'netsec_unregister_mdio'
1900 | static void netsec_unregister_mdio(struct netsec_priv *priv)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1912:12: error: invalid storage class for function 'netsec_register_mdio'
1912 | static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1977:12: error: invalid storage class for function 'netsec_probe'
1977 | static int netsec_probe(struct platform_device *pdev)
| ^~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2140:12: error: invalid storage class for function 'netsec_remove'
2140 | static int netsec_remove(struct platform_device *pdev)
| ^~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2157:12: error: invalid storage class for function 'netsec_runtime_suspend'
2157 | static int netsec_runtime_suspend(struct device *dev)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2168:12: error: invalid storage class for function 'netsec_runtime_resume'
2168 | static int netsec_runtime_resume(struct device *dev)
| ^~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/device.h:25,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
drivers/net/ethernet/socionext/netsec.c:2182:21: error: initializer element is not constant
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:342:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
342 | .runtime_suspend = suspend_fn, \
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2182:21: note: (near initialization for 'netsec_pm_ops.runtime_suspend')
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:342:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
342 | .runtime_suspend = suspend_fn, \
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2182:45: error: initializer element is not constant
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:343:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
343 | .runtime_resume = resume_fn, \
| ^~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2182:45: note: (near initialization for 'netsec_pm_ops.runtime_resume')
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:343:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
343 | .runtime_resume = resume_fn, \
| ^~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2189:1: warning: 'alias' attribute ignored [-Wattributes]
2189 | MODULE_DEVICE_TABLE(of, netsec_dt_ids);
| ^~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: error: initializer element is not constant
2200 | .probe = netsec_probe,
| ^~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: note: (near initialization for 'netsec_driver.probe')
drivers/net/ethernet/socionext/netsec.c:2201:12: error: initializer element is not constant
2201 | .remove = netsec_remove,
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2201:12: note: (near initialization for 'netsec_driver.remove')
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
>> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid storage class for function 'netsec_driver_init'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:259:19: note: in definition of macro 'module_driver'
259 | static int __init __driver##_init(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/module.h:132:42: error: invalid storage class for function '__inittest'
132 | static inline initcall_t __maybe_unused __inittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:263:1: note: in expansion of macro 'module_init'
263 | module_init(__driver##_init); \
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute ignored [-Wattributes]
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
>> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid storage class for function 'netsec_driver_exit'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:264:20: note: in definition of macro 'module_driver'
264 | static void __exit __driver##_exit(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
>> include/linux/device/driver.h:264:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
264 | static void __exit __driver##_exit(void) \
| ^~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/module.h:138:42: error: invalid storage class for function '__exittest'
138 | static inline exitcall_t __maybe_unused __exittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:268:1: note: in expansion of macro 'module_exit'
268 | module_exit(__driver##_exit);
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute ignored [-Wattributes]
In file included from include/linux/module.h:21,
from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/moduleparam.h:24:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
24 | static const char __UNIQUE_ID(name)[] \
| ^~~~~~
include/linux/module.h:163:32: note: in expansion of macro '__MODULE_INFO'
163 | #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
| ^~~~~~~~~~~~~
include/linux/module.h:233:32: note: in expansion of macro 'MODULE_INFO'
233 | #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
| ^~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2211:1: note: in expansion of macro 'MODULE_AUTHOR'
2211 | MODULE_AUTHOR("Jassi Brar <jaswinder.singh(a)linaro.org>");
| ^~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2214:1: error: expected declaration or statement at end of input
2214 | MODULE_LICENSE("GPL");
| ^~~~~~~~~~~~~~
At top level:
drivers/net/ethernet/socionext/netsec.c:1755:12: warning: 'netsec_xdp_xmit' defined but not used [-Wunused-function]
1755 | static int netsec_xdp_xmit(struct net_device *ndev, int n,
| ^~~~~~~~~~~~~~~
vim +/netsec_xdp_setup +1787 drivers/net/ethernet/socionext/netsec.c
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1786
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1787 static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1788 struct netlink_ext_ack *extack)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1789 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1790 struct net_device *dev = priv->ndev;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1791 struct bpf_prog *old_prog;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1792
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1793 /* For now just support only the usual MTU sized frames */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1794 if (prog && dev->mtu > 1500) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1795 NL_SET_ERR_MSG_MOD(extack, "Jumbo frames not supported on XDP");
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1796 return -EOPNOTSUPP;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1797 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1798
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1799 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1800 netsec_netdev_stop(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1801
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1802 /* Detach old prog, if any */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1803 old_prog = xchg(&priv->xdp_prog, prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1804 if (old_prog)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1805 bpf_prog_put(old_prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1806
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1807 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1808 netsec_netdev_open(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1809
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1810 return 0;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1811 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1812
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1813 static int netsec_xdp(struct net_device *ndev, struct netdev_bpf *xdp)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1814 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1815 struct netsec_priv *priv = netdev_priv(ndev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1816
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1817 switch (xdp->command) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1818 case XDP_SETUP_PROG:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1819 return netsec_xdp_setup(priv, xdp->prog, xdp->extack);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1820 default:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1821 return -EINVAL;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1822 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1823 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1824
533dd11a12f698c Jassi Brar 2018-01-06 1825 static const struct net_device_ops netsec_netdev_ops = {
533dd11a12f698c Jassi Brar 2018-01-06 1826 .ndo_init = netsec_netdev_init,
533dd11a12f698c Jassi Brar 2018-01-06 1827 .ndo_uninit = netsec_netdev_uninit,
533dd11a12f698c Jassi Brar 2018-01-06 1828 .ndo_open = netsec_netdev_open,
533dd11a12f698c Jassi Brar 2018-01-06 1829 .ndo_stop = netsec_netdev_stop,
533dd11a12f698c Jassi Brar 2018-01-06 1830 .ndo_start_xmit = netsec_netdev_start_xmit,
533dd11a12f698c Jassi Brar 2018-01-06 1831 .ndo_set_features = netsec_netdev_set_features,
533dd11a12f698c Jassi Brar 2018-01-06 1832 .ndo_set_mac_address = eth_mac_addr,
533dd11a12f698c Jassi Brar 2018-01-06 1833 .ndo_validate_addr = eth_validate_addr,
c5d19a6ecfce72d Heiner Kallweit 2020-01-21 1834 .ndo_do_ioctl = phy_do_ioctl,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1835 .ndo_xdp_xmit = netsec_xdp_xmit,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1836 .ndo_bpf = netsec_xdp,
533dd11a12f698c Jassi Brar 2018-01-06 1837 };
533dd11a12f698c Jassi Brar 2018-01-06 1838
533dd11a12f698c Jassi Brar 2018-01-06 @1839 static int netsec_of_probe(struct platform_device *pdev,
8e850f25b5812ae Masahisa Kojima 2018-10-23 1840 struct netsec_priv *priv, u32 *phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1841 {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1842 int err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1843
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1844 err = of_get_phy_mode(pdev->dev.of_node, &priv->phy_interface);
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1845 if (err) {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1846 dev_err(&pdev->dev, "missing required property 'phy-mode'\n");
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1847 return err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1848 }
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1849
533dd11a12f698c Jassi Brar 2018-01-06 1850 priv->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
533dd11a12f698c Jassi Brar 2018-01-06 1851 if (!priv->phy_np) {
533dd11a12f698c Jassi Brar 2018-01-06 1852 dev_err(&pdev->dev, "missing required property 'phy-handle'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1853 return -EINVAL;
533dd11a12f698c Jassi Brar 2018-01-06 1854 }
533dd11a12f698c Jassi Brar 2018-01-06 1855
8e850f25b5812ae Masahisa Kojima 2018-10-23 1856 *phy_addr = of_mdio_parse_addr(&pdev->dev, priv->phy_np);
8e850f25b5812ae Masahisa Kojima 2018-10-23 1857
533dd11a12f698c Jassi Brar 2018-01-06 1858 priv->clk = devm_clk_get(&pdev->dev, NULL); /* get by 'phy_ref_clk' */
533dd11a12f698c Jassi Brar 2018-01-06 1859 if (IS_ERR(priv->clk)) {
533dd11a12f698c Jassi Brar 2018-01-06 1860 dev_err(&pdev->dev, "phy_ref_clk not found\n");
533dd11a12f698c Jassi Brar 2018-01-06 1861 return PTR_ERR(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1862 }
533dd11a12f698c Jassi Brar 2018-01-06 1863 priv->freq = clk_get_rate(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1864
533dd11a12f698c Jassi Brar 2018-01-06 1865 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 1866 }
533dd11a12f698c Jassi Brar 2018-01-06 1867
533dd11a12f698c Jassi Brar 2018-01-06 @1868 static int netsec_acpi_probe(struct platform_device *pdev,
533dd11a12f698c Jassi Brar 2018-01-06 1869 struct netsec_priv *priv, u32 *phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1870 {
533dd11a12f698c Jassi Brar 2018-01-06 1871 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1872
533dd11a12f698c Jassi Brar 2018-01-06 1873 if (!IS_ENABLED(CONFIG_ACPI))
533dd11a12f698c Jassi Brar 2018-01-06 1874 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1875
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1876 /* ACPI systems are assumed to configure the PHY in firmware, so
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1877 * there is really no need to discover the PHY mode from the DSDT.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1878 * Since firmware is known to exist in the field that configures the
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1879 * PHY correctly but passes the wrong mode string in the phy-mode
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1880 * device property, we have no choice but to ignore it.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1881 */
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1882 priv->phy_interface = PHY_INTERFACE_MODE_NA;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1883
533dd11a12f698c Jassi Brar 2018-01-06 1884 ret = device_property_read_u32(&pdev->dev, "phy-channel", phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 1885 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1886 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1887 "missing required property 'phy-channel'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1888 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1889 }
533dd11a12f698c Jassi Brar 2018-01-06 1890
533dd11a12f698c Jassi Brar 2018-01-06 1891 ret = device_property_read_u32(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1892 "socionext,phy-clock-frequency",
533dd11a12f698c Jassi Brar 2018-01-06 1893 &priv->freq);
533dd11a12f698c Jassi Brar 2018-01-06 1894 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 1895 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1896 "missing required property 'socionext,phy-clock-frequency'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1897 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1898 }
533dd11a12f698c Jassi Brar 2018-01-06 1899
533dd11a12f698c Jassi Brar 2018-01-06 @1900 static void netsec_unregister_mdio(struct netsec_priv *priv)
533dd11a12f698c Jassi Brar 2018-01-06 1901 {
533dd11a12f698c Jassi Brar 2018-01-06 1902 struct phy_device *phydev = priv->phydev;
533dd11a12f698c Jassi Brar 2018-01-06 1903
533dd11a12f698c Jassi Brar 2018-01-06 1904 if (!dev_of_node(priv->dev) && phydev) {
533dd11a12f698c Jassi Brar 2018-01-06 1905 phy_device_remove(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1906 phy_device_free(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1907 }
533dd11a12f698c Jassi Brar 2018-01-06 1908
533dd11a12f698c Jassi Brar 2018-01-06 1909 mdiobus_unregister(priv->mii_bus);
533dd11a12f698c Jassi Brar 2018-01-06 1910 }
533dd11a12f698c Jassi Brar 2018-01-06 1911
533dd11a12f698c Jassi Brar 2018-01-06 @1912 static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1913 {
533dd11a12f698c Jassi Brar 2018-01-06 1914 struct mii_bus *bus;
533dd11a12f698c Jassi Brar 2018-01-06 1915 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1916
533dd11a12f698c Jassi Brar 2018-01-06 1917 bus = devm_mdiobus_alloc(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1918 if (!bus)
533dd11a12f698c Jassi Brar 2018-01-06 1919 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 1920
533dd11a12f698c Jassi Brar 2018-01-06 1921 snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(priv->dev));
533dd11a12f698c Jassi Brar 2018-01-06 1922 bus->priv = priv;
533dd11a12f698c Jassi Brar 2018-01-06 1923 bus->name = "SNI NETSEC MDIO";
533dd11a12f698c Jassi Brar 2018-01-06 1924 bus->read = netsec_phy_read;
533dd11a12f698c Jassi Brar 2018-01-06 1925 bus->write = netsec_phy_write;
533dd11a12f698c Jassi Brar 2018-01-06 1926 bus->parent = priv->dev;
533dd11a12f698c Jassi Brar 2018-01-06 1927 priv->mii_bus = bus;
533dd11a12f698c Jassi Brar 2018-01-06 1928
533dd11a12f698c Jassi Brar 2018-01-06 1929 if (dev_of_node(priv->dev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1930 struct device_node *mdio_node, *parent = dev_of_node(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1931
533dd11a12f698c Jassi Brar 2018-01-06 1932 mdio_node = of_get_child_by_name(parent, "mdio");
533dd11a12f698c Jassi Brar 2018-01-06 1933 if (mdio_node) {
533dd11a12f698c Jassi Brar 2018-01-06 1934 parent = mdio_node;
533dd11a12f698c Jassi Brar 2018-01-06 1935 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1936 /* older f/w doesn't populate the mdio subnode,
533dd11a12f698c Jassi Brar 2018-01-06 1937 * allow relaxed upgrade of f/w in due time.
533dd11a12f698c Jassi Brar 2018-01-06 1938 */
533dd11a12f698c Jassi Brar 2018-01-06 1939 dev_info(priv->dev, "Upgrade f/w for mdio subnode!\n");
533dd11a12f698c Jassi Brar 2018-01-06 1940 }
533dd11a12f698c Jassi Brar 2018-01-06 1941
533dd11a12f698c Jassi Brar 2018-01-06 1942 ret = of_mdiobus_register(bus, parent);
533dd11a12f698c Jassi Brar 2018-01-06 1943 of_node_put(mdio_node);
533dd11a12f698c Jassi Brar 2018-01-06 1944
533dd11a12f698c Jassi Brar 2018-01-06 1945 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1946 dev_err(priv->dev, "mdiobus register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1947 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1948 }
533dd11a12f698c Jassi Brar 2018-01-06 1949 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1950 /* Mask out all PHYs from auto probing. */
533dd11a12f698c Jassi Brar 2018-01-06 1951 bus->phy_mask = ~0;
533dd11a12f698c Jassi Brar 2018-01-06 1952 ret = mdiobus_register(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1953 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1954 dev_err(priv->dev, "mdiobus register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1955 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1956 }
533dd11a12f698c Jassi Brar 2018-01-06 1957
533dd11a12f698c Jassi Brar 2018-01-06 1958 priv->phydev = get_phy_device(bus, phy_addr, false);
533dd11a12f698c Jassi Brar 2018-01-06 1959 if (IS_ERR(priv->phydev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1960 ret = PTR_ERR(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1961 dev_err(priv->dev, "get_phy_device err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1962 priv->phydev = NULL;
533dd11a12f698c Jassi Brar 2018-01-06 1963 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1964 }
533dd11a12f698c Jassi Brar 2018-01-06 1965
533dd11a12f698c Jassi Brar 2018-01-06 1966 ret = phy_device_register(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1967 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1968 mdiobus_unregister(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1969 dev_err(priv->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1970 "phy_device_register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1971 }
533dd11a12f698c Jassi Brar 2018-01-06 1972 }
533dd11a12f698c Jassi Brar 2018-01-06 1973
533dd11a12f698c Jassi Brar 2018-01-06 1974 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1975 }
533dd11a12f698c Jassi Brar 2018-01-06 1976
533dd11a12f698c Jassi Brar 2018-01-06 @1977 static int netsec_probe(struct platform_device *pdev)
533dd11a12f698c Jassi Brar 2018-01-06 1978 {
533dd11a12f698c Jassi Brar 2018-01-06 1979 struct resource *mmio_res, *eeprom_res, *irq_res;
533dd11a12f698c Jassi Brar 2018-01-06 1980 u8 *mac, macbuf[ETH_ALEN];
533dd11a12f698c Jassi Brar 2018-01-06 1981 struct netsec_priv *priv;
533dd11a12f698c Jassi Brar 2018-01-06 1982 u32 hw_ver, phy_addr = 0;
533dd11a12f698c Jassi Brar 2018-01-06 1983 struct net_device *ndev;
533dd11a12f698c Jassi Brar 2018-01-06 1984 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1985
533dd11a12f698c Jassi Brar 2018-01-06 1986 mmio_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1987 if (!mmio_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1988 dev_err(&pdev->dev, "No MMIO resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1989 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1990 }
533dd11a12f698c Jassi Brar 2018-01-06 1991
533dd11a12f698c Jassi Brar 2018-01-06 1992 eeprom_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
533dd11a12f698c Jassi Brar 2018-01-06 1993 if (!eeprom_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1994 dev_info(&pdev->dev, "No EEPROM resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1995 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1996 }
533dd11a12f698c Jassi Brar 2018-01-06 1997
533dd11a12f698c Jassi Brar 2018-01-06 1998 irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1999 if (!irq_res) {
533dd11a12f698c Jassi Brar 2018-01-06 2000 dev_err(&pdev->dev, "No IRQ resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 2001 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2002 }
533dd11a12f698c Jassi Brar 2018-01-06 2003
533dd11a12f698c Jassi Brar 2018-01-06 2004 ndev = alloc_etherdev(sizeof(*priv));
533dd11a12f698c Jassi Brar 2018-01-06 2005 if (!ndev)
533dd11a12f698c Jassi Brar 2018-01-06 2006 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 2007
533dd11a12f698c Jassi Brar 2018-01-06 2008 priv = netdev_priv(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2009
533dd11a12f698c Jassi Brar 2018-01-06 2010 spin_lock_init(&priv->reglock);
533dd11a12f698c Jassi Brar 2018-01-06 2011 SET_NETDEV_DEV(ndev, &pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2012 platform_set_drvdata(pdev, priv);
533dd11a12f698c Jassi Brar 2018-01-06 2013 ndev->irq = irq_res->start;
533dd11a12f698c Jassi Brar 2018-01-06 2014 priv->dev = &pdev->dev;
533dd11a12f698c Jassi Brar 2018-01-06 2015 priv->ndev = ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2016
533dd11a12f698c Jassi Brar 2018-01-06 2017 priv->msg_enable = NETIF_MSG_TX_ERR | NETIF_MSG_HW | NETIF_MSG_DRV |
533dd11a12f698c Jassi Brar 2018-01-06 2018 NETIF_MSG_LINK | NETIF_MSG_PROBE;
533dd11a12f698c Jassi Brar 2018-01-06 2019
533dd11a12f698c Jassi Brar 2018-01-06 2020 priv->ioaddr = devm_ioremap(&pdev->dev, mmio_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2021 resource_size(mmio_res));
533dd11a12f698c Jassi Brar 2018-01-06 2022 if (!priv->ioaddr) {
533dd11a12f698c Jassi Brar 2018-01-06 2023 dev_err(&pdev->dev, "devm_ioremap() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2024 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2025 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2026 }
533dd11a12f698c Jassi Brar 2018-01-06 2027
533dd11a12f698c Jassi Brar 2018-01-06 2028 priv->eeprom_base = devm_ioremap(&pdev->dev, eeprom_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2029 resource_size(eeprom_res));
533dd11a12f698c Jassi Brar 2018-01-06 2030 if (!priv->eeprom_base) {
533dd11a12f698c Jassi Brar 2018-01-06 2031 dev_err(&pdev->dev, "devm_ioremap() failed for EEPROM\n");
533dd11a12f698c Jassi Brar 2018-01-06 2032 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2033 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2034 }
533dd11a12f698c Jassi Brar 2018-01-06 2035
533dd11a12f698c Jassi Brar 2018-01-06 2036 mac = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf));
533dd11a12f698c Jassi Brar 2018-01-06 2037 if (mac)
533dd11a12f698c Jassi Brar 2018-01-06 2038 ether_addr_copy(ndev->dev_addr, mac);
533dd11a12f698c Jassi Brar 2018-01-06 2039
533dd11a12f698c Jassi Brar 2018-01-06 2040 if (priv->eeprom_base &&
533dd11a12f698c Jassi Brar 2018-01-06 2041 (!mac || !is_valid_ether_addr(ndev->dev_addr))) {
533dd11a12f698c Jassi Brar 2018-01-06 2042 void __iomem *macp = priv->eeprom_base +
533dd11a12f698c Jassi Brar 2018-01-06 2043 NETSEC_EEPROM_MAC_ADDRESS;
533dd11a12f698c Jassi Brar 2018-01-06 2044
533dd11a12f698c Jassi Brar 2018-01-06 2045 ndev->dev_addr[0] = readb(macp + 3);
533dd11a12f698c Jassi Brar 2018-01-06 2046 ndev->dev_addr[1] = readb(macp + 2);
533dd11a12f698c Jassi Brar 2018-01-06 2047 ndev->dev_addr[2] = readb(macp + 1);
533dd11a12f698c Jassi Brar 2018-01-06 2048 ndev->dev_addr[3] = readb(macp + 0);
533dd11a12f698c Jassi Brar 2018-01-06 2049 ndev->dev_addr[4] = readb(macp + 7);
533dd11a12f698c Jassi Brar 2018-01-06 2050 ndev->dev_addr[5] = readb(macp + 6);
533dd11a12f698c Jassi Brar 2018-01-06 2051 }
533dd11a12f698c Jassi Brar 2018-01-06 2052
533dd11a12f698c Jassi Brar 2018-01-06 2053 if (!is_valid_ether_addr(ndev->dev_addr)) {
533dd11a12f698c Jassi Brar 2018-01-06 2054 dev_warn(&pdev->dev, "No MAC address found, using random\n");
533dd11a12f698c Jassi Brar 2018-01-06 2055 eth_hw_addr_random(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2056 }
533dd11a12f698c Jassi Brar 2018-01-06 2057
533dd11a12f698c Jassi Brar 2018-01-06 2058 if (dev_of_node(&pdev->dev))
8e850f25b5812ae Masahisa Kojima 2018-10-23 2059 ret = netsec_of_probe(pdev, priv, &phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2060 else
533dd11a12f698c Jassi Brar 2018-01-06 2061 ret = netsec_acpi_probe(pdev, priv, &phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2062 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2063 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2064
8e850f25b5812ae Masahisa Kojima 2018-10-23 2065 priv->phy_addr = phy_addr;
8e850f25b5812ae Masahisa Kojima 2018-10-23 2066
533dd11a12f698c Jassi Brar 2018-01-06 2067 if (!priv->freq) {
533dd11a12f698c Jassi Brar 2018-01-06 2068 dev_err(&pdev->dev, "missing PHY reference clock frequency\n");
533dd11a12f698c Jassi Brar 2018-01-06 2069 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2070 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2071 }
533dd11a12f698c Jassi Brar 2018-01-06 2072
533dd11a12f698c Jassi Brar 2018-01-06 2073 /* default for throughput */
533dd11a12f698c Jassi Brar 2018-01-06 2074 priv->et_coalesce.rx_coalesce_usecs = 500;
533dd11a12f698c Jassi Brar 2018-01-06 2075 priv->et_coalesce.rx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2076 priv->et_coalesce.tx_coalesce_usecs = 500;
533dd11a12f698c Jassi Brar 2018-01-06 2077 priv->et_coalesce.tx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2078
533dd11a12f698c Jassi Brar 2018-01-06 2079 ret = device_property_read_u32(&pdev->dev, "max-frame-size",
533dd11a12f698c Jassi Brar 2018-01-06 2080 &ndev->max_mtu);
533dd11a12f698c Jassi Brar 2018-01-06 2081 if (ret < 0)
533dd11a12f698c Jassi Brar 2018-01-06 2082 ndev->max_mtu = ETH_DATA_LEN;
533dd11a12f698c Jassi Brar 2018-01-06 2083
533dd11a12f698c Jassi Brar 2018-01-06 2084 /* runtime_pm coverage just for probe, open/close also cover it */
533dd11a12f698c Jassi Brar 2018-01-06 2085 pm_runtime_enable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2086 pm_runtime_get_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2087
533dd11a12f698c Jassi Brar 2018-01-06 2088 hw_ver = netsec_read(priv, NETSEC_REG_F_TAIKI_VER);
533dd11a12f698c Jassi Brar 2018-01-06 2089 /* this driver only supports F_TAIKI style NETSEC */
533dd11a12f698c Jassi Brar 2018-01-06 2090 if (NETSEC_F_NETSEC_VER_MAJOR_NUM(hw_ver) !=
533dd11a12f698c Jassi Brar 2018-01-06 2091 NETSEC_F_NETSEC_VER_MAJOR_NUM(NETSEC_REG_NETSEC_VER_F_TAIKI)) {
533dd11a12f698c Jassi Brar 2018-01-06 2092 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2093 goto pm_disable;
533dd11a12f698c Jassi Brar 2018-01-06 2094 }
533dd11a12f698c Jassi Brar 2018-01-06 2095
533dd11a12f698c Jassi Brar 2018-01-06 2096 dev_info(&pdev->dev, "hardware revision %d.%d\n",
533dd11a12f698c Jassi Brar 2018-01-06 2097 hw_ver >> 16, hw_ver & 0xffff);
533dd11a12f698c Jassi Brar 2018-01-06 2098
b6311b7bea41963 Ilias Apalodimas 2018-08-10 2099 netif_napi_add(ndev, &priv->napi, netsec_napi_poll, NAPI_POLL_WEIGHT);
533dd11a12f698c Jassi Brar 2018-01-06 2100
533dd11a12f698c Jassi Brar 2018-01-06 2101 ndev->netdev_ops = &netsec_netdev_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2102 ndev->ethtool_ops = &netsec_ethtool_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2103
533dd11a12f698c Jassi Brar 2018-01-06 2104 ndev->features |= NETIF_F_HIGHDMA | NETIF_F_RXCSUM | NETIF_F_GSO |
533dd11a12f698c Jassi Brar 2018-01-06 2105 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
533dd11a12f698c Jassi Brar 2018-01-06 2106 ndev->hw_features = ndev->features;
533dd11a12f698c Jassi Brar 2018-01-06 2107
533dd11a12f698c Jassi Brar 2018-01-06 2108 priv->rx_cksum_offload_flag = true;
533dd11a12f698c Jassi Brar 2018-01-06 2109
533dd11a12f698c Jassi Brar 2018-01-06 2110 ret = netsec_register_mdio(priv, phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2111 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2112 goto unreg_napi;
533dd11a12f698c Jassi Brar 2018-01-06 2113
312564269535892 Ard Biesheuvel 2018-05-25 2114 if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40)))
312564269535892 Ard Biesheuvel 2018-05-25 2115 dev_warn(&pdev->dev, "Failed to set DMA mask\n");
533dd11a12f698c Jassi Brar 2018-01-06 2116
533dd11a12f698c Jassi Brar 2018-01-06 2117 ret = register_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2118 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 2119 netif_err(priv, probe, ndev, "register_netdev() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2120 goto unreg_mii;
533dd11a12f698c Jassi Brar 2018-01-06 2121 }
533dd11a12f698c Jassi Brar 2018-01-06 2122
533dd11a12f698c Jassi Brar 2018-01-06 2123 pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2124 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 2125
533dd11a12f698c Jassi Brar 2018-01-06 2126 unreg_mii:
533dd11a12f698c Jassi Brar 2018-01-06 2127 netsec_unregister_mdio(priv);
533dd11a12f698c Jassi Brar 2018-01-06 2128 unreg_napi:
533dd11a12f698c Jassi Brar 2018-01-06 2129 netif_napi_del(&priv->napi);
533dd11a12f698c Jassi Brar 2018-01-06 2130 pm_disable:
533dd11a12f698c Jassi Brar 2018-01-06 2131 pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2132 pm_runtime_disable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2133 free_ndev:
533dd11a12f698c Jassi Brar 2018-01-06 2134 free_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2135 dev_err(&pdev->dev, "init failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2136
533dd11a12f698c Jassi Brar 2018-01-06 2137 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 2138 }
533dd11a12f698c Jassi Brar 2018-01-06 2139
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months
drivers/gpu/drm/i915/gt/intel_gtt.c:161:18: error: 'pages' undeclared; did you mean
by kernel test robot
tree: https://github.com/0day-ci/linux/commits/UPDATE-20210210-181758/Chris-Wil...
head: 1f7d2908ed9121500324cfa7c81236dbf5f0d20d
commit: 1f7d2908ed9121500324cfa7c81236dbf5f0d20d drm/i915: Check for scratch page scribbling
date: 6 hours ago
config: x86_64-randconfig-s021-20210209 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-215-g0fb77bb6-dirty
# https://github.com/0day-ci/linux/commit/1f7d2908ed9121500324cfa7c81236dbf...
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review UPDATE-20210210-181758/Chris-Wilson/drm-i915-Check-for-scratch-page-scribbling/20210210-180810
git checkout 1f7d2908ed9121500324cfa7c81236dbf5f0d20d
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/i915/gt/intel_gtt.c: In function 'poison_scratch_page':
>> drivers/gpu/drm/i915/gt/intel_gtt.c:161:18: error: 'pages' undeclared (first use in this function); did you mean 'page'?
161 | set_page_dirty(pages); /* keep the poisoned contents */
| ^~~~~
| page
drivers/gpu/drm/i915/gt/intel_gtt.c:161:18: note: each undeclared identifier is reported only once for each function it appears in
vim +161 drivers/gpu/drm/i915/gt/intel_gtt.c
145
146 static void poison_scratch_page(struct drm_i915_gem_object *scratch)
147 {
148 struct sgt_iter sgt;
149 struct page *page;
150 u8 val;
151
152 val = 0;
153 if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
154 val = POISON_FREE;
155
156 for_each_sgt_page(page, sgt, scratch->mm.pages) {
157 void *vaddr;
158
159 vaddr = kmap(page);
160 memset(vaddr, val, PAGE_SIZE);
> 161 set_page_dirty(pages); /* keep the poisoned contents */
162 kunmap(page);
163 }
164 }
165
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 7 months