From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Roese Date: Thu, 17 Jan 2008 08:18:03 +0100 Subject: [U-Boot-Users] [PATCH] ppc_4xx resubmit: netstal/common define routines used by all boards In-Reply-To: <1200505160-1462-2-git-send-email-niklaus.giger@netstal.com> References: <1200505160-1462-1-git-send-email-niklaus.giger@netstal.com> <1200505160-1462-2-git-send-email-niklaus.giger@netstal.com> Message-ID: <200801170818.03928.sr@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Wednesday 16 January 2008, Niklaus Giger wrote: > Added some routines used by all Netstal boards: > - nm_bsp.c: - nm_show_print and > - common_misc_init_r > - set_params_for_sw_install. Bery specific code to handle our SW > installation procedure > - fixed_sdram.c: Common routines for HCU4 (and upcoming) MCU25 boards > to handle sdram initialization. > - nm.h: Common header Please find some comments below. > Signed-off-by: Niklaus Giger > --- > board/netstal/common/fixed_sdram.c | 107 +++++++++++++++++++++++++++++ > board/netstal/common/nm.h | 40 +++++++++++ > board/netstal/common/nm_bsp.c | 131 +++++++++++++++++++++++++++++++----- > 3 files changed, 262 insertions(+), 16 deletions(-) > create mode 100644 board/netstal/common/fixed_sdram.c > create mode 100644 board/netstal/common/nm.h > > diff --git a/board/netstal/common/fixed_sdram.c b/board/netstal/common/fixed_sdram.c > new file mode 100644 > index 0000000..f6e4b5a > --- /dev/null > +++ b/board/netstal/common/fixed_sdram.c > @@ -0,0 +1,107 @@ > +/* > + *(C) Copyright 2005-2008 Netstal Maschinen AG > + * Niklaus Giger (Niklaus.Giger at netstal.com) > + * > + * This source code is free software; you can redistribute it > + * and/or modify it in source code form under the terms of the GNU > + * General Public License as published by the Free Software > + * Foundation; either version 2 of the License, or (at your option) > + * any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA > + */ > + > +#include > +#include > +#include > +#include "nm.h" > + > +#if defined(DEBUG) > +void show_sdram_registers(void) > +{ > + u32 value; > + > + printf ("SDRAM Controller Registers --\n"); > + mfsdram(mem_mcopt1, value); You are mixing two programming styles here. func () and func(). Please only use one style in one source file. > + printf (" SDRAM0_CFG : 0x%08x\n", value); > + mfsdram(mem_status, value); > + printf (" SDRAM0_STATUS: 0x%08x\n", value); > + mfsdram(mem_mb0cf, value); > + printf (" SDRAM0_B0CR : 0x%08x\n", value); > + mfsdram(mem_mb1cf, value); > + printf (" SDRAM0_B1CR : 0x%08x\n", value); > + mfsdram(mem_sdtr1, value); > + printf (" SDRAM0_TR : 0x%08x\n", value); > + mfsdram(mem_rtr, value); > + printf (" SDRAM0_RTR : 0x%08x\n", value); > +} > +#endif > + > +long int fixed_hcu4_sdram (unsigned int dram_size) > +{ > +#ifdef DEBUG > + printf (__FUNCTION__); > +#endif debug(__FUNCTION__); > + /* disable memory controller */ > + mtdcr (memcfga, mem_mcopt1); > + mtdcr (memcfgd, 0x00000000); mtsdram(mem_mcopt1, 0x00000000); > + udelay (500); > + > + /* Clear SDRAM0_BESR0 (Bus Error Syndrome Register) */ > + mtdcr (memcfga, mem_besra); > + mtdcr (memcfgd, 0xffffffff); Please use the mtsdram/mfsdram everywhere in this file. > + /* Clear SDRAM0_BESR1 (Bus Error Syndrome Register) */ > + mtdcr (memcfga, mem_besrb); > + mtdcr (memcfgd, 0xffffffff); > + > + /* Clear SDRAM0_ECCCFG (disable ECC) */ > + mtdcr (memcfga, mem_ecccf); > + mtdcr (memcfgd, 0x00000000); > + > + /* Clear SDRAM0_ECCESR (ECC Error Syndrome Register) */ > + mtdcr (memcfga, mem_eccerr); > + mtdcr (memcfgd, 0xffffffff); > + > + /* Timing register: CASL=2, PTA=2, CTP=2, LDF=1, RFTA=5, RCD=2 > + */ > + mtdcr (memcfga, mem_sdtr1); > + mtdcr (memcfgd, 0x008a4015); > + > + /* Memory Bank 0 Config == BA=0x00000000, SZ=64M, AM=3, BE=1 > + */ > + mtdcr (memcfga, mem_mb0cf); > + if(dram_size == 32*1024*1024) { mtdcr (memcfgd, 0x00062001); } > + if(dram_size == 64*1024*1024) { mtdcr (memcfgd, 0x00084001); } > + if(dram_size == 128*1024*1024) { mtdcr (memcfgd, 0x000A4001); } Multiple problems in this one. Why not: switch (dram_size >> 20) { case 32: mtsdram(mem_mb0cf, 0x00062001); break; case 64: mtsdram(mem_mb0cf, 0x00084001); break; case 128: mtsdram(mem_mb0cf, 0x000A4001); break; default: printf("Some error here...\n"); } > + /* refresh timer = 0x400 */ > + mtdcr (memcfga, mem_rtr); > + if(dram_size == 32*1024*1024) { mtdcr (memcfgd, 0x07F00000); } > + if(dram_size == 64*1024*1024) { mtdcr (memcfgd, 0x04100000); } > + if(dram_size == 128*1024*1024) { mtdcr (memcfgd, 0x04100000); } Again. > + /* Power management idle timer set to the default. */ > + mtdcr (memcfga, mem_pmit); > + mtdcr (memcfgd, 0x07c00000); > + > + udelay (500); > + > + /* Enable banks (DCE=1, BPRF=1, ECCDD=1, EMDUL=1) TODO */ > + mtdcr (memcfga, mem_mcopt1); > + mtdcr (memcfgd, 0x90800000); > + > +#ifdef DEBUG > + printf ("%s: done\n", __FUNCTION__); > +#endif > + return dram_size; > +} > + > diff --git a/board/netstal/common/nm.h b/board/netstal/common/nm.h > new file mode 100644 > index 0000000..7e59390 > --- /dev/null > +++ b/board/netstal/common/nm.h > @@ -0,0 +1,40 @@ > +/* > + *(C) Copyright 2005-2007 Netstal Maschinen AG > + * Niklaus Giger (Niklaus.Giger at netstal.com) > + * > + * This source code is free software; you can redistribute it > + * and/or modify it in source code form under the terms of the GNU > + * General Public License as published by the Free Software > + * Foundation; either version 2 of the License, or (at your option) > + * any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA > + */ > + > +extern void hcu_led_set(u32 value); > +extern u32 get_serial_number(void); > +extern u32 hcu_get_slot(void); > +extern int board_with_pci(void); > +extern void nm_show_print(int generation, int index, int hw_capabilities); > +extern void set_params_for_sw_install(int install_requested, char *board_name ); > +extern void common_misc_init_r(void); > + > +enum { > + /* HW_GENERATION_HCU1 is no longer supported */ > + HW_GENERATION_HCU2 = 0x10, > + HW_GENERATION_HCU3 = 0x10, > + HW_GENERATION_HCU4 = 0x20, > + HW_GENERATION_HCU5 = 0x30, > + HW_GENERATION_MCU = 0x08, > + HW_GENERATION_MCU20 = 0x0a, > + HW_GENERATION_MCU25 = 0x09, > +}; > + > + > diff --git a/board/netstal/common/nm_bsp.c b/board/netstal/common/nm_bsp.c > index a9de45e..c756ecd 100644 > --- a/board/netstal/common/nm_bsp.c > +++ b/board/netstal/common/nm_bsp.c > @@ -1,5 +1,5 @@ > /* > - *(C) Copyright 2005-2007 Netstal Maschinen AG > + *(C) Copyright 2005-2008 Netstal Maschinen AG > * Niklaus Giger (Niklaus.Giger at netstal.com) > * > * This source code is free software; you can redistribute it > @@ -20,22 +20,121 @@ > > #include > #include > +#include > +#include "nm.h" > > -#ifdef CONFIG_CMD_BSP > -/* > - * Command nm_bsp: Netstal Maschinen BSP specific command > - */ > -int nm_bsp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) > +DECLARE_GLOBAL_DATA_PTR; > + > +#define DEFAULT_ETH_ADDR "ethaddr" > + > +typedef struct {u8 id; char *name;} generation_info; > + > +generation_info generations[7] = > +{ generation_info generations[7] = { > + {HW_GENERATION_HCU2, "HCU2"}, > + {HW_GENERATION_HCU3, "HCU3"}, > + {HW_GENERATION_HCU4, "HCU4"}, > + {HW_GENERATION_HCU5, "HCU5"}, > + {HW_GENERATION_MCU, "MCU"}, > + {HW_GENERATION_MCU20, "MCU20"}, > + {HW_GENERATION_MCU25, "MCU25"}, > +}; > + > +void nm_show_print(int generation, int index, int hw_capabilities) > +{ > + int j; > + char *generationName=0; char *generationName = 0; > + > + /* reset ANSI terminal color mode */ > + printf("\x1B""[0m""Netstal Maschinen AG: "); > + for (j=0; j < (sizeof(generations)/sizeof(generations[0])); j++) > + { for (j=0; j < (sizeof(generations)/sizeof(generations[0])); j++) { or even: for (j=0; j < ARRAY_SIZE(generations); j++) { > + if (generations[j].id == generation) > + { if (generations[j].id == generation) { Please fix and re-submit. Thanks. Best regards, Stefan ===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de =====================================================================