All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Blumenstingl <martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
To: Marcel Holtmann <marcel-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
Cc: Carlo Caione <carlo-6IF/jdPJHihWk0Htik3J/w@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	devicetree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"open list:BLUETOOTH DRIVERS"
	<linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	linux-serial-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	"Gustavo F. Padovan"
	<gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org>,
	Johan Hedberg
	<johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Greg Kroah-Hartman
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	Jiri Slaby <jslaby-IBi9RG/b67k@public.gmane.org>,
	Johan Hovold <johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Larry Finger
	<Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org>,
	Daniel Drake <drake-6IF/jdPJHihWk0Htik3J/w@public.gmane.org>
Subject: Re: [RFC v2 7/9] bluetooth: btrtl: load the config blob from devicetree when available
Date: Sun, 7 Jan 2018 21:07:33 +0100	[thread overview]
Message-ID: <CAFBinCBasb-WkLngxL2RAk9YMihC437ZgPKSkOd7Fm0RHG_aTw@mail.gmail.com> (raw)
In-Reply-To: <41669609-3E28-473D-8616-71B9D0EEDCDF-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>

Hi Marcel,

thank you for digging into this!

On Fri, Jan 5, 2018 at 9:44 PM, Marcel Holtmann <marcel-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org> wrote:
> Hi Carlo,
>
>>>>>> As Marcel suggested we can assume that the information in the DSDT is
>>>>>> correct so that we can get rid of the config blob also for x86
>>>>>> platforms (assuming that the only useful information in the config
>>>>>> blobs is the UART configuration).
>>>>> in my tests I tried to send only the firmware without the config to my
>>>>> RTL8723BS. unfortunately the last firmware chunk (sent to the
>>>>> controller) times out in that case (even if I set a proper baudrate
>>>>> before or if I specify no baudrate at all and keep the serdev at
>>>>> 115200)
>>>>
>>>> What's in the config blobs besides UART configuration?
>>>
>>> is anybody writing a rtlfw.c tool (like nokfw.c) so that we can print out what we actually have in these config files?
>>>
>>>> It's odd because reading into hciattach_rtk.c it seems that the config
>>>> file is actually only used by the userspace tools (hciattach) to
>>>> retrieve the UART configuration and nothing else, whereas in the
>>>> kernel driver the config blob is appended to the firmware.
>>>
>>> Frankly, I am inclined to not use the config file even for DT based system and just allow specifying the UART settings via normal DT properties like we do for Broadcom and others.
>>
>> so I googled for a few config files and this is what this turns into:
>>
>> Analyzing rtl8723d_config_1000000_noflow.dms
>> Signature:   0x8723ab55
>> Data length: 41
>> len=1   offset=f4,{ 01 }
>> len=2   offset=f6,{ 81 00 }
>> len=2   offset=fa,{ 12 80 }
>> len=16  offset=0c,{ 04 50 00 00 50 c5 ea 19 e1 1b fd af 5b 01 a4 0b }
>> len=1   offset=d9,{ 0f }
>> len=1   offset=e4,{ 08 }
>> Analyzing rtl8723d_config.dms
>> Signature:   0x8723ab55
>> Data length: 41
>> len=1   offset=f4,{ 01 }
>> len=2   offset=f6,{ 81 00 }
>> len=2   offset=fa,{ 12 80 }
>> len=16  offset=0c,{ 02 80 92 04 50 c5 ea 19 e1 1b fd af 5f 01 a4 0b }
>> len=1   offset=d9,{ 0f }
>> len=1   offset=e4,{ 08 }
>> Analyzing rtl8822b_config.bin
>> Signature:   0x8723ab55
>> Data length: 8
>> len=1   offset=d9,{ 0f }
>> len=1   offset=e4,{ 08 }
>>
>> The first two are some UART based ones and the last one is USB based.
>>
>> So the 0x3c offset seems to be the BD_ADDR and 0x0c offset is the UART configuration. It would be good to know which settings the other ones control.
this matches my findings from the hciattach_rtk tool for rtl8723bs_bt
and rtl8723ds_bt

>> Also the 16 octet UART config blob seems to be decoded like this:
>>
>>       uart_config {
>>               le32 baudrate;
>>               u8[8] reserved1;
>>               u8 flowctl;
>>               u8[3] reserved2;
>>       }
>>
I could not find this in any of the rtl8723bs_bt or rtl8723ds_bt sources
so thank you for sharing this (even though this descriptin is missing
a few bytes)!

