Hi Johannes, On Thu, Aug 18, 2022 at 3:49 AM Johannes Berg <johannes@xxxxxxxxxxxxxxxx> wrote: > > Hi Sean, > > > It could be changed but it would break the consistency of the current > > mt76 driver. > > I'm not really convinced ... > > > mt76 driver does the things in the following order > > - ieee80211_alloc_hw (where an instance of "struct mt76_dev *" would be created) > > - register bus operation into mt76 core (depending on struct mt76_dev > > to provide an abstraction layer for mt76 core to access bus) > > - read chip identifier (depending on bus operation) > > - load the firmware capabilities (depending on chip identifier) > > - initialize the hardware > > .... > > -ieee80211_register_hw > > > > If firmware capability is needed to load before ieee80211_alloc_hw, we > > need to create kind of similar functions to read chip identifiers and > > load firmware. > > I know It may not a strong reason not to change, but if we can support > > read firmware capabilities after alloc_hw, it provides flexibility to > > the vendor driver > > and helps mt7921 look more consistent and save a few changes across > > different mt7921 bus drivers (mt7921 now supports SDIO, USB, PCIe type > > driver). > > But you're loading _firmware_, so to determine the capabilities all you > should need is the actual file, no? I mean, you don't even have to load > it into the device. Like iwlwifi, you could have an indication (or many > flags, or TLVs, or whatnot) in the file that says what it's capable of. > > > I kmemdup the const ops and ieee80211_alloc_hw with the duplicated ops > > the duplicated ops would be updated by the actual firmware > > capabilities before ieee80211_register_hw. > > Well ... yeah ok that works, but it's pretty wasteful, and also makes > this a nice security attack target - there's a reason ops structs are > supposed to be const, that's because they can then be really read-only > and you can't have function pointer changes. Some of the CFI stuff is > meant to help avoid that, but still ... > > So anyway. I'm not really sure I buy this - even you while doing this > already kind of introduced a bug because you didn't change this code: > > if (!use_chanctx || ops->remain_on_channel) > wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; > > I guess you didn't notice because you have remain_on_channel in the > first place, but that's not the only code there assuming that we have > the ops in place and they don't change. > > If we really, really need to allow changing the ops, then we should > probably make a much larger change to not even pass the ops until > register, though I'm not really sure it's worth it just to have mt7921 > avoid loading the firmware from disk before allocation? > > johannes Thanks for your input. I thought I'd try to write a patch to follow up on the idea you mentioned here. sean