[PATCH] innocuous changes to facilitate SMC1 relocation

Robert P. J. Day rpjday at mindspring.com
Tue Sep 21 20:43:24 EST 2004


   a fairly innocent patch that shouldn't break anything, just adds 
support for eventual SMC1 relocation patch -- can someone please, 
please, pretty please apply this?

   the changes:

   1) add definition of smp variable to micropatch.c for eventual use
   2) increase RPBASE to avoid obvious memory clash
   3) change verify_patch() to restore commproc->cp_rccr to what it
 	was before it was cleared
   4) extend struct definition of smc_uart_t in commproc.h to define
 	the SMC1 relocation pointer
   5) change definition of reserved space in struct scc_uart to char[]
 	from meaningless, chaotic selection of uint/ushort

   the only reservation i have is the change to verify_patch() to 
restore the value of cp_rccr to what it was before it was cleared. 
and before anyone says, "i don't know, it's worked fine until now," a 
quick grep shows that absolutely no one else in the entire source tree 
even calls this routine, so there's really no way to know if it's ever 
worked in the first place.



--- linuxppc-2.5/arch/ppc/8xx_io/micropatch.c	2004-09-21 06:20:02.375914800 -0400
+++ linuxppc-2.5-new/arch/ppc/8xx_io/micropatch.c	2004-09-21 06:28:37.208648328 -0400
@@ -638,6 +638,7 @@
  	volatile cpm8xx_t	*commproc;
  	volatile iic_t		*iip;
  	volatile spi_t		*spp;
+	volatile smc_uart_t	*smp;
  	int	i;

  	commproc = (cpm8xx_t *)&immr->im_cpm;
@@ -683,7 +684,7 @@
  #if defined(USE_SMC_PATCH) || defined(USE_IIC_PATCH)

  	iip = (iic_t *)&commproc->cp_dparam[PROFF_IIC];
-#define RPBASE 0x0400
+#define RPBASE 0x0500
  	iip->iic_rpbase = RPBASE;

  	/* Put SPI above the IIC, also 32-byte aligned.
@@ -747,10 +748,12 @@
  	volatile uint		*dp;
  	volatile cpm8xx_t	*commproc;
  	int i;
+	ushort save_rccr;

  	commproc = (cpm8xx_t *)&immr->im_cpm;

  	printk("cp_rccr %x\n", commproc->cp_rccr);
+	save_rccr = commproc->cp_rccr ;
  	commproc->cp_rccr = 0;

  	dp = (uint *)(commproc->cp_dpmem);
@@ -771,7 +774,7 @@
  			break; 		}

-	commproc->cp_rccr = 0x0009;
+	commproc->cp_rccr = save_rccr;
  #endif /* PATCH_DEFINED */
  }

--- linuxppc-2.5/include/asm-ppc/commproc.h	2004-09-16 13:08:12.000000000 -0400
+++ linuxppc-2.5-new/include/asm-ppc/commproc.h	2004-09-16 13:40:52.000000000 -0400
@@ -145,6 +145,8 @@
  	ushort	smc_brkec;	/* rcv'd break condition counter */
  	ushort	smc_brkcr;	/* xmt break count register */
  	ushort	smc_rmask;	/* Temporary bit mask */
+	char	res1[8];	/* Reserved */
+	ushort	smc_rpbase;	/* Relocation pointer */
  } smc_uart_t;

  /* Function code bits.
@@ -475,8 +477,7 @@
  */
  typedef struct scc_uart {
  	sccp_t	scc_genscc;
-	uint	scc_res1;	/* Reserved */
-	uint	scc_res2;	/* Reserved */
+	char	res1[8];	/* Reserved */
  	ushort	scc_maxidl;	/* Maximum idle chars */
  	ushort	scc_idlc;	/* temp idle counter */
  	ushort	scc_brkcr;	/* Break count register */
@@ -560,9 +561,9 @@
  	ushort	iic_tbptr;	/* Internal */
  	ushort	iic_tbc;	/* Internal */
  	uint	iic_txtmp;	/* Internal */
-	uint	iic_res;	/* reserved */
+	char	res1[4];	/* Reserved */
    	ushort	iic_rpbase;	/* Relocation pointer */
-	ushort	iic_res2;	/* reserved */
+	char	res2[2];	/* Reserved */
  } iic_t;

  #define BD_IIC_START		((ushort)0x0400)



More information about the Linuxppc-dev mailing list