>> Actually hciattach_rtk just takes the baud rate and and hardware flow control bit out of this file. That is clearly two things that are better written in plain text in the DT file.
this matches my findings apart from that hciattach_rtk also appends
the config blob to the "firmware patch" that is being uploaded to the
device
if you are brave you can have a look at [0]

> so this is actually some funny stuff if you start to understand it.
>
> Analyzing rtl8723b_config.dms
> Signature: 0x8723ab55
> Data len:  38
> len=8   offset=00f4,{ 01 00 00 00 05 50 00 00 }
> len=16  offset=000c,{ 02 80 92 04 50 c5 ea 19 e1 1b f1 af 5f 01 a4 0b },UART_CONFIG
> len=1   offset=0027,{ 63 }
> len=1   offset=00fe,{ 01 }
> Analyzing rtl8723d_config_1000000_noflow.dms
> Signature: 0x8723ab55
> Data len:  41
> len=1   offset=00f4,{ 01 }
> len=2   offset=00f6,{ 81 00 }
> len=2   offset=00fa,{ 12 80 }
> len=16  offset=000c,{ 04 50 00 00 50 c5 ea 19 e1 1b fd af 5b 01 a4 0b },UART_CONFIG
> len=1   offset=00d9,{ 0f }
> len=1   offset=00e4,{ 08 }
>
> Seems like Realtek really defines memory offsets in this file and they can be defined in various different ways.
wow, that is interesting - I was wondering why they called it "offset"
instead of "config_id" (or something similar)

> So 00f4,{ 01 00 00 00 05 50 00 00 } defines the whole PCM settings for interface 1 and 2. And 00f4,{ 01 } + 00f6,{ 81 00 } + 00fa,{ 12 80 } is the same PCM settings, but with only pieces of it defined.
>
> This also means a 000c,{ 04 50 00 00 50 } for just setting the baud rate is as valid if flow control defaults to off and all other values are actual defaults. So code inside hciattach_rtk.c is also kind faulty on how it handles the flow control bit. It works if the config files all have offset 000c in it, but if not, then they are going funky.
>
> Since these are efuse settings, I really wonder if there is just a HCI vendor command to read out the defaults and we use that to compare. And what I would really like to know is what these settings are suppose to change. Since even for USB, we are actually not even applying them.
the idea with the vendor command to read out existing memory is interesting

based on the code in "btrtl.c" it seems that we are applying the
settings from the config blob.
we are simply appending it at the end of the "firmware patch", see [1]

> Anyway, I am certain that for Realtek UART devices, we just want to specify max-speed DT property like we do with the others. And then maybe a flow-control DT property to control that one (following what nfcmrvl.txt does). We can use the rtlfw tool that I wrote to extract the values from Realtek provided config files. Frankly the PCM settings we have to deal with as well at some point. But that is also missing for Broadcom and others.
just to make sure I understand you correctly: would you generate the
config blob in-memory (in a function in btrtl.c) and hardcode all
unknown bits (the reserved bits in the UART config entry for example)
or would you mandate that a config blob is present (so
request_firmware can fetch it) for "high-speed" operation?

for PCM: I cannot test that anyways since the Amlogic platform does
not have audio support yet

> Also if there is no config file, we should be able to just assume no flow control, 115200 baud rate and H:5 as protocol. That means that almost all chips will just work. They are just slow since we do not deal with the max-speed setting.
my problem so far was that uploading the firmware patch without
appending a config blob (see [1]) broke the UART communication (it was
not 115200 baud as before, and I also tried other speeds such as
1500000 and 1000000 baud - neither worked)
however, extracting the existing values from the efuse using a vendor
command might give a hint why (maybe they are fallling back to some
exotic baudrate in that case, etc...)

> At the end of the day, this is the same as for Broadcom and ACPI vs DT. This should be no different. The only bit nasty part is that this is H:5 as protocol and we have not really abstracted that one nicely to just have a tiny hci_rtl.c for vendor specific pieces.
yes, you already suggested that I should start making that re-usable
(this is still on my TODO-list)


Regards
Martin


[0] https://github.com/NextThingCo/rtl8723ds_bt/blob/master/rtk_hciattach/hciattach_rtk.c#L2742
[1] https://elixir.free-electrons.com/linux/v4.14.11/source/drivers/bluetooth/btrtl.c#L377

