Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2011-04-07 Thread Mike Frysinger
On Thu, Apr 7, 2011 at 14:39, RONETIX - Asen Dimov wrote:
 On 11/30/2010 09:25 PM, Daniel Walker wrote:
 This driver adds a basic console that uses the arm JTAG
 DCC to transfer data back and forth. It has support for
 ARMv6 and ARMv7.

 This console is created under the HVC driver, and should be named
 /dev/hvcX (or /dev/hvc0 for example).

  drivers/char/Kconfig   |    9 +++
  drivers/char/Makefile  |    1 +
  drivers/char/hvc_dcc.c |  133
 

 ...

 this DCC driver implements one channel, but what about implementing
 multiple channels. For example reserve few(3) bits for channel number,
 and two bits for carried data, then fill the rest bytes with with some data
 and send the word(32 bits) over DCC. On the Linux side writing on /dev/hvcX
 puts the number X as channel number, and on the other side the CPU
 emulator gets the data and redistribute it to TCP/IP socket.

 I have started write some code implementing this. Are there any one
 interested
 in this multiple channels, and are there any one started to work on it?

this sort of multiplexing of the data stream sounds like the job for
userspace ?  or maybe a line discipline ?  inserting structured data
into the kernel driver doesnt sound right to me ...
-mike
--
To unsubscribe from this list: send the line unsubscribe linux-arm-msm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2011-01-14 Thread Tony Lindgren
* Stephen Boyd sb...@codeaurora.org [101207 11:00]:
 On 12/01/2010 12:20 PM, Stephen Boyd wrote:
  Definitely for TX since it seems like a redundant loop, but I agree RX
  code has changed. Instead of
 
  If RX buffer full
  Poll for RX buffer full
  Read character from RX buffer
 
  we would have
 
  If RX buffer full
  Read character from RX buffer
 
  which doesn't seem all that different assuming the RX buffer doesn't go
  from full to empty between the If and Poll steps. Hopefully Tony knows more.
 
 
 Tony, any thoughts?

Sorry for the delay, looks like I'm only 1 month behind with email..
Sounds like it should work to me. I can try it out if you point me
to a patch.

Regards,

Tony
--
To unsubscribe from this list: send the line unsubscribe linux-arm-msm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2011-01-14 Thread Stephen Boyd
On 01/14/2011 11:19 AM, Tony Lindgren wrote:
 * Stephen Boyd sb...@codeaurora.org [101207 11:00]:
 On 12/01/2010 12:20 PM, Stephen Boyd wrote:
 Definitely for TX since it seems like a redundant loop, but I agree RX
 code has changed. Instead of

 If RX buffer full
 Poll for RX buffer full
 Read character from RX buffer

 we would have

 If RX buffer full
 Read character from RX buffer

 which doesn't seem all that different assuming the RX buffer doesn't go
 from full to empty between the If and Poll steps. Hopefully Tony knows more.


 Tony, any thoughts?

 Sorry for the delay, looks like I'm only 1 month behind with email..
 Sounds like it should work to me. I can try it out if you point me
 to a patch.

I think you acked the patches to make this change. You can test them out
by applying the hvc_dcc cleanups and fixes patches (Message-Id:
1292875718-7980-1-git-send-email-sb...@codeaurora.org) on top of this
patch. They were sent as a reply to this thread.

Stephen

-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

--
To unsubscribe from this list: send the line unsubscribe linux-arm-msm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2010-12-07 Thread Stephen Boyd
On 12/01/2010 12:20 PM, Stephen Boyd wrote:
 Definitely for TX since it seems like a redundant loop, but I agree RX
 code has changed. Instead of

 If RX buffer full
 Poll for RX buffer full
 Read character from RX buffer

 we would have

 If RX buffer full
 Read character from RX buffer

 which doesn't seem all that different assuming the RX buffer doesn't go
 from full to empty between the If and Poll steps. Hopefully Tony knows more.


Tony, any thoughts?

-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

--
To unsubscribe from this list: send the line unsubscribe linux-arm-msm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2010-12-01 Thread Daniel Walker
On Tue, 2010-11-30 at 21:30 -0800, Stephen Boyd wrote:
 On 11/30/2010 11:25 AM, Daniel Walker wrote:
  @@ -682,6 +682,15 @@ config HVC_UDBG
  select HVC_DRIVER
  default n
   
  +config HVC_DCC
  +   bool ARM JTAG DCC console
  +   depends on ARM
  +   select HVC_DRIVER
  +   help
  + This console uses the JTAG DCC on ARM to create a console under 
  the HVC
 
 Looks like you added one too many spaces for indent here.

