Message ID | 61e89623446ed8914e5969114c7ae8c623f3e3ba.1574502651.git.lorenzo@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Felix Fietkau |
Headers | show |
Series | mt76: eeprom: add support for big endian eeprom partition | expand |
Lorenzo Bianconi <lorenzo@kernel.org> writes: > mt76x0e users reported some devices (e.g TP-Link Archer VR200v) have > been flashed with big endian radio partition. Add the possibility to > specify eeprom endianness using big-endian dts property and in case > covert eeprom data in little endian > > Tested-by: Kevin Schmidt <kevin.patrick.schmidt@googlemail.com> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > --- > drivers/net/wireless/mediatek/mt76/eeprom.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/net/wireless/mediatek/mt76/eeprom.c b/drivers/net/wireless/mediatek/mt76/eeprom.c > index 804224e81103..33d992d5662a 100644 > --- a/drivers/net/wireless/mediatek/mt76/eeprom.c > +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c > @@ -64,6 +64,16 @@ mt76_get_of_eeprom(struct mt76_dev *dev, int len) > goto out_put_node; > } > > + if (of_property_read_bool(dev->dev->of_node, "big-endian")) { > + u8 *data = (u8 *)dev->eeprom.data; > + int i; > + > + /* convert eeprom data in Little Endian */ > + for (i = 0; i < round_down(len, 2); i += 2) > + put_unaligned_le16(get_unaligned_be16(&data[i]), > + &data[i]); > + } What about the bindings documentation? I don't see this "big-endian" documented in the mt76 doc, at least.
> Lorenzo Bianconi <lorenzo@kernel.org> writes: > > > mt76x0e users reported some devices (e.g TP-Link Archer VR200v) have > > been flashed with big endian radio partition. Add the possibility to > > specify eeprom endianness using big-endian dts property and in case > > covert eeprom data in little endian > > > > Tested-by: Kevin Schmidt <kevin.patrick.schmidt@googlemail.com> > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > > --- > > drivers/net/wireless/mediatek/mt76/eeprom.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/drivers/net/wireless/mediatek/mt76/eeprom.c b/drivers/net/wireless/mediatek/mt76/eeprom.c > > index 804224e81103..33d992d5662a 100644 > > --- a/drivers/net/wireless/mediatek/mt76/eeprom.c > > +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c > > @@ -64,6 +64,16 @@ mt76_get_of_eeprom(struct mt76_dev *dev, int len) > > goto out_put_node; > > } > > > > + if (of_property_read_bool(dev->dev->of_node, "big-endian")) { > > + u8 *data = (u8 *)dev->eeprom.data; > > + int i; > > + > > + /* convert eeprom data in Little Endian */ > > + for (i = 0; i < round_down(len, 2); i += 2) > > + put_unaligned_le16(get_unaligned_be16(&data[i]), > > + &data[i]); > > + } > > What about the bindings documentation? I don't see this "big-endian" > documented in the mt76 doc, at least. Right, I will fold a patch for it in v2. Regards, Lorenzo > > -- > https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Lorenzo Bianconi <lorenzo@kernel.org> writes: >> Lorenzo Bianconi <lorenzo@kernel.org> writes: >> >> > mt76x0e users reported some devices (e.g TP-Link Archer VR200v) have >> > been flashed with big endian radio partition. Add the possibility to >> > specify eeprom endianness using big-endian dts property and in case >> > covert eeprom data in little endian >> > >> > Tested-by: Kevin Schmidt <kevin.patrick.schmidt@googlemail.com> >> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> >> > --- >> > drivers/net/wireless/mediatek/mt76/eeprom.c | 10 ++++++++++ >> > 1 file changed, 10 insertions(+) >> > >> > diff --git a/drivers/net/wireless/mediatek/mt76/eeprom.c b/drivers/net/wireless/mediatek/mt76/eeprom.c >> > index 804224e81103..33d992d5662a 100644 >> > --- a/drivers/net/wireless/mediatek/mt76/eeprom.c >> > +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c >> > @@ -64,6 +64,16 @@ mt76_get_of_eeprom(struct mt76_dev *dev, int len) >> > goto out_put_node; >> > } >> > >> > + if (of_property_read_bool(dev->dev->of_node, "big-endian")) { >> > + u8 *data = (u8 *)dev->eeprom.data; >> > + int i; >> > + >> > + /* convert eeprom data in Little Endian */ >> > + for (i = 0; i < round_down(len, 2); i += 2) >> > + put_unaligned_le16(get_unaligned_be16(&data[i]), >> > + &data[i]); >> > + } >> >> What about the bindings documentation? I don't see this "big-endian" >> documented in the mt76 doc, at least. > > Right, I will fold a patch for it in v2. And remember to CC the devicetree list, we need an ack from them.
diff --git a/drivers/net/wireless/mediatek/mt76/eeprom.c b/drivers/net/wireless/mediatek/mt76/eeprom.c index 804224e81103..33d992d5662a 100644 --- a/drivers/net/wireless/mediatek/mt76/eeprom.c +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c @@ -64,6 +64,16 @@ mt76_get_of_eeprom(struct mt76_dev *dev, int len) goto out_put_node; } + if (of_property_read_bool(dev->dev->of_node, "big-endian")) { + u8 *data = (u8 *)dev->eeprom.data; + int i; + + /* convert eeprom data in Little Endian */ + for (i = 0; i < round_down(len, 2); i += 2) + put_unaligned_le16(get_unaligned_be16(&data[i]), + &data[i]); + } + out_put_node: of_node_put(np); return ret;