WARNING: multiple messages have this Message-ID (diff)
From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: Carlo Caione <carlo@endlessm.com>,
	Rob Herring <robh+dt@kernel.org>,
	devicetree <devicetree@vger.kernel.org>,
	"open list:BLUETOOTH DRIVERS" <linux-bluetooth@vger.kernel.org>,
	linux-serial@vger.kernel.org, Mark Rutland <mark.rutland@arm.com>,
	"Gustavo F. Padovan" <gustavo@padovan.org>,
	Johan Hedberg <johan.hedberg@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jslaby@suse.com>, Johan Hovold <johan@kernel.org>,
	linux-amlogic@lists.infradead.org,
	Larry Finger <Larry.Finger@lwfinger.net>,
	Daniel Drake <drake@endlessm.com>
Subject: Re: [RFC v2 7/9] bluetooth: btrtl: load the config blob from devicetree when available
Date: Sun, 7 Jan 2018 21:07:33 +0100	[thread overview]
Message-ID: <CAFBinCBasb-WkLngxL2RAk9YMihC437ZgPKSkOd7Fm0RHG_aTw@mail.gmail.com> (raw)
In-Reply-To: <41669609-3E28-473D-8616-71B9D0EEDCDF@holtmann.org>

Hi Marcel,

thank you for digging into this!

On Fri, Jan 5, 2018 at 9:44 PM, Marcel Holtmann <marcel@holtmann.org> wrote=
:
> Hi Carlo,
>
>>>>>> As Marcel suggested we can assume that the information in the DSDT i=
s
>>>>>> correct so that we can get rid of the config blob also for x86
>>>>>> platforms (assuming that the only useful information in the config
>>>>>> blobs is the UART configuration).
>>>>> in my tests I tried to send only the firmware without the config to m=
y
>>>>> RTL8723BS. unfortunately the last firmware chunk (sent to the
>>>>> controller) times out in that case (even if I set a proper baudrate
>>>>> before or if I specify no baudrate at all and keep the serdev at
>>>>> 115200)
>>>>
>>>> What's in the config blobs besides UART configuration?
>>>
>>> is anybody writing a rtlfw.c tool (like nokfw.c) so that we can print o=
ut what we actually have in these config files?
>>>
>>>> It's odd because reading into hciattach_rtk.c it seems that the config
>>>> file is actually only used by the userspace tools (hciattach) to
>>>> retrieve the UART configuration and nothing else, whereas in the
>>>> kernel driver the config blob is appended to the firmware.
>>>
>>> Frankly, I am inclined to not use the config file even for DT based sys=
tem and just allow specifying the UART settings via normal DT properties li=
ke we do for Broadcom and others.
>>
>> so I googled for a few config files and this is what this turns into:
>>
>> Analyzing rtl8723d_config_1000000_noflow.dms
>> Signature:   0x8723ab55
>> Data length: 41
>> len=3D1   offset=3Df4,{ 01 }
>> len=3D2   offset=3Df6,{ 81 00 }
>> len=3D2   offset=3Dfa,{ 12 80 }
>> len=3D16  offset=3D0c,{ 04 50 00 00 50 c5 ea 19 e1 1b fd af 5b 01 a4 0b =
}
>> len=3D1   offset=3Dd9,{ 0f }
>> len=3D1   offset=3De4,{ 08 }
>> Analyzing rtl8723d_config.dms
>> Signature:   0x8723ab55
>> Data length: 41
>> len=3D1   offset=3Df4,{ 01 }
>> len=3D2   offset=3Df6,{ 81 00 }
>> len=3D2   offset=3Dfa,{ 12 80 }
>> len=3D16  offset=3D0c,{ 02 80 92 04 50 c5 ea 19 e1 1b fd af 5f 01 a4 0b =
}
>> len=3D1   offset=3Dd9,{ 0f }
>> len=3D1   offset=3De4,{ 08 }
>> Analyzing rtl8822b_config.bin
>> Signature:   0x8723ab55
>> Data length: 8
>> len=3D1   offset=3Dd9,{ 0f }
>> len=3D1   offset=3De4,{ 08 }
>>
>> The first two are some UART based ones and the last one is USB based.
>>
>> So the 0x3c offset seems to be the BD_ADDR and 0x0c offset is the UART c=
onfiguration. It would be good to know which settings the other ones contro=
l.
this matches my findings from the hciattach_rtk tool for rtl8723bs_bt
and rtl8723ds_bt

>> Also the 16 octet UART config blob seems to be decoded like this:
>>
>>       uart_config {
>>               le32 baudrate;
>>               u8[8] reserved1;
>>               u8 flowctl;
>>               u8[3] reserved2;
>>       }
>>
I could not find this in any of the rtl8723bs_bt or rtl8723ds_bt sources
so thank you for sharing this (even though this descriptin is missing
a few bytes)!

