Hey, On Sun, Jan 10, 2010 at 09:41:24AM +0100, Wolfram Sang wrote: > O2-bridges can do read prefetch and write burst. However, for some > combinations > of older bridges and cards, this causes problems, so it is disabled for those > bridges. Now, as some users know their setup works with the speedups enabled, > a > new parameter is introduced to the driver. Now, a user can specifically enable > or disable these features, while the default is what we have today: detect the > bridge and decide accordingly. Fixes Bugzilla entry 15014. > > Simplify and unify the printouts, fix a whitespace issue while we are here. > > Signed-off-by: Wolfram Sang <w.s...@pengutronix.de> > Tested-by: frod...@gmail.com > Cc: Dominik Brodowski <li...@dominikbrodowski.net> > --- > > Changes since V1: > > - fix a whitespace issue > - add the comment "user may override" > > drivers/pcmcia/o2micro.h | 41 > +++++++++++++++++++++++++++-------------- > drivers/pcmcia/yenta_socket.c | 5 +++++ > 2 files changed, 32 insertions(+), 14 deletions(-) > > diff --git a/drivers/pcmcia/o2micro.h b/drivers/pcmcia/o2micro.h > index 624442f..72d8f33 100644 > --- a/drivers/pcmcia/o2micro.h > +++ b/drivers/pcmcia/o2micro.h > @@ -116,13 +116,12 @@ static int o2micro_override(struct yenta_socket *socket) > * from Eric Still, 02Micro. > */ > u8 a, b; > + bool use_speedup; > > if (PCI_FUNC(socket->dev->devfn) == 0) { > a = config_readb(socket, O2_RESERVED1); > b = config_readb(socket, O2_RESERVED2); > - > - dev_printk(KERN_INFO, &socket->dev->dev, > - "O2: res at 0x94/0xD4: %02x/%02x\n", a, b); > + dev_dbg(&socket->dev->dev, "O2: 0x94/0xD4: %02x/%02x\n", a, b); > > switch (socket->dev->device) { > /* > @@ -135,23 +134,37 @@ static int o2micro_override(struct yenta_socket *socket) > case PCI_DEVICE_ID_O2_6812: > case PCI_DEVICE_ID_O2_6832: > case PCI_DEVICE_ID_O2_6836: > - case PCI_DEVICE_ID_O2_6933: > - dev_printk(KERN_INFO, &socket->dev->dev, > - "Yenta O2: old bridge, disabling read " > - "prefetch/write burst\n"); > - config_writeb(socket, O2_RESERVED1, > - a & ~(O2_RES_READ_PREFETCH | > O2_RES_WRITE_BURST)); > - config_writeb(socket, O2_RESERVED2, > - b & ~(O2_RES_READ_PREFETCH | > O2_RES_WRITE_BURST)); > + case PCI_DEVICE_ID_O2_6933: > + use_speedup = false; > break; > - > default: > - dev_printk(KERN_INFO , &socket->dev->dev, > - "O2: enabling read prefetch/write burst\n"); > + use_speedup = true; > + break; > + } > + > + /* the user may override our decision */ > + if (strcasecmp(o2_speedup, "on") == 0) > + use_speedup = true; > + else if (strcasecmp(o2_speedup, "off") == 0) > + use_speedup = false; > + else if (strcasecmp(o2_speedup, "default") != 0) > + dev_warn(&socket->dev->dev, > + "O2: Unknown parameter, using 'default'"); > + > + if (use_speedup) { > + dev_info(&socket->dev->dev, > + "O2: enabling read prefetch/write burst\n"); > config_writeb(socket, O2_RESERVED1, > a | O2_RES_READ_PREFETCH | > O2_RES_WRITE_BURST); > config_writeb(socket, O2_RESERVED2, > b | O2_RES_READ_PREFETCH | > O2_RES_WRITE_BURST); > + } else { > + dev_info(&socket->dev->dev, > + "O2: disabling read prefetch/write burst\n"); > + config_writeb(socket, O2_RESERVED1, > + a & ~(O2_RES_READ_PREFETCH | > O2_RES_WRITE_BURST)); > + config_writeb(socket, O2_RESERVED2, > + b & ~(O2_RES_READ_PREFETCH | > O2_RES_WRITE_BURST)); > } > } > > diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c > index e4d12ac..041a75a 100644 > --- a/drivers/pcmcia/yenta_socket.c > +++ b/drivers/pcmcia/yenta_socket.c > @@ -37,6 +37,11 @@ static int pwr_irqs_off; > module_param(pwr_irqs_off, bool, 0644); > MODULE_PARM_DESC(pwr_irqs_off, "Force IRQs off during power-on of slot. Use > only when seeing IRQ storms!"); > > +static char o2_speedup[] = "default"; > +module_param_string(o2_speedup, o2_speedup, sizeof(o2_speedup), 0444); > +MODULE_PARM_DESC(o2_speedup, "Use prefetch/burst for O2-bridges: 'on', 'off' > " > + "or 'default' (uses recommended behaviour for the detected bridge)");
Is using a string module_param the preferred case for such tristates now? Best, Dominik _______________________________________________ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia