Dear [EMAIL PROTECTED], In message <[EMAIL PROTECTED]> you wrote: > RnJvbTogQW5kcmVhcyBQZmVmZmVybGUgPGFwQGRlbnguZGU+CgpUaGlzIHBhdGNoIGFkZHMgZGlh > Z25vc2lzIGZ1bmN0aW9ucyBmb3IgdGhlIGJ1enplciwgVUFSVHMgYW5kIGRpZ2l0YWwKSU9zIG9u > IGlua2E0eDAgaGFyZHdhcmUuCsKgIMKgClNpZ25lZC1vZmYtYnk6IEFuZHJlYXMgUGZlZmZlcmxl > IDxhcEBkZW54LmRlPgotLS0KIGJvYXJkL2lua2E0eDAvTWFrZWZpbGUgICB8ICAgIDIgKy0KIGJv > YXJkL2lua2E0eDAvaW5rYWRpYWcuYyB8ICA1MTUgKysrKysrKysrKysrKysrKysrKysrKysrKysr > KysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1MTYgaW5zZXJ0aW9ucygrKSwg > MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBib2FyZC9pbmthNHgwL2lua2FkaWFn > LmMKCmRpZmYgLS1naXQgYS9ib2FyZC9pbmthNHgwL01ha2VmaWxlIGIvYm9hcmQvaW5rYTR4MC9N > YWtlZmlsZQppbmRleCA0NDJlMmQwLi4yMjY0ZGFlIDEwMDY0NAotLS0gYS9ib2FyZC9pbmthNHgw > L01ha2VmaWxlCisrKyBiL2JvYXJkL2lua2E0eDAvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAg > aW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEK > IAotQ09CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubyAgaW5rYWRpYWcubwog > CiBTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJl > Zml4ICQob2JqKSwkKENPQkpTKSkKZGlmZiAtLWdpdCBhL2JvYXJkL2lua2E0eDAvaW5rYWRpYWcu ...
Please do not post base64 encoded messages! Any further such postings will be ignored. > This patch adds diagnosis functions for the buzzer, UARTs and digital Such hardware test code should be implemented as part of the POST system, i. e. please create a post/board/inka4x0/ directory for it, and make it part of the POST. > diff --git a/board/inka4x0/inkadiag.c b/board/inka4x0/inkadiag.c > new file mode 100644 > index 0000000..6194b58 > --- /dev/null > +++ b/board/inka4x0/inkadiag.c ... > +#define LED_HIGH(NUM)\ > +out_be32((unsigned *)MPC5XXX_GPT##NUM##_ENABLE,\ > + in_be32((unsigned *)MPC5XXX_GPT##NUM##_ENABLE) | 0x10) > + > +#define LED_LOW(NUM)\ > +out_be32((unsigned *)MPC5XXX_GPT##NUM##_ENABLE,\ > + in_be32((unsigned *)MPC5XXX_GPT##NUM##_ENABLE) & ~0x10) Please use "do { ...} while (0)" wrappers for these macros. > +static int io_helper(int argc, char *argv[]) > +{ > + unsigned int state = inka_digin_get_input(); > + if (strcmp(argv[1], "drawer1") == 0) { > + printf("exit code: 0x%X\n", > + (state & DIGIN_DRAWER_SW1) >> (ffs(DIGIN_DRAWER_SW1) - 1)); > + } else if (strcmp(argv[1], "drawer2") == 0) { > + printf("exit code: 0x%X\n", > + (state & DIGIN_DRAWER_SW2) >> (ffs(DIGIN_DRAWER_SW2) - 1)); > + } else if (strcmp(argv[1], "other") == 0) { > + printf("exit code: 0x%X\n", > + ((state & DIGIN_KEYB_MASK) >> (ffs(DIGIN_KEYB_MASK) - 1)) > + | ((state & DIGIN_TOUCHSCR_MASK) >> > + (ffs(DIGIN_TOUCHSCR_MASK) - 2))); > + } else { > + printf("Invalid argument: %s\n", argv[1]); > + return -1; > + } > + return 0; Please use the existing command parser code here and below. > +DECLARE_GLOBAL_DATA_PTR; > + > +static int ser_init(volatile struct mpc5xxx_psc *psc, int baudrate) > +{ Maybe there should be some comments what these functions are doing? > +static void ser_putc(volatile struct mpc5xxx_psc *psc, const char c) > +{ > + /* Wait for last character to go. */ > + int i = 0; > + while (!(psc->psc_status & PSC_SR_TXEMP) && (i++ < CONFIG_SYS_HZ)) > + udelay(10); > + psc->psc_buffer_8 = c; What exactly has CONFIG_SYS_HZ to do with that? I cannot understand this sort of magic. > +static int ser_getc(volatile struct mpc5xxx_psc *psc) > +{ > + /* Wait for a character to arrive. */ > + int i = 0; > + while (!(psc->psc_status & PSC_SR_RXRDY) && (i++ < CONFIG_SYS_HZ)) > + udelay(10); Ditto here. > + return psc->psc_buffer_8; > +} > + > +#define SERIAL_PORT_BASE (u_char *)0x80000000 > + > +#define UART_RX 0 /* In: Receive buffer (DLAB=0) */ > +#define UART_TX 0 /* Out: Transmit buffer (DLAB=0) */ > +#define UART_DLL 0 /* Out: Divisor Latch Low (DLAB=1) */ > + > +#define UART_LCR 3 /* Out: Line Control Register */ > +#define UART_MCR 4 /* Out: Modem Control Register */ ... Lots of #defines right in the middle of a C file? That's uygly. Please move these in a separate header file (or at least at the begin of the C file). > +static unsigned char serial_in(unsigned char num, int offset) > +{ > + return in_8(SERIAL_PORT_BASE + (num << 3) + offset); > +} > + > +static void serial_out(unsigned char num, int offset, unsigned char value) > +{ > + out_8(SERIAL_PORT_BASE + (num << 3) + offset, value); > +} The amount of comments in this file sucessfully avoids all risks of fatiguing the reader... > + if (strcmp(argv[2], "115200") == 0) > + combrd = 1; > + else if (strcmp(argv[2], "57600") == 0) > + combrd = 2; > + else if (strcmp(argv[2], "38400") == 0) > + combrd = 3; > + else if (strcmp(argv[2], "19200") == 0) > + combrd = 6; > + else if (strcmp(argv[2], "9600") == 0) > + combrd = 12; > + else if (strcmp(argv[2], "2400") == 0) > + combrd = 48; > + else if (strcmp(argv[2], "1200") == 0) > + combrd = 96; > + else if (strcmp(argv[2], "300") == 0) > + combrd = 384; > + else > + printf("Invalid baudrate: %s", argv[2]); Instead of calling strcmp() again and again, you could convert the number just once and use a switch. Or table lookup. See existing code. > + if (mode & 1) > + /* turn on 'loopback' mode */ > + serial_out(num, UART_MCR, UART_MCR_LOOP); > + else { Multiline statements require braces. > + /* establish the UART's operational parameters */ > + /* set DLAB=1 */ Multiline comment style is /* * establish the UART's operational parameters * set DLAB=1 */ > + volatile struct mpc5xxx_psc *psc = > + (struct mpc5xxx_psc *)address; Indentation not by TAB. > + if (freq > gd->ipb_clk / 128) > + printf("%dHz exceeds maximum (%dHz)\n", freq, > + gd->ipb_clk / 128); > + else if (!freq) Multiline statements require braces. > +static int TEST_FUNCTION(inkadiag) (cmd_tbl_t *cmdtp, int flag, int argc, > + char *argv[]) { > + switch (argc) { > + case 1: > + PRINT_TEST_USAGE(inkadiag); "break;" missing? > + default: > + argc--; > + argv++; > + CHECK_TEST(io); > + CHECK_TEST(serial); > + CHECK_TEST(buzzer); > + } > + PRINT_TEST_USAGE(inkadiag); > +} > + > +U_BOOT_CMD(inkadiag, 6, 1, TEST_FUNCTION(inkadiag), > + "inkadiag- inka diagnosis\n", > + "[inkadiag what ...]\n" > + " - perform a diagnosis on inka hardware\n" > + "'inkadiag' performs hardware tests.\n\n" > + "Without arguments, inkadiag prints a list of available tests.\n\n" > + "To get detailed help information for specific tests you can type\n" > + "'inkadiag what' with a test name 'what' as argument.\n"); Please no prose here - be terse, please. Viele Grüße, Wolfgang Denk -- 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: [EMAIL PROTECTED] "Anyone attempting to generate random numbers by deterministic means is, of course, living in a state of sin." - John Von Neumann _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot