commit: http://blackfin.uclinux.org/git/?p=u-boot;a=commitdiff;h=ee30913ce4845b5329a449edba9a00d2a2cabdbd branch: http://blackfin.uclinux.org/git/?p=u-boot;a=shortlog;h=refs/heads/trunk
Change port mux seting macros into static inline function. Signed-off-by: Sonic Zhang <sonic.zh...@analog.com> --- arch/blackfin/cpu/serial1.h | 139 ++++++++++++++++++++++++++++--------------- arch/blackfin/cpu/serial4.h | 45 +++++++++----- 2 files changed, 119 insertions(+), 65 deletions(-) diff --git a/arch/blackfin/cpu/serial1.h b/arch/blackfin/cpu/serial1.h index a1aa833..9f6d9e0 100644 --- a/arch/blackfin/cpu/serial1.h +++ b/arch/blackfin/cpu/serial1.h @@ -102,75 +102,115 @@ typedef uint16_t uart_lsr_t; #endif __attribute__((always_inline)) +static inline void serial_early_do_mach_portmux(char port, int mux_mask, + int mux_func, int port_pin) +{ + switch (port) { +#if defined(__ADSPBF54x__) + case 'B': + bfin_write_PORTB_MUX((bfin_read_PORTB_MUX() & + ~mux_mask) | mux_func); + bfin_write_PORTB_FER(bfin_read_PORTB_FER() | port_pin); + break; + case 'E': + bfin_write_PORTE_MUX((bfin_read_PORTE_MUX() & + ~mux_mask) | mux_func); + bfin_write_PORTE_FER(bfin_read_PORTE_FER() | port_pin); + break; +#endif +#if defined(__ADSPBF50x__) || defined(__ADSPBF51x__) || defined(__ADSPBF52x__) + case 'F': + bfin_write_PORTF_MUX((bfin_read_PORTF_MUX() & + ~mux_mask) | mux_func); + bfin_write_PORTF_FER(bfin_read_PORTF_FER() | port_pin); + break; + case 'G': + bfin_write_PORTG_MUX((bfin_read_PORTG_MUX() & + ~mux_mask) | mux_func); + bfin_write_PORTG_FER(bfin_read_PORTG_FER() | port_pin); + break; + case 'H': + bfin_write_PORTH_MUX((bfin_read_PORTH_MUX() & + ~mux_mask) | mux_func); + bfin_write_PORTH_FER(bfin_read_PORTH_FER() | port_pin); + break; +#endif + default: + break; + } +} + +__attribute__((always_inline)) static inline void serial_early_do_portmux(void) { #if defined(__ADSPBF50x__) -# define DO_MUX(port, mux_tx, mux_rx, tx, rx) \ - do { bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & \ - ~(PORT_x_MUX_##mux_tx##_MASK | \ - PORT_x_MUX_##mux_rx##_MASK)) | \ - PORT_x_MUX_##mux_tx##_FUNC_1 | \ - PORT_x_MUX_##mux_rx##_FUNC_1); \ - bfin_write_PORT##port##_FER(bfin_read_PORT##port##_FER() | \ - P##port##tx | P##port##rx); \ - } while (0) switch (CONFIG_UART_CONSOLE) { - case 0: DO_MUX(G, 7, 7, 12, 13); break; /* Port G; mux 7; PG12 and PG13 */ - case 1: DO_MUX(F, 3, 3, 6, 7); break; /* Port F; mux 3; PF6 and PF7 */ + case 0: serial_early_do_mach_portmux('G', PORT_x_MUX_7_MASK, + PORT_x_MUX_7_FUNC_1, PG12); /* TX: G; mux 7; func 1; PG12 */ + serial_early_do_mach_portmux('G', PORT_x_MUX_7_MASK, + PORT_x_MUX_7_FUNC_1, PG13); /* RX: G; mux 7; func 1; PG13 */ + break; + case 1: serial_early_do_mach_portmux('F', PORT_x_MUX_3_MASK, + PORT_x_MUX_3_FUNC_1, PF7); /* TX: F; mux 3; func 1; PF6 */ + serial_early_do_mach_portmux('F', PORT_x_MUX_3_MASK, + PORT_x_MUX_3_FUNC_1, PF6); /* RX: F; mux 3; func 1; PF7 */ + break; } - SSYNC(); #elif defined(__ADSPBF51x__) -# define DO_MUX(port, mux_tx, mux_rx, tx, rx) \ - do { bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & \ - ~(PORT_x_MUX_##mux_tx##_MASK | \ - PORT_x_MUX_##mux_rx##_MASK)) | \ - PORT_x_MUX_##mux_tx##_FUNC_2 | \ - PORT_x_MUX_##mux_rx##_FUNC_2); \ - bfin_write_PORT##port##_FER(bfin_read_PORT##port##_FER() | \ - P##port##tx | P##port##rx); \ - } while (0) switch (CONFIG_UART_CONSOLE) { - case 0: DO_MUX(G, 5, 5, 9, 10); break; /* Port G; mux 5; PG9 and PG10 */ - case 1: DO_MUX(F, 2, 3, 14, 15); break; /* Port H; mux 2/3; PH14 and PH15 */ + case 0: serial_early_do_mach_portmux('G', PORT_x_MUX_5_MASK, + PORT_x_MUX_5_FUNC_2, PG9); /* TX: G; mux 5; func 2; PG9 */ + serial_early_do_mach_portmux('G', PORT_x_MUX_5_MASK, + PORT_x_MUX_5_FUNC_2, PG10); /* RX: G; mux 5; func 2; PG10 */ + break; + case 1: serial_early_do_mach_portmux('H', PORT_x_MUX_3_MASK, + PORT_x_MUX_3_FUNC_2, PH7); /* TX: H; mux 3; func 2; PH6 */ + serial_early_do_mach_portmux('H', PORT_x_MUX_3_MASK, + PORT_x_MUX_3_FUNC_2, PH6); /* RX: H; mux 3; func 2; PH7 */ + break; } - SSYNC(); #elif defined(__ADSPBF52x__) -# define DO_MUX(port, mux, tx, rx) \ - do { bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & \ - ~PORT_x_MUX_##mux##_MASK) | \ - PORT_x_MUX_##mux##_FUNC_3); \ - bfin_write_PORT##port##_FER(bfin_read_PORT##port##_FER() | \ - P##port##tx | P##port##rx); \ - } while (0) switch (CONFIG_UART_CONSOLE) { - case 0: DO_MUX(G, 2, 7, 8); break; /* Port G; mux 2; PG2 and PG8 */ - case 1: DO_MUX(F, 5, 14, 15); break; /* Port F; mux 5; PF14 and PF15 */ + case 0: serial_early_do_mach_portmux('G', PORT_x_MUX_2_MASK, + PORT_x_MUX_2_FUNC_3, PG7); /* TX: G; mux 2; func 3; PG7 */ + serial_early_do_mach_portmux('G', PORT_x_MUX_2_MASK, + PORT_x_MUX_2_FUNC_3, PG8); /* RX: G; mux 2; func 3; PG8 */ + break; + case 1: serial_early_do_mach_portmux('F', PORT_x_MUX_5_MASK, + PORT_x_MUX_5_FUNC_3, PF14); /* TX: F; mux 5; func 3; PF14 */ + serial_early_do_mach_portmux('F', PORT_x_MUX_5_MASK, + PORT_x_MUX_5_FUNC_3, PF15); /* RX: F; mux 5; func 3; PF15 */ + break; } - SSYNC(); #elif defined(__ADSPBF537__) || defined(__ADSPBF536__) || defined(__ADSPBF534__) const uint16_t func[] = { PFDE, PFTE, }; bfin_write_PORT_MUX(bfin_read_PORT_MUX() & ~func[CONFIG_UART_CONSOLE]); bfin_write_PORTF_FER(bfin_read_PORTF_FER() | (1 << P_IDENT(P_UART(RX))) | (1 << P_IDENT(P_UART(TX)))); - SSYNC(); #elif defined(__ADSPBF54x__) -# define DO_MUX(port, tx, rx) \ - do { bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & \ - ~(PORT_x_MUX_##tx##_MASK | \ - PORT_x_MUX_##rx##_MASK)) | \ - PORT_x_MUX_##tx##_FUNC_1 | \ - PORT_x_MUX_##rx##_FUNC_1); \ - bfin_write_PORT##port##_FER(bfin_read_PORT##port##_FER() | \ - P##port##tx | P##port##rx); \ - } while (0) switch (CONFIG_UART_CONSOLE) { - case 0: DO_MUX(E, 7, 8); break; /* Port E; PE7 and PE8 */ - case 1: DO_MUX(H, 0, 1); break; /* Port H; PH0 and PH1 */ - case 2: DO_MUX(B, 4, 5); break; /* Port B; PB4 and PB5 */ - case 3: DO_MUX(B, 6, 7); break; /* Port B; PB6 and PB7 */ + case 0: serial_early_do_mach_portmux('E', PORT_x_MUX_7_MASK, + PORT_x_MUX_7_FUNC_1, PE7); /* TX: E; mux 7; func 1; PE7 */ + serial_early_do_mach_portmux('E', PORT_x_MUX_8_MASK, + PORT_x_MUX_8_FUNC_1, PE8); /* RX: E; mux 8; func 1; PE8 */ + break; + case 1: serial_early_do_mach_portmux('H', PORT_x_MUX_0_MASK, + PORT_x_MUX_0_FUNC_1, PH0); /* TX: H; mux 0; func 1; PH0 */ + serial_early_do_mach_portmux('H', PORT_x_MUX_1_MASK, + PORT_x_MUX_1_FUNC_1, PH1); /* RX: H; mux 1; func 1; PH1 */ + break; + case 2: serial_early_do_mach_portmux('B', PORT_x_MUX_4_MASK, + PORT_x_MUX_4_FUNC_1, PB4); /* TX: B; mux 4; func 1; PB4 */ + serial_early_do_mach_portmux('B', PORT_x_MUX_5_MASK, + PORT_x_MUX_5_FUNC_1, PB5); /* RX: B; mux 5; func 1; PB5 */ + break; + case 3: serial_early_do_mach_portmux('B', PORT_x_MUX_6_MASK, + PORT_x_MUX_6_FUNC_1, PB6); /* TX: B; mux 6; func 1; PB6 */ + serial_early_do_mach_portmux('B', PORT_x_MUX_7_MASK, + PORT_x_MUX_7_FUNC_1, PB7); /* RX: B; mux 7; func 1; PB7 */ + break; } - SSYNC(); #elif defined(__ADSPBF561__) /* UART pins could be GPIO, but they aren't pin muxed. */ #else @@ -178,6 +218,7 @@ static inline void serial_early_do_portmux(void) # error "missing portmux logic for UART" # endif #endif + SSYNC(); } __attribute__((always_inline)) diff --git a/arch/blackfin/cpu/serial4.h b/arch/blackfin/cpu/serial4.h index f3a4051..282e41a 100644 --- a/arch/blackfin/cpu/serial4.h +++ b/arch/blackfin/cpu/serial4.h @@ -43,32 +43,45 @@ typedef uint32_t uart_lsr_t; #define _lsr_write(p, v) bfin_write(&p->status, v) __attribute__((always_inline)) +static inline void serial_early_do_mach_portmux(char port, int mux_mask, + int mux_func, int port_pin) +{ + switch (port) { + case 'D': + bfin_write_PORTD_MUX((bfin_read_PORTD_MUX() & + ~mux_mask) | mux_func); + bfin_write_PORTD_FER(bfin_read_PORTD_FER() | port_pin); + break; + case 'G': + bfin_write_PORTG_MUX((bfin_read_PORTG_MUX() & + ~mux_mask) | mux_func); + bfin_write_PORTG_FER(bfin_read_PORTG_FER() | port_pin); + break; + } +} + +__attribute__((always_inline)) static inline void serial_early_do_portmux(void) { #if defined(__ADSPBF60x__) -# define DO_MUX(port, tx, rx, func) do \ -{\ - bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & \ - ~(PORT_x_MUX_##tx##_MASK | \ - PORT_x_MUX_##rx##_MASK)) | \ - PORT_x_MUX_##tx##_FUNC_##func | \ - PORT_x_MUX_##rx##_FUNC_##func); \ - bfin_write_PORT##port##_FER_SET(P##port##tx | P##port##rx);\ -} while (0); switch (CONFIG_UART_CONSOLE) { - case 0: - DO_MUX(D, 7, 8, 2); - break; /* Port D; PD7 and PD8; function 2 */ - case 1: - DO_MUX(G, 15, 14, 1); - break; /* Port G; PG15 and PH14; function 1 */ + case 0: serial_early_do_mach_portmux('D', PORT_x_MUX_7_MASK, + PORT_x_MUX_7_FUNC_2, PD7); /* TX: D; mux 7; func 2; PD7 */ + serial_early_do_mach_portmux('D', PORT_x_MUX_8_MASK, + PORT_x_MUX_8_FUNC_2, PD8); /* RX: D; mux 8; func 2; PD8 */ + break; + case 1: serial_early_do_mach_portmux('G', PORT_x_MUX_15_MASK, + PORT_x_MUX_15_FUNC_1, PG15); /* TX: G; mux 15; func 1; PG15 */ + serial_early_do_mach_portmux('G', PORT_x_MUX_14_MASK, + PORT_x_MUX_14_FUNC_1, PG14); /* RX: G; mux 14; func 1; PG14 */ + break; } - SSYNC(); #else # if (P_UART(RX) & P_DEFINED) || (P_UART(TX) & P_DEFINED) # error "missing portmux logic for UART" # endif #endif + SSYNC(); } __attribute__((always_inline))
_______________________________________________ U-Boot-commits mailing list U-Boot-commits@blackfin.uclinux.org https://blackfin.uclinux.org/mailman/listinfo/u-boot-commits