From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: "João Ramos" <joao.ramos@inov.pt>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
Sergei Shtylyov <sshtylyov@ru.mvista.com>,
linux-ide@vger.kernel.org
Subject: Re: EP93xx PIO IDE driver proposal
Date: Fri, 8 May 2009 20:55:29 +0200 [thread overview]
Message-ID: <200905082055.29993.bzolnier@gmail.com> (raw)
In-Reply-To: <4A047718.2000707@inov.pt>
On Friday 08 May 2009 20:16:56 João Ramos wrote:
> Bartlomiej Zolnierkiewicz escreveu:
> > On Friday 08 May 2009 19:28:22 João Ramos wrote:
> >
> >>> Yes! :)
> >>>
> >>> There is still a room for improvement though -- it would be better to fix
> >>> IDE core to set PIO0 before probing devices for all host controllers.
> >>>
> >>> Moreover it seems that doing it this way would allow us to remove ->init_hwif
> >>> method from this driver and do all necessary setup in ep93xx_ide_probe()
> >>> (this controller is a single port one so theoretically there shouldn't be
> >>> a need for having per-port ->init_hwif implementation).
> >>>
> >>>
> >> So after all this discussion ;-) , my driver will have no 'init_hwif'
> >> method, and the setup code will be on 'ep93xx_ide_probe', which will
> >> configure entirely the IDE host controller.
> >> Moreover, this initial configuration will setup the controller to work
> >> at PIO Mode 0. Later on, the 'set_pio_mode' method will be called and
> >> the controller will configure itself according to the PIO mode reported
> >> by the IDE core.
> >>
> >> Can I proceed this way?
> >>
> >
> > Well, yes. Though I hoped that you would at least give a try to fixing
> > IDE core to program PIO0 initially for all host drivers that implement
> > ->set_pio_mode method...
> >
>
> Sorry, I didn't noticed your hint... Sure, I can give it a try ;-)
> Maybe with a little help, but I can try. You mean, when the host driver
> is registered (ide_host_register, or ide_host_add that later calls
> ide_host_register), maybe in the 'ide_init_port' method (sorry, I need
> some guidance here...) check if the 'set_pio_mode' method is
> implemented, and after initializing each port (d->init_hwif(hwif))
> default it to PIO Mode 0, calling set_pio_mode method.
ide_init_port() seems OK but I think that ide_port_init_devices()
[it is called after ide_init_port()] would be a bit safer and more
flexible (some host drivers may also require special ->init_dev
setup first) and the check for ->set_pio_mode method presence can
be done just before actually using the method, i.e.
const struct ide_port_ops *port_ops = hwif->port_ops;
if (port_ops && port_ops->set_pio_mode)
port_ops->set_pio_mode(...)
> Is this correct? Sorry, has I stated earlier, I'm wasn't familiar with
> the IDE susbsystem untill I wrote this patch; but I'm willing to
> contribute in any way I can, so please, bear with me on this :-) .
Sure, nobody starts from the expert level and not all maintainers are
into "prove the maintainer wrong" elitist's idiocy. ;)
> >
> >>>
> >>>
> >>>> There's just only one issue; normally, I would setup the specific
> >>>> timings (t0, t1, t2, t2i, etc) in the 'pio_set_mode' hook. However, if
> >>>> you look further in the driver, those timings aren't defined through a
> >>>> memory controller but instead manually enforced by 'ndelay' calls (arghhh).
> >>>> This means that in my low-level procedures for reading and writing, I
> >>>> need to have access to the timings (or the struct ide_timing)
> >>>> corresponding to the PIO mode selected, in order to use the correct delays.
> >>>>
> >>>> My question is: which is the best way to accomplish this? Declaring a
> >>>> global struct ide_timing variable pointer that always holds the correct
> >>>> ide_timing struct to the selected PIO mode? Or should I always check (in
> >>>> some manner) what is the current PIO mode and then select the adequate
> >>>> delays?
> >>>>
> >>>>
> >>> I think that the setting variable pointer in ->set_pio_mode method would
> >>> work best. Seems like the existing drive_data field of ide_drive_t is well
> >>> suited for this purpose (however it may be worth to convert it to 'void *'
> >>> type while we are it).
> >>>
> >>>
> >> Did you mean 'drive_data' field, or 'driver_data' field?
> >> 'drive_data' field is an unsigned int value; I guess you meant
> >> 'driver_data' field as it is a (void *) field, so I can define it as a
> >> pointer to the correct 'struct ide_timing'.
> >>
> >
> > That is why I hinted that you may need to convert 'drive_data' to
> > 'void *' type first. You may also try to use 'driver_data' instead
> > but you will discover rather quickly that you shouldn't do this... ;)
> >
> > 'driver_data' is for use by IDE core and IDE device drivers.
> >
> > 'drive_data' is for use by IDE host drivers.
> >
>
> And this conversion is made by my driver code, or should I fix directly
> in the ide_drive_t structure?
The latter -- ide_drive_t is the place needing fixing.
Thanks,
Bart
next prev parent reply other threads:[~2009-05-08 18:52 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <49CCD7C4.8000207@inov.pt>
[not found] ` <49CFDD8F.1030306@bluewatersys.com>
[not found] ` <BD79186B4FD85F4B8E60E381CAEE1909014E2E09@mi8nycmail19.Mi8.com>
[not found] ` <49D0CAE4.9090306@inov.pt>
2009-03-30 15:34 ` EP93xx PIO IDE driver proposal Sergei Shtylyov
2009-05-04 11:24 ` João Ramos
2009-05-05 12:04 ` Sergei Shtylyov
2009-05-06 14:17 ` João Ramos
2009-05-06 17:05 ` Sergei Shtylyov
2009-05-07 9:36 ` João Ramos
2009-05-07 11:01 ` João Ramos
2009-05-07 13:53 ` Alan Cox
2009-05-07 15:33 ` João Ramos
2009-05-08 12:04 ` Bartlomiej Zolnierkiewicz
2009-05-08 12:16 ` João Ramos
2009-05-08 12:40 ` Bartlomiej Zolnierkiewicz
2009-05-08 13:30 ` Sergei Shtylyov
2009-05-08 14:09 ` Bartlomiej Zolnierkiewicz
2009-05-08 17:28 ` João Ramos
2009-05-08 18:02 ` Bartlomiej Zolnierkiewicz
2009-05-08 18:16 ` João Ramos
2009-05-08 18:55 ` Bartlomiej Zolnierkiewicz [this message]
2009-05-08 20:24 ` joao.ramos
2009-05-08 21:01 ` Sergei Shtylyov
2009-05-08 22:07 ` Bartlomiej Zolnierkiewicz
2009-05-11 11:10 ` João Ramos
2009-05-12 16:49 ` Sergei Shtylyov
2009-05-12 17:23 ` Bartlomiej Zolnierkiewicz
2009-05-13 11:01 ` João Ramos
2009-05-17 15:20 ` Bartlomiej Zolnierkiewicz
2009-05-22 17:52 ` Sergei Shtylyov
2009-05-13 14:18 ` João Ramos
2009-05-14 19:44 ` Bartlomiej Zolnierkiewicz
2009-05-15 17:01 ` João Ramos
2009-05-17 16:16 ` Bartlomiej Zolnierkiewicz
2009-05-18 13:49 ` João Ramos
2009-05-19 13:06 ` Bartlomiej Zolnierkiewicz
2009-05-19 13:20 ` João Ramos
2009-05-19 13:56 ` Bartlomiej Zolnierkiewicz
2009-05-19 14:05 ` João Ramos
2009-05-19 15:50 ` João Ramos
2009-06-06 15:26 ` Sergei Shtylyov
2009-06-22 10:01 ` Bartlomiej Zolnierkiewicz
2009-05-14 16:30 ` Sergei Shtylyov
2009-05-14 16:36 ` Sergei Shtylyov
2009-05-14 18:58 ` Bartlomiej Zolnierkiewicz
2009-05-11 13:20 ` João Ramos
2009-05-12 16:41 ` Bartlomiej Zolnierkiewicz
2009-05-12 16:57 ` Sergei Shtylyov
2009-05-12 16:01 ` João Ramos
2009-05-12 16:30 ` Bartlomiej Zolnierkiewicz
2009-05-12 16:45 ` João Ramos
2009-05-07 16:52 ` H Hartley Sweeten
2009-05-07 22:09 ` Ryan Mallon
2009-05-07 22:31 ` H Hartley Sweeten
2009-05-07 22:51 ` Ryan Mallon
2009-05-07 23:01 ` H Hartley Sweeten
2009-05-07 23:12 ` Ryan Mallon
2009-05-07 23:32 ` João Ramos
2009-05-07 23:58 ` H Hartley Sweeten
2009-05-08 11:23 ` Sergei Shtylyov
2009-05-08 12:47 ` João Ramos
[not found] ` <49D12669.4030207@bluewatersys.com>
2009-03-31 10:36 ` Sergei Shtylyov
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=200905082055.29993.bzolnier@gmail.com \
--to=bzolnier@gmail.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=joao.ramos@inov.pt \
--cc=linux-ide@vger.kernel.org \
--cc=sshtylyov@ru.mvista.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.