|
@@ -51,8 +51,9 @@
|
|
|
|
|
|
void cpm_line_cr_cmd(int line, int cmd)
|
|
void cpm_line_cr_cmd(int line, int cmd)
|
|
{
|
|
{
|
|
- volatile cpm_cpm2_t *cp = cpmp;
|
|
|
|
ulong val;
|
|
ulong val;
|
|
|
|
+ volatile cpm_cpm2_t *cp = cpm2_map(im_cpm);
|
|
|
|
+
|
|
|
|
|
|
switch (line) {
|
|
switch (line) {
|
|
case UART_SMC1:
|
|
case UART_SMC1:
|
|
@@ -85,11 +86,14 @@ void cpm_line_cr_cmd(int line, int cmd)
|
|
}
|
|
}
|
|
cp->cp_cpcr = val;
|
|
cp->cp_cpcr = val;
|
|
while (cp->cp_cpcr & CPM_CR_FLG) ;
|
|
while (cp->cp_cpcr & CPM_CR_FLG) ;
|
|
|
|
+
|
|
|
|
+ cpm2_unmap(cp);
|
|
}
|
|
}
|
|
|
|
|
|
void smc1_lineif(struct uart_cpm_port *pinfo)
|
|
void smc1_lineif(struct uart_cpm_port *pinfo)
|
|
{
|
|
{
|
|
- volatile iop_cpm2_t *io = &cpm2_immr->im_ioport;
|
|
|
|
|
|
+ volatile iop_cpm2_t *io = cpm2_map(im_ioport);
|
|
|
|
+ volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
|
|
|
|
|
|
/* SMC1 is only on port D */
|
|
/* SMC1 is only on port D */
|
|
io->iop_ppard |= 0x00c00000;
|
|
io->iop_ppard |= 0x00c00000;
|
|
@@ -98,13 +102,17 @@ void smc1_lineif(struct uart_cpm_port *pinfo)
|
|
io->iop_psord &= ~0x00c00000;
|
|
io->iop_psord &= ~0x00c00000;
|
|
|
|
|
|
/* Wire BRG1 to SMC1 */
|
|
/* Wire BRG1 to SMC1 */
|
|
- cpm2_immr->im_cpmux.cmx_smr &= 0x0f;
|
|
|
|
|
|
+ cpmux->cmx_smr &= 0x0f;
|
|
pinfo->brg = 1;
|
|
pinfo->brg = 1;
|
|
|
|
+
|
|
|
|
+ cpm2_unmap(cpmux);
|
|
|
|
+ cpm2_unmap(io);
|
|
}
|
|
}
|
|
|
|
|
|
void smc2_lineif(struct uart_cpm_port *pinfo)
|
|
void smc2_lineif(struct uart_cpm_port *pinfo)
|
|
{
|
|
{
|
|
- volatile iop_cpm2_t *io = &cpm2_immr->im_ioport;
|
|
|
|
|
|
+ volatile iop_cpm2_t *io = cpm2_map(im_ioport);
|
|
|
|
+ volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
|
|
|
|
|
|
/* SMC2 is only on port A */
|
|
/* SMC2 is only on port A */
|
|
io->iop_ppara |= 0x00c00000;
|
|
io->iop_ppara |= 0x00c00000;
|
|
@@ -113,13 +121,17 @@ void smc2_lineif(struct uart_cpm_port *pinfo)
|
|
io->iop_psora &= ~0x00c00000;
|
|
io->iop_psora &= ~0x00c00000;
|
|
|
|
|
|
/* Wire BRG2 to SMC2 */
|
|
/* Wire BRG2 to SMC2 */
|
|
- cpm2_immr->im_cpmux.cmx_smr &= 0xf0;
|
|
|
|
|
|
+ cpmux->cmx_smr &= 0xf0;
|
|
pinfo->brg = 2;
|
|
pinfo->brg = 2;
|
|
|
|
+
|
|
|
|
+ cpm2_unmap(cpmux);
|
|
|
|
+ cpm2_unmap(io);
|
|
}
|
|
}
|
|
|
|
|
|
void scc1_lineif(struct uart_cpm_port *pinfo)
|
|
void scc1_lineif(struct uart_cpm_port *pinfo)
|
|
{
|
|
{
|
|
- volatile iop_cpm2_t *io = &cpm2_immr->im_ioport;
|
|
|
|
|
|
+ volatile iop_cpm2_t *io = cpm2_map(im_ioport);
|
|
|
|
+ volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
|
|
|
|
|
|
/* Use Port D for SCC1 instead of other functions. */
|
|
/* Use Port D for SCC1 instead of other functions. */
|
|
io->iop_ppard |= 0x00000003;
|
|
io->iop_ppard |= 0x00000003;
|
|
@@ -129,9 +141,12 @@ void scc1_lineif(struct uart_cpm_port *pinfo)
|
|
io->iop_pdird |= 0x00000002; /* Tx */
|
|
io->iop_pdird |= 0x00000002; /* Tx */
|
|
|
|
|
|
/* Wire BRG1 to SCC1 */
|
|
/* Wire BRG1 to SCC1 */
|
|
- cpm2_immr->im_cpmux.cmx_scr &= 0x00ffffff;
|
|
|
|
- cpm2_immr->im_cpmux.cmx_scr |= 0x00000000;
|
|
|
|
|
|
+ cpmux->cmx_scr &= 0x00ffffff;
|
|
|
|
+ cpmux->cmx_scr |= 0x00000000;
|
|
pinfo->brg = 1;
|
|
pinfo->brg = 1;
|
|
|
|
+
|
|
|
|
+ cpm2_unmap(cpmux);
|
|
|
|
+ cpm2_unmap(io);
|
|
}
|
|
}
|
|
|
|
|
|
void scc2_lineif(struct uart_cpm_port *pinfo)
|
|
void scc2_lineif(struct uart_cpm_port *pinfo)
|
|
@@ -144,43 +159,57 @@ void scc2_lineif(struct uart_cpm_port *pinfo)
|
|
* be supported in a sane fashion.
|
|
* be supported in a sane fashion.
|
|
*/
|
|
*/
|
|
#ifndef CONFIG_STX_GP3
|
|
#ifndef CONFIG_STX_GP3
|
|
- volatile iop_cpm2_t *io = &cpm2_immr->im_ioport;
|
|
|
|
|
|
+ volatile iop_cpm2_t *io = cpm2_map(im_ioport);
|
|
|
|
+ volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
|
|
|
|
+
|
|
io->iop_pparb |= 0x008b0000;
|
|
io->iop_pparb |= 0x008b0000;
|
|
io->iop_pdirb |= 0x00880000;
|
|
io->iop_pdirb |= 0x00880000;
|
|
io->iop_psorb |= 0x00880000;
|
|
io->iop_psorb |= 0x00880000;
|
|
io->iop_pdirb &= ~0x00030000;
|
|
io->iop_pdirb &= ~0x00030000;
|
|
io->iop_psorb &= ~0x00030000;
|
|
io->iop_psorb &= ~0x00030000;
|
|
#endif
|
|
#endif
|
|
- cpm2_immr->im_cpmux.cmx_scr &= 0xff00ffff;
|
|
|
|
- cpm2_immr->im_cpmux.cmx_scr |= 0x00090000;
|
|
|
|
|
|
+ cpmux->cmx_scr &= 0xff00ffff;
|
|
|
|
+ cpmux->cmx_scr |= 0x00090000;
|
|
pinfo->brg = 2;
|
|
pinfo->brg = 2;
|
|
|
|
+
|
|
|
|
+ cpm2_unmap(cpmux);
|
|
|
|
+ cpm2_unmap(io);
|
|
}
|
|
}
|
|
|
|
|
|
void scc3_lineif(struct uart_cpm_port *pinfo)
|
|
void scc3_lineif(struct uart_cpm_port *pinfo)
|
|
{
|
|
{
|
|
- volatile iop_cpm2_t *io = &cpm2_immr->im_ioport;
|
|
|
|
|
|
+ volatile iop_cpm2_t *io = cpm2_map(im_ioport);
|
|
|
|
+ volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
|
|
|
|
+
|
|
io->iop_pparb |= 0x008b0000;
|
|
io->iop_pparb |= 0x008b0000;
|
|
io->iop_pdirb |= 0x00880000;
|
|
io->iop_pdirb |= 0x00880000;
|
|
io->iop_psorb |= 0x00880000;
|
|
io->iop_psorb |= 0x00880000;
|
|
io->iop_pdirb &= ~0x00030000;
|
|
io->iop_pdirb &= ~0x00030000;
|
|
io->iop_psorb &= ~0x00030000;
|
|
io->iop_psorb &= ~0x00030000;
|
|
- cpm2_immr->im_cpmux.cmx_scr &= 0xffff00ff;
|
|
|
|
- cpm2_immr->im_cpmux.cmx_scr |= 0x00001200;
|
|
|
|
|
|
+ cpmux->cmx_scr &= 0xffff00ff;
|
|
|
|
+ cpmux->cmx_scr |= 0x00001200;
|
|
pinfo->brg = 3;
|
|
pinfo->brg = 3;
|
|
|
|
+
|
|
|
|
+ cpm2_unmap(cpmux);
|
|
|
|
+ cpm2_unmap(io);
|
|
}
|
|
}
|
|
|
|
|
|
void scc4_lineif(struct uart_cpm_port *pinfo)
|
|
void scc4_lineif(struct uart_cpm_port *pinfo)
|
|
{
|
|
{
|
|
- volatile iop_cpm2_t *io = &cpm2_immr->im_ioport;
|
|
|
|
|
|
+ volatile iop_cpm2_t *io = cpm2_map(im_ioport);
|
|
|
|
+ volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
|
|
|
|
|
|
io->iop_ppard |= 0x00000600;
|
|
io->iop_ppard |= 0x00000600;
|
|
io->iop_psord &= ~0x00000600; /* Tx/Rx */
|
|
io->iop_psord &= ~0x00000600; /* Tx/Rx */
|
|
io->iop_pdird &= ~0x00000200; /* Rx */
|
|
io->iop_pdird &= ~0x00000200; /* Rx */
|
|
io->iop_pdird |= 0x00000400; /* Tx */
|
|
io->iop_pdird |= 0x00000400; /* Tx */
|
|
|
|
|
|
- cpm2_immr->im_cpmux.cmx_scr &= 0xffffff00;
|
|
|
|
- cpm2_immr->im_cpmux.cmx_scr |= 0x0000001b;
|
|
|
|
|
|
+ cpmux->cmx_scr &= 0xffffff00;
|
|
|
|
+ cpmux->cmx_scr |= 0x0000001b;
|
|
pinfo->brg = 4;
|
|
pinfo->brg = 4;
|
|
|
|
+
|
|
|
|
+ cpm2_unmap(cpmux);
|
|
|
|
+ cpm2_unmap(io);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -255,16 +284,23 @@ void cpm_uart_freebuf(struct uart_cpm_port *pinfo)
|
|
/* Setup any dynamic params in the uart desc */
|
|
/* Setup any dynamic params in the uart desc */
|
|
int cpm_uart_init_portdesc(void)
|
|
int cpm_uart_init_portdesc(void)
|
|
{
|
|
{
|
|
|
|
+#if defined(CONFIG_SERIAL_CPM_SMC1) || defined(CONFIG_SERIAL_CPM_SMC2)
|
|
|
|
+ u32 addr;
|
|
|
|
+#endif
|
|
pr_debug("CPM uart[-]:init portdesc\n");
|
|
pr_debug("CPM uart[-]:init portdesc\n");
|
|
|
|
|
|
cpm_uart_nr = 0;
|
|
cpm_uart_nr = 0;
|
|
#ifdef CONFIG_SERIAL_CPM_SMC1
|
|
#ifdef CONFIG_SERIAL_CPM_SMC1
|
|
- cpm_uart_ports[UART_SMC1].smcp = (smc_t *) & cpm2_immr->im_smc[0];
|
|
|
|
- cpm_uart_ports[UART_SMC1].smcup =
|
|
|
|
- (smc_uart_t *) & cpm2_immr->im_dprambase[PROFF_SMC1];
|
|
|
|
- *(u16 *)(&cpm2_immr->im_dprambase[PROFF_SMC1_BASE]) = PROFF_SMC1;
|
|
|
|
|
|
+ cpm_uart_ports[UART_SMC1].smcp = (smc_t *) cpm2_map(im_smc[0]);
|
|
cpm_uart_ports[UART_SMC1].port.mapbase =
|
|
cpm_uart_ports[UART_SMC1].port.mapbase =
|
|
- (unsigned long)&cpm2_immr->im_smc[0];
|
|
|
|
|
|
+ (unsigned long)cpm_uart_ports[UART_SMC1].smcp;
|
|
|
|
+
|
|
|
|
+ cpm_uart_ports[UART_SMC1].smcup =
|
|
|
|
+ (smc_uart_t *) cpm2_map_size(im_dprambase[PROFF_SMC1], PROFF_SMC_SIZE);
|
|
|
|
+ addr = (u16 *)cpm2_map_size(im_dprambase[PROFF_SMC1_BASE], 2);
|
|
|
|
+ *addr = PROFF_SMC1;
|
|
|
|
+ cpm2_unmap(addr);
|
|
|
|
+
|
|
cpm_uart_ports[UART_SMC1].smcp->smc_smcm |= (SMCM_RX | SMCM_TX);
|
|
cpm_uart_ports[UART_SMC1].smcp->smc_smcm |= (SMCM_RX | SMCM_TX);
|
|
cpm_uart_ports[UART_SMC1].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN);
|
|
cpm_uart_ports[UART_SMC1].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN);
|
|
cpm_uart_ports[UART_SMC1].port.uartclk = uart_clock();
|
|
cpm_uart_ports[UART_SMC1].port.uartclk = uart_clock();
|
|
@@ -272,12 +308,16 @@ int cpm_uart_init_portdesc(void)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_SERIAL_CPM_SMC2
|
|
#ifdef CONFIG_SERIAL_CPM_SMC2
|
|
- cpm_uart_ports[UART_SMC2].smcp = (smc_t *) & cpm2_immr->im_smc[1];
|
|
|
|
- cpm_uart_ports[UART_SMC2].smcup =
|
|
|
|
- (smc_uart_t *) & cpm2_immr->im_dprambase[PROFF_SMC2];
|
|
|
|
- *(u16 *)(&cpm2_immr->im_dprambase[PROFF_SMC2_BASE]) = PROFF_SMC2;
|
|
|
|
|
|
+ cpm_uart_ports[UART_SMC2].smcp = (smc_t *) cpm2_map(im_smc[1]);
|
|
cpm_uart_ports[UART_SMC2].port.mapbase =
|
|
cpm_uart_ports[UART_SMC2].port.mapbase =
|
|
- (unsigned long)&cpm2_immr->im_smc[1];
|
|
|
|
|
|
+ (unsigned long)cpm_uart_ports[UART_SMC2].smcp;
|
|
|
|
+
|
|
|
|
+ cpm_uart_ports[UART_SMC2].smcup =
|
|
|
|
+ (smc_uart_t *) cpm2_map_size(im_dprambase[PROFF_SMC2], PROFF_SMC_SIZE);
|
|
|
|
+ addr = (u16 *)cpm2_map_size(im_dprambase[PROFF_SMC2_BASE], 2);
|
|
|
|
+ *addr = PROFF_SMC2;
|
|
|
|
+ cpm2_unmap(addr);
|
|
|
|
+
|
|
cpm_uart_ports[UART_SMC2].smcp->smc_smcm |= (SMCM_RX | SMCM_TX);
|
|
cpm_uart_ports[UART_SMC2].smcp->smc_smcm |= (SMCM_RX | SMCM_TX);
|
|
cpm_uart_ports[UART_SMC2].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN);
|
|
cpm_uart_ports[UART_SMC2].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN);
|
|
cpm_uart_ports[UART_SMC2].port.uartclk = uart_clock();
|
|
cpm_uart_ports[UART_SMC2].port.uartclk = uart_clock();
|
|
@@ -285,11 +325,12 @@ int cpm_uart_init_portdesc(void)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_SERIAL_CPM_SCC1
|
|
#ifdef CONFIG_SERIAL_CPM_SCC1
|
|
- cpm_uart_ports[UART_SCC1].sccp = (scc_t *) & cpm2_immr->im_scc[0];
|
|
|
|
- cpm_uart_ports[UART_SCC1].sccup =
|
|
|
|
- (scc_uart_t *) & cpm2_immr->im_dprambase[PROFF_SCC1];
|
|
|
|
|
|
+ cpm_uart_ports[UART_SCC1].sccp = (scc_t *) cpm2_map(im_scc[0]);
|
|
cpm_uart_ports[UART_SCC1].port.mapbase =
|
|
cpm_uart_ports[UART_SCC1].port.mapbase =
|
|
- (unsigned long)&cpm2_immr->im_scc[0];
|
|
|
|
|
|
+ (unsigned long)cpm_uart_ports[UART_SCC1].sccp;
|
|
|
|
+ cpm_uart_ports[UART_SCC1].sccup =
|
|
|
|
+ (scc_uart_t *) cpm2_map_size(im_dprambase[PROFF_SCC1], PROFF_SCC_SIZE);
|
|
|
|
+
|
|
cpm_uart_ports[UART_SCC1].sccp->scc_sccm &=
|
|
cpm_uart_ports[UART_SCC1].sccp->scc_sccm &=
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
cpm_uart_ports[UART_SCC1].sccp->scc_gsmrl &=
|
|
cpm_uart_ports[UART_SCC1].sccp->scc_gsmrl &=
|
|
@@ -299,11 +340,12 @@ int cpm_uart_init_portdesc(void)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_SERIAL_CPM_SCC2
|
|
#ifdef CONFIG_SERIAL_CPM_SCC2
|
|
- cpm_uart_ports[UART_SCC2].sccp = (scc_t *) & cpm2_immr->im_scc[1];
|
|
|
|
- cpm_uart_ports[UART_SCC2].sccup =
|
|
|
|
- (scc_uart_t *) & cpm2_immr->im_dprambase[PROFF_SCC2];
|
|
|
|
|
|
+ cpm_uart_ports[UART_SCC2].sccp = (scc_t *) cpm2_map(im_scc[1]);
|
|
cpm_uart_ports[UART_SCC2].port.mapbase =
|
|
cpm_uart_ports[UART_SCC2].port.mapbase =
|
|
- (unsigned long)&cpm2_immr->im_scc[1];
|
|
|
|
|
|
+ (unsigned long)cpm_uart_ports[UART_SCC2].sccp;
|
|
|
|
+ cpm_uart_ports[UART_SCC2].sccup =
|
|
|
|
+ (scc_uart_t *) cpm2_map_size(im_dprambase[PROFF_SCC2], PROFF_SCC_SIZE);
|
|
|
|
+
|
|
cpm_uart_ports[UART_SCC2].sccp->scc_sccm &=
|
|
cpm_uart_ports[UART_SCC2].sccp->scc_sccm &=
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
cpm_uart_ports[UART_SCC2].sccp->scc_gsmrl &=
|
|
cpm_uart_ports[UART_SCC2].sccp->scc_gsmrl &=
|
|
@@ -313,11 +355,12 @@ int cpm_uart_init_portdesc(void)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_SERIAL_CPM_SCC3
|
|
#ifdef CONFIG_SERIAL_CPM_SCC3
|
|
- cpm_uart_ports[UART_SCC3].sccp = (scc_t *) & cpm2_immr->im_scc[2];
|
|
|
|
- cpm_uart_ports[UART_SCC3].sccup =
|
|
|
|
- (scc_uart_t *) & cpm2_immr->im_dprambase[PROFF_SCC3];
|
|
|
|
|
|
+ cpm_uart_ports[UART_SCC3].sccp = (scc_t *) cpm2_map(im_scc[2]);
|
|
cpm_uart_ports[UART_SCC3].port.mapbase =
|
|
cpm_uart_ports[UART_SCC3].port.mapbase =
|
|
- (unsigned long)&cpm2_immr->im_scc[2];
|
|
|
|
|
|
+ (unsigned long)cpm_uart_ports[UART_SCC3].sccp;
|
|
|
|
+ cpm_uart_ports[UART_SCC3].sccup =
|
|
|
|
+ (scc_uart_t *) cpm2_map_size(im_dprambase[PROFF_SCC3], PROFF_SCC_SIZE);
|
|
|
|
+
|
|
cpm_uart_ports[UART_SCC3].sccp->scc_sccm &=
|
|
cpm_uart_ports[UART_SCC3].sccp->scc_sccm &=
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
cpm_uart_ports[UART_SCC3].sccp->scc_gsmrl &=
|
|
cpm_uart_ports[UART_SCC3].sccp->scc_gsmrl &=
|
|
@@ -327,11 +370,12 @@ int cpm_uart_init_portdesc(void)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_SERIAL_CPM_SCC4
|
|
#ifdef CONFIG_SERIAL_CPM_SCC4
|
|
- cpm_uart_ports[UART_SCC4].sccp = (scc_t *) & cpm2_immr->im_scc[3];
|
|
|
|
- cpm_uart_ports[UART_SCC4].sccup =
|
|
|
|
- (scc_uart_t *) & cpm2_immr->im_dprambase[PROFF_SCC4];
|
|
|
|
|
|
+ cpm_uart_ports[UART_SCC4].sccp = (scc_t *) cpm2_map(im_scc[3]);
|
|
cpm_uart_ports[UART_SCC4].port.mapbase =
|
|
cpm_uart_ports[UART_SCC4].port.mapbase =
|
|
- (unsigned long)&cpm2_immr->im_scc[3];
|
|
|
|
|
|
+ (unsigned long)cpm_uart_ports[UART_SCC4].sccp;
|
|
|
|
+ cpm_uart_ports[UART_SCC4].sccup =
|
|
|
|
+ (scc_uart_t *) cpm2_map_size(im_dprambase[PROFF_SCC4], PROFF_SCC_SIZE);
|
|
|
|
+
|
|
cpm_uart_ports[UART_SCC4].sccp->scc_sccm &=
|
|
cpm_uart_ports[UART_SCC4].sccp->scc_sccm &=
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
~(UART_SCCM_TX | UART_SCCM_RX);
|
|
cpm_uart_ports[UART_SCC4].sccp->scc_gsmrl &=
|
|
cpm_uart_ports[UART_SCC4].sccp->scc_gsmrl &=
|