>> Actually hciattach_rtk just takes the baud rate and and hardware flow co=
ntrol bit out of this file. That is clearly two things that are better writ=
ten in plain text in the DT file.
this matches my findings apart from that hciattach_rtk also appends
the config blob to the "firmware patch" that is being uploaded to the
device
if you are brave you can have a look at [0]

> so this is actually some funny stuff if you start to understand it.
>
> Analyzing rtl8723b_config.dms
> Signature: 0x8723ab55
> Data len:  38
> len=3D8   offset=3D00f4,{ 01 00 00 00 05 50 00 00 }
> len=3D16  offset=3D000c,{ 02 80 92 04 50 c5 ea 19 e1 1b f1 af 5f 01 a4 0b=
 },UART_CONFIG
> len=3D1   offset=3D0027,{ 63 }
> len=3D1   offset=3D00fe,{ 01 }
> Analyzing rtl8723d_config_1000000_noflow.dms
> Signature: 0x8723ab55
> Data len:  41
> len=3D1   offset=3D00f4,{ 01 }
> len=3D2   offset=3D00f6,{ 81 00 }
> len=3D2   offset=3D00fa,{ 12 80 }
> len=3D16  offset=3D000c,{ 04 50 00 00 50 c5 ea 19 e1 1b fd af 5b 01 a4 0b=
 },UART_CONFIG
> len=3D1   offset=3D00d9,{ 0f }
> len=3D1   offset=3D00e4,{ 08 }
>
> Seems like Realtek really defines memory offsets in this file and they ca=
n be defined in various different ways.
wow, that is interesting - I was wondering why they called it "offset"
instead of "config_id" (or something similar)

> So 00f4,{ 01 00 00 00 05 50 00 00 } defines the whole PCM settings for in=
terface 1 and 2. And 00f4,{ 01 } + 00f6,{ 81 00 } + 00fa,{ 12 80 } is the s=
ame PCM settings, but with only pieces of it defined.
>
> This also means a 000c,{ 04 50 00 00 50 } for just setting the baud rate =
is as valid if flow control defaults to off and all other values are actual=
 defaults. So code inside hciattach_rtk.c is also kind faulty on how it han=
dles the flow control bit. It works if the config files all have offset 000=
c in it, but if not, then they are going funky.
>
> Since these are efuse settings, I really wonder if there is just a HCI ve=
ndor command to read out the defaults and we use that to compare. And what =
I would really like to know is what these settings are suppose to change. S=
ince even for USB, we are actually not even applying them.
the idea with the vendor command to read out existing memory is interesting

based on the code in "btrtl.c" it seems that we are applying the
settings from the config blob.
we are simply appending it at the end of the "firmware patch", see [1]

> Anyway, I am certain that for Realtek UART devices, we just want to speci=
fy max-speed DT property like we do with the others. And then maybe a flow-=
control DT property to control that one (following what nfcmrvl.txt does). =
We can use the rtlfw tool that I wrote to extract the values from Realtek p=
rovided config files. Frankly the PCM settings we have to deal with as well=
 at some point. But that is also missing for Broadcom and others.
just to make sure I understand you correctly: would you generate the
config blob in-memory (in a function in btrtl.c) and hardcode all
unknown bits (the reserved bits in the UART config entry for example)
or would you mandate that a config blob is present (so
request_firmware can fetch it) for "high-speed" operation?

for PCM: I cannot test that anyways since the Amlogic platform does
not have audio support yet

> Also if there is no config file, we should be able to just assume no flow=
 control, 115200 baud rate and H:5 as protocol. That means that almost all =
chips will just work. They are just slow since we do not deal with the max-=
speed setting.
my problem so far was that uploading the firmware patch without
appending a config blob (see [1]) broke the UART communication (it was
not 115200 baud as before, and I also tried other speeds such as
1500000 and 1000000 baud - neither worked)
however, extracting the existing values from the efuse using a vendor
command might give a hint why (maybe they are fallling back to some
exotic baudrate in that case, etc...)

> At the end of the day, this is the same as for Broadcom and ACPI vs DT. T=
his should be no different. The only bit nasty part is that this is H:5 as =
protocol and we have not really abstracted that one nicely to just have a t=
iny hci_rtl.c for vendor specific pieces.
yes, you already suggested that I should start making that re-usable
(this is still on my TODO-list)


