Dear Brian, yes it can be. IIRC I worked only with 75MHz version of S3C44B0, I've never used a 66MHz one. Unfortunately I do not have such a board here, neither the time ;-), to check your bug report.. Did you already check the 66MHz BRD formula? If it's correct in you testbed to me you can send the patch for commiting
Best Regards, -- Andrea Scian DAVE Srl - Electronics System House via Forniz 2/1 33080 Porcia (PN) - Italy Telephone: +39.0434.921215 Telefax: +39.0434.1994030 web: www.dave-tech.it e-mail address: andrea.sc...@dave-tech.it how to reach us: http://mail.map24.com/dave On 21/06/2010 14.45, Brian Cavagnolo wrote: > Hello, > > I'm hoping to use the s3c44b0 serial driver for a CPU with very similar serial > hardware. One change that I must make is to calculate the baud rate divisor > with a macro because this operation is board-specific. I propose to clean up > the large switch statement in the existing code with a macro that calculates > the BRD using the formula in the datasheet ("S3C44B0X RISC MICROPROCESSOR" > pg. 10-7; See proposed patch below.) However, the BRD values in the current > code for the 66MHz case do not match the formula in the data sheet. They are > all skewed high. Is this a bug? > > Ciao, > Brian > > diff --git a/arch/arm/include/asm/arch-s3c44b0/hardware.h > b/arch/arm/include/asm/arch-s3c44b0/hardware.h > index 146e265..38ff32c 100644 > --- a/arch/arm/include/asm/arch-s3c44b0/hardware.h > +++ b/arch/arm/include/asm/arch-s3c44b0/hardware.h > @@ -11,7 +11,8 @@ > #define REGL(addr) (*(volatile unsigned int *)(REGBASE+addr)) > #define REGW(addr) (*(volatile unsigned short *)(REGBASE+addr)) > #define REGB(addr) (*(volatile unsigned char *)(REGBASE+addr)) > - > +#define BRD(bps) (DIV_ROUND(CONFIG_S3C44B0_CLOCK_SPEED * 1000000, \ > + (bps)*16) - 1) > > /*****************************/ > /* CPU Wrapper Registers */ > diff --git a/drivers/serial/serial_s3c44b0.c b/drivers/serial/serial_s3c44b0.c > index 95d0266..e6c535c 100644 > --- a/drivers/serial/serial_s3c44b0.c > +++ b/drivers/serial/serial_s3c44b0.c > @@ -70,68 +70,7 @@ static int serial_flush_output(void) > > void serial_setbrg (void) > { > - u32 divisor = 0; > - > - /* get correct divisor */ > - switch(gd->baudrate) { > - > - case 1200: > -#if CONFIG_S3C44B0_CLOCK_SPEED==66 > - divisor = 3124; > -#elif CONFIG_S3C44B0_CLOCK_SPEED==75 > - divisor = 3905; > -#else > -# error CONFIG_S3C44B0_CLOCK_SPEED undefined > -#endif > - break; > - > - case 9600: > -#if CONFIG_S3C44B0_CLOCK_SPEED==66 > - divisor = 390; > -#elif CONFIG_S3C44B0_CLOCK_SPEED==75 > - divisor = 487; > -#else > -# error CONFIG_S3C44B0_CLOCK_SPEED undefined > -#endif > - break; > - > - case 19200: > -#if CONFIG_S3C44B0_CLOCK_SPEED==66 > - divisor = 194; > -#elif CONFIG_S3C44B0_CLOCK_SPEED==75 > - divisor = 243; > -#else > -# error CONFIG_S3C44B0_CLOCK_SPEED undefined > -#endif > - break; > - > - case 38400: > -#if CONFIG_S3C44B0_CLOCK_SPEED==66 > - divisor = 97; > -#elif CONFIG_S3C44B0_CLOCK_SPEED==75 > - divisor = 121; > -#else > -# error CONFIG_S3C44B0_CLOCK_SPEED undefined > -#endif /* break; */ > - > - case 57600: > -#if CONFIG_S3C44B0_CLOCK_SPEED==66 > - divisor = 64; > -#elif CONFIG_S3C44B0_CLOCK_SPEED==75 > - divisor = 80; > -#else > -# error CONFIG_S3C44B0_CLOCK_SPEED undefined > -#endif /* break; */ > - > - case 115200: > -#if CONFIG_S3C44B0_CLOCK_SPEED==66 > - divisor = 32; > -#elif CONFIG_S3C44B0_CLOCK_SPEED==75 > - divisor = 40; > -#else > -# error CONFIG_S3C44B0_CLOCK_SPEED undefined > -#endif /* break; */ > - } > + u32 divisor = BRD(gd->baudrate); > > serial_flush_output(); > serial_flush_input(); > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot