powerpc: mpc8xx: CPM parameter RAM can be anywhere
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Wed, 3 May 2023 08:31:19 +0000 (10:31 +0200)
committerChristophe Leroy <christophe.leroy@csgroup.eu>
Thu, 4 May 2023 08:58:07 +0000 (10:58 +0200)
With relocation, CPM parameter RAM can be anywhere in the
dual port RAM, so don't split dual port RAM.

Remove dparam and dparam16 members of struct comm_proc

PROFF_XXX become offsets from the start of dual port RAM,
then they are now consistant with the offsets in RPBASE
registers.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
arch/powerpc/cpu/mpc8xx/cpu.c
arch/powerpc/include/asm/cpm_8xx.h
arch/powerpc/include/asm/immap_8xx.h
drivers/serial/serial_mpc8xx.c
drivers/spi/mpc8xx_spi.c

index 9b587fb..56383ce 100644 (file)
@@ -127,7 +127,7 @@ static int check_CPU(long clock, uint pvr, uint immr)
                return -1;
 
        k = (immr << 16) |
-           in_be16(&immap->im_cpm.cp_dparam16[PROFF_REVNUM / sizeof(u16)]);
+           in_be16((u16 __iomem *)&immap->im_cpm.cp_dpmem[PROFF_REVNUM]);
 
        /*
         * Some boards use sockets so different CPUs can be used.
index 85903d2..09c24ef 100644 (file)
@@ -92,15 +92,15 @@ typedef struct cpm_buf_desc {
 
 /* Parameter RAM offsets.
 */
-#define PROFF_SCC1     ((uint)0x0000)
-#define PROFF_IIC      ((uint)0x0080)
-#define PROFF_REVNUM   ((uint)0x00b0)
-#define PROFF_SCC2     ((uint)0x0100)
-#define PROFF_SPI      ((uint)0x0180)
-#define PROFF_SCC3     ((uint)0x0200)
-#define PROFF_SMC1     ((uint)0x0280)
-#define PROFF_SCC4     ((uint)0x0300)
-#define PROFF_SMC2     ((uint)0x0380)
+#define PROFF_SCC1     ((uint)0x1c00)
+#define PROFF_IIC      ((uint)0x1c80)
+#define PROFF_REVNUM   ((uint)0x1cb0)
+#define PROFF_SCC2     ((uint)0x1d00)
+#define PROFF_SPI      ((uint)0x1d80)
+#define PROFF_SCC3     ((uint)0x1e00)
+#define PROFF_SMC1     ((uint)0x1e80)
+#define PROFF_SCC4     ((uint)0x1f00)
+#define PROFF_SMC2     ((uint)0x1f80)
 
 /* Define enough so I can at least use the serial port as a UART.
  */
index 3999a02..cf1300f 100644 (file)
@@ -437,13 +437,7 @@ typedef struct comm_proc {
         * depending upon the devices used and options chosen.
         * Some processors don't have all of it populated.
         */
-       u_char  cp_dpmem[0x1C00];       /* BD / Data / ucode */
-
-       /* Parameter RAM */
-       union {
-               u_char  cp_dparam[0x400];
-               u16     cp_dparam16[0x200];
-       };
+       u_char  cp_dpmem[0x2000];       /* BD / Data / ucode / Param RAM */
 } cpm8xx_t;
 
 /* Internal memory map.
index b8d6a81..beffc34 100644 (file)
@@ -89,7 +89,7 @@ static int serial_mpc8xx_probe(struct udevice *dev)
        /* initialize pointers to SMC */
 
        sp = cp->cp_smc + SMC_INDEX;
-       up = (smc_uart_t __iomem *)&cp->cp_dparam[PROFF_SMC];
+       up = (smc_uart_t __iomem *)&cp->cp_dpmem[PROFF_SMC];
        /* Disable relocation */
        out_be16(&up->smc_rpbase, 0);
 
index d84d7ae..734b075 100644 (file)
@@ -51,7 +51,7 @@ static int mpc8xx_spi_probe(struct udevice *dev)
 {
        immap_t __iomem *immr = (immap_t __iomem *)CONFIG_SYS_IMMR;
        cpm8xx_t __iomem *cp = &immr->im_cpm;
-       spi_t __iomem *spi = (spi_t __iomem *)&cp->cp_dparam[PROFF_SPI];
+       spi_t __iomem *spi = (spi_t __iomem *)&cp->cp_dpmem[PROFF_SPI];
        cbd_t __iomem *tbdf, *rbdf;
 
        /* Disable relocation */