Re: [PATCH 0/3] hvc_dcc cleanups and fixes
On Mon, Dec 20, 2010 at 12:08:35PM -0800, Stephen Boyd wrote: Here are the split patches. The first two patches cleanup and fix the hvc_dcc driver for my compiler. The final patch is more controversial, it removes the v6 and v7 differences in this driver. Stephen Boyd (3): hvc_dcc: Fix bad code generation by marking assembly volatile hvc_dcc: Simplify put_chars()/get_chars() loops hvc_dcc: Simplify assembly for v6 and v7 ARM Can you redo these against the linux-next tree as they don't apply anymore and resend them so I can apply them? 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 0/3] hvc_dcc cleanups and fixes
On Mon, Dec 20, 2010 at 12:08:35PM -0800, Stephen Boyd wrote: Here are the split patches. The first two patches cleanup and fix the hvc_dcc driver for my compiler. The final patch is more controversial, it removes the v6 and v7 differences in this driver. Stephen Boyd (3): hvc_dcc: Fix bad code generation by marking assembly volatile hvc_dcc: Simplify put_chars()/get_chars() loops hvc_dcc: Simplify assembly for v6 and v7 ARM Can you redo these against the linux-next tree as they don't apply anymore and resend them so I can apply them? Have you tried 'git am -3' on them? I assume it's the movement of the file that's causing the problem. Either way, I'll resend and collect the acks in a bit. -- 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 0/3] hvc_dcc cleanups and fixes
On Thu, Feb 03, 2011 at 03:19:07PM -0800, Stephen Boyd wrote: On Mon, Dec 20, 2010 at 12:08:35PM -0800, Stephen Boyd wrote: Here are the split patches. The first two patches cleanup and fix the hvc_dcc driver for my compiler. The final patch is more controversial, it removes the v6 and v7 differences in this driver. Stephen Boyd (3): hvc_dcc: Fix bad code generation by marking assembly volatile hvc_dcc: Simplify put_chars()/get_chars() loops hvc_dcc: Simplify assembly for v6 and v7 ARM Can you redo these against the linux-next tree as they don't apply anymore and resend them so I can apply them? Have you tried 'git am -3' on them? I assume it's the movement of the file that's causing the problem. Either way, I'll resend and collect the acks in a bit. thanks, that would be great. 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
[PATCHv2 0/3] hvc_dcc cleanups and fixes
Redone against tty-next and collected acks from Nicolas and Tony. Stephen Boyd (3): hvc_dcc: Fix bad code generation by marking assembly volatile hvc_dcc: Simplify put_chars()/get_chars() loops hvc_dcc: Simplify assembly for v6 and v7 ARM drivers/tty/hvc/hvc_dcc.c | 43 +++ 1 files changed, 7 insertions(+), 36 deletions(-) -- 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
[PATCHv2 3/3] hvc_dcc: Simplify assembly for v6 and v7 ARM
The inline assembly differences for v6 vs. v7 in the hvc_dcc driver are purely optimizations. On a v7 processor, an mrc with the pc sets the condition codes to the 28-31 bits of the register being read. It just so happens that the TX/RX full bits the DCC driver is testing for are high enough in the register to be put into the condition codes. On a v6 processor, this feature isn't implemented and thus we have to do the usual read, mask, test operations to check for TX/RX full. Since we already test the RX/TX full bits before calling __dcc_getchar() and __dcc_putchar() we don't actually need to do anything special for v7 over v6. The only difference is in hvc_dcc_get_chars(). We would test RX full, poll RX full, and then read a character from the buffer, whereas now we will test RX full, read a character from the buffer, and then test RX full again for the second iteration of the loop. It doesn't seem possible for the buffer to go from full to empty between testing the RX full and reading a character. Therefore, replace the v7 versions with the v6 versions and everything works the same. Acked-by: Tony Lindgren t...@atomide.com Cc: Arnd Bergmann a...@arndb.de Acked-by: Nicolas Pitre nicolas.pi...@linaro.org Cc: Daniel Walker dwal...@codeaurora.org Signed-off-by: Stephen Boyd sb...@codeaurora.org --- drivers/tty/hvc/hvc_dcc.c | 24 1 files changed, 0 insertions(+), 24 deletions(-) diff --git a/drivers/tty/hvc/hvc_dcc.c b/drivers/tty/hvc/hvc_dcc.c index ad23cc8..435f6fa 100644 --- a/drivers/tty/hvc/hvc_dcc.c +++ b/drivers/tty/hvc/hvc_dcc.c @@ -40,19 +40,6 @@ static inline u32 __dcc_getstatus(void) } -#if defined(CONFIG_CPU_V7) -static inline char __dcc_getchar(void) -{ - char __c; - - asm volatile(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; @@ -62,24 +49,13 @@ static inline char __dcc_getchar(void) return __c; } -#endif -#if defined(CONFIG_CPU_V7) -static inline void __dcc_putchar(char c) -{ - asm volatile(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 volatile(mcr p14, 0, %0, c0, c5, 0 @ write a char : /* no output register */ : r (c)); } -#endif static int hvc_dcc_put_chars(uint32_t vt, const char *buf, int count) { -- 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
[PATCHv2 2/3] hvc_dcc: Simplify put_chars()/get_chars() loops
Casting and anding with 0xff is unnecessary in hvc_dcc_put_chars() since buf is already a char[]. __dcc_get_char() can't return an int less than 0 since it only returns a char. Simplify the if statement in hvc_dcc_get_chars() to take this into account. Cc: Daniel Walker dwal...@codeaurora.org Signed-off-by: Stephen Boyd sb...@codeaurora.org --- drivers/tty/hvc/hvc_dcc.c | 12 1 files changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/tty/hvc/hvc_dcc.c b/drivers/tty/hvc/hvc_dcc.c index 155ec10..ad23cc8 100644 --- a/drivers/tty/hvc/hvc_dcc.c +++ b/drivers/tty/hvc/hvc_dcc.c @@ -89,7 +89,7 @@ static int hvc_dcc_put_chars(uint32_t vt, const char *buf, int count) while (__dcc_getstatus() DCC_STATUS_TX) cpu_relax(); - __dcc_putchar((char)(buf[i] 0xFF)); + __dcc_putchar(buf[i]); } return count; @@ -99,15 +99,11 @@ static int hvc_dcc_get_chars(uint32_t vt, char *buf, int count) { int i; - for (i = 0; i count; ++i) { - int c = -1; - + for (i = 0; i count; ++i) if (__dcc_getstatus() DCC_STATUS_RX) - c = __dcc_getchar(); - if (c 0) + buf[i] = __dcc_getchar(); + else break; - buf[i] = c; - } return i; } -- 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