console: Simplify the enable rules

Consoles on CBMEM and USB have somewhat complex rules and dependencies
when they can be active. Use simple variables to test which stage
of boot is being built for each console.

Change-Id: I2489e7731d07ca7d5dd2ea8b6501c73f05d6edd8
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/5341
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Kyösti Mälkki 2014-02-26 15:19:04 +02:00
parent e8792be223
commit f339086265
8 changed files with 120 additions and 67 deletions

View File

@ -27,57 +27,29 @@
void console_hw_init(void) void console_hw_init(void)
{ {
#if CONFIG_CONSOLE_SERIAL __cbmemc_init();
uart_init(); __spkmodem_init();
#endif __qemu_debugcon_init();
#if CONFIG_CONSOLE_NE2K
ne2k_init(CONFIG_CONSOLE_NE2K_IO_PORT); __uart_init();
#endif __ne2k_init();
#if CONFIG_CONSOLE_CBMEM && !defined(__BOOT_BLOCK__) && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__)) __usbdebug_init();
cbmemc_init();
#endif
#if CONFIG_SPKMODEM
spkmodem_init();
#endif
#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
usbdebug_init();
#endif
#if CONFIG_CONSOLE_QEMU_DEBUGCON
qemu_debugcon_init();
#endif
} }
void console_tx_byte(unsigned char byte) void console_tx_byte(unsigned char byte)
{ {
#if CONFIG_CONSOLE_SERIAL __cbmemc_tx_byte(byte);
uart_tx_byte(byte); __spkmodem_tx_byte(byte);
#endif __qemu_debugcon_tx_byte(byte);
#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
usb_tx_byte(0, byte); __uart_tx_byte(byte);
#endif __ne2k_tx_byte(byte);
#if CONFIG_CONSOLE_NE2K __usb_tx_byte(byte);
ne2k_append_data_byte(byte, CONFIG_CONSOLE_NE2K_IO_PORT);
#endif
#if CONFIG_CONSOLE_CBMEM && !defined(__BOOT_BLOCK__) && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__))
cbmemc_tx_byte(byte);
#endif
#if CONFIG_SPKMODEM
spkmodem_tx_byte(byte);
#endif
#if CONFIG_CONSOLE_QEMU_DEBUGCON
qemu_debugcon_tx_byte(byte);
#endif
} }
void console_tx_flush(void) void console_tx_flush(void)
{ {
#if CONFIG_CONSOLE_SERIAL __uart_tx_flush();
uart_tx_flush(); __ne2k_tx_flush();
#endif __usb_tx_flush();
#if CONFIG_CONSOLE_NE2K
ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT);
#endif
#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
usb_tx_flush(0);
#endif
} }

View File

@ -19,14 +19,27 @@
#ifndef _CONSOLE_CBMEM_CONSOLE_H_ #ifndef _CONSOLE_CBMEM_CONSOLE_H_
#define _CONSOLE_CBMEM_CONSOLE_H_ #define _CONSOLE_CBMEM_CONSOLE_H_
#if CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__) #include <rules.h>
#include <stdint.h>
void cbmemc_init(void); void cbmemc_init(void);
void cbmemc_reinit(void);
void cbmemc_tx_byte(unsigned char data); void cbmemc_tx_byte(unsigned char data);
#if CONFIG_CONSOLE_CBMEM
void cbmemc_reinit(void);
#else #else
#define cbmemc_init() static inline void cbmemc_reinit(void) {}
#define cbmemc_reinit() #endif
#define cbmemc_tx_byte(x)
#define __CBMEM_CONSOLE_ENABLE__ CONFIG_CONSOLE_CBMEM && \
((ENV_ROMSTAGE && CONFIG_EARLY_CBMEM_INIT) || ENV_RAMSTAGE)
#if __CBMEM_CONSOLE_ENABLE__
static inline void __cbmemc_init(void) { cbmemc_init(); }
static inline void __cbmemc_tx_byte(u8 data) { cbmemc_tx_byte(data); }
#else
static inline void __cbmemc_init(void) {}
static inline void __cbmemc_tx_byte(u8 data) {}
#endif #endif
#endif #endif

View File

