On 30/05/2024 13:54, Nemanov, Michael wrote: > > > On 5/22/2024 12:46 PM, Krzysztof Kozlowski wrote: >> ... > +} > + > +static int read_version_info(struct cc33xx *cc) > +{ > >> + int ret; > + > + cc33xx_info("Wireless driver version %s", >> DRV_VERSION); Drop > + > + ret = cc33xx_acx_init_get_fw_versions(cc); >>> + if (ret < 0) { > + cc33xx_error("Get FW version FAILED!"); > + >> return ret; > + } > + > + cc33xx_info("Wireless firmware version >> %u.%u.%u.%u", > + cc->all_versions.fw_ver->major_version, > + >> cc->all_versions.fw_ver->minor_version, > + >> cc->all_versions.fw_ver->api_version, > + >> cc->all_versions.fw_ver->build_version); > + > + cc33xx_info("Wireless >> PHY version %u.%u.%u.%u.%u.%u", > + >> cc->all_versions.fw_ver->phy_version[5], > + >> cc->all_versions.fw_ver->phy_version[4], > + >> cc->all_versions.fw_ver->phy_version[3], > + >> cc->all_versions.fw_ver->phy_version[2], > + >> cc->all_versions.fw_ver->phy_version[1], > + >> cc->all_versions.fw_ver->phy_version[0]); > + > + >> cc->all_versions.driver_ver = DRV_VERSION; Drop > You mean drop the trace? Will exposing FW/PHY versions via debugfs be OK? It's impossible to read your email. I have no clue what you are referring to. >>> +} > + > +static int cc33xx_remove(struct platform_device *pdev) Why >> remove callback is before probe? Please follow standard driver >> convention. This goes immediately after probe. > Will fix > > [...] >>> +{ > + struct cc33xx_platdev_data *pdev_data = >> dev_get_platdata(&pdev->dev); > + struct cc33xx *cc = >> platform_get_drvdata(pdev); > + > + >> set_bit(CC33XX_FLAG_DRIVER_REMOVED, &cc->flags); ?!?! Your code is >> seriously buggy if you depend on setting bit in remove callback. > If removal of the CC33xx driver was caused by the removal of its parent > SDIO device then all I/O operations will fail as SDIO transport is no > longer available. This will eventually trigger the recovery mechanism > which in this case is futile. If this flag is set, no recovery is attempted. > > [...] >>> + return -EINVAL; > + } > + > + hw = >> cc33xx_alloc_hw(CC33XX_AGGR_BUFFER_SIZE); > + if (IS_ERR(hw)) { > + >> cc33xx_error("can't allocate hw"); Heh? Since when do we print memory >> allocation failures? Since when memory allocation returns ERR ptr? > Will fix >>> +}; > +MODULE_DEVICE_TABLE(platform, cc33xx_id_table); > + > +static >> struct platform_driver cc33xx_driver = { > + .probe = cc33xx_probe, > >> + .remove = cc33xx_remove, > + .id_table = cc33xx_id_table, > + >> .driver = { > + .name = "cc33xx_driver", > + } > +}; > + > +u32 >> cc33xx_debug_level = DEBUG_NO_DATAPATH; Why this is global? Why u32? >> Why global variable is defined at the end of the file?!?! > cc33xx_debug_level together with cc33xx_debug/info/error() macros is how > all traces were done in drivers/net/wireless/ti/wlcore/ (originally was > wl1271_debug/info etc.) It enables / disables traces without rebuilding > or even reloading which is very helpful for remote support. These macros > map to dynamic_pr_debug / pr_debug. I saw similar wrappers in other > wireless drivers (ath12k). This is also why there are plenty of > cc33xx_debug() all over the code, most are silent by default. >>> + >>> +module_platform_driver(cc33xx_driver); >>> + >>> +module_param_named(debug_level, cc33xx_debug_level, uint, 0600); >>> +MODULE_PARM_DESC(debug_level, "cc33xx debugging level"); >>> + >>> +MODULE_PARM_DESC(secure_boot_enable, "Enables secure boot and FW downlaod"); >> >> Eh? why secure boot is module param? >> >>> + >>> +module_param_named(fwlog, fwlog_param, charp, 0); >>> +MODULE_PARM_DESC(fwlog, "FW logger options: continuous, dbgpins or disable"); >>> + >>> +module_param(no_recovery, int, 0600); >>> +MODULE_PARM_DESC(no_recovery, "Prevent HW recovery. FW will remain stuck."); >>> + >>> +module_param_named(ht_mode, ht_mode_param, charp, 0400); >>> +MODULE_PARM_DESC(ht_mode, "Force HT mode: wide or siso20"); >> >> Does not look like suitable for module params. > Was useful during development but can be removed >>> + >>> +MODULE_LICENSE("GPL v2"); >>> +MODULE_DESCRIPTION("Texas Instruments CC33xx WLAN driver"); >>> +MODULE_AUTHOR("Michael Nemanov <michael.nemanov@xxxxxx>"); >>> +MODULE_AUTHOR("Sabeeh Khan <sabeeh-khan@xxxxxx>"); >>> + >>> +MODULE_VERSION(DRV_VERSION); >> >> Drop. > I saw other drivers use this, is it no longer allowed? Was never allowed. There is only one version: the kernel version. There were many comments already explaining why "driver version" is wrong/meaningless. Best regards, Krzysztof