X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=board%2Fesd%2Fplu405%2Fplu405.c;h=b68ffaf77100d12ae630dae8fb590e71fa357e1b;hb=d48455ad8cefd25d7b49f68fd16d0e9fd551732a;hp=f14ef7a20f843a88ff0f48e34ae22f2b11301a0e;hpb=4d6c2dd7ed6c6bc4114ca5c7577560ea9ba50bd0;p=u-boot diff --git a/board/esd/plu405/plu405.c b/board/esd/plu405/plu405.c index f14ef7a20f..b68ffaf771 100644 --- a/board/esd/plu405/plu405.c +++ b/board/esd/plu405/plu405.c @@ -26,12 +26,13 @@ #include #include #include +#include #undef FPGA_DEBUG DECLARE_GLOBAL_DATA_PTR; -extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); +extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); extern void lxt971_no_sleep(void); /* fpga configuration data - gzip compressed and generated by bin2c */ @@ -46,23 +47,32 @@ const unsigned char fpgadata[] = #include "../common/fpga.c" /* - * include common auto-update code (for esd boards) + * generate a short spike on the CAN tx line + * to bring the couplers in sync */ -#include "../common/auto_update.h" - -au_image_t au_image[] = { - {"plu405/preinst.img", 0, -1, AU_SCRIPT}, - {"plu405/u-boot.img", 0xfffc0000, 0x00040000, AU_FIRMWARE}, - {"plu405/pImage_${bd_type}", 0x00000000, 0x00100000, AU_NAND}, - {"plu405/pImage.initrd", 0x00100000, 0x00200000, AU_NAND}, - {"plu405/yaffsmt2.img", 0x00300000, 0x01c00000, AU_NAND}, - {"plu405/postinst.img", 0, 0, AU_SCRIPT}, -}; - -int N_AU_IMAGES = (sizeof(au_image) / sizeof(au_image[0])); - -/* Prototypes */ -int gunzip(void *, int, unsigned char *, unsigned long *); +void init_coupler(u32 addr) +{ + struct sja1000_basic_s *ctrl = (struct sja1000_basic_s *)addr; + + /* reset */ + out_8(&ctrl->cr, CR_RR); + + /* dominant */ + out_8(&ctrl->btr0, 0x00); /* btr setup is required */ + out_8(&ctrl->btr1, 0x14); /* we use 1Mbit/s */ + out_8(&ctrl->oc, OC_TP1 | OC_TN1 | OC_POL1 | + OC_TP0 | OC_TN0 | OC_POL0 | OC_MODE1); + out_8(&ctrl->cr, 0x00); + + /* delay */ + in_8(&ctrl->cr); + in_8(&ctrl->cr); + in_8(&ctrl->cr); + in_8(&ctrl->cr); + + /* reset */ + out_8(&ctrl->cr, CR_RR); +} int board_early_init_f(void) { @@ -214,6 +224,13 @@ int misc_init_r(void) out_8((void *)DUART1_BA + 1, fctr); /* write FCTR */ out_8((void *)DUART1_BA + 3, 0); /* write LCR */ + /* + * Init magnetic couplers + */ + if (!getenv("noinitcoupler")) { + init_coupler(CAN0_BA); + init_coupler(CAN1_BA); + } return 0; } @@ -223,7 +240,7 @@ int misc_init_r(void) int checkboard(void) { char str[64]; - int i = getenv_r("serial#", str, sizeof(str)); + int i = getenv_f("serial#", str, sizeof(str)); puts("Board: "); @@ -305,7 +322,7 @@ int eeprom_write_enable(unsigned dev_addr, int state) return state; } -int do_eep_wren(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +int do_eep_wren(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int query = argc == 1; int state = 0;