The first line is fine, but the other two might need an extra space.

  diff --git a/drivers/char/hvc_dcc.c b/drivers/char/hvc_dcc.c
  new file mode 100644
  index 000..6470f63
  --- /dev/null
  +++ b/drivers/char/hvc_dcc.c
  +static inline u32 __dcc_getstatus(void)
  +{
  +   u32 __ret;
  +
  +   asm(mrc p14, 0, %0, c0, c1, 0  @ read comms ctrl reg
  +   : =r (__ret) : : cc);
  +
  +   return __ret;
  +}
 
 Without marking this asm volatile my compiler decides it can cache the
 value of __ret in a register and then check the value of it continually
 in hvc_dcc_put_chars() (I had to replace get_wait/put_wait with 1 and
 fixup the branch otherwise my disassembler barfed on __dcc_(get|put)char).
 
 
  hvc_dcc_put_chars:
0:   ee103e11mrc 14, 0, r3, cr0, cr1, {0}
4:   e3a0c000mov ip, #0  ; 0x0
8:   e2033202and r3, r3, #536870912  ; 0x2000
c:   ea06b   2c hvc_dcc_put_chars+0x2c
   10:   e353cmp r3, #0  ; 0x0
   14:   1afdbne 10 hvc_dcc_put_chars+0x10
   18:   e7d1000cldrbr0, [r1, ip]
   1c:   ee10fe11mrc 14, 0, pc, cr0, cr1, {0}
   20:   2afdbcs 1c hvc_dcc_put_chars+0x1c
   24:   ee000e15mcr 14, 0, r0, cr0, cr5, {0}
   28:   e28cc001add ip, ip, #1  ; 0x1
   2c:   e15c0002cmp ip, r2
   30:   baf6blt 10 hvc_dcc_put_chars+0x10
   34:   e1a2mov r0, r2
   38:   e12fff1ebx  lr
 
 As you can see, the value of the mrc is checked against DCC_STATUS_TX
 (bit 29) and then stored in r3 for later use. Marking this volatile
 produces the following:
 
  hvc_dcc_put_chars:
0:   e3a03000mov r3, #0  ; 0x0
4:   ea07b   28 hvc_dcc_put_chars+0x28
8:   ee100e11mrc 14, 0, r0, cr0, cr1, {0}
c:   e3100202tst r0, #536870912  ; 0x2000
   10:   1afcbne 8 hvc_dcc_put_chars+0x8
   14:   e7d10003ldrbr0, [r1, r3]
   18:   ee10fe11mrc 14, 0, pc, cr0, cr1, {0}
   1c:   2afdbcs 18 hvc_dcc_put_chars+0x18
   20:   ee000e15mcr 14, 0, r0, cr0, cr5, {0}
   24:   e2833001add r3, r3, #1  ; 0x1
   28:   e1530002cmp r3, r2
   2c:   baf5blt 8 hvc_dcc_put_chars+0x8
   30:   e1a2mov r0, r2
   34:   e12fff1ebx  lr
 
 which looks better.
 
 I marked all the asm in this driver as volatile. Is that correct?

Are you talking about __dcc_getstatus only? I don't think adding
volatile is going to hurt anything, if not having it causes problems.

  +#if defined(CONFIG_CPU_V7)
  +static inline char __dcc_getchar(void)
  +{
  +   char __c;
  +
  +   asm(get_wait:  mrc p14, 0, pc, c0, c1, 0  \n\
  +   bne get_wait   \n\
  +   mrc p14, 0, %0, c0, c5, 0   @ read comms data reg
  +   : =r (__c) : : cc);
  +
  +   return __c;
  +}
  +#else
  +static inline char __dcc_getchar(void)
  +{
  +   char __c;
  +
  +   asm(mrc p14, 0, %0, c0, c5, 0  @ read comms data reg
  +   : =r (__c));
  +
  +   return __c;
  +}
  +#endif
  +
  +#if defined(CONFIG_CPU_V7)
  +static inline void __dcc_putchar(char c)
  +{
  +   asm(put_wait:  mrc p14, 0, pc, c0, c1, 0 \n\
  +   bcs put_wait  \n\
  +   mcr p14, 0, %0, c0, c5, 0   
  +   : : r (c) : cc);
  +}
  +#else
  +static inline void __dcc_putchar(char c)
  +{
  +   asm(mcr p14, 0, %0, c0, c5, 0  @ write a char
  +   : /* no output register */
  +   : r (c));
  +}
  +#endif
  +
 
 I don't think both the v7 and v6 functions are necessary. It seems I can
 get away with just the second version of __dcc_(get|put)char() on a v7.
 The mrc p14, 0, pc, c0, c1, 0 will assign the top 4 bits (31-28) to the
 condition codes NZCV on v7. It also looks like on an ARM11 (a v6) will
 also do the same thing if I read the manuals right. The test in the
 inline assembly is saying, wait for a character to be ready or wait for
 a character to be read then actually write a character or read one. The
 code in hvc_dcc_put_chars() is already doing the same thing, albeit in a
 slightly different form. Instead of getting the status bits put into the
 condition codes and looping with bne or bcs it will read the register,
 and it with 

Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2010-12-01 Thread Greg KH
On Wed, Dec 01, 2010 at 10:54:56AM -0800, Daniel Walker wrote:
 On Tue, 2010-11-30 at 21:30 -0800, Stephen Boyd wrote:
  On 11/30/2010 11:25 AM, Daniel Walker wrote:
   @@ -682,6 +682,15 @@ config HVC_UDBG
   select HVC_DRIVER
   default n

   +config HVC_DCC
   +   bool ARM JTAG DCC console
   +   depends on ARM
   +   select HVC_DRIVER
   +   help
   + This console uses the JTAG DCC on ARM to create a console under 
   the HVC
  
  Looks like you added one too many spaces for indent here.
 
 The first line is fine, but the other two might need an extra space.

For this, or any other changes you want, I'll gladly take a follow-on
patch as this one is already in my tty-next tree.

thanks,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-arm-msm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2010-12-01 Thread Stephen Boyd
On 12/01/2010 10:54 AM, Daniel Walker wrote:
 Are you talking about __dcc_getstatus only? I don't think adding
 volatile is going to hurt anything, if not having it causes problems.


Just marking __dcc_getstatus volatile gives me

0038 hvc_dcc_get_chars:
  38:   ee10fe11mrc 14, 0, pc, cr0, cr1, {0}
  3c:   1afdbne 38 hvc_dcc_get_chars
  40:   ee103e15mrc 14, 0, r3, cr0, cr5, {0}
  44:   e3a0mov r0, #0  ; 0x0
  48:   e6ef3073uxtbr3, r3
  4c:   ea04b   64 hvc_dcc_get_chars+0x2c
  50:   ee10ce11mrc 14, 0, ip, cr0, cr1, {0}
  54:   e31c0101tst ip, #1073741824 ; 0x4000
  58:   012fff1ebxeqlr
  5c:   e7c13000strbr3, [r1, r0]
  60:   e281add r0, r0, #1  ; 0x1
  64:   e152cmp r0, r2
  68:   baf8blt 50 hvc_dcc_get_chars+0x18
  6c:   e12fff1ebx  lr

Seems the compiler keeps the value of __dcc_getchar() in r3 for the
duration of the loop. So we need to mark that one volatile too. I don't
think __dcc_putchar() needs to be marked volatile but it probably
doesn't hurt.


 We could maybe drop the looping for TX, but RX has no C based looping
 even tho for v7 it's recommended that we loop (presumably for v6 it's
 not recommended).


Definitely for TX since it seems like a redundant loop, but I agree RX
code has changed. Instead of

If RX buffer full
Poll for RX buffer full
Read character from RX buffer

we would have

If RX buffer full
Read character from RX buffer

which doesn't seem all that different assuming the RX buffer doesn't go
from full to empty between the If and Poll steps. Hopefully Tony knows more.

 Like this?

   for (i = 0; i  count; ++i) {

   if (__dcc_getstatus()  DCC_STATUS_RX)
   buf[i] = __dcc_getchar();
   else
   break;
   }

 It's a micro clean up I guess ..

Yes, it's much clearer that way.

-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

--
To unsubscribe from this list: send the line unsubscribe linux-arm-msm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drivers: char: hvc: add arm JTAG DCC console support

2010-11-30 Thread Arnd Bergmann
On Tuesday 30 November 2010, Nicolas Pitre wrote:
  Cc: Tony Lindgren t...@atomide.com
  Cc: Arnd Bergmann a...@arndb.de
  Cc: Nicolas Pitre n...@fluxnic.net
  Cc: Greg Kroah-Hartman gre...@suse.de
  Cc: Mike Frysinger vap...@gentoo.org
  Signed-off-by: Daniel Walker dwal...@codeaurora.org
 
 Acked-by: Nicolas Pitre nicolas.pi...@linaro.org

Acked-by: Arnd Bergmann a...@arndb.de

 This doesn't support both ARMv6 and ARMv7 at run time, but this can 
 trivially be added later when needed.

I was about to make a similar comment when I saw yours ;-)
--
To unsubscribe from this list: send the line unsubscribe linux-arm-msm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html