From: Peter Hurley <peter@hurleysoftware.com>
To: Grant Likely <grant.likely@linaro.org>
Cc: Kevin Cernekee <cernekee@gmail.com>,
gregkh@linuxfoundation.org, jslaby@suse.cz, robh@kernel.org,
arnd@arndb.de, f.fainelli@gmail.com,
linux-serial@vger.kernel.org, devicetree@vger.kernel.org,
linux-mips@linux-mips.org
Subject: Re: [PATCH V3 5/7] serial: earlycon: Set UPIO_MEM32BE based on DT properties
Date: Thu, 02 Apr 2015 11:33:02 -0400 [thread overview]
Message-ID: <551D612E.4000808@hurleysoftware.com> (raw)
In-Reply-To: <20150402133250.740C1C408D6@trevor.secretlab.ca>
On 04/02/2015 09:32 AM, Grant Likely wrote:
> On Sat, 28 Mar 2015 13:01:24 -0400
> , Peter Hurley <peter@hurleysoftware.com>
> wrote:
>> Hi Grant,
>>
>> On 03/27/2015 09:36 PM, Grant Likely wrote:
>>> On Sun, 01 Mar 2015 17:23:11 -0500
>>> , Peter Hurley <peter@hurleysoftware.com>
>>> wrote:
>>>> Hi Kevin,
>>>>
>>>> On 11/24/2014 06:36 PM, Kevin Cernekee wrote:
>>>>> If an earlycon (stdout-path) node is being used, check for "big-endian"
>>>>> or "native-endian" properties and pass the appropriate iotype to the
>>>>> driver.
>>>>>
>>>>> Note that LE sets UPIO_MEM (8-bit) but BE sets UPIO_MEM32BE (32-bit). The
>>>>> big-endian property only really makes sense in the context of 32-bit
>>>>> registers, since 8-bit accesses never require data swapping.
>>>>>
>>>>> At some point, the of_earlycon code may want to pass in the reg-io-width,
>>>>> reg-offset, and reg-shift parameters too.
>>>>>
>>>>> Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
>>>>> ---
>>>>> drivers/of/fdt.c | 7 ++++++-
>>>>> drivers/tty/serial/earlycon.c | 4 ++--
>>>>> include/linux/serial_core.h | 2 +-
>>>>> 3 files changed, 9 insertions(+), 4 deletions(-)
>>>>>
>>>>> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
>>>>> index 658656f..9d21472 100644
>>>>> --- a/drivers/of/fdt.c
>>>>> +++ b/drivers/of/fdt.c
>>>>> @@ -794,6 +794,8 @@ int __init early_init_dt_scan_chosen_serial(void)
>>>>>
>>>>> while (match->compatible[0]) {
>>>>> unsigned long addr;
>>>>> + unsigned char iotype = UPIO_MEM;
>>>>> +
>>>>> if (fdt_node_check_compatible(fdt, offset, match->compatible)) {
>>>>> match++;
>>>>> continue;
>>>>> @@ -803,7 +805,10 @@ int __init early_init_dt_scan_chosen_serial(void)
>>>>> if (!addr)
>>>>> return -ENXIO;
>>>>>
>>>>> - of_setup_earlycon(addr, match->data);
>>>>> + if (of_fdt_is_big_endian(fdt, offset))
>>>>> + iotype = UPIO_MEM32BE;
>>>>> +
>>>>> + of_setup_earlycon(addr, iotype, match->data);
>>>>
>>>> I know these got ACKs already but as you point out in the commit log,
>>>> earlycon _will_ need reg-io-width, reg-offset and reg-shift. Since the
>>>> distinction between early_init_dt_scan_chosen_serial() and
>>>> of_setup_earlycon() is arbitrary, I'd rather see of_setup_earlycon()
>>>> taught to properly decode of_serial driver bindings instead of a
>>>> stack of parameters to of_setup_earlycon().
>>>>
>>>> In fact, this patch allows a mis-defined devicetree to bring up a
>>>> functioning earlycon because the 'big-endian' property is directly
>>>> associated with UPIO_MEM32BE, which will create incompatibility problems
>>>> when DT earlycon is fixed to decode the of_serial DT bindings.
>>>
>>> That's a good point. This hasn't been merged yet, so there isn't any
>>> impact on addressing this. I would propose that for consistency, the
>>> earlycon code should always default to 8-bit access. if big-endian
>>> accesses are required, then reg-io-width + big-endian must be specified.
>>>
>>> Something like the following would do it and would be future-proof. We
>>> can add support for 16 or 64bit big or little endian access if it ever
>>> became necessary.
>>
>> I was planning on adding MEM32BE support to OF earlycon on top of my
>> patch series 'OF earlycon cleanup', which adds full support for the
>> of_serial driver DT properties (among other things).
>>
>> Unfortunately, that series is waiting on two things:
>> 1. libfdt upstream patch, which I submitted but was referred back to me
>> to add test cases. That was 3 weeks ago and I simply haven't had a free
>> day to burn to figure out how their test matrix is organized. I don't
>> think that's going to change anytime soon; I might just abandon that patch
>> and do the string manipulation on the stack.
>>
>> ATM, earlycon is still broken if stdout-path options have been set.
>
> I don't seem to have that patch. Can you send it to me please?
Will do.
> I do have a thought though. Would it be better to teach
> fdt_path_offset() to recognize the ':' delimiter? It's never a valid
> character for a path.
>
> The unittests are easy. "make check" builds and runs them. Adding a test
> is as simple as editing tests/parent_offset.c. main() calls check_path()
> several times to test calls to fdt_path_offset(). The tests can be added
> directly to that file.
Well, the patch reimplements fdt_path_offset() in terms of a new
length-limited function, fdt_path_offset_namelen(). So the existing tests
of fdt_path_offset() are already exercising the patch.
The issue is that the unit tests for fdt_path_offset_namelen() will need
additional nodes and properties defined to properly test the functionality,
and it's not clear to which fdt files these changes are required.
Not that I can't figure it out, but right now, I just have way more
pressing matters, like outstanding regressions and the 8250 split, both
of which are overdue.
Regards,
Peter Hurley
WARNING: multiple messages have this Message-ID (diff)
From: Peter Hurley <peter-WaGBZJeGNqdsbIuE7sb01tBPR1lH4CV8@public.gmane.org>
To: Grant Likely <grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: Kevin Cernekee <cernekee-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org,
jslaby-AlSwsSmVLrQ@public.gmane.org,
robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
arnd-r2nGTMty4D4@public.gmane.org,
f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-serial-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org
Subject: Re: [PATCH V3 5/7] serial: earlycon: Set UPIO_MEM32BE based on DT properties
Date: Thu, 02 Apr 2015 11:33:02 -0400 [thread overview]
Message-ID: <551D612E.4000808@hurleysoftware.com> (raw)
In-Reply-To: <20150402133250.740C1C408D6-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
On 04/02/2015 09:32 AM, Grant Likely wrote:
> On Sat, 28 Mar 2015 13:01:24 -0400
> , Peter Hurley <peter-WaGBZJeGNqdsbIuE7sb01tBPR1lH4CV8@public.gmane.org>
> wrote:
>> Hi Grant,
>>
>> On 03/27/2015 09:36 PM, Grant Likely wrote:
>>> On Sun, 01 Mar 2015 17:23:11 -0500
>>> , Peter Hurley <peter-WaGBZJeGNqdsbIuE7sb01tBPR1lH4CV8@public.gmane.org>
>>> wrote:
>>>> Hi Kevin,
>>>>
>>>> On 11/24/2014 06:36 PM, Kevin Cernekee wrote:
>>>>> If an earlycon (stdout-path) node is being used, check for "big-endian"
>>>>> or "native-endian" properties and pass the appropriate iotype to the
>>>>> driver.
>>>>>
>>>>> Note that LE sets UPIO_MEM (8-bit) but BE sets UPIO_MEM32BE (32-bit). The
>>>>> big-endian property only really makes sense in the context of 32-bit
>>>>> registers, since 8-bit accesses never require data swapping.
>>>>>
>>>>> At some point, the of_earlycon code may want to pass in the reg-io-width,
>>>>> reg-offset, and reg-shift parameters too.
>>>>>
>>>>> Signed-off-by: Kevin Cernekee <cernekee-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>>>>> ---
>>>>> drivers/of/fdt.c | 7 ++++++-
>>>>> drivers/tty/serial/earlycon.c | 4 ++--
>>>>> include/linux/serial_core.h | 2 +-
>>>>> 3 files changed, 9 insertions(+), 4 deletions(-)
>>>>>
>>>>> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
>>>>> index 658656f..9d21472 100644
>>>>> --- a/drivers/of/fdt.c
>>>>> +++ b/drivers/of/fdt.c
>>>>> @@ -794,6 +794,8 @@ int __init early_init_dt_scan_chosen_serial(void)
>>>>>
>>>>> while (match->compatible[0]) {
>>>>> unsigned long addr;
>>>>> + unsigned char iotype = UPIO_MEM;
>>>>> +
>>>>> if (fdt_node_check_compatible(fdt, offset, match->compatible)) {
>>>>> match++;
>>>>> continue;
>>>>> @@ -803,7 +805,10 @@ int __init early_init_dt_scan_chosen_serial(void)
>>>>> if (!addr)
>>>>> return -ENXIO;
>>>>>
>>>>> - of_setup_earlycon(addr, match->data);
>>>>> + if (of_fdt_is_big_endian(fdt, offset))
>>>>> + iotype = UPIO_MEM32BE;
>>>>> +
>>>>> + of_setup_earlycon(addr, iotype, match->data);
>>>>
>>>> I know these got ACKs already but as you point out in the commit log,
>>>> earlycon _will_ need reg-io-width, reg-offset and reg-shift. Since the
>>>> distinction between early_init_dt_scan_chosen_serial() and
>>>> of_setup_earlycon() is arbitrary, I'd rather see of_setup_earlycon()
>>>> taught to properly decode of_serial driver bindings instead of a
>>>> stack of parameters to of_setup_earlycon().
>>>>
>>>> In fact, this patch allows a mis-defined devicetree to bring up a
>>>> functioning earlycon because the 'big-endian' property is directly
>>>> associated with UPIO_MEM32BE, which will create incompatibility problems
>>>> when DT earlycon is fixed to decode the of_serial DT bindings.
>>>
>>> That's a good point. This hasn't been merged yet, so there isn't any
>>> impact on addressing this. I would propose that for consistency, the
>>> earlycon code should always default to 8-bit access. if big-endian
>>> accesses are required, then reg-io-width + big-endian must be specified.
>>>
>>> Something like the following would do it and would be future-proof. We
>>> can add support for 16 or 64bit big or little endian access if it ever
>>> became necessary.
>>
>> I was planning on adding MEM32BE support to OF earlycon on top of my
>> patch series 'OF earlycon cleanup', which adds full support for the
>> of_serial driver DT properties (among other things).
>>
>> Unfortunately, that series is waiting on two things:
>> 1. libfdt upstream patch, which I submitted but was referred back to me
>> to add test cases. That was 3 weeks ago and I simply haven't had a free
>> day to burn to figure out how their test matrix is organized. I don't
>> think that's going to change anytime soon; I might just abandon that patch
>> and do the string manipulation on the stack.
>>
>> ATM, earlycon is still broken if stdout-path options have been set.
>
> I don't seem to have that patch. Can you send it to me please?
Will do.
> I do have a thought though. Would it be better to teach
> fdt_path_offset() to recognize the ':' delimiter? It's never a valid
> character for a path.
>
> The unittests are easy. "make check" builds and runs them. Adding a test
> is as simple as editing tests/parent_offset.c. main() calls check_path()
> several times to test calls to fdt_path_offset(). The tests can be added
> directly to that file.
Well, the patch reimplements fdt_path_offset() in terms of a new
length-limited function, fdt_path_offset_namelen(). So the existing tests
of fdt_path_offset() are already exercising the patch.
The issue is that the unit tests for fdt_path_offset_namelen() will need
additional nodes and properties defined to properly test the functionality,
and it's not clear to which fdt files these changes are required.
Not that I can't figure it out, but right now, I just have way more
pressing matters, like outstanding regressions and the 8250 split, both
of which are overdue.
Regards,
Peter Hurley
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-04-02 15:33 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-24 23:36 [PATCH V3 0/7] serial: Configure {big,native}-endian MMIO accesses via DT Kevin Cernekee
2014-11-24 23:36 ` [PATCH V3 1/7] of: Add helper function to check MMIO register endianness Kevin Cernekee
2014-11-24 23:36 ` [PATCH V3 2/7] of/fdt: Add endianness helper function for early init code Kevin Cernekee
2014-11-24 23:36 ` [PATCH V3 3/7] of: Document {little,big,native}-endian bindings Kevin Cernekee
2015-03-02 13:14 ` Peter Hurley
2015-03-02 13:14 ` Peter Hurley
2015-03-02 14:56 ` Kevin Cernekee
2015-03-02 14:56 ` Kevin Cernekee
2015-03-02 16:08 ` Peter Hurley
2015-03-02 16:08 ` Peter Hurley
2015-03-02 16:28 ` Kevin Cernekee
2015-03-02 16:28 ` Kevin Cernekee
2015-03-02 17:45 ` Peter Hurley
2015-03-02 17:45 ` Peter Hurley
2015-03-02 18:57 ` Kevin Cernekee
2015-03-02 18:57 ` Kevin Cernekee
2015-03-20 23:48 ` Grant Likely
2015-03-20 23:48 ` Grant Likely
2014-11-24 23:36 ` [PATCH V3 4/7] serial: core: Add big-endian iotype Kevin Cernekee
2014-11-24 23:36 ` [PATCH V3 5/7] serial: earlycon: Set UPIO_MEM32BE based on DT properties Kevin Cernekee
2014-11-24 23:36 ` Kevin Cernekee
2015-03-01 22:23 ` Peter Hurley
2015-03-01 22:23 ` Peter Hurley
2015-03-28 1:36 ` Grant Likely
2015-03-28 1:36 ` Grant Likely
2015-03-28 17:01 ` Peter Hurley
2015-03-28 17:01 ` Peter Hurley
2015-03-28 19:28 ` Kevin Cernekee
2015-03-28 19:28 ` Kevin Cernekee
2015-04-02 15:36 ` Peter Hurley
2015-04-02 15:36 ` Peter Hurley
2015-04-08 17:56 ` Peter Hurley
2015-04-08 17:56 ` Peter Hurley
2015-04-02 16:15 ` Peter Hurley
2015-04-02 16:15 ` Peter Hurley
2015-04-02 13:32 ` Grant Likely
2015-04-02 13:32 ` Grant Likely
2015-04-02 15:33 ` Peter Hurley [this message]
2015-04-02 15:33 ` Peter Hurley
2015-04-02 13:46 ` Rob Herring
2015-04-02 13:46 ` Rob Herring
2015-04-02 15:35 ` Peter Hurley
2015-04-02 15:35 ` Peter Hurley
2015-04-06 17:36 ` Peter Hurley
2015-04-06 17:36 ` Peter Hurley
2015-04-06 21:07 ` Rob Herring
2015-04-06 21:07 ` Rob Herring
2014-11-24 23:36 ` [PATCH V3 6/7] serial: of_serial: Support big-endian register accesses Kevin Cernekee
2014-11-24 23:36 ` [PATCH V3 7/7] serial: 8250: Add support for big-endian MMIO accesses Kevin Cernekee
2014-11-24 23:55 ` [PATCH V3 0/7] serial: Configure {big,native}-endian MMIO accesses via DT Florian Fainelli
2014-11-25 10:21 ` Arnd Bergmann
2014-11-25 15:10 ` Grant Likely
2014-11-25 17:38 ` Greg KH
2014-11-25 21:11 ` Greg KH
2014-11-26 13:14 ` Grant Likely
2015-02-21 20:53 ` Kevin Cernekee
2015-02-21 20:53 ` Kevin Cernekee
2015-02-21 22:18 ` Rob Herring
2015-02-21 22:18 ` Rob Herring
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=551D612E.4000808@hurleysoftware.com \
--to=peter@hurleysoftware.com \
--cc=arnd@arndb.de \
--cc=cernekee@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=f.fainelli@gmail.com \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=jslaby@suse.cz \
--cc=linux-mips@linux-mips.org \
--cc=linux-serial@vger.kernel.org \
--cc=robh@kernel.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.