omap3_beagle: init uart2 for beagle rev AX/BX only
Subsystems (3)
PATCH 1/1 omap3_beagle: init uart2 for beagle rev AX/BX only
From: "Govindraj.R" <[email protected]>
All beagle boards rev > AX/BX have external usb hubs connected to ehci interface, external hub/peripheral uses a nreset sequence for which uart2_rx.gpio_147 pin in mux mode4(USB2HS_nRST) is used on all beagle boards expect rev Ax/BX.
(Reference to all beagle boards rev schematics:
http://beagleboard.org/hardware/design)
Initialising uart2 will lead to serial init taking over uart2_rx pin so init uart2_rx pin mux only for Beagle AX/BX rev boards. Dont init uart2 for all other boards allowing usb_ehci functionality.
To initialise individual uart port by id utilise and modify the existing available func. omap_serial_board_init.
--- arch/arm/mach-omap2/board-omap3beagle.c | 6 +++- arch/arm/mach-omap2/serial.c | 41 ++++++++++++++++------------- arch/arm/plat-omap/include/plat/serial.h | 3 +- 3 files changed, 30 insertions(+), 20 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +5 -1
@@ -126,6 +126,7 @@ static void __init omap3_beagle_init_rev(void) beagle_config.mmc1_gpio_wp =29 ; beagle_config.reset_gpio =170 ; beagle_config.usr_button_gpio =7 ; +omap_serial_board_init (NULL ,1 );break ;case 6 :printk (KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n" );
@@ -528,7 +529,10 @@ static void __init omap3_beagle_init(void)platform_add_devices (omap3_beagle_devices,ARRAY_SIZE (omap3_beagle_devices));omap_display_init (&beagle_dss_data); -omap_serial_init (); +omap_serial_board_init (NULL ,0 ); +omap_serial_board_init (NULL ,2 ); +omap_serial_board_init (NULL ,3 ); +omap_sdrc_init (mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params);
arch/arm/mach-omap2/serial.c +23 -18
58 lines not on this page · raw message
arch/arm/plat-omap/include/plat/serial.h +2 -1
@@ -111,7 +111,8 @@ struct omap_uart_port_info;extern void omap_serial_init (void );extern int omap_uart_can_sleep (void ); -extern void omap_serial_board_init (struct omap_uart_port_info *platform_data); +extern void omap_serial_board_init (struct omap_uart_port_info *platform_data, +u8 port_id);extern void omap_serial_init_port (struct omap_board_data *bdata,struct omap_uart_port_info *platform_data);#endif
Signature · 1 line
1.7.5.4
Tony Lindgren
maintainerPATCH 1/1 omap3_beagle: init uart2 for beagle rev AX/BX only
Quoted 16 lines · Govindraj.R
From: "Govindraj.R" <[email protected]>
All beagle boards rev > AX/BX have external usb hubs connected to ehci interface, external hub/peripheral uses a nreset sequence for which uart2_rx.gpio_147 pin in mux
mode4(USB2HS_nRST)is used on all beagle boards expect rev Ax/BX.
(Reference to all beagle boards rev schematics:
http://beagleboard.org/hardware/design)Initialising uart2 will lead to serial init taking over
uart2_rxpin so inituart2_rxpin mux only for Beagle AX/BX rev boards. Dont init uart2 for all other boards allowingusb_ehcifunctionality.To initialise individual uart port by id utilise and modify the existing available func.
omap_serial_board_init.
Quoted 6 lines
Cc Tony Lindgren <[email protected]>Cc Kevin Hilman <[email protected]>Cc Koen Kooi <[email protected]>Tested-by Peter Ujfalusi <[email protected]>Tested-by Robert Nelson <[email protected]>Signed-off-by Govindraj.R <[email protected]>
Can somebody please test this on non-xm beagle too and reply with a Tested-by?
Thanks,
Tony
Quoted 111 lines
--- arch/arm/mach-omap2/board-omap3beagle.c | 6 +++- arch/arm/mach-omap2/serial.c | 41 ++++++++++++++++------------- arch/arm/plat-omap/include/plat/serial.h | 3 +- 3 files changed, 30 insertions(+), 20 deletions(-)arch/arm/mach-omap2/board-omap3beagle.c +5
-1@@ -126,6 +126,7 @@ static void __init omap3_beagle_init_rev(void) beagle_config.mmc1_gpio_wp =29 ; beagle_config.reset_gpio =170 ; beagle_config.usr_button_gpio =7 ; +omap_serial_board_init (NULL ,1 );break ;case 6 :printk (KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n" );@@ -528,7 +529,10 @@ static void __init omap3_beagle_init(void)platform_add_devices (omap3_beagle_devices,ARRAY_SIZE (omap3_beagle_devices));omap_display_init (&beagle_dss_data); -omap_serial_init (); +omap_serial_board_init (NULL ,0 ); +omap_serial_board_init (NULL ,2 ); +omap_serial_board_init (NULL ,3 ); +omap_sdrc_init (mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params);arch/arm/mach-omap2/serial.c +23
-18@@ -393,30 +393,32 @@ void __init omap_serial_init_port(struct omap_board_data *bdata,/** * omap_serial_board_init() - initialize all supported serial ports * @info: platform specific data pointer +* @port_id: uart port number to be initialised * -* Initializes all available UARTs as serial ports. Platforms +* Initializes individual UARTs as serial ports. Platforms * can call this function when they want to have default behaviour -* for serial ports (e.g initialize them all as serial ports). +* for serial ports (e.g initialize individual serial ports based on port id). */ -void __init omap_serial_board_init (struct omap_uart_port_info *info) +void __init omap_serial_board_init (struct omap_uart_port_info *info,u8 port_id) {struct omap_uart_state *uart;struct omap_board_data bdata; -list_for_each_entry (uart, &uart_list, node) { - bdata.id = uart->num; - bdata.flags =0 ; - bdata.pads =NULL ; - bdata.pads_cnt =0 ; - -if (cpu_is_omap44xx () ||cpu_is_omap34xx ()) -omap_serial_fill_default_pads (&bdata); - -if (!info) -omap_serial_init_port (&bdata,NULL ); -else -omap_serial_init_port (&bdata, &info[uart->num]); - } +list_for_each_entry (uart, &uart_list, node) +if (uart->num == port_id) { + bdata.id = uart->num; + bdata.flags =0 ; + bdata.pads =NULL ; + bdata.pads_cnt =0 ; + +if (!cpu_is_omap24xx ()) +omap_serial_fill_default_pads (&bdata); + +if (!info) +omap_serial_init_port (&bdata,NULL ); +else +omap_serial_init_port (&bdata, info); + } }/** @@ -428,5 +430,8 @@ void __init omap_serial_board_init(struct omap_uart_port_info *info)*/ void __init omap_serial_init (void ) { -omap_serial_board_init (NULL ); +struct omap_uart_state *uart; + +list_for_each_entry (uart, &uart_list, node) +omap_serial_board_init (NULL , uart->num); }arch/arm/plat-omap/include/plat/serial.h +2
-1@@ -111,7 +111,8 @@ struct omap_uart_port_info;extern void omap_serial_init (void );extern int omap_uart_can_sleep (void ); -extern void omap_serial_board_init (struct omap_uart_port_info *platform_data); +extern void omap_serial_board_init (struct omap_uart_port_info *platform_data, +u8 port_id);extern void omap_serial_init_port (struct omap_board_data *bdata,struct omap_uart_port_info *platform_data);#endif Signature · 1 line
1.7.5.4
PATCH 1/1 omap3_beagle: init uart2 for beagle rev AX/BX only
Quoted 24 lines · Tony Lindgren
Quoted 16 lines · Govindraj.R
From: "Govindraj.R" <[email protected]>
All beagle boards rev > AX/BX have external usb hubs connected to ehci interface, external hub/peripheral uses a nreset sequence for which uart2_rx.gpio_147 pin in mux
mode4(USB2HS_nRST)is used on all beagle boards expect rev Ax/BX.
(Reference to all beagle boards rev schematics:
http://beagleboard.org/hardware/design)Initialising uart2 will lead to serial init taking over
uart2_rxpin so inituart2_rxpin mux only for Beagle AX/BX rev boards. Dont init uart2 for all other boards allowingusb_ehcifunctionality.To initialise individual uart port by id utilise and modify the existing available func.
omap_serial_board_init.Quoted 6 lines
Cc Tony Lindgren <[email protected]>Cc Kevin Hilman <[email protected]>Cc Koen Kooi <[email protected]>Tested-by Peter Ujfalusi <[email protected]>Tested-by Robert Nelson <[email protected]>Signed-off-by Govindraj.R <[email protected]>
Quoted 2 lines
Can somebody please test this on non-xm beagle too and reply with a Tested-by?
Here's an update for my: Tested-by: Robert Nelson <[email protected]>
Just tested with one of my Beagle C4's, (and re-verified the new patch on a xM B) using usb flash drives on the ehci port...
beagle c4:
v3.2.9
Bus 001 Device 002: ID 0457:0151 Silicon Integrated Systems Corp. Super Flash 1GB / GXT 64MB Flash Drive
v3.3-rc6:
ehci broken
v3.3-rc6 + this patch:
Bus 001 Device 002: ID 0457:0151 Silicon Integrated Systems Corp. Super Flash 1GB / GXT 64MB Flash Driv
beagle xM B:
v3.2.9
Bus 001 Device 004: ID 1977:0824 T-Logic
v3.3-rc6:
ehci broken
v3.3-rc6 + this patch:
Bus 001 Device 004: ID 1977:0824 T-Logic
Regards,
Signature · 2 lines
Robert Nelson http://www.rcn-ee.com/
Tony Lindgren
maintainerPATCH 1/1 omap3_beagle: init uart2 for beagle rev AX/BX only
In reply to Govindraj.RHi,
Looking at this again..
Quoted 9 lines · Govindraj.R
From: "Govindraj.R" <[email protected]>
All beagle boards rev > AX/BX have external usb hubs connected to ehci interface, external hub/peripheral uses a nreset sequence for which uart2_rx.gpio_147 pin in mux
mode4(USB2HS_nRST)is used on all beagle boards expect rev Ax/BX.
(Reference to all beagle boards rev schematics:
http://beagleboard.org/hardware/design)
Quoted 3 lines
Initialising uart2 will lead to serial init taking over
uart2_rxpin so inituart2_rxpin mux only for Beagle AX/BX rev boards. Dont init uart2 for all other boards allowingusb_ehcifunctionality.
OK so the above got fixed for the muxing part with commit bce492c04ba8fc66a4ea0a52b181ba255daaaf54.
Quoted 2 lines
To initialise individual uart port by id utilise and modify the existing available func.
omap_serial_board_init.
This makes sense as board specific fixes.
Quoted 12 lines
arch/arm/mach-omap2/board-omap3beagle.c +1
-0@@ -126,6 +126,7 @@ static void __init omap3_beagle_init_rev(void) beagle_config.mmc1_gpio_wp =29 ; beagle_config.reset_gpio =170 ; beagle_config.usr_button_gpio =7 ; +omap_serial_board_init (NULL ,1 );break ;case 6 :printk (KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n" );@@ -528,7 +529,10 @@ static void __init omap3_beagle_init(void) platform_add_devices(omap3_beagle_devices,
arch/arm/mach-omap2/board-omap3beagle.c static void __init omap3_beagle_init(void) · line 538
Quoted 10 lines
arch/arm/mach-omap2/board-omap3beagle.c +4
-1ARRAY_SIZE(omap3_beagle_devices));omap_display_init (&beagle_dss_data); -omap_serial_init (); +omap_serial_board_init (NULL ,0 ); +omap_serial_board_init (NULL ,2 ); +omap_serial_board_init (NULL ,3 ); +omap_sdrc_init (mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params);
So this still looks valid, except now you also add the muxing for the uart pins instead of NULL? Note that you could define OMAP3_UART1_DEFAULT_PINS etc in some header.
Quoted 51 lines
arch/arm/mach-omap2/serial.c +19
-17@@ -393,30 +393,32 @@ void __init omap_serial_init_port(struct omap_board_data *bdata,/** * omap_serial_board_init() - initialize all supported serial ports * @info: platform specific data pointer +* @port_id: uart port number to be initialised * -* Initializes all available UARTs as serial ports. Platforms +* Initializes individual UARTs as serial ports. Platforms * can call this function when they want to have default behaviour -* for serial ports (e.g initialize them all as serial ports). +* for serial ports (e.g initialize individual serial ports based on port id). */ -void __init omap_serial_board_init (struct omap_uart_port_info *info) +void __init omap_serial_board_init (struct omap_uart_port_info *info,u8 port_id) {struct omap_uart_state *uart;struct omap_board_data bdata; -list_for_each_entry (uart, &uart_list, node) { - bdata.id = uart->num; - bdata.flags =0 ; - bdata.pads =NULL ; - bdata.pads_cnt =0 ; - -if (cpu_is_omap44xx () ||cpu_is_omap34xx ()) -omap_serial_fill_default_pads (&bdata); - -if (!info) -omap_serial_init_port (&bdata,NULL ); -else -omap_serial_init_port (&bdata, &info[uart->num]); - } +list_for_each_entry (uart, &uart_list, node) +if (uart->num == port_id) { + bdata.id = uart->num; + bdata.flags =0 ; + bdata.pads =NULL ; + bdata.pads_cnt =0 ; + +if (!cpu_is_omap24xx ()) +omap_serial_fill_default_pads (&bdata); + +if (!info) +omap_serial_init_port (&bdata,NULL ); +else +omap_serial_init_port (&bdata, info); + } }
arch/arm/mach-omap2/serial.c void __init omap_serial_board_init(struct omap_uart_port_info *info) · line 437
Quoted 9 lines
arch/arm/mach-omap2/serial.c +4
-1@@ -428,5 +430,8 @@ void __init omap_serial_board_init(struct omap_uart_port_info *info)*/ void __init omap_serial_init (void ) { -omap_serial_board_init (NULL ); +struct omap_uart_state *uart; + +list_for_each_entry (uart, &uart_list, node) +omap_serial_board_init (NULL , uart->num); }
Is this fix still needed? If so, it should probably be a separate fix with it's own description.
Regards,
Tony
PATCH 1/1 omap3_beagle: init uart2 for beagle rev AX/BX only
Quoted 108 lines · Tony Lindgren
Hi,
Looking at this again..
Quoted 9 lines · Govindraj.R
From: "Govindraj.R" <[email protected]>
All beagle boards rev > AX/BX have external usb hubs connected to ehci interface, external hub/peripheral uses a nreset sequence for which uart2_rx.gpio_147 pin in mux
mode4(USB2HS_nRST)is used on all beagle boards expect rev Ax/BX.
(Reference to all beagle boards rev schematics:
http://beagleboard.org/hardware/design)Quoted 3 lines
Initialising uart2 will lead to serial init taking over
uart2_rxpin so inituart2_rxpin mux only for Beagle AX/BX rev boards. Dont init uart2 for all other boards allowingusb_ehcifunctionality.OK so the above got fixed for the muxing part with commit
bce492c04ba8fc66a4ea0a52b181ba255daaaf54.Quoted 2 lines
To initialise individual uart port by id utilise and modify the existing available func.
omap_serial_board_init.This makes sense as board specific fixes.
Quoted 12 lines
arch/arm/mach-omap2/board-omap3beagle.c +1
-0@@ -126,6 +126,7 @@ static void __init omap3_beagle_init_rev(void) ? ? ? ? ? ? ? beagle_config.mmc1_gpio_wp = 29; ? ? ? ? ? ? ? beagle_config.reset_gpio = 170; ? ? ? ? ? ? ? beagle_config.usr_button_gpio = 7; + ? ? ? ? ? ? omap_serial_board_init(NULL, 1); ? ? ? ? ? ? ? break;? ? ? case 6:
? ? ? ? ? ? ?printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");arch/arm/mach-omap2/board-omap3beagle.c +0
-0@@ -528,7 +529,10 @@ static void __init omap3_beagle_init(void) ? ? ? platform_add_devices(omap3_beagle_devices,arch/arm/mach-omap2/board-omap3beagle.c static void __init omap3_beagle_init(void) · line 538
Quoted 10 lines
arch/arm/mach-omap2/board-omap3beagle.c +4
-1? ? ? ? ? ? ? ? ? ? ? ARRAY_SIZE(omap3_beagle_devices)); ? ? ? omap_display_init(&beagle_dss_data); - ? ? omap_serial_init(); + ? ? omap_serial_board_init(NULL, 0); + ? ? omap_serial_board_init(NULL, 2); + ? ? omap_serial_board_init(NULL, 3); + ? ? ? omap_sdrc_init(mt46h32m32lf6_sdrc_params, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mt46h32m32lf6_sdrc_params);So this still looks valid, except now you also add the muxing for the uart pins instead of NULL? Note that you could define
OMAP3_UART1_DEFAULT_PINSetc in some header.Quoted 55 lines
arch/arm/mach-omap2/serial.c +0
-0@@ -393,30 +393,32 @@ void __init omap_serial_init_port(struct omap_board_data *bdata,?/**
? *omap_serial_board_init()- initialize all supported serial ports ? * @info: platform specific data pointer
+ * @port_id: uart port number to be initialised
? *
- * Initializes all available UARTs as serial ports. Platforms
+ * Initializes individual UARTs as serial ports. Platforms
? * can call this function when they want to have default behaviour
- * for serial ports (e.g initialize them all as serial ports).
+ * for serial ports (e.g initialize individual serial ports based on port id). ? */arch/arm/mach-omap2/serial.c +1
-1-void __init omap_serial_board_init (struct omap_uart_port_info *info) +void __init omap_serial_board_init (struct omap_uart_port_info *info,u8 port_id)?{
? ? ? structomap_uart_state*uart;
? ? ? structomap_board_databdata;- ? ?
list_for_each_entry(uart, &uart_list, node){
- ? ? ? ? ? ? bdata.id =uart->num;
- ? ? ? ? ? ? bdata.flags = 0;
- ? ? ? ? ? ? bdata.pads = NULL;
- ? ? ? ? ? ? bdata.pads_cnt = 0;arch/arm/mach-omap2/serial.c +15
-9- - ? ? ? ? ? ? if (cpu_is_omap44xx() || cpu_is_omap34xx()) - ? ? ? ? ? ? ? ? ? ? omap_serial_fill_default_pads(&bdata); - - ? ? ? ? ? ? if (!info) - ? ? ? ? ? ? ? ? ? ? omap_serial_init_port(&bdata, NULL); - ? ? ? ? ? ? else - ? ? ? ? ? ? ? ? ? ? omap_serial_init_port(&bdata, &info[uart->num]); - ? ? } + ? ? list_for_each_entry(uart, &uart_list, node) + ? ? ? ? ? ? if (uart->num == port_id) { + ? ? ? ? ? ? ? ? ? ? bdata.id = uart->num; + ? ? ? ? ? ? ? ? ? ? bdata.flags = 0; + ? ? ? ? ? ? ? ? ? ? bdata.pads = NULL; + ? ? ? ? ? ? ? ? ? ? bdata.pads_cnt = 0; + + ? ? ? ? ? ? ? ? ? ? if (!cpu_is_omap24xx()) + ? ? ? ? ? ? ? ? ? ? ? ? ? ? omap_serial_fill_default_pads(&bdata); + + ? ? ? ? ? ? ? ? ? ? if (!info) + ? ? ? ? ? ? ? ? ? ? ? ? ? ? omap_serial_init_port(&bdata, NULL); + ? ? ? ? ? ? ? ? ? ? else + ? ? ? ? ? ? ? ? ? ? ? ? ? ? omap_serial_init_port(&bdata, info); + ? ? ? ? ? ? }?}
arch/arm/mach-omap2/serial.c +0
-0@@ -428,5 +430,8 @@ void __init omap_serial_board_init(struct omap_uart_port_info *info)? */
?void__initomap_serial_init(void)
?{
- ? ?omap_serial_board_init(NULL);
Quoted 8 lines
Quoted 5 lines
+ ? ? struct
omap_uart_state*uart;
+
+ ? ?list_for_each_entry(uart, &uart_list, node)
+ ? ? ? ? ? ?omap_serial_board_init(NULL, uart->num); ?}Is this fix still needed? If so, it should probably be a separate fix with it's own description.
No this one is not needed anymore
since its fixed part of commitbce492c04ba8fc66a4ea0a52b181ba255daaaf54
--
Thanks,
Govindraj.R
Tony Lindgren
maintainerPATCH 1/1 omap3_beagle: init uart2 for beagle rev AX/BX only
Quoted 8 lines · Raja, Govindraj
Quoted 2 lines · Tony Lindgren
Is this fix still needed? If so, it should probably be a separate fix with it's own description.
No this one is not needed anymore
since its fixed part of commitbce492c04ba8fc66a4ea0a52b181ba255daaaf54
OK thanks for the update.
Tony