From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 04/31] powerpc: 82xx serial: add configurable SMC Rx buffer len
Date: Wed, 28 Jan 2009 13:33:46 +0100 [thread overview]
Message-ID: <498050AA.6070609@denx.de> (raw)
In-Reply-To: <20090128115717.65E21832E416@gemini.denx.de>
Hello Wolfgang,
Wolfgang Denk wrote:
> In message <498027A8.3010200@denx.de> you wrote:
>> This patch adds the configuration option CONFIG_SYS_SMC_RXBUFLEN.
>
> We discussed this before. I explained that I do not want to have this
> added level of complexity in the driver.
>
> Why should I reconsider?
Hups, seems I missed something (Seems I stepped into this subject, after
it was discussed here). I thought that you didnt want such a try, because
it changes a driver that a lot of boards uses, and if this change is
manageable it has a chance to get in mainline. Sorry, I have a look
in the archives ...
>> With this option it is possible to allow the receive
>> buffer for the SMC on 82xx to be greater then 1. In case
>
> How is this supposed to work?
>
> Assume you set CONFIG_SYS_SMC_RXBUFLEN to 4, and the user at the
> serial console port enters just a single character. When will the
> receiver return this character? You might want to explain the
> setup...
He will become this character when an idle-timout occurs. Then
the SMC closes the buffer ...
> More technical comments below.
>
>> cpu/mpc8260/serial_smc.c | 94 +++++++++++++++++++++++++++++++---------------
>> include/configs/mgcoge.h | 1 +
>> 2 files changed, 64 insertions(+), 31 deletions(-)
>>
>> diff --git a/cpu/mpc8260/serial_smc.c b/cpu/mpc8260/serial_smc.c
>> index a6efa66..6825e2e 100644
>> --- a/cpu/mpc8260/serial_smc.c
>> +++ b/cpu/mpc8260/serial_smc.c
>> @@ -64,6 +64,18 @@ DECLARE_GLOBAL_DATA_PTR;
>>
>> #endif
>>
>> +typedef volatile struct serialbuffer {
>> + cbd_t rxbd; /* Rx BD */
>> + cbd_t txbd; /* Tx BD */
>> +#ifdef CONFIG_SYS_SMC_RXBUFLEN
>> + uint rxindex; /* index for next character to read */
>> + volatile uchar rxbuf[CONFIG_SYS_SMC_RXBUFLEN];/* rx buffers */
>> +#else
>> + volatile uchar rxbuf[1]; /* rx buffers */
>> +#endif
>
> This ifdef can be avoided if you #define CONFIG_SYS_SMC_RXBUFLEN as 1
> as a default value. Makes the code much easir to read.
OK.
>> - rbdf->cbd_bufaddr = (uint) (rbdf+2);
>> - rbdf->cbd_sc = 0;
>> - tbdf = rbdf + 1;
>> - tbdf->cbd_bufaddr = ((uint) (rbdf+2)) + 1;
>> - tbdf->cbd_sc = 0;
>> + rtx->rxbd.cbd_bufaddr = (uint) &rtx->rxbuf;
>> + rtx->rxbd.cbd_sc = 0;
>> +
>> + rtx->txbd.cbd_bufaddr = (uint) &rtx->txbuf;
>> + rtx->txbd.cbd_sc = 0;
>
> The code does not exactly become easier to read. You might consider
> using a pointer instead of rtx->rxbd resp. rtx->txbd - this would
> probably largely reduce the size of your patch.
OK, try this out.
>> +#ifdef CONFIG_SYS_SMC_RXBUFLEN
>> + /* multi-character receive.
>> + */
>
> Incorrect multiline comment style. Please fix (also some other
> places).
damn. (I have really problems to see such things, when the code is
not complete from my hand ... and I really tried to see such things)
:-(
>> + up->smc_mrblr = CONFIG_SYS_SMC_RXBUFLEN;
>> + up->smc_maxidl = 10;
>> + rtx->rxindex = 0;
>> +#else
>> /* Single character receive.
>> */
>> up->smc_mrblr = 1;
>> up->smc_maxidl = 0;
>> +#endif
>
> You might want to explain what the magic constant "10" above means. If
> you use a #define for it, you could have it default to 1, and get rid
> of another #ifdef block.
Yes, a define would be much better.
>> +#ifdef CONFIG_SYS_SMC_RXBUFLEN
>> + /* the characters are read one by one,
>> + * use the rxindex to know the next char to deliver
>> + */
>> + c = *(unsigned char *) (rtx->rxbd.cbd_bufaddr+rtx->rxindex);
>> + rtx->rxindex++;
>> +
>> + /* check if all char are readout, then make prepare for next receive */
>> + if (rtx->rxindex >= rtx->rxbd.cbd_datlen) {
>> + rtx->rxindex = 0;
>> + rtx->rxbd.cbd_sc |= BD_SC_EMPTY;
>> + }
>
> Indentation wrong.
I fix that.
>> +#else
>> + c = *(unsigned char *) (rtx->rxbd.cbd_bufaddr);
>> + rtx->rxbd.cbd_sc |= BD_SC_EMPTY;
>> +#endif
>> return(c);
>
> I think this #ifdef can be largely avoided, too, given that
> rtx->rxindex is always 0 in the non-CONFIG_SYS_SMC_RXBUFLEN case.
>
>> diff --git a/include/configs/mgcoge.h b/include/configs/mgcoge.h
>> index 9416a03..ddb06aa 100644
>> --- a/include/configs/mgcoge.h
>> +++ b/include/configs/mgcoge.h
>> @@ -49,6 +49,7 @@
>> #undef CONFIG_CONS_ON_SCC /* It's not on SCC */
>> #undef CONFIG_CONS_NONE /* It's not on external UART */
>> #define CONFIG_CONS_INDEX 2 /* SMC2 is used for console */
>> +#define CONFIG_SYS_SMC_RXBUFLEN 16
>
> Did you do any performance measurements? How much performance do
> you really save this way?
I must have a look in old logs
thanks
Heiko
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
next prev parent reply other threads:[~2009-01-28 12:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-28 9:38 [U-Boot] [PATCH 04/31] powerpc: 82xx serial: add configurable SMC Rx buffer len Heiko Schocher
2009-01-28 11:57 ` Wolfgang Denk
2009-01-28 12:33 ` Heiko Schocher [this message]
2009-01-28 12:35 ` Wolfgang Denk
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=498050AA.6070609@denx.de \
--to=hs@denx.de \
--cc=u-boot@lists.denx.de \
/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.