All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Dooks <ben-mtd@fluff.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mtd <linux-mtd@lists.infradead.org>,
	Ben Dooks <ben@mail.home.fluff.org>,
	gavin@simtec.co.uk
Subject: Re: NAND detect
Date: Thu, 23 Sep 2004 10:48:51 +0100	[thread overview]
Message-ID: <20040923094851.GC25491@home.fluff.org> (raw)
In-Reply-To: <1095923470.2925.57.camel@thomas>

On Thu, Sep 23, 2004 at 09:11:10AM +0200, Thomas Gleixner wrote:
> On Wed, 2004-09-22 at 22:29, Ben Dooks wrote:
> > I've just had a check through, and it seems the driver was
> > written pre the nand hooks for >1 chip per controller, and
> > therefore just selects slot 0 (smartmedia card) at start time.
> > 
> > A quick way to get going would be to change the value passed
> > to bast_nand_select_slot() in bast_nand_init() in the driver
> > to at least show that a chip can be detected and used. The
> > current default in the driver is to select the SmartMedia socket.
> > 
> > The slots are allocated as 0 for the SmartMedia card slot, and
> > 1 through 3 for the chips on the board (U52, U53 and U54)
> > 
> > Looking through the NAND code, it seems that we may have a
> > few problems with implementing >1 chip, which could bite
> > in your configuration:
> > 
> > 1) The driver needs to work out which slots are used and
> >    create a linear mapping of chips -> slots.
> > 
> > 2) The NAND layer itself seems to concatenate the chips
> >    together, not export them as seperate devices, which
> >    makes supporting removable devices in the card slot
> >    and on-board NAND difficult.
> 
> You can call nandscan (onboardnand, nrchips) and nandscan(removablenand,
> 1) and you have two independend mtd devices where the first
> (onboardnand) is a concatenation of the available chips.
> You can also call nandscan for each chip seperate and you have n
> independend devices. They share the hwcontrol function, but the mtd
> private structure should tell you which chip you are handling.
> For concatenated chips you have to provide the getchip function to
> select the appropriate chip.
> 
> > I would be interesting in anyone's comments about how difficult
> > it would be to have an overall controller activity lock and
> > allow a single controller to register more than one NAND chip
> > as a seperate device. 
> 
> Are you talking about a hardware controller, where several chips are
> connected to and which can handle only one chip at a time ?

Yes, our hardware designer decided that since we had a card socket
and wanted a device on board, he'd put a mux in all the signals to
steer the cpu's nand controller to either the socket or the chip,
and since he had a 4 way mux, he decided to add two more onboard chips
whilst he was at it.

> That's not supported at the moment. It is not hard to make this work. It
> needs some additional information about which devices share the
> controller and some access management which puts you on the right
> waitqueue.
> 
> struct nand_hw_controller {
> 	spinlock_t	lock;
> 	struct mtd_info	*active;
> };
>
> The driver provides the structure for its hardware controller and adds a
> pointer to this structure to the nand structure before calling nandscan.
> nand_get_chip and nand_release_chip need some tweaks to check the
> availablity of such an structure. If active == NULL then the current mtd
> device is stored in active and we can grab the chip. Otherwise we add
> the current process to the waitqueue of the nand device, which holds the
> controller. 

Would that be something welcome as a patch for the current mtd code?

I guess it'll require a new registration point, and a new nand_chip
function call to allow the hw driver to be notified about the change in
chip.
 
> > It would also be nice to have at least some form of hotplug
> > mechanism support where a chip can be re-scanned after a
> > change in it's detect status.
> 
> It should be not too hard to integrate such functionality into the
> generic hotplug framework. If the driver is a selfcontained module for
> one chip, then it should work right now. If the driver must stay in the
> kernel because it controls more than one chip, then interfacing to the
> kobject framework should be a valuable solution.
> 
> Most stuff must be done in the driver, but we have to figure out if we
> need additional functionality for removal in the nand reps. mtd
> framework. 
> 
> dwmw2 ???
> 
> 
> tglx


-- 
Ben (ben@fluff.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

  reply	other threads:[~2004-09-23  9:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-22 15:55 NAND detect lp4u
2004-09-22 20:29 ` Ben Dooks
2004-09-23  7:11   ` Thomas Gleixner
2004-09-23  9:48     ` Ben Dooks [this message]
     [not found]     ` <20040923191506.GE25491@home.fluff.org>
2004-09-23 23:05       ` Ben Dooks
  -- strict thread matches above, loose matches on Subject: below --
2004-09-23  9:54 lp4u
2004-09-23 10:53 ` Ben Dooks
2004-09-28 10:17 Nand detect lp4u
2004-09-28 10:55 ` Ben Dooks

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=20040923094851.GC25491@home.fluff.org \
    --to=ben-mtd@fluff.org \
    --cc=ben@mail.home.fluff.org \
    --cc=gavin@simtec.co.uk \
    --cc=linux-mtd@lists.infradead.org \
    --cc=tglx@linutronix.de \
    /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.