ppc_4xx:netstal HCU5 board: added various fixes and POST
PATCH 1/1 ppc_4xx:netstal HCU5 board: added various fixes and POST
Moved some code to nestal/common/nm_bsp.c. Added support for the vxWorks EDR. Enable trace for Lauterbach, if present. Added support for POST.
--- board/netstal/hcu5/Makefile | 3 +- board/netstal/hcu5/README.txt | 3 - board/netstal/hcu5/hcu5.c | 201 ++++++++++++++--------------------------- board/netstal/hcu5/init.S | 63 +++++++++---- board/netstal/hcu5/sdram.c | 74 +++++++-------- 5 files changed, 149 insertions(+), 195 deletions(-)
board/netstal/hcu5/Makefile +2 -1
@@ -23,9 +23,10 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(BOARD).a vpath hcu_flash.c ../common +vpath nm_bsp.c ../common # NOBJS : Netstal common objects -NOBJS = hcu_flash.o +NOBJS = hcu_flash.o nm_bsp.o COBJS = $(BOARD).o sdram.o SOBJS = init.o
board/netstal/hcu5/README.txt +0 -3
@@ -10,9 +10,6 @@ TODO: - Fix RTS/CTS problem (HW?) CONFIG_SERIAL_MULTI/CONFIG_SERIAL_SOFTWARE_FIFO hangs after Switching to interrupt driven serial input mode -- Make vxWorks start from u-boot. Possible reasons - - Does vxWorks need an entry for the Machine Check interrupt like this - tlbentry( 0x40000000, SZ_256M, 0, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) ? Caveats: --------
board/netstal/hcu5/hcu5.c +68 -133
329 lines not on this page · raw message
board/netstal/hcu5/init.S +45 -18
86 lines not on this page · raw message
board/netstal/hcu5/sdram.c +34 -40
140 lines not on this page · raw message
Signature · 6 lines
1.5.2.5 -- Niklaus Giger Netstal Maschinen AG CH-8752 Naefels
PATCH 1/1 ppc_4xx:netstal HCU5 board: added various fixes and POST
Quoted 115 lines · Niklaus Giger
Moved some code to
nestal/common/nm_bsp.c.
Added support for the vxWorks EDR.
Enable trace for Lauterbach, if present.
Added support for POST.Signed-off-by Niklaus Giger <[email protected]>--- board/netstal/hcu5/Makefile | 3 +- board/netstal/hcu5/README.txt | 3 - board/netstal/hcu5/hcu5.c | 201 ++++++++++++++--------------------------- board/netstal/hcu5/init.S | 63 +++++++++---- board/netstal/hcu5/sdram.c | 74 +++++++-------- 5 files changed, 149 insertions(+), 195 deletions(-)board/netstal/hcu5/Makefile +2
-1@@ -23,9 +23,10 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(BOARD).a vpath hcu_flash.c ../common +vpath nm_bsp.c ../common # NOBJS : Netstal common objects -NOBJS = hcu_flash.o +NOBJS = hcu_flash.o nm_bsp.o COBJS = $(BOARD).o sdram.o SOBJS = init.oboard/netstal/hcu5/README.txt +0
-3@@ -10,9 +10,6 @@ TODO: - Fix RTS/CTS problem (HW?) CONFIG_SERIAL_MULTI/CONFIG_SERIAL_SOFTWARE_FIFO hangs after Switching to interrupt driven serial input mode -- Make vxWorks start from u-boot. Possible reasons - - Does vxWorks need an entry for the Machine Check interrupt like this - tlbentry( 0x40000000, SZ_256M, 0, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) ? Caveats: --------board/netstal/hcu5/hcu5.c +6
-25@@ -22,12 +22,14 @@#include <asm/processor.h> #include <ppc440.h> #include <asm/mmu.h> -#include <net.h> DECLARE_GLOBAL_DATA_PTR ;void hcu_led_set (u32 value); - +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);extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS ];#undef BOOTSTRAP_OPTION_A_ACTIVE@@ -42,23 +44,10 @@ extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];#define SDR0_ECID2 0x0082#define SDR0_ECID3 0x0083 -#define SYS_IO_ADDRESS (CFG_CS_2 + 0x00e00000) +#define SYS_IO_ADDRESS (CFG_CS_2 + 0x00e00000)#define SYS_SLOT_ADDRESS (CFG_CPLD + 0x00400000) - -#define DEFAULT_ETH_ADDR "ethaddr" -/* ethaddr for first or etha1ddr for second ethernet */ - -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 , -}; - +#define HCU_DIGITAL_IO_REGISTER (CFG_CPLD + 0x0500000) +#define HCU_SW_INSTALL_REQUESTED 0x10/* * This function is run very early, out of flash, and before devices are @@ -72,7 +61,6 @@ enum {int board_early_init_f (void ) { -u32 reg;#ifdef BOOTSTRAP_OPTION_A_ACTIVE /* Booting with Bootstrap Option A @@ -172,12 +160,6 @@ int board_early_init_f(void)mtsdr (sdr_pfc0,0x00003E00 );/* Pin function: */ mtsdr (sdr_pfc1,0x00848000 );/* Pin function: UART0 has 4 pins */ -/* PCI arbiter enabled */ -mfsdr (sdr_pci0, reg); -mtsdr (sdr_pci0,0x80000000 | reg); - -pci_pre_init (0 ); -/* setup BOOT FLASH */ mtsdr (SDR0_CUST0 ,0xC0082350 );
board/netstal/hcu5/hcu5.c int board_pre_init(void) · line 180
Quoted 7 lines
board/netstal/hcu5/hcu5.c +4
-0@@ -192,33 +174,27 @@ int board_pre_init(void)#endif +int sys_install_requested (void ) +{ +u16 *ioValuePtr = (u16 *)HCU_DIGITAL_IO_REGISTER ; +return (*ioValuePtr &HCU_SW_INSTALL_REQUESTED ) !=0 ;
You are accessing CPLD registers here, right? Please use the correct accessor functions like in_be16(). And please check for other places where you access CPLD or other peripheral stuff via pointer access. This will break at some time if you don't use the correct access functions.
board/netstal/hcu5/hcu5.c int board_pre_init(void) · line 188
Quoted 9 lines
board/netstal/hcu5/hcu5.c +2
-1+} +int checkboard (void ) { -unsigned int j;u16 *hwVersReg = (u16 *)HCU_HW_VERSION_REGISTER ;u16 *boardVersReg = (u16 *)HCU_CPLD_VERSION_REGISTER ;u16 generation = *boardVersReg &0xf0 ;u16 index = *boardVersReg &0x0f ;
Here too. Please fix this.
Quoted 131 lines
board/netstal/hcu5/hcu5.c +16
-66u32 ecid0, ecid1, ecid2, ecid3; -printf ("Netstal Maschinen AG: " ); -if (generation ==HW_GENERATION_HCU3 ) -printf ("HCU3: index %d" , index); -else if (generation ==HW_GENERATION_HCU4 ) -printf ("HCU4: index %d" , index); -else if (generation ==HW_GENERATION_HCU5 ) -printf ("HCU5: index %d" , index); -printf (" HW 0x%02x\n" , *hwVersReg &0xff ); +nm_show_print (generation, index, *hwVersReg &0xff );mfsdr (SDR0_ECID0 , ecid0);mfsdr (SDR0_ECID1 , ecid1);mfsdr (SDR0_ECID2 , ecid2);mfsdr (SDR0_ECID3 , ecid3);printf ("Chip ID 0x%x 0x%x 0x%x 0x%x\n" , ecid0, ecid1, ecid2, ecid3); -for (j =0 ;j <6 ; j++) { -hcu_led_set (1 << j); -udelay (200 *1000 ); - }return 0 ; }@@ -239,7 +215,7 @@ void hcu_led_set(u32 value)/*------------------------------------------------------------------------- --+ * get_serial_number *-------------------------------------------------------------------------- -*/ -static u32 get_serial_number(void) +u32 get_serial_number(void) { u32 *serial = (u32 *)CFG_FLASH_BASE; @@ -265,60 +241,10 @@ u32 hcu_get_slot(void) *-------------------------------------------------------------------------- -*/ int misc_init_r (void ) { -char *s =getenv (DEFAULT_ETH_ADDR ); -char *e; -int i; -u32 serial =get_serial_number (); unsigned long usb2d0cr = 0;unsigned long usb2phy0cr, usb2h0cr =0 ;unsigned long sdr0_pfc1; -for (i =0 ; i <6 ; ++i) { - gd->bd->bi_enetaddr[i] = s ?simple_strtoul (s, &e,16 ) :0 ; -if (s) - s = (*e) ? e +1 : e; - } - -if (gd->bd->bi_enetaddr[3 ] ==0 && - gd->bd->bi_enetaddr[4 ] ==0 && - gd->bd->bi_enetaddr[5 ] ==0 ) { -char ethaddr[22 ]; - -/* Must be in sync with CONFIG_ETHADDR */ - gd->bd->bi_enetaddr[0 ] =0x00 ; - gd->bd->bi_enetaddr[1 ] =0x60 ; - gd->bd->bi_enetaddr[2 ] =0x13 ; - gd->bd->bi_enetaddr[3 ] = (serial >>16 ) &0xff ; - gd->bd->bi_enetaddr[4 ] = (serial >>8 ) &0xff ; - gd->bd->bi_enetaddr[5 ] =hcu_get_slot (); -sprintf (ethaddr,"%02X:%02X:%02X:%02X:%02X:%02X\0" , - gd->bd->bi_enetaddr[0 ], gd->bd->bi_enetaddr[1 ], - gd->bd->bi_enetaddr[2 ], gd->bd->bi_enetaddr[3 ], - gd->bd->bi_enetaddr[4 ], gd->bd->bi_enetaddr[5 ]) ; -printf ("%s: Setting eth %s serial 0x%x\n" , __FUNCTION__, - ethaddr, serial); -setenv (DEFAULT_ETH_ADDR , ethaddr); - } - -/* IP-Adress update */ - { -IPaddr_t ipaddr; -char *ipstring; - - ipstring =getenv ("ipaddr" ); -if (ipstring ==0 ) - ipaddr =string_to_ip ("172.25.1.99" ); -else - ipaddr =string_to_ip (ipstring); -if ((ipaddr &0xff ) != (32 +hcu_get_slot ())) { -char tmp[22 ]; - - ipaddr = (ipaddr &0xffffff00 ) +32 +hcu_get_slot (); -ip_to_string (ipaddr, tmp); -printf ("%s: enforce %s\n" , __FUNCTION__, tmp); -setenv ("ipaddr" , tmp); - } - }#ifdef CFG_ENV_IS_IN_FLASH /* Monitor protection ON by default */ (void)flash_protect(FLAG_PROTECT_SET,@@ -326,12 +252,14 @@ int misc_init_r(void)0xffffffff , &flash_info[0]); +#ifdef CFG_ENV_ADDR_REDUND /* Env protection ON by default */ (void )flash_protect (FLAG_PROTECT_SET ,CFG_ENV_ADDR_REDUND ,CFG_ENV_ADDR_REDUND +2 *CFG_ENV_SECT_SIZE -1 , &flash_info[0 ]);#endif +#endif /* * USB stuff... @@ -376,13 +304,34 @@ int misc_init_r(void)mtsdr (SDR0_SRST1 ,0x00000000 );udelay (1000 );mtsdr (SDR0_SRST0 ,0x00000000 ); -printf ("USB: Host(int phy) Device(ext phy)\n" ); +common_misc_init_r (); +set_params_for_sw_install (sys_install_requested (),"hcu5" ); +/* We cannot easily enable trace before, as there are other +* routines messing around with sdr0_pfc1. And I do not need it. +*/ +if (mfspr (dbcr0) &0x80000000 ) {/* External debugger alive */ +/* enable trace facilty for Lauterback +* CCR0[DAPUIB]=0 Enable broadcast of instruction data +* to auxiliary processor interface +* CCR0[DTB]=0 Enable broadcast of trace information +* SDR0_PFC0[TRE] Trace signals are enabled instead of +* GPIO49-63
board/netstal/hcu5/hcu5.c int misc_init_r(void) · line 330
Quoted 10 lines
board/netstal/hcu5/hcu5.c +8
-0+*/ +mtspr (ccr0,mfspr (ccr0) &~0x00108000 ); +mtsdr (SDR0_PFC0 , sdr0_pfc1 |0x00000100 ); + }return 0 ; } +#ifdef CONFIG_PCI +int board_with_pci (void ) +{ +u32 reg;
Newline please.
Quoted 17 lines
board/netstal/hcu5/hcu5.c +3
-6+mfsdr (sdr_pci0, reg); +return (reg &SDR0_XCR_PAE_MASK ); +} -#if defined(CONFIG_PCI )/************************************************************************* * pci_pre_init * @@ -399,53 +348,37 @@ int pci_pre_init(struct pci_controller *hose) {unsigned long addr; -/*-------------------------------------------------------------------+ -* As of errata version 0.4, CHIP_8: Incorrect Write to DDR SDRAM. -* Workaround: Disable write pipelining to DDR SDRAM by setting -* PLB0_ACR[WRP] = 0. -*-------------------------------------------------------------------*/
board/netstal/hcu5/hcu5.c int pci_pre_init(struct pci_controller *hose) · line 356
Quoted 10 lines
board/netstal/hcu5/hcu5.c +5
-4+if (!board_with_pci ()) {return 0 ; } -/*-------------------------------------------------------------------+ -| Set priority for all PLB3 devices to 0. -| Set PLB3 arbiter to fair mode. -+-------------------------------------------------------------------*/ +/*------------------------------------------------------------------- +* Set priority for all PLB3 devices to 0. +* Set PLB3 arbiter to fair mode. +*-------------------------------------------------------------------*/
This isn't aligned.
Quoted 221 lines
board/netstal/hcu5/hcu5.c +23
-33mfsdr (sdr_amp1, addr);mtsdr (sdr_amp1, (addr &0x000000FF ) |0x0000FF00 ); addr =mfdcr (plb3_acr); -/* mtdcr(plb3_acr, addr & ~plb1_acr_wrp_mask); */ /* ngngng */ mtdcr (plb3_acr, addr |0x80000000 );/* Sequoia */ -/*-------------------------------------------------------------------+ -| Set priority for all PLB4 devices to 0. -+-------------------------------------------------------------------*/ +/*------------------------------------------------------------------- +* Set priority for all PLB4 devices to 0. +*-------------------------------------------------------------------*/ mfsdr (sdr_amp0, addr);mtsdr (sdr_amp0, (addr &0x000000FF ) |0x0000FF00 ); addr =mfdcr (plb4_acr) |0xa0000000 ;/* Was 0x8---- */ -/* mtdcr(plb4_acr, addr & ~plb1_acr_wrp_mask); */ /* ngngng */ mtdcr (plb4_acr, addr);/* Sequoia */ /*-------------------------------------------------------------------+ -| Set Nebula PLB4 arbiter to fair mode. -+-------------------------------------------------------------------*/ +* As of errata version 0.4, CHIP_8: Incorrect Write to DDR SDRAM. +* Workaround: Disable write pipelining to DDR SDRAM by setting +* PLB0_ACR[WRP] = 0. +*-------------------------------------------------------------------*/ /* Segment0 */ - addr = (mfdcr (plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair; - addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled; - addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep; -/* addr = (addr & ~plb0_acr_wrp_mask); */ /* ngngng */ - addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep;/* Sequoia */ - -/* mtdcr(plb0_acr, addr); */ /* Sequoia */ mtdcr (plb0_acr,0 );/* PATCH HAB: WRITE PIPELINING OFF */ /* Segment1 */ - addr = (mfdcr (plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair; - addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled; - addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep; - addr = (addr & ~plb1_acr_wrp_mask) ; -/* mtdcr(plb1_acr, addr); */ /* Sequoia */ mtdcr (plb1_acr,0 );/* PATCH HAB: WRITE PIPELINING OFF */ -return 1 ; +return board_with_pci (); }/************************************************************************* @@ -458,17 +391,18 @@ int pci_pre_init(struct pci_controller *hose)************************************************************************/ void pci_target_init (struct pci_controller *hose) { +if (!board_with_pci ()) {return ; }/*-------------------------------------------------------------+ * Set up Direct MMIO registers *-------------------------------------------------------------*/ -/*-------------------------------------------------------------+ -| PowerPC440EPX PCI Master configuration. -| Map one 1Gig range of PLB/processor addresses to PCI memory space. -| PLB address 0xA0000000-0xDFFFFFFF ==> PCI address -| 0xA0000000-0xDFFFFFFF -| Use byte reversed out routines to handle endianess. -| Make this region non-prefetchable. -+-------------------------------------------------------------*/ +/*------------------------------------------------------------- +* PowerPC440EPX PCI Master configuration. +* Map one 1Gig range of PLB/processor addresses to PCI memory space. +* PLB address 0xA0000000-0xDFFFFFFF ==> PCI address +* 0xA0000000-0xDFFFFFFF +* Use byte reversed out routines to handle endianess. +* Make this region non-prefetchable. +*-------------------------------------------------------------*/ /* PMM0 Mask/Attribute - disabled b4 setting */ out32r (PCIX0_PMM0MA ,0x00000000 );out32r (PCIX0_PMM0LA ,CFG_PCI_MEMBASE );/* PMM0 Local Address */ @@ -520,12 +454,13 @@ void pci_target_init(struct pci_controller *hose)void pci_master_init (struct pci_controller *hose) {unsigned short temp_short; +if (!board_with_pci ()) {return ; } -/*---------------------------------------------------------------+ -| Write the PowerPC440 EP PCI Configuration regs. -| Enable PowerPC440 EP to be a master on the PCI bus (PMM). -| Enable PowerPC440 EP to act as a PCI memory target (PTM). -+--------------------------------------------------------------*/ +/*--------------------------------------------------------------- +* Write the PowerPC440 EP PCI Configuration regs. +* Enable PowerPC440 EP to be a master on the PCI bus (PMM). +* Enable PowerPC440 EP to act as a PCI memory target (PTM). +*--------------------------------------------------------------*/ pci_read_config_word (0 ,PCI_COMMAND , &temp_short); pci_write_config_word(0, PCI_COMMAND, temp_short | PCI_COMMAND_MASTER |board/netstal/hcu5/init.S +5
-2@@ -39,41 +39,68 @@ tlbtab: tlbtab_start - /* vxWorks needs this entry for the Machine Check interrupt, */ - tlbentry( 0x40000000, SZ_256M, 0, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) +#ifdef CFG_TLB_FOR_BOOT_FLASH + /* TLB#0: vxWorks needs this entry for the Machine Check interrupt, */ + tlbentry( 0x40000000, SZ_256M, 0, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) + /* TLB#1: TLB-entry for DDR SDRAM (Up to 2GB) */ + tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0,AC_R|AC_W|AC_X|SA_G|SA_I ) +
board/netstal/hcu5/init.S +2
-1+ /* TLB#2: TLB-entry for EBC */ + tlbentry( 0x80000000, SZ_256M, 0x80000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) /* - * BOOT_CS (FLASH) must be second. Before relocation SA_I can be off touse the + * TLB#3:
BOOT_CS(FLASH) must be forth. Before relocationSA_I
can be off to use the * speed up boot process. It is patched after relocation to enableSA_I*/
tlbentry(CFG_BOOT_BASE_ADDR,SZ_1M,CFG_BOOT_BASE_ADDR, 1,
AC_R|AC_W|AC_X|SA_G )board/netstal/hcu5/init.S +0
-2- /* TLB-entry for PCI Memory */ - tlbentry( CFG_PCI_MEMBASE, SZ_256M, CFG_PCI_MEMBASE, 1,AC_R|AC_W|SA_G|SA_I ) +#else
board/netstal/hcu5/init.S +1
-0+ tlbentry( CFG_BOOT_BASE_ADDR, SZ_1M, CFG_BOOT_BASE_ADDR, 1,AC_R|AC_W|AC_X|SA_G ) +#endif
board/netstal/hcu5/init.S +8
-0+ + /* + * TLB entries for SDRAM are not needed on this platform. + * They are dynamically generated in the SPD DDR(2) detection + * routine. + */ + + /* TLB#4: */ tlbentry( CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 1,AC_R|AC_W|SA_G|SA_I ) + /* TLB#5: */
tlbentry(CFG_PCI_MEMBASE2,SZ_256M,CFG_PCI_MEMBASE2, 1,
AC_R|AC_W|SA_G|SA_I ) + /* TLB#6: */
tlbentry(CFG_PCI_MEMBASE3,SZ_256M,CFG_PCI_MEMBASE3, 1,
AC_R|AC_W|SA_G|SA_I )board/netstal/hcu5/init.S +0
-7- /* TLB-entry for EBC (CFG_CPLD) */ - /* tlbentry( CFG_CPLD, SZ_1K, CFG_CPLD, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) */ - /* CAN */ - tlbentry( CFG_CS_1, SZ_16M, CFG_CS_1, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) - /* IMC + CPLD */ - tlbentry( CFG_CS_2, SZ_16M, CFG_CS_2, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) - tlbentry( CFG_CS_2 + 0x1000000, SZ_16M, CFG_CS_2 + 0x1000000, 1,AC_R|AC_W|AC_X|SA_G|SA_I ) - /* IMC-Fast */
board/netstal/hcu5/init.S +0
-2- tlbentry( CFG_CS_3, SZ_16M, CFG_CS_3, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) - tlbentry( CFG_CS_3 + 0x1000000, SZ_16M, CFG_CS_3 + 0x1000000, 1,AC_R|AC_W|AC_X|SA_G|SA_I ) -
board/netstal/hcu5/init.S +13
-2/* TLB-entry for Internal Registers & OCM */ - tlbentry( CFG_PCI_BASE, SZ_16M, 0xe0000000, 0, AC_R|AC_W|AC_X|SA_I ) + /* TLB#7: */ + tlbentry( 0xe0000000, SZ_16M, 0xe0000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) /*TLB-entry PCI registers*/ + /* TLB#8: */ tlbentry( 0xEEC00000, SZ_1K, 0xEEC00000, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) /* TLB-entry for peripherals */ + /* TLB#9: */ tlbentry( 0xEF000000, SZ_16M, 0xEF000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I) - /* TLB for SDRAM will be added by initdram (sdram.c) */ + /* CAN */ + /* TLB#10: */ + tlbentry( CFG_CS_1, SZ_1K, CFG_CS_1, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) + + /* TLB#11: CPLD and IMC-Standard 32 MB */ + tlbentry( CFG_CS_2, SZ_16M, CFG_CS_2, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) + + /* TLB#12: */ + tlbentry( CFG_CS_2 + 0x1000000, SZ_16M, CFG_CS_2 + 0x1000000, 1,AC_R|AC_W|AC_X|SA_G|SA_I )
board/netstal/hcu5/init.S +5
-0+ /* IMC-Fast 32 MB */ + /* TLB#13: */ + tlbentry( CFG_CS_3, SZ_16M, CFG_CS_3, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) + /* TLB#14: */ + tlbentry( CFG_CS_3 + 0x1000000, SZ_16M, CFG_CS_3, 1,AC_R|AC_W|AC_X|SA_G|SA_I ) +
board/netstal/hcu5/init.S +3
-0+#ifndef CFG_TLB_FOR_BOOT_FLASH + /* TLB#15: */ + tlbentry( CFG_CS_3 + 0x1000000, SZ_16M, CFG_CS_3 + 0x1000000, 1,AC_R|AC_W|AC_X|SA_G|SA_I ) +#endif
board/netstal/hcu5/init.S +0
-0tlbtab_endboard/netstal/hcu5/sdram.c +0
-4@@ -62,11 +62,8 @@ void dflush(void);#define DDR0_22_CTRL_RAW_ECC_ENABLE 0x03000000/* ECC correcting on */ #define DDR0_03_CASLAT_DECODE (n) ((((unsigned long)(n))>>16)&0x7) -#ifdef CFG_ENABLE_SDRAM_CACHE -#define MY_TLB_WORD2_I_ENABLE 0/* enable caching on DDR2 */ -#else -#define MY_TLB_WORD2_I_ENABLE TLB_WORD2_I_ENABLE/* disable caching on DDR2 */ -#endif
board/netstal/hcu5/sdram.c +2
-0+#define MY_TLB_WORD2_I_ENABLE TLB_WORD2_I_ENABLE +/* disable caching on DDR2 */ void program_tlb(u32 phys_addr, u32 virt_addr, u32 size, u32
tlb_word2_i_value);board/netstal/hcu5/sdram.c +1
-4@@ -157,38 +154,36 @@ static void blank_string(int size)/*------------------------------------------------------------------------- --+ * program_ecc. *-------------------------------------------------------------------------- -*/ -static void program_ecc(unsigned long start_address, unsigned longnum_bytes, - unsigned long tlb_word2_i_value) +static void program_ecc(unsigned long start_address, unsigned long num_bytes) { -unsigned long current_address= start_address; -int loopi =0 ;u32 val;
board/netstal/hcu5/sdram.c static void blank_string(int size) · line 169
Quoted 10 lines
board/netstal/hcu5/sdram.c +7
-2-char str[] ="ECC generation -" ; -char slash[] ="\\|/-\\|/-" ; +#if defined(CONFIG_PRAM ) +u32 *magic; + +/* Check whether vxWorks is using EDR logging, if yes zero */ +/* also PostMortem and user reserved memory */ + magic= (u32 *) (start_address + num_bytes + - (CONFIG_PRAM *1024 ) +sizeof (u32));
magic = (...
please. But again I suggest to use the correct functions to access this memory. Here in_be32().
Quoted 114 lines
board/netstal/hcu5/sdram.c +13
-17+ +debug ("\n%s: CONFIG_PRAM %d kB magic 0x%x 0x%p -> 0x%x\n" , __FUNCTION__, +CONFIG_PRAM , + start_address + num_bytes - (CONFIG_PRAM *1024 ) +sizeof (u32), + magic, *magic); +if (*magic ==0xbeefbabe ) + num_bytes -= (CONFIG_PRAM *1024 ) -PM_RESERVED_MEM ; +#endif +sync ();eieio ();puts (str); -if (tlb_word2_i_value ==TLB_WORD2_I_ENABLE ) { -/* ECC bit set method for non-cached memory */ -/* This takes various seconds */ -for (current_address =0 ; current_address < num_bytes; - current_address +=sizeof (u32)) { - *(u32 *)current_address =0 ; -if ((current_address % (2 <<20 )) ==0 ) { -putc ('\b' ); -putc (slash[loopi++ %8 ]); - } - } - }else { -/* ECC bit set method for cached memory */ -/* Fast method, no noticeable delay */ -dcbz_area (start_address, num_bytes); -dflush (); - } +/* ECC bit set method for cached memory */ +/* Fast method, no noticeable delay */ +dcbz_area (start_address, num_bytes); +dflush ();blank_string (strlen (str));board/netstal/hcu5/sdram.c +2
-1/* Clear error status */ @@ -196,7 +191,7 @@ static void program_ecc(unsigned long start_address, unsigned long num_bytes, mtsdram(DDR0_00, val | DDR0_00_INT_ACK_ALL);/* -* Clear possible errors +* Clear possible ECC errors * If not done, then we could get an interrupt later on when * exceptions are enabled. */ @@ -212,6 +207,7 @@ static void program_ecc(unsigned long start_address, unsigned long num_bytes,#endif +/*********************************************************************** * * initdram -- 440EPx's DDR controller is a DENALI Core
board/netstal/hcu5/sdram.c +9
-12@@ -233,23 +229,22 @@ long int initdram (int board_type)mtsdram (DDR0_04 ,0x0A020200 );mtsdram (DDR0_05 ,0x02020307 );switch (*hwVersReg &HCU_HW_SDRAM_CONFIG_MASK ) { -case 0 : - dram_size =128 *1024 *1024 ; -mtsdram (DDR0_06 ,0x0102C80D );/* 128MB RAM */ -mtsdram (DDR0_11 ,0x000FC800 );/* 128MB RAM */ -mtsdram (DDR0_43 ,0x030A0300 );/* 128MB RAM */ -break ;case 1 : dram_size =256 *1024 *1024 ;mtsdram (DDR0_06 ,0x0102C812 );/* 256MB RAM */ mtsdram (DDR0_11 ,0x0014C800 );/* 256MB RAM */ mtsdram (DDR0_43 ,0x030A0200 );/* 256MB RAM */ break ; +case 0 :default : -sdram_panic (INVALID_HW_CONFIG ); + dram_size =128 *1024 *1024 ; +mtsdram (DDR0_06 ,0x0102C80D );/* 128MB RAM */ +mtsdram (DDR0_11 ,0x000FC800 );/* 128MB RAM */ +mtsdram (DDR0_43 ,0x030A0300 );/* 128MB RAM */ break ; }mtsdram (DDR0_07 ,0x00090100 ); +/* * TCPD=200 cycles of clock input is required to lock the DLL. * CKE must be HIGH the entire time.mtsdram(DDR0_08, 0x02C80001); @@ -288,7 +283,7 @@ long int initdram (int board_type)* Program tlb entries for this size (dynamic) */ remove_tlb (CFG_SDRAM_BASE ,256 <<20 ); -program_tlb (0 ,0 , dram_size,MY_TLB_WORD2_I_ENABLE ); +program_tlb (0 ,0 , dram_size,TLB_WORD2_W_ENABLE |TLB_WORD2_I_ENABLE );/* * Setup 2nd TLB with same physical address but different virtual @@ -296,14 +291,13 @@ long int initdram (int board_type)*/ program_tlb (0 ,CFG_DDR_CACHED_ADDR , dram_size,0 ); -/* Diminish RAM to initialize */ - dram_size = dram_size -32 ;#ifdef CONFIG_DDR_ECC /* * If ECC is enabled, initialize the parity bits. */ -program_ecc (CFG_DDR_CACHED_ADDR , dram_size,0 ); +program_ecc (CFG_DDR_CACHED_ADDR , dram_size);#endif return (dram_size); } + --
Quoted 1 line
1.5.2.5
Please fix and resubmit.
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
=====================================================================
PATCH 1/1 ppc_4xx:netstal HCU5 board: added various fixes and POST
In reply to Niklaus GigerQuoted 4 lines · In message <[email protected]> you wrote:
Moved some code to
nestal/common/nm_bsp.c. Added support for the vxWorks EDR. Enable trace for Lauterbach, if present. Added support for POST.
...
board/netstal/hcu5/hcu5.c int misc_init_r(void) · line 315
Quoted 2 lines
board/netstal/hcu5/hcu5.c +2
-0+if (mfspr (dbcr0) &0x80000000 ) {/* External debugger alive */ +/* enable trace facilty for Lauterback
/* * enable trace facilty for Lauterbach ...
Quoted 8 lines
board/netstal/hcu5/hcu5.c +4
-4-/*-------------------------------------------------------------------+ -| Set priority for all PLB3 devices to 0. -| Set PLB3 arbiter to fair mode. -+-------------------------------------------------------------------*/ +/*------------------------------------------------------------------- +* Set priority for all PLB3 devices to 0. +* Set PLB3 arbiter to fair mode. +*-------------------------------------------------------------------*/
...
board/netstal/hcu5/hcu5.c int pci_pre_init(struct pci_controller *hose) · line 364
Quoted 6 lines
board/netstal/hcu5/hcu5.c +3
-3-/*-------------------------------------------------------------------+ -| Set priority for all PLB4 devices to 0. -+-------------------------------------------------------------------*/ +/*------------------------------------------------------------------- +* Set priority for all PLB4 devices to 0. +*-------------------------------------------------------------------*/
If you change multiline comments, then please do it right. The preferred style for long (multi-line) comments is:
/*
* This is the preferred style for multi-line
* comments in the Linux kernel source code.
* Please use it consistently.
*
* Description: A column of asterisks on the left side,
* with beginning and ending almost-blank lines. */
board/netstal/hcu5/init.S line 94
Quoted 2 lines
board/netstal/hcu5/init.S +2
-0+ /* TLB#12: */ + tlbentry( CFG_CS_2 + 0x1000000, SZ_16M, CFG_CS_2 + 0x1000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
Here and in some other places: please mind the maximum line length.
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de "If the code and the comments disagree, then both are probably wrong." - Norm Schryer