Re: [RFC/PATCH] powerpc: Move CPM command handling into the cpm drivers
From: Grant Likely <hidden>
Date: 2007-11-22 18:36:30
On 11/22/07, Jochen Friedrich [off-list ref] wrote:
quoted hunk ↗ jump to hunk
This patch moves the CPM command handling into commproc.c for CPM1 and cpm2_common.c. This is yet another preparation to get rid of drivers accessing the CPM via the global cpmp. Signed-off-by: Jochen Friedrich <jochen@scram.de> --- arch/powerpc/sysdev/commproc.c | 20 ++++++++++++++++++++ arch/powerpc/sysdev/cpm2_common.c | 17 +++++++++++++++++ drivers/net/fs_enet/mac-fcc.c | 10 +--------- drivers/net/fs_enet/mac-scc.c | 11 +---------- drivers/serial/cpm_uart/cpm_uart_cpm1.c | 6 +----- drivers/serial/cpm_uart/cpm_uart_cpm2.c | 8 +------- include/asm-powerpc/cpm.h | 1 + 7 files changed, 42 insertions(+), 31 deletions(-)diff --git a/arch/powerpc/sysdev/commproc.c b/arch/powerpc/sysdev/commproc.c index f6a6378..2bddbde 100644 --- a/arch/powerpc/sysdev/commproc.c +++ b/arch/powerpc/sysdev/commproc.c@@ -240,6 +240,26 @@ void __init cpm_reset(void) #endif } +#define MAX_CR_CMD_LOOPS 10000 + +int cpm_command(u32 command, u8 opcode) +{ + int i; + + if (command & 0xffffff0f) + return -EINVAL; + + out_be16(&cpmp->cp_cpcr, command | CPM_CR_FLG | (opcode << 8)); + for (i = 0; i < MAX_CR_CMD_LOOPS; i++) + if ((in_be16(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0) + return 0; + + printk(KERN_ERR "%s(): Not able to issue CPM command\n", + __FUNCTION__); + return -EIO;
Do these need to be protected with a spin lock? Cheers, g. -- Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. grant.likely@secretlab.ca (403) 399-0195