Regards
Martin


[0] https://github.com/NextThingCo/rtl8723ds_bt/blob/master/rtk_hciattach/h=
ciattach_rtk.c#L2742
[1] https://elixir.free-electrons.com/linux/v4.14.11/source/drivers/bluetoo=
th/btrtl.c#L377

WARNING: multiple messages have this Message-ID (diff)
From: martin.blumenstingl@googlemail.com (Martin Blumenstingl)
To: linus-amlogic@lists.infradead.org
Subject: [RFC v2 7/9] bluetooth: btrtl: load the config blob from devicetree when available
Date: Sun, 7 Jan 2018 21:07:33 +0100	[thread overview]
Message-ID: <CAFBinCBasb-WkLngxL2RAk9YMihC437ZgPKSkOd7Fm0RHG_aTw@mail.gmail.com> (raw)
In-Reply-To: <41669609-3E28-473D-8616-71B9D0EEDCDF@holtmann.org>

Hi Marcel,

thank you for digging into this!

On Fri, Jan 5, 2018 at 9:44 PM, Marcel Holtmann <marcel@holtmann.org> wrote:
> Hi Carlo,
>
>>>>>> As Marcel suggested we can assume that the information in the DSDT is
>>>>>> correct so that we can get rid of the config blob also for x86
>>>>>> platforms (assuming that the only useful information in the config
>>>>>> blobs is the UART configuration).
>>>>> in my tests I tried to send only the firmware without the config to my
>>>>> RTL8723BS. unfortunately the last firmware chunk (sent to the
>>>>> controller) times out in that case (even if I set a proper baudrate
>>>>> before or if I specify no baudrate at all and keep the serdev at
>>>>> 115200)
>>>>
>>>> What's in the config blobs besides UART configuration?
>>>
>>> is anybody writing a rtlfw.c tool (like nokfw.c) so that we can print out what we actually have in these config files?
>>>
>>>> It's odd because reading into hciattach_rtk.c it seems that the config
>>>> file is actually only used by the userspace tools (hciattach) to
>>>> retrieve the UART configuration and nothing else, whereas in the
>>>> kernel driver the config blob is appended to the firmware.
>>>
>>> Frankly, I am inclined to not use the config file even for DT based system and just allow specifying the UART settings via normal DT properties like we do for Broadcom and others.
>>
>> so I googled for a few config files and this is what this turns into:
>>
>> Analyzing rtl8723d_config_1000000_noflow.dms
>> Signature:   0x8723ab55
>> Data length: 41
>> len=1   offset=f4,{ 01 }
>> len=2   offset=f6,{ 81 00 }
>> len=2   offset=fa,{ 12 80 }
>> len=16  offset=0c,{ 04 50 00 00 50 c5 ea 19 e1 1b fd af 5b 01 a4 0b }
>> len=1   offset=d9,{ 0f }
>> len=1   offset=e4,{ 08 }
>> Analyzing rtl8723d_config.dms
>> Signature:   0x8723ab55
>> Data length: 41
>> len=1   offset=f4,{ 01 }
>> len=2   offset=f6,{ 81 00 }
>> len=2   offset=fa,{ 12 80 }
>> len=16  offset=0c,{ 02 80 92 04 50 c5 ea 19 e1 1b fd af 5f 01 a4 0b }
>> len=1   offset=d9,{ 0f }
>> len=1   offset=e4,{ 08 }
>> Analyzing rtl8822b_config.bin
>> Signature:   0x8723ab55
>> Data length: 8
>> len=1   offset=d9,{ 0f }
>> len=1   offset=e4,{ 08 }
>>
>> The first two are some UART based ones and the last one is USB based.
>>
>> So the 0x3c offset seems to be the BD_ADDR and 0x0c offset is the UART configuration. It would be good to know which settings the other ones control.
this matches my findings from the hciattach_rtk tool for rtl8723bs_bt
and rtl8723ds_bt

>> Also the 16 octet UART config blob seems to be decoded like this:
>>
>>       uart_config {
>>               le32 baudrate;
>>               u8[8] reserved1;
>>               u8 flowctl;
>>               u8[3] reserved2;
>>       }
>>
I could not find this in any of the rtl8723bs_bt or rtl8723ds_bt sources
so thank you for sharing this (even though this descriptin is missing
a few bytes)!

>> Actually hciattach_rtk just takes the baud rate and and hardware flow control bit out of this file. That is clearly two things that are better written in plain text in the DT file.
this matches my findings apart from that hciattach_rtk also appends
the config blob to the "firmware patch" that is being uploaded to the
device
if you are brave you can have a look at [0]

