diff options
author | Matthias Fuchs <matthias.fuchs@esd.eu> | 2009-10-26 09:58:45 +0100 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2009-11-17 13:25:30 +0100 |
commit | be0db3e3141c6c6b4e232b51091f35a284cc54e5 (patch) | |
tree | 705440d427cc6e992aa3a6d78ffc29be014b2c52 | |
parent | 067f54c66acd469870ef6946e1591bfcc02de1b3 (diff) | |
download | u-boot-imx-be0db3e3141c6c6b4e232b51091f35a284cc54e5.zip u-boot-imx-be0db3e3141c6c6b4e232b51091f35a284cc54e5.tar.gz u-boot-imx-be0db3e3141c6c6b4e232b51091f35a284cc54e5.tar.bz2 |
ppc4xx: Initialize magnetic couplers in PLU405
This patch fixes an ugly behavior of the IL712 magnetic couplers
as used on PLU405. These parts will remember their last state
over a power cycle which might cause unwanted behavior.
Signed-off-by: Matthias Fuchs <matthias.fuchs@esd.eu>
Signed-off-by: Stefan Roese <sr@denx.de>
-rw-r--r-- | board/esd/plu405/plu405.c | 36 | ||||
-rw-r--r-- | include/configs/PLU405.h | 3 |
2 files changed, 38 insertions, 1 deletions
diff --git a/board/esd/plu405/plu405.c b/board/esd/plu405/plu405.c index f14ef7a..c733587 100644 --- a/board/esd/plu405/plu405.c +++ b/board/esd/plu405/plu405.c @@ -26,6 +26,7 @@ #include <asm/io.h> #include <command.h> #include <malloc.h> +#include <sja1000.h> #undef FPGA_DEBUG @@ -61,6 +62,34 @@ au_image_t au_image[] = { int N_AU_IMAGES = (sizeof(au_image) / sizeof(au_image[0])); +/* + * generate a short spike on the CAN tx line + * to bring the couplers in sync + */ +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); +} + /* Prototypes */ int gunzip(void *, int, unsigned char *, unsigned long *); @@ -214,6 +243,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; } diff --git a/include/configs/PLU405.h b/include/configs/PLU405.h index 2e41526..2f84f7f 100644 --- a/include/configs/PLU405.h +++ b/include/configs/PLU405.h @@ -300,7 +300,8 @@ /* * External Bus Controller (EBC) Setup */ -#define CAN_BA 0xF0000000 /* CAN Base Address */ +#define CAN0_BA 0xF0000000 /* CAN0 Base Address */ +#define CAN1_BA 0xF0000100 /* CAN1 Base Address */ #define DUART0_BA 0xF0000400 /* DUART Base Address */ #define DUART1_BA 0xF0000408 /* DUART Base Address */ #define RTC_BA 0xF0000500 /* RTC Base Address */ |