@ -21,10 +21,10 @@
#define CONSOLE_CONSOLE_H_ #define CONSOLE_CONSOLE_H_
#include <stdint.h> #include <stdint.h>
#include <rules.h>
#include <console/post_codes.h> #include <console/post_codes.h>
#ifndef __ROMCC__ #ifndef __ROMCC__
int console_log_level(int msg_level);
void post_code(u8 value); void post_code(u8 value);
#if CONFIG_CMOS_POST_EXTRA #if CONFIG_CMOS_POST_EXTRA
void post_log_extra(u32 value); void post_log_extra(u32 value);
@ -40,32 +40,31 @@ void post_log_clear(void);
void mainboard_post(u8 value); void mainboard_post(u8 value);
void __attribute__ ((noreturn)) die(const char *msg); void __attribute__ ((noreturn)) die(const char *msg);
#if defined(__BOOT_BLOCK__) && !CONFIG_BOOTBLOCK_CONSOLE || \ #define __CONSOLE_ENABLE__ \
defined(__SMM__) && !CONFIG_DEBUG_SMI || \ ((ENV_BOOTBLOCK && CONFIG_BOOTBLOCK_CONSOLE) || \
(defined(__PRE_RAM__) && !defined(__BOOT_BLOCK__)) && !CONFIG_EARLY_CONSOLE (ENV_ROMSTAGE && CONFIG_EARLY_CONSOLE) || \
ENV_RAMSTAGE || (ENV_SMM && CONFIG_DEBUG_SMI))
/* Do nothing. */
static inline void printk(int LEVEL, const char *fmt, ...) {}
static inline void do_putchar(unsigned char byte) {}
static inline void console_init(void) {}
#else
#if __CONSOLE_ENABLE__
void console_init(void); void console_init(void);
int console_log_level(int msg_level);
int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3))); int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void do_putchar(unsigned char byte); void do_putchar(unsigned char byte);
#define printk(LEVEL, fmt, args...) \ #define printk(LEVEL, fmt, args...) \
do { \ do { do_printk(LEVEL, fmt, ##args); } while(0)
do_printk(LEVEL, fmt, ##args); \
} while(0)
#else
static inline void console_init(void) {}
static inline int console_log_level(int msg_level) { return 0; }
static inline void printk(int LEVEL, const char *fmt, ...) {}
static inline void do_putchar(unsigned char byte) {}
#endif #endif
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
/* FIXME: Collision of varargs with AMD headers without guard. */ /* FIXME: Collision of varargs with AMD headers without guard. */
#include <console/vtxprintf.h> #include <console/vtxprintf.h>
#if !defined(__PRE_RAM__) || CONFIG_EARLY_CONSOLE #if __CONSOLE_ENABLE__
void do_vtxprintf(const char *fmt, va_list args); void do_vtxprintf(const char *fmt, va_list args);
#else #else
static inline void do_vtxprintf(const char *fmt, va_list args) {}; static inline void do_vtxprintf(const char *fmt, va_list args) {};

View File

@ -19,6 +19,10 @@
#ifndef _NE2K_H__ #ifndef _NE2K_H__
#define _NE2K_H__ #define _NE2K_H__
#include <rules.h>
#include <stdint.h>
void ne2k_append_data(unsigned char *d, int len, unsigned int base); void ne2k_append_data(unsigned char *d, int len, unsigned int base);
int ne2k_init(unsigned int eth_nic_base); int ne2k_init(unsigned int eth_nic_base);
void ne2k_transmit(unsigned int eth_nic_base); void ne2k_transmit(unsigned int eth_nic_base);
@ -26,4 +30,15 @@ void ne2k_transmit(unsigned int eth_nic_base);
#ifndef __ROMCC__ #ifndef __ROMCC__
#define ne2k_append_data_byte(d, base) ne2k_append_data(&d, 1, base) #define ne2k_append_data_byte(d, base) ne2k_append_data(&d, 1, base)
#endif #endif
#if CONFIG_CONSOLE_NE2K && (ENV_ROMSTAGE || ENV_RAMSTAGE)
static inline void __ne2k_init(void) { ne2k_init(CONFIG_CONSOLE_NE2K_IO_PORT); }
static inline void __ne2k_tx_byte(u8 data) { ne2k_append_data_byte(data, CONFIG_CONSOLE_NE2K_IO_PORT); }
static inline void __ne2k_tx_flush(void) { ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT); }
#else
static inline void __ne2k_init(void) {}
static inline void __ne2k_tx_byte(u8 data) {}
static inline void __ne2k_tx_flush(void) {}
#endif
#endif /* _NE2K_H */ #endif /* _NE2K_H */

View File

@ -1,7 +1,18 @@
#ifndef _QEMU_DEBUGCON_H_ #ifndef _QEMU_DEBUGCON_H_
#define _QEMU_DEBUGCON_H_ #define _QEMU_DEBUGCON_H_
#include <rules.h>
#include <stdint.h>
void qemu_debugcon_init(void); void qemu_debugcon_init(void);
void qemu_debugcon_tx_byte(unsigned char data); void qemu_debugcon_tx_byte(unsigned char data);
#if CONFIG_CONSOLE_QEMU_DEBUGCON && (ENV_ROMSTAGE || ENV_RAMSTAGE)
static inline void __qemu_debugcon_init(void) { qemu_debugcon_init(); }
static inline void __qemu_debugcon_tx_byte(u8 data) { qemu_debugcon_tx_byte(data); }
#else
static inline void __qemu_debugcon_init(void) {}
static inline void __qemu_debugcon_tx_byte(u8 data) {}
#endif
#endif #endif

View File

@ -1,7 +1,18 @@
#ifndef SPKMODEM_H #ifndef SPKMODEM_H
#define SPKMODEM_H 1 #define SPKMODEM_H 1
#include <rules.h>
#include <stdint.h>
void spkmodem_init(void); void spkmodem_init(void);
void spkmodem_tx_byte(unsigned char c); void spkmodem_tx_byte(unsigned char c);
#if CONFIG_SPKMODEM && (ENV_ROMSTAGE || ENV_RAMSTAGE)
static inline void __spkmodem_init(void) { spkmodem_init(); }
static inline void __spkmodem_tx_byte(u8 data) { spkmodem_tx_byte(data); }
#else
static inline void __spkmodem_init(void) {}
static inline void __spkmodem_tx_byte(u8 data) {}
#endif
#endif #endif

View File

@ -20,6 +20,7 @@
#ifndef CONSOLE_UART_H #ifndef CONSOLE_UART_H
#define CONSOLE_UART_H #define CONSOLE_UART_H
#include <rules.h>
#include <stdint.h> #include <stdint.h>
/* Return the clock frequency UART uses as reference clock for /* Return the clock frequency UART uses as reference clock for
@ -51,8 +52,23 @@ static inline void *uart_platform_baseptr(int idx)
{ {
return (void *)uart_platform_base(idx); return (void *)uart_platform_base(idx);
} }
#endif
void oxford_remap(unsigned int new_base); void oxford_remap(unsigned int new_base);
#define __CONSOLE_SERIAL_ENABLE__ CONFIG_CONSOLE_SERIAL && \
(ENV_BOOTBLOCK || ENV_ROMSTAGE || ENV_RAMSTAGE || \
(ENV_SMM && CONFIG_DEBUG_SMI))
#if __CONSOLE_SERIAL_ENABLE__
static inline void __uart_init(void) { uart_init(); }
static inline void __uart_tx_byte(u8 data) { uart_tx_byte(data); }
static inline void __uart_tx_flush(void) { uart_tx_flush(); }
#else
static inline void __uart_init(void) {}
static inline void __uart_tx_byte(u8 data) {}
static inline void __uart_tx_flush(void) {}
#endif
#endif /* __ROMCC__ */
#endif /* CONSOLE_UART_H */ #endif /* CONSOLE_UART_H */

View File

@ -21,6 +21,9 @@
#ifndef _CONSOLE_USB_H_ #ifndef _CONSOLE_USB_H_
#define _CONSOLE_USB_H_ #define _CONSOLE_USB_H_
#include <rules.h>
#include <stdint.h>
int usbdebug_init(void); int usbdebug_init(void);
void usb_tx_byte(int idx, unsigned char data); void usb_tx_byte(int idx, unsigned char data);
@ -28,4 +31,17 @@ void usb_tx_flush(int idx);
unsigned char usb_rx_byte(int idx); unsigned char usb_rx_byte(int idx);
int usb_can_rx_byte(int idx); int usb_can_rx_byte(int idx);
#define __CONSOLE_USB_ENABLE__ CONFIG_CONSOLE_USB && \
((ENV_ROMSTAGE && CONFIG_USBDEBUG_IN_ROMSTAGE) || ENV_RAMSTAGE)
#if __CONSOLE_USB_ENABLE__
static inline void __usbdebug_init(void) { usbdebug_init(); }
static inline void __usb_tx_byte(u8 data) { usb_tx_byte(0, data); }
static inline void __usb_tx_flush(void) { usb_tx_flush(0); }
#else
static inline void __usbdebug_init(void) {}
static inline void __usb_tx_byte(u8 data) {}
static inline void __usb_tx_flush(void) {}
#endif
#endif /* _CONSOLE_USB_H_ */ #endif /* _CONSOLE_USB_H_ */