Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 81061
b: refs/heads/master
c: 362f9b6
h: refs/heads/master
i:
  81059: 4a6f78d
v: v3
  • Loading branch information
Jochen Friedrich authored and Kumar Gala committed Dec 14, 2007
1 parent bfb9202 commit 69edaaf
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 721c0c8af1a27941a34af5046aae4a8369c8404c
refs/heads/master: 362f9b6fa8c9670cc5496390845021c2865d049b
28 changes: 28 additions & 0 deletions trunk/arch/powerpc/sysdev/commproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,34 @@ void __init cpm_reset(void)
#endif
}

static DEFINE_SPINLOCK(cmd_lock);

#define MAX_CR_CMD_LOOPS 10000

int cpm_command(u32 command, u8 opcode)
{
int i, ret;
unsigned long flags;

if (command & 0xffffff0f)
return -EINVAL;

spin_lock_irqsave(&cmd_lock, flags);

ret = 0;
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)
goto out;

printk(KERN_ERR "%s(): Not able to issue CPM command\n", __FUNCTION__);
ret = -EIO;
out:
spin_unlock_irqrestore(&cmd_lock, flags);
return ret;
}
EXPORT_SYMBOL(cpm_command);

/* We used to do this earlier, but have to postpone as long as possible
* to ensure the kernel VM is now running.
*/
Expand Down
25 changes: 25 additions & 0 deletions trunk/arch/powerpc/sysdev/cpm2_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,31 @@ cpm2_reset(void)
cpmp = &cpm2_immr->im_cpm;
}

static DEFINE_SPINLOCK(cmd_lock);

#define MAX_CR_CMD_LOOPS 10000

int cpm_command(u32 command, u8 opcode)
{
int i, ret;
unsigned long flags;

spin_lock_irqsave(&cmd_lock, flags);

ret = 0;
out_be32(&cpmp->cp_cpcr, command | opcode | CPM_CR_FLG);
for (i = 0; i < MAX_CR_CMD_LOOPS; i++)
if ((in_be32(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0)
goto out;

printk(KERN_ERR "%s(): Not able to issue CPM command\n", __FUNCTION__);
ret = -EIO;
out:
spin_unlock_irqrestore(&cmd_lock, flags);
return ret;
}
EXPORT_SYMBOL(cpm_command);

/* Set a baud rate generator. This needs lots of work. There are
* eight BRGs, which can be connected to the CPM channels or output
* as clocks. The BRGs are in two different block of internal
Expand Down
10 changes: 1 addition & 9 deletions trunk/drivers/net/fs_enet/mac-fcc.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,8 @@
static inline int fcc_cr_cmd(struct fs_enet_private *fep, u32 op)
{
const struct fs_platform_info *fpi = fep->fpi;
int i;

W32(cpmp, cp_cpcr, fpi->cp_command | op | CPM_CR_FLG);
for (i = 0; i < MAX_CR_CMD_LOOPS; i++)
if ((R32(cpmp, cp_cpcr) & CPM_CR_FLG) == 0)
return 0;

printk(KERN_ERR "%s(): Not able to issue CPM command\n",
__FUNCTION__);
return 1;
return cpm_command(fpi->cp_command, op);
}

static int do_pd_setup(struct fs_enet_private *fep)
Expand Down
11 changes: 1 addition & 10 deletions trunk/drivers/net/fs_enet/mac-scc.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,21 +89,12 @@
* Delay to wait for SCC reset command to complete (in us)
*/
#define SCC_RESET_DELAY 50
#define MAX_CR_CMD_LOOPS 10000

static inline int scc_cr_cmd(struct fs_enet_private *fep, u32 op)
{
const struct fs_platform_info *fpi = fep->fpi;
int i;

W16(cpmp, cp_cpcr, fpi->cp_command | CPM_CR_FLG | (op << 8));
for (i = 0; i < MAX_CR_CMD_LOOPS; i++)
if ((R16(cpmp, cp_cpcr) & CPM_CR_FLG) == 0)
return 0;

printk(KERN_ERR "%s(): Not able to issue CPM command\n",
__FUNCTION__);
return 1;
return cpm_command(fpi->cp_command, op);
}

static int do_pd_setup(struct fs_enet_private *fep)
Expand Down
6 changes: 1 addition & 5 deletions trunk/drivers/serial/cpm_uart/cpm_uart_cpm1.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,7 @@
#ifdef CONFIG_PPC_CPM_NEW_BINDING
void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
{
u16 __iomem *cpcr = &cpmp->cp_cpcr;

out_be16(cpcr, port->command | (cmd << 8) | CPM_CR_FLG);
while (in_be16(cpcr) & CPM_CR_FLG)
;
cpm_command(port->command, cmd);
}
#else
void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
Expand Down
8 changes: 1 addition & 7 deletions trunk/drivers/serial/cpm_uart/cpm_uart_cpm2.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,7 @@
#ifdef CONFIG_PPC_CPM_NEW_BINDING
void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
{
cpm_cpm2_t __iomem *cp = cpm2_map(im_cpm);

out_be32(&cp->cp_cpcr, port->command | cmd | CPM_CR_FLG);
while (in_be32(&cp->cp_cpcr) & CPM_CR_FLG)
;

cpm2_unmap(cp);
cpm_command(port->command, cmd);
}
#else
void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
Expand Down
1 change: 1 addition & 0 deletions trunk/include/asm-powerpc/cpm.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ int cpm_muram_free(unsigned long offset);
unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size);
void __iomem *cpm_muram_addr(unsigned long offset);
dma_addr_t cpm_muram_dma(void __iomem *addr);
int cpm_command(u32 command, u8 opcode);

#endif

0 comments on commit 69edaaf

Please sign in to comment.