public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Barada <peterb@logicpd.com>
To: Tony Lindgren <tony@atomide.com>
Cc: Grant Likely <grant.likely@secretlab.ca>,
	Mika Westerberg <ext-mika.1.westerberg@nokia.com>,
	linux-omap@vger.kernel.org, Olof Johansson <olof@lixom.net>
Subject: Re: Preventing OMAP3 serial driver to take control of all UARTs
Date: Mon, 30 Nov 2009 15:31:06 -0500	[thread overview]
Message-ID: <1259613066.4649.127.camel@thunk> (raw)
In-Reply-To: <20091130194031.GV4348@atomide.com>

On Mon, 2009-11-30 at 11:40 -0800, Tony Lindgren wrote:
> * Grant Likely <grant.likely@secretlab.ca> [091130 09:01]:
> > On Mon, Nov 30, 2009 at 9:36 AM, Peter Barada <peterb@logicpd.com> wrote:
> > > On Mon, 2009-11-30 at 10:46 +0200, Mika Westerberg wrote:
> > >> Hi Tony,
> > >>
> > >> Current omap serial driver takes control of all 3 (4 on OMAP3640)
> > >> UARTS. However, we have such a setup where UART2 for example is used
> > >> by bluetooth driver. It uses the UART as non-standard way (there are
> > >> some Nokia extensions to H4 protocol) so we cannot use the standard
> > >> driver for driving the UART but have written special one for that
> > >> purpose.
> > >>
> > >> Question is: Is there any, upstreamable, way of preventing omap serial
> > >> driver to do this? Currently this is done with custom #ifdef hackery to
> > >> mach-omap2/serial.c. Alternative solution that comes into mind is to
> > >> specify UART configuration in board files and let serial driver to use
> > >> that instead of hard-coded one. Or do you have some nice alternatives?
> > >
> > > Previously (back around 2.6.28-rc8) in the board file, the
> > > omap_uart_config struct controlled which serial ports were enabled on
> > > startup.  It was used in omap_serial_init, and it looks like that code
> > > went away with the following commit:
> > > http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=blobdiff;f=arch/arm/mach-omap2/serial.c;h=2e17b57f5b23bb6703a2d621103585af1d8d729b;hp=555e735524381cbf8ef9f20d778ad81f9438e24e;hb=4355c41a635943d30e9396b95185314343dcb551;hpb=7e9ccf7776bb68b5367eb0bb35e519df62bea35c
> > >
> > > I'm kinda in the same boat as I want to use some of the unused serial
> > > port pins for GPIO, but they are setup as serial ports....
> 
> Sounds like we need something back to specify the ports to use
> from board-*.c files. Kevin, got any comments? 
>  
> > Not in mainlined yet, but I'm working on porting flattened device tree
> > support to OMAP to solve exactly this sort of problem.  Basically,
> > instead of hard coding or #ifdeffing things, a data blob gets handed
> > to the kernel at boot time telling it exactly what hardware is present
> > in a consistent, parsable format.  Device drivers then get probed
> > based on data in the device tree.  Here's some info on the approach:
> > 
> > http://www.elinux.org/Device_Trees
> > 
> > I expect to have my prototype ready for review mid-January, and most
> > of the common code should be either merged or queued up in linux-next
> > by that time.
> 
> While device tree is a nice solution to some of the problems, it still
> leaves all the issues we already have with buggy and and outdated
> bootloaders. So we still need to properly initialize the devices in
> the kernel.
> 
> Just for reference, most of the omap bootloader bugs seem to be
> related to not muxing the pins right or using wrong timings for GPMC.
> 
> And then things that mostly change during the board development are
> the GPIO pins, but those can be easily rewritten in the board-*.c
> files based on the omap_rev.
> 
> But at least the device tree is a standard model, while the earlier
> omap tag approach was non-standard.
> 
> Peter, maybe you've already thought through all this.. But would it be
> possible to do lightweight device tree that we just use to populate
> the platform data?

One possibility is to pass to omap_serial_init() the omap_uart_config
struct pointer to specify which parts are enabled.  If a NULL is passed
in, then enable all the ports available.  Since omap_serial_early_init()
was already called, the muxing would have to be cleaned up, but since
the kernel should mux all the pins it uses, that shouldn't be a problem.
omap_serial_init would now look something like(warning, coding on the
fly - don't know if it will work as is):

void __init omap_serial_init(struct omap_uart_config *confptr)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(omap_uart); i++) {
		struct omap_uart_state *uart = &omap_uart[i];
		struct platform_device *pdev = &uart->pdev;
		struct device *dev = &pdev->dev;

		/* Only enable
		if (!confptr || confptr->port_enabled & (1<<i)) {
			omap_uart_reset(uart);
			omap_uart_idle_init(uart);

			if (WARN_ON(platform_device_register(pdev)))
				continue;
			if ((cpu_is_omap34xx() && uart->padconf) ||
			    (uart->wk_en && uart->wk_mask)) {
				device_init_wakeup(dev, true);
				DEV_CREATE_FILE(dev, &dev_attr_sleep_timeout);
			}
		}
	}
}

> Regards,
> 
> Tony

-- 
Peter Barada <peterb@logicpd.com>
Logic Product Development, Inc.

  reply	other threads:[~2009-11-30 20:30 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-30  8:46 Preventing OMAP3 serial driver to take control of all UARTs Mika Westerberg
2009-11-30 16:36 ` Peter Barada
2009-11-30 17:01   ` Grant Likely
2009-11-30 19:40     ` Tony Lindgren
2009-11-30 20:31       ` Peter Barada [this message]
2009-11-30 21:09         ` Tony Lindgren
2009-12-01 11:02           ` Mika Westerberg
2009-12-09 22:43             ` Kevin Hilman
2009-12-10 10:33               ` [PATCH] OMAP3: serial - allow platforms specify which UARTs to initialize Mika Westerberg
2009-12-11 22:27                 ` [APPLIED] [PATCH] OMAP3: serial - allow platforms specify which UARTs to Tony Lindgren
2009-11-30 20:52       ` Preventing OMAP3 serial driver to take control of all UARTs Tony Lindgren
2009-12-02 15:07       ` Grant Likely
2009-12-02 15:53         ` Olof Johansson
2009-12-02 16:04           ` Grant Likely
2009-12-02 16:16             ` Olof Johansson
2009-12-02 17:24               ` Grant Likely
2009-12-03  0:59                 ` Tony Lindgren
2009-12-03  1:00         ` Tony Lindgren
2009-12-03  6:56           ` Mika Westerberg
2009-12-03  8:46             ` Artem Bityutskiy
2009-12-03 19:52               ` Tony Lindgren
2009-12-07 10:44                 ` Mika Westerberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1259613066.4649.127.camel@thunk \
    --to=peterb@logicpd.com \
    --cc=ext-mika.1.westerberg@nokia.com \
    --cc=grant.likely@secretlab.ca \
    --cc=linux-omap@vger.kernel.org \
    --cc=olof@lixom.net \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox