diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2010-02-21 11:58:29 -0500 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2010-02-24 14:36:55 -0500 |
commit | 3e9cc2f3b7ddabbbfc9abd043887030c669380aa (patch) | |
tree | 1495ea0e7fa0861be914492d7bb7b5518fb34a34 /drivers/firewire | |
parent | 4a635593f447443459fb92a482b5cc6d1dd15199 (diff) |
firewire: ohci: add module parameter to activate quirk fixes
This way, we can advise users of precompiled kernel packages to test
existing quirk fixes on chips which have not been listed yet, without
them having to build a kernel from source.
Note, to use this feature on a machine with more than one controller,
steps like these are necessary:
# lspci | grep 1394
# ls /sys/bus/pci/drivers/firewire_ohci/
# echo -n "0000:03:02.0" > /sys/bus/pci/drivers/firewire_ohci/unbind
# echo 2 > /sys/module/firewire_ohci/parameters/quirks
# echo -n "0000:03:02.0" > /sys/bus/pci/drivers/firewire_ohci/bind
# echo 0 > /sys/module/firewire_ohci/parameters/quirks
The parameter can also be used to switch off quirk flags that were
hardwired into firewire-ohci's quirks table. Simply specify a non-zero
quirks value but without any known flags, e.g. 0x100.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire')
-rw-r--r-- | drivers/firewire/ohci.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 3dc2e8529a42..9815137b7c7d 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c | |||
@@ -246,6 +246,15 @@ static const struct { | |||
246 | {PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_FW, QUIRK_BE_HEADERS}, | 246 | {PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_FW, QUIRK_BE_HEADERS}, |
247 | }; | 247 | }; |
248 | 248 | ||
249 | /* This overrides anything that was found in ohci_quirks[]. */ | ||
250 | static int param_quirks; | ||
251 | module_param_named(quirks, param_quirks, int, 0644); | ||
252 | MODULE_PARM_DESC(quirks, "Chip quirks (default = 0" | ||
253 | ", nonatomic cycle timer = " __stringify(QUIRK_CYCLE_TIMER) | ||
254 | ", reset packet generation = " __stringify(QUIRK_RESET_PACKET) | ||
255 | ", AR/selfID endianess = " __stringify(QUIRK_BE_HEADERS) | ||
256 | ")"); | ||
257 | |||
249 | #ifdef CONFIG_FIREWIRE_OHCI_DEBUG | 258 | #ifdef CONFIG_FIREWIRE_OHCI_DEBUG |
250 | 259 | ||
251 | #define OHCI_PARAM_DEBUG_AT_AR 1 | 260 | #define OHCI_PARAM_DEBUG_AT_AR 1 |
@@ -2370,6 +2379,8 @@ static int __devinit pci_probe(struct pci_dev *dev, | |||
2370 | ohci->quirks = ohci_quirks[i].flags; | 2379 | ohci->quirks = ohci_quirks[i].flags; |
2371 | break; | 2380 | break; |
2372 | } | 2381 | } |
2382 | if (param_quirks) | ||
2383 | ohci->quirks = param_quirks; | ||
2373 | 2384 | ||
2374 | ar_context_init(&ohci->ar_request_ctx, ohci, | 2385 | ar_context_init(&ohci->ar_request_ctx, ohci, |
2375 | OHCI1394_AsReqRcvContextControlSet); | 2386 | OHCI1394_AsReqRcvContextControlSet); |