> so this is actually some funny stuff if you start to understand it.
>
> Analyzing rtl8723b_config.dms
> Signature: 0x8723ab55
> Data len:  38
> len=8   offset=00f4,{ 01 00 00 00 05 50 00 00 }
> len=16  offset=000c,{ 02 80 92 04 50 c5 ea 19 e1 1b f1 af 5f 01 a4 0b },UART_CONFIG
> len=1   offset=0027,{ 63 }
> len=1   offset=00fe,{ 01 }
> Analyzing rtl8723d_config_1000000_noflow.dms
> Signature: 0x8723ab55
> Data len:  41
> len=1   offset=00f4,{ 01 }
> len=2   offset=00f6,{ 81 00 }
> len=2   offset=00fa,{ 12 80 }
> len=16  offset=000c,{ 04 50 00 00 50 c5 ea 19 e1 1b fd af 5b 01 a4 0b },UART_CONFIG
> len=1   offset=00d9,{ 0f }
> len=1   offset=00e4,{ 08 }
>
> Seems like Realtek really defines memory offsets in this file and they can be defined in various different ways.
wow, that is interesting - I was wondering why they called it "offset"
instead of "config_id" (or something similar)

> So 00f4,{ 01 00 00 00 05 50 00 00 } defines the whole PCM settings for interface 1 and 2. And 00f4,{ 01 } + 00f6,{ 81 00 } + 00fa,{ 12 80 } is the same PCM settings, but with only pieces of it defined.
>
> This also means a 000c,{ 04 50 00 00 50 } for just setting the baud rate is as valid if flow control defaults to off and all other values are actual defaults. So code inside hciattach_rtk.c is also kind faulty on how it handles the flow control bit. It works if the config files all have offset 000c in it, but if not, then they are going funky.
>
> Since these are efuse settings, I really wonder if there is just a HCI vendor command to read out the defaults and we use that to compare. And what I would really like to know is what these settings are suppose to change. Since even for USB, we are actually not even applying them.
the idea with the vendor command to read out existing memory is interesting

based on the code in "btrtl.c" it seems that we are applying the
settings from the config blob.
we are simply appending it at the end of the "firmware patch", see [1]

> Anyway, I am certain that for Realtek UART devices, we just want to specify max-speed DT property like we do with the others. And then maybe a flow-control DT property to control that one (following what nfcmrvl.txt does). We can use the rtlfw tool that I wrote to extract the values from Realtek provided config files. Frankly the PCM settings we have to deal with as well at some point. But that is also missing for Broadcom and others.
just to make sure I understand you correctly: would you generate the
config blob in-memory (in a function in btrtl.c) and hardcode all
unknown bits (the reserved bits in the UART config entry for example)
or would you mandate that a config blob is present (so
request_firmware can fetch it) for "high-speed" operation?

for PCM: I cannot test that anyways since the Amlogic platform does
not have audio support yet

> Also if there is no config file, we should be able to just assume no flow control, 115200 baud rate and H:5 as protocol. That means that almost all chips will just work. They are just slow since we do not deal with the max-speed setting.
my problem so far was that uploading the firmware patch without
appending a config blob (see [1]) broke the UART communication (it was
not 115200 baud as before, and I also tried other speeds such as
1500000 and 1000000 baud - neither worked)
however, extracting the existing values from the efuse using a vendor
command might give a hint why (maybe they are fallling back to some
exotic baudrate in that case, etc...)

> At the end of the day, this is the same as for Broadcom and ACPI vs DT. This should be no different. The only bit nasty part is that this is H:5 as protocol and we have not really abstracted that one nicely to just have a tiny hci_rtl.c for vendor specific pieces.
yes, you already suggested that I should start making that re-usable
(this is still on my TODO-list)


Regards
Martin


