linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
To: Stanislaw Gruszka <stf_xl@wp.pl>
Cc: linux-ide@vger.kernel.org, Andrew Victor <linux@maxim.org.za>,
	linux-arm-kernel@lists.arm.linux.org.uk
Subject: Re: [PATCH 2/3] ide: add at91_ide driver
Date: Wed, 04 Feb 2009 19:04:27 +0300	[thread overview]
Message-ID: <4989BC8B.4010105@ru.mvista.com> (raw)
In-Reply-To: <200902041547.44149.stf_xl@wp.pl>

Stanislaw Gruszka wrote:

>>>diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h
>>>index fb51f0e..6674b9b 100644
>>>--- a/arch/arm/mach-at91/include/mach/board.h
>>>+++ b/arch/arm/mach-at91/include/mach/board.h
>>>@@ -59,6 +59,18 @@ struct at91_cf_data {
>>> };
>>> extern void __init at91_add_device_cf(struct at91_cf_data *data);
>>> 
>>>+ /* Compact Flash True IDE mode */
>>>+struct at91_ide_data {
>>>+	u8	irq_pin;		/* the same meaning as for CF */

>>  I again have to express my dislike about not passing IRQ the usual 
>>way. Also, see my comments to the platform code.

> Yes, I know, I don't like to argue. Only reasoning to use platform irq resource
> seams to be: "because other drivers do". However we have exception - at91_cf
> also use board->irq_pin, so maybe this driver could also do ?

    Then why have the memory resource when we can calculate it from the chip 
select? (I'm not asking you to do that, since the platfrom device resources 
are user-visible thru /proc/iomem -- even if the driver is not enabled.)

>>>diff --git a/drivers/ide/at91_ide.c b/drivers/ide/at91_ide.c
>>>new file mode 100644
>>>index 0000000..3a1f7e0
>>>--- /dev/null
>>>+++ b/drivers/ide/at91_ide.c
>>>@@ -0,0 +1,496 @@
>>>+/*
>>>+ * IDE host driver for AT91SAM9 Static Memory Controller

>>   Why not call the driver 'at91sam9_ide'?

>>>+/*
>>>+ * AT91 Static Memory Controller

>>  AT91SAM9.

> Ok, currently only SAM9 can be used with driver. However I think adding
> support to AT91RM9200 to this driver will be not much effort.

    Can you answer the simple question: why we should try to support two 
incompatible chips with a single driver? Because the driver name will be 
shorter? :-)

> I don't think
> someone will want to write new driver for RM9200 insted using this one.

    You're right, nobody will want that... because AT91RM9200 as is has *no 
support for True IDE mode*. ;-)

> IMHO, current name is short and sweet and not miss the true so much -
> most of the AT91s which can work with True IDE logic are supported. 
> I would like to stay with current name.

    Oh, do what you want... just don't claim it will work on RM9200. :-/

>>>+ * different bus data width is used: 8Bit for Task File, 16Bit for Data I/O
>>>+ *
>>>+ * After initialization we do 8/16 bit flipping (changes in SMC MODE register)
>>>+ * only inside IDE callback routines which are serialized by IDE layer,
>>>+ * so no additional locking needed.
>>>+ */
>>>+
>>>+static void init_smc_mode(const u8 chipselect)
>>>+{
>>>+	at91_sys_write(AT91_SMC_MODE(chipselect), AT91_SMC_READMODE |
>>>+						  AT91_SMC_WRITEMODE |
>>>+						  AT91_SMC_BAT_SELECT |
>>>+						  AT91_SMC_TDF_(0));
>>>  

>>   I'm not sure why are you fixing the dataflow timing again, this time 
>>to 0...

> Not necessary code, will be removed.

    All this funciton seems pretty useless.

>>>+{
>>>+	unsigned long mode;
>>>+
>>>+	/* setup timings in SMC */
>>>+	at91_sys_write(AT91_SMC_SETUP(chipselect), AT91_SMC_NWESETUP_(setup) |
>>>+						   AT91_SMC_NCS_WRSETUP_(0) |
>>>+						   AT91_SMC_NRDSETUP_(setup) |
>>>+						   AT91_SMC_NCS_RDSETUP_(0));
>>>+	at91_sys_write(AT91_SMC_PULSE(chipselect), AT91_SMC_NWEPULSE_(pulse) |
>>>+						   AT91_SMC_NCS_WRPULSE_(cycle) |
>>>+						   AT91_SMC_NRDPULSE_(pulse) |
>>>+						   AT91_SMC_NCS_RDPULSE_(cycle));
>>>+	at91_sys_write(AT91_SMC_CYCLE(chipselect), AT91_SMC_NWECYCLE_(cycle) |
>>>+						   AT91_SMC_NRDCYCLE_(cycle));
>>>+
>>>+	mode = at91_sys_read(AT91_SMC_MODE(chipselect));

>>   Frankly speaking, I don't see why you're reading this register back 
>>if you already know what needs to be set there -- as you've done it in 
>>init_smc_mode().

> This function is not only used at initialization. It is also used when PIO mode
> is changed.

    So what? You can just write the fixed mode bits into the register every 
time without readback.

>>>+static void apply_timings(const u8 chipselect, const u8 pio,
>>>+			  const struct ide_timing *timing, const u16 *ata_id)
>>>+{

[...]

>>>+	if (ata_id) {
>>>+		if (ata_id_is_cfa(ata_id)) {
>>>+			if (pio == 3 || pio == 4)
>>>+				use_iordy = 1;
>>>  
>>>+		} else if (pio >= 3 || ata_id_has_iordy(ata_id))
>>>+			use_iordy = 1;

>>   No, you should check for IORDY regardless of CFA and using IORDY 
>>shouldn't be limeited to modes 3 and 4:

> Hmm, I take as example ata_pio_need_iordy(), it is also wrong or maybe
> I don't follow the logic properly.

    Let me look... yes, you don't follow it properly. Besides, it could have 
omitted checking for PIO mode > 2.

MBR, Sergei

  reply	other threads:[~2009-02-04 16:04 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-03 10:47 [PATCH 2/3] ide: add at91_ide driver Stanislaw Gruszka
2009-02-04 12:19 ` Sergei Shtylyov
2009-02-04 14:47   ` Stanislaw Gruszka
2009-02-04 16:04     ` Sergei Shtylyov [this message]
2009-02-04 16:08       ` Sergei Shtylyov
2009-02-05 15:01       ` Stanislaw Gruszka
2009-02-05 16:09         ` Sergei Shtylyov
2009-02-05 20:00           ` Andrew Victor
2009-02-05 20:03             ` Sergei Shtylyov
2009-02-06  9:35           ` Stanislaw Gruszka
2009-02-06 10:55           ` Sergei Shtylyov
2009-02-06 16:50             ` Bartlomiej Zolnierkiewicz
2009-02-06 17:20               ` Sergei Shtylyov
2009-02-05 21:23   ` Bartlomiej Zolnierkiewicz
2009-02-05 23:31     ` Sergei Shtylyov
2009-02-06 16:36       ` Bartlomiej Zolnierkiewicz
2009-02-08  0:10         ` Sergei Shtylyov
2009-02-08 11:39           ` Sergei Shtylyov
2009-02-08 22:58             ` Sergei Shtylyov
2009-02-09 19:48               ` Bartlomiej Zolnierkiewicz
2009-02-06  9:30   ` Stanislaw Gruszka
2009-02-06 10:36     ` Sergei Shtylyov
2009-02-06 10:47       ` Stanislaw Gruszka

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=4989BC8B.4010105@ru.mvista.com \
    --to=sshtylyov@ru.mvista.com \
    --cc=linux-arm-kernel@lists.arm.linux.org.uk \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux@maxim.org.za \
    --cc=stf_xl@wp.pl \
    /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;
as well as URLs for NNTP newsgroup(s).