[0] https://github.com/NextThingCo/rtl8723ds_bt/blob/master/rtk_hciattach/hciattach_rtk.c#L2742
[1] https://elixir.free-electrons.com/linux/v4.14.11/source/drivers/bluetooth/btrtl.c#L377

  parent reply	other threads:[~2018-01-07 20:07 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-01 20:42 [RFC v2 0/9] Realtek Bluetooth serdev support (H5 protocol) Martin Blumenstingl
2018-01-01 20:42 ` Martin Blumenstingl
2018-01-01 20:42 ` Martin Blumenstingl
     [not found] ` <20180101204217.26165-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-01 20:42   ` [RFC v2 1/9] serdev: implement parity configuration Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-2-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:16       ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
     [not found]         ` <4FDCB65A-641A-4134-BAF1-4A777012FDE7-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:16           ` Martin Blumenstingl
2018-01-02 21:16             ` Martin Blumenstingl
2018-01-02 21:16             ` Martin Blumenstingl
     [not found]             ` <CAFBinCCq9mYBhzoL1XBVQNGxALg8oK5GB7Md9HJf_mchEMu3-A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 21:34               ` Martin Blumenstingl
2018-01-02 21:34                 ` Martin Blumenstingl
2018-01-02 21:34                 ` Martin Blumenstingl
     [not found]                 ` <CAFBinCD=iuE+ho22kihCFG=AJV5t+JtjRww8PLuq-cAJ2RkAHQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03  9:06                   ` Johan Hovold
2018-01-03  9:06                     ` Johan Hovold
2018-01-03  9:06                     ` Johan Hovold
2018-01-03 12:37                   ` Marcel Holtmann
2018-01-03 12:37                     ` Marcel Holtmann
2018-01-03 12:37                     ` Marcel Holtmann
2018-01-01 20:42   ` [RFC v2 2/9] dt-bindings: net: bluetooth: add support for Realtek Bluetooth chips Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-3-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:16       ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
     [not found]         ` <2A1D60F1-F86F-4A2B-A43A-F3419506DE99-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:10           ` Martin Blumenstingl
2018-01-02 21:10             ` Martin Blumenstingl
2018-01-02 21:10             ` Martin Blumenstingl
     [not found]             ` <CAFBinCBNro18Ak3h1fHFpAioDzimh5KcUeOE8PjQr_CCkAs7PA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 19:07               ` Rob Herring
2018-01-03 19:07                 ` Rob Herring
2018-01-03 19:07                 ` Rob Herring
2018-01-01 20:42   ` [RFC v2 3/9] Bluetooth: btrtl: add MODULE_FIRMWARE declarations Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 4/9] Bluetooth: btrtl: split the device initialization into smaller parts Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 5/9] Bluetooth: btrtl: add support for retrieving the UART settings Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 6/9] Bluetooth: btrtl: add support for the RTL8723BS and RTL8723DS chips Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 7/9] bluetooth: btrtl: load the config blob from devicetree when available Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-8-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:11       ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
     [not found]         ` <563D6F9F-8495-40D4-BE56-5338ED2B9B99-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 11:15           ` Carlo Caione
2018-01-02 11:15             ` Carlo Caione
2018-01-02 11:15             ` Carlo Caione
     [not found]             ` <CAL9uMOEMDup4hRkxD-tM8R0YirGs5uQi31AjJUnFCPNMKUdRHg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:19               ` Marcel Holtmann
2018-01-02 11:19                 ` Marcel Holtmann
2018-01-02 11:19                 ` Marcel Holtmann
     [not found]                 ` <E8E39477-CF1A-4A3E-84C5-830E182C2266-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 11:31                   ` Carlo Caione
2018-01-02 11:31                     ` Carlo Caione
2018-01-02 11:31                     ` Carlo Caione
     [not found]                     ` <CAL9uMOH0N-4jgQncmPjK-KyU0vY9Q0ZnHYSAGgz3z3ywzc8Avw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:38                       ` Marcel Holtmann
2018-01-02 11:38                         ` Marcel Holtmann
2018-01-02 11:38                         ` Marcel Holtmann
     [not found]                         ` <F38429FB-2D20-4EF7-8547-E5A5D67D1618-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:43                           ` Martin Blumenstingl
2018-01-02 21:43                             ` Martin Blumenstingl
2018-01-02 21:43                             ` Martin Blumenstingl
2018-01-02 21:46                       ` Martin Blumenstingl
2018-01-02 21:46                         ` Martin Blumenstingl
2018-01-02 21:46                         ` Martin Blumenstingl
     [not found]                         ` <CAFBinCBB=SmviOMRHGDH6vzjTjV-mrtQEc8nBUhDbJGs9SBpgw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 23:06                           ` Carlo Caione
2018-01-02 23:06                             ` Carlo Caione
2018-01-02 23:06                             ` Carlo Caione
     [not found]                             ` <CAL9uMOFyfr_qGf5BeTojkMeWeH8LqPoKj=LrdgEMB2wmhGBxmA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:50                               ` Martin Blumenstingl
2018-01-03 20:50                                 ` Martin Blumenstingl
2018-01-03 20:50                                 ` Martin Blumenstingl
     [not found]                                 ` <CAFBinCAFsDRpp=4We1hQPiutM1Q0MrqebPLyS3e2_e+JcBoSmg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-04  9:46                                   ` Carlo Caione
2018-01-04  9:46                                     ` Carlo Caione
2018-01-04  9:46                                     ` Carlo Caione
     [not found]                                     ` <CAL9uMOGkZefjD_JNxjf4yJ0ATFtOG5Cm_XQq1fy0VQDjiMFBmg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-05 14:57                                       ` Marcel Holtmann
2018-01-05 14:57                                         ` Marcel Holtmann
2018-01-05 14:57                                         ` Marcel Holtmann
     [not found]                                         ` <EC216531-81EC-4EE8-BAC4-C6954C222092-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-05 16:15                                           ` Marcel Holtmann
2018-01-05 16:15                                             ` Marcel Holtmann
2018-01-05 16:15                                             ` Marcel Holtmann
     [not found]                                             ` <1F394D8B-CFB8-48BA-BC6B-15D1EE51DB08-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-05 20:44                                               ` Marcel Holtmann
2018-01-05 20:44                                                 ` Marcel Holtmann
2018-01-05 20:44                                                 ` Marcel Holtmann
     [not found]                                                 ` <41669609-3E28-473D-8616-71B9D0EEDCDF-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-07 20:07                                                   ` Martin Blumenstingl [this message]
2018-01-07 20:07                                                     ` Martin Blumenstingl
2018-01-07 20:07                                                     ` Martin Blumenstingl
     [not found]                                                     ` <CAFBinCBasb-WkLngxL2RAk9YMihC437ZgPKSkOd7Fm0RHG_aTw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-09 15:26                                                       ` Marcel Holtmann
2018-01-09 15:26                                                         ` Marcel Holtmann
2018-01-09 15:26                                                         ` Marcel Holtmann
2018-01-01 20:42   ` [RFC v2 8/9] Bluetooth: drop HCI_UART_INIT_PENDING support Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-9-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:04       ` Marcel Holtmann
2018-01-02 11:04         ` Marcel Holtmann
2018-01-02 11:04         ` Marcel Holtmann
     [not found]         ` <5F8922BB-5A97-43B1-88D5-591EB76FF787-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:06           ` Martin Blumenstingl
2018-01-02 21:06             ` Martin Blumenstingl
2018-01-02 21:06             ` Martin Blumenstingl
     [not found]             ` <CAFBinCAxUmxivp_PWkoydha84LbJi-GGv6Uhs6cKR+D_8c8QCw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 17:14               ` Loic Poulain
2018-01-03 17:14                 ` Loic Poulain
2018-01-03 17:14                 ` Loic Poulain
     [not found]                 ` <CAMZdPi9KkPZvuvrNgfGmRksJnR0cFti8P5XC-HTFeUfkFbCZ_g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:30                   ` Martin Blumenstingl
2018-01-03 20:30                     ` Martin Blumenstingl
2018-01-03 20:30                     ` Martin Blumenstingl
2018-01-03 18:38       ` Rob Herring
2018-01-03 18:38         ` Rob Herring
2018-01-03 18:38         ` Rob Herring
     [not found]         ` <CAL_JsqLB9aem0TXZyUvFpsfXP4p++oukPmQzGEYxkVwZt+bdvw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:38           ` Martin Blumenstingl
2018-01-03 20:38             ` Martin Blumenstingl
2018-01-03 20:38             ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 9/9] Bluetooth: hci_h5: add support for Realtek UART Bluetooth modules Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-10-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:11       ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
     [not found]         ` <A32FB2B7-C20D-4E65-A353-1F7B89D9C702-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:27           ` Martin Blumenstingl
2018-01-02 21:27             ` Martin Blumenstingl
2018-01-02 21:27             ` Martin Blumenstingl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAFBinCBasb-WkLngxL2RAk9YMihC437ZgPKSkOd7Fm0RHG_aTw@mail.gmail.com \
    --to=martin.blumenstingl-gm/ye1e23mwn+bqq9rbeug@public.gmane.org \
    --cc=Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org \
    --cc=carlo-6IF/jdPJHihWk0Htik3J/w@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=drake-6IF/jdPJHihWk0Htik3J/w@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org \
    --cc=johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=jslaby-IBi9RG/b67k@public.gmane.org \
    --cc=linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-serial-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=marcel-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.