10 Jun, 2013
2 commits
-
After all IEEE 1394 high-level drivers being converted to bus-specific
.probe/.remove methods, remove support of the obsolete generic methods.Signed-off-by: Stefan Richter
-
FireWire upper layer drivers are converted from generic
struct driver.probe() and .remove()
to bus-specific
struct fw_driver.probe() and .remove().The new .probe() adds a const struct ieee1394_device_id *id argument,
indicating the entry in the driver's device identifiers table which
matched the fw_unit to be probed. This new argument is used by the
snd-firewire-speakers driver to look up device-specific parameters and
methods. There is at least one other FireWire audio driver currently in
development in which this will be useful too.The new .remove() drops the unused error return code.
Although all in-tree drivers are being converted to the new methods,
support for the old methods is left in place in this commit. This
allows public developer trees to merge this commit and then move to the
new fw_driver methods.Signed-off-by: Stefan Richter
Acked-by: Clemens Ladisch (for sound/firewire/)
Cc: Peter Hurley (for drivers/staging/fwserial/)
10 May, 2013
1 commit
-
Pull firewure updates from Stefan Richter:
- fix controller removal when controller is in suspended state
- fix video reception on VIA VT6306 with gstreamer, MythTV, and maybe dv4l
- fix a startup issue with Agere/LSI FW643-e2
- error logging improvements and other small updates* tag 'firewire-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394:
firewire: ohci: dump_stack() for PHY regs read/write failures
firewire: ohci: Improve bus reset error messages
firewire: ohci: Alias dev_* log functions
firewire: ohci: Fix 'failed to read phy reg' on FW643 rev8
firewire: ohci: fix VIA VT6306 video reception
firewire: ohci: Check LPS before register access on pci removal
firewire: ohci: Fix double free_irq()
firewire: remove unnecessary alloc/OOM messages
firewire: sbp2: replace BUG_ON by WARN_ON
firewire: core: remove an always false test
firewire: Remove two unneeded checks for macros
01 May, 2013
4 commits
-
A stack trace is an invaluable tool in determining the basis
and cause of PHY regs read/write failures.Include PHY reg addr (and value for writes) in the diagnostic.
[Stefan R: changed whitespace]
Signed-off-by: Peter Hurley
Signed-off-by: Stefan Richter -
Many of the error messages possible from bus_reset_work() do not
contain enough information to distinguish which error condition
occurred nor enough information to evaluate the error afterwards.Differentiate all error conditions in bus_reset_work(); add
additional information to make error diagnosis possible.[Stefan R: fixed self-ID endian conversion]
Signed-off-by: Peter Hurley
Signed-off-by: Stefan Richter -
Convert dev_xxxx(ohci->card.device, ...) log functions to
ohci_xxxx(ohci, ...).[Stefan R: Peter argues that this increases readability of the code.]
[Stefan R: changed whitespace]Signed-off-by: Peter Hurley
Signed-off-by: Stefan Richter -
With the LSI FW643 rev 8 [1], the first commanded bus reset at
the conclusion of ohci_enable() has been observed to fail with
the following messages:[ 4.884015] firewire_ohci 0000:01:00.0: failed to read phy reg
....
[ 5.684012] firewire_ohci 0000:01:00.0: failed to read phy regWith drivers/firewire/ohci.c instrumented, the error condition [2]
indicates the PHY arbitration state machine has timed out prior to
enabling PHY LCtrl.Furthermore, instrumenting ohci_enable() shows that LPS has been
enabled within 1 ms.Test LPS latching every 1 ms rather than every 50ms.
[1] lspci -v
01:00.0 FireWire (IEEE 1394): LSI Corporation FW643 [TrueFire] PCIe 1394b Controller (rev 08) (prog-if 10 [OHCI])
Subsystem: LSI Corporation FW643 [TrueFire] PCIe 1394b Controller
Flags: bus master, fast devsel, latency 0, IRQ 92
Memory at fbeff000 (64-bit, non-prefetchable) [size=4K]
Capabilities: [44] Power Management version 3
Capabilities: [4c] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [60] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Virtual Channel
Capabilities: [170] Device Serial Number 08-14-43-82-00-00-41-fc
Kernel driver in use: firewire_ohci
Kernel modules: firewire-ohci[2] instrumented WARNING in read_phy_reg()
[ 4.576010] ------------[ cut here ]------------
[ 4.576035] WARNING: at ./drivers/firewire/ohci.c:570 read_phy_reg+0x93/0xe0 [firewire_ohci]()
[ 4.576050] Hardware name: Precision WorkStation T5400
[ 4.576058] failed to read phy reg:1 (phy(5) @ config enhance:19)
[ 4.576068] Modules linked in: hid_logitech_dj hid_generic(+) usbhid
[ 4.576140] Pid: 61, comm: kworker/2:1 Not tainted 3.8.0-2+fwtest-xeon #2+fwtest
[ 4.576149] Call Trace:
[ 4.576160] [] warn_slowpath_common+0x7f/0xc0
[ 4.576168] [] warn_slowpath_fmt+0x46/0x50
[ 4.576178] [] read_phy_reg+0x93/0xe0 [firewire_ohci]
[ 4.576188] [] ohci_read_phy_reg+0x39/0x60 [firewire_ohci]
[ 4.576203] [] fw_send_phy_config+0xbf/0xe0 [firewire_core]
[ 4.576214] [] br_work+0x46/0xb0 [firewire_core]
[ 4.576225] [] process_one_work+0x13c/0x500
[ 4.576238] [] ? fw_card_initialize+0x180/0x180 [firewire_core]
[ 4.576248] [] worker_thread+0x16d/0x470
[ 4.576257] [] ? busy_worker_rebind_fn+0x100/0x100
[ 4.576266] [] kthread+0xc0/0xd0
[ 4.576275] [] ? pcpu_dump_alloc_info+0x1cb/0x2c4
[ 4.576284] [] ? kthread_create_on_node+0x130/0x130
[ 4.576297] [] ret_from_fork+0x7c/0xb0
[ 4.576305] [] ? kthread_create_on_node+0x130/0x130
[ 4.576313] ---[ end trace cbc940994b300302 ]---[Stefan R: Peter also reports a change of behavior with LSI FW323.
Before the patch, there would often occur a lock transaction failure
during firewire-core startup:
[ 6.056022] firewire_core 0000:07:06.0: BM lock failed (timeout), making local node (ffc0) root
This failure no longer happens after the patch, without an obvious
reason for the failure or the fix.][Stefan R: Added quirk flag, quirk table entry, and comment.]
Reported-by: Tim Jordan
Signed-off-by: Peter Hurley
Signed-off-by: Stefan Richter
29 Apr, 2013
7 commits
-
Add quirk for VT6306 wake bit behavior.
VT6306 seems to reread the wrong descriptor when the wake bit is
written. work around by putting a copy of the branch address in the
first descriptor of the block.[Stefan R: This fixes the known broken video reception via gstreamer
on VIA VT6306. 100% repeatable testcase:
$ gst-launch-0.10 dv1394src \! dvdemux \! dvdec \! xvimagesink
with a camcorder or other DV source connected. Likewise for MPEG2-TS
reception via gstreamer, e.g. from TV settop boxes.
Perhaps this also fixes dv4l on VT6306, but this is as yet untested.
Kino, dvgrab or FFADO had not been affected by this chip quirk.
Additional comments from Andy:]I've looked into some problems with the wake bit on a vt6306 family
chip (1106:3044, rev 46).I used this firewire card in a mythtv setup (ISO receive MPEG2 stream)
with Debian 2.6.32 kernels for ~2 years without problems.Since upgrading to 3.2, I've been having problems with the input stream
freezing -- input data stops until I restart mythtv (I expect closing
and reopening the device would be sufficient). This happens
infrequently, maybe one out of 20 recordings. I eventually determined
that the problem is more likely to occur if the system is loaded.I isolated the kernel version as the triggering SW factor and then
specifically the change from dualbuffer back to packet-per-buffer DMA
mode.The possibility that the controller does not properly respond to the
wake bit was suggested in
https://bugzilla.redhat.com/show_bug.cgi?id=415841, but not proven.Based on the fact that dualbuffer mode worked while packet-per-buffer
has trouble, I guessed that upon seeing the wake bit written, the vt6306
controller only checks the branch address in the first descriptor of the
block, even if that is not the correct place to look (because the block
has multiple descriptors).This theory seems to be correct. When the ISO reception is hung, I am
able to resume it by manually writing the branch address to the first
descriptor in the block, and then writing the wake bit.I've had luck so far with the attached patch, so I'm including it. It's
probably not a complete solution -- I haven't tested transmit modes to
see whether they have a similar issue.I doubt that the quirk test is any cheaper than just writing the extra
branch address in all cases, but it does reduce the risk of breaking
other hardware.[Stefan R: omitted QUIRK_NO_MSI from VT6306 quirks table entry,
changed whitespace]Signed-off-by: Andy Leiserson
Signed-off-by: Stefan Richter -
A pci device can be removed while in its suspended state. If the ohci
host controller is suspended, the PHY is also in low-power mode and
LPS is disabled. If LPS is disabled, most of the host registers aren't
accessible, including IntMaskClear. Furthermore, access to these registers
when LPS is disabled can cause hard lockups on some hardware. Since
interrupts are already disabled in this mode, further action is
unnecessary.Test LPS before attempting to write IntMaskClear to disable interrupts.
[Stefan R: whitespace changes]
Signed-off-by: Peter Hurley
Signed-off-by: Stefan Richter -
A pci device can be removed while in its suspended state.
Because the ohci driver freed the irq to suspend, free_irq() is
called twice; once from pci_remove() and again from pci_suspend(),
which issues the warning below [1].Rather than allocate the irq in the .enable() path, move the
allocation to .probe(). Consequently, the irq is not reallocated
upon pci_resume() and thus is not freed upon pci_suspend().[1] Warning reported by Mark Einon when
suspending an MSI MS-1727 GT740 laptop on Ubuntu 3.5.0-22-genericWARNING: at ./kernel/irq/manage.c:1198 __free_irq+0xa3/0x1e0()
Hardware name: MS-1727
Trying to free already-free IRQ 16
Modules linked in: ip6table_filter ip6_tables ebtable_nat ebtables
Pid: 4, comm: kworker/0:0 Tainted: P O 3.5.0-22-generic #34-Ubuntu
Call Trace:
[] warn_slowpath_common+0x7f/0xc0
[] warn_slowpath_fmt+0x46/0x50
[] ? default_spin_lock_flags+0x9/0x10
[] __free_irq+0xa3/0x1e0
[] free_irq+0x54/0xc0
[] pci_remove+0x6e/0x210 [firewire_ohci]
[] pci_device_remove+0x3f/0x110
[] __device_release_driver+0x7c/0xe0
[] device_release_driver+0x2c/0x40
[] bus_remove_device+0xe1/0x120
[] device_del+0x12a/0x1c0
[] device_unregister+0x16/0x30
[] pci_stop_bus_device+0x94/0xa0
[] acpiphp_disable_slot+0xb7/0x1a0 [acpiphp]
[] ? get_slot_status+0x46/0xc0 [acpiphp]
[] acpiphp_check_bridge.isra.15+0x2d/0xf0 [acpiphp]
[] _handle_hotplug_event_bridge+0x372/0x4d0 [acpiphp]
[] ? acpi_os_execute_deferred+0x2f/0x34
[] ? kfree+0xed/0x110
[] process_one_work+0x12a/0x420
[] ? _handle_hotplug_event_func+0x1d0/0x1d0 [acpiphp]
[] worker_thread+0x12e/0x2f0
[] ? manage_workers.isra.26+0x200/0x200
[] kthread+0x93/0xa0
[] kernel_thread_helper+0x4/0x10
[] ? kthread_freezable_should_stop+0x70/0x70
[] ? gs_change+0x13/0x13Reported-by: Mark Einon
Signed-off-by: Peter Hurley
Signed-off-by: Stefan Richter -
These are redundant to log messages from the mm core.
Signed-off-by: Stefan Richter
-
No need to crash and burn if S/G element sizes cannot be set to our
liking; just leave a message in the log.Signed-off-by: Stefan Richter
-
struct fw_cdev_allocate_iso_resource.bandwidth is unsigned.
Signed-off-by: Stefan Richter
-
The old IEEE 1394 driver stack was removed in v2.6.37. That made the
checks for two Kconfig (module) macros unneeded, since they will now
always evaluate to true. Remove these two checks.Signed-off-by: Paul Bolle
Signed-off-by: Stefan Richter
28 Mar, 2013
1 commit
-
Add a new constant ETH_P_802_3_MIN, the minimum ethernet type for
an 802.3 frame. Frames with a lower value in the ethernet type field
are Ethernet II.Also update all the users of this value that David Miller and
I could find to use the new constant.Also correct a bug in util.c. The comparison with ETH_P_802_3_MIN
should be >= not >.As suggested by Jesse Gross.
Compile tested only.
Cc: David Miller
Cc: Jesse Gross
Cc: Karsten Keil
Cc: John W. Linville
Cc: Johannes Berg
Cc: Bart De Schuymer
Cc: Stephen Hemminger
Cc: Patrick McHardy
Cc: Marcel Holtmann
Cc: Gustavo Padovan
Cc: Johan Hedberg
Cc: linux-bluetooth@vger.kernel.org
Cc: netfilter-devel@vger.kernel.org
Cc: bridge@lists.linux-foundation.org
Cc: linux-wireless@vger.kernel.org
Cc: linux1394-devel@lists.sourceforge.net
Cc: linux-media@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: dev@openvswitch.org
Acked-by: Mauro Carvalho Chehab
Acked-by: Stefan Richter
Signed-off-by: Simon Horman
Signed-off-by: David S. Miller
27 Mar, 2013
6 commits
-
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller -
Inspection of upper layer protocol is considered harmful, especially
if it is about ARP or other stateful upper layer protocol; driver
cannot (and should not) have full state of them.IPv4 over Firewire module used to inspect ARP (both in sending path
and in receiving path), and record peer's GUID, max packet size, max
speed and fifo address. This patch removes such inspection by extending
our "hardware address" definition to include other information as well:
max packet size, max speed and fifo. By doing this, The neighbour
module in networking subsystem can cache them.Note: As we have started ignoring sspd and max_rec in ARP/NDP, those
information will not be used in the driver when sending.When a packet is being sent, the IP layer fills our pseudo header with
the extended "hardware address", including GUID and fifo. The driver
can look-up node-id (the real but rather volatile low-level address)
by GUID, and then the module can send the packet to the wire using
parameters provided in the extendedn hardware address.This approach is realistic because IP over IEEE1394 (RFC2734) and IPv6
over IEEE1394 (RFC3146) share same "hardware address" format
in their address resolution protocols.Here, extended "hardware address" is defined as follows:
union fwnet_hwaddr {
u8 u[16];
struct {
__be64 uniq_id; /* EUI-64 */
u8 max_rec; /* max packet size */
u8 sspd; /* max speed */
__be16 fifo_hi; /* hi 16bits of FIFO addr */
__be32 fifo_lo; /* lo 32bits of FIFO addr */
} __packed uc;
};Note that Hardware address is declared as union, so that we can map full
IP address into this, when implementing MCAP (Multicast Cannel Allocation
Protocol) for IPv6, but IP and ARP subsystem do not need to know this
format in detail.One difference between original ARP (RFC826) and 1394 ARP (RFC2734)
is that 1394 ARP Request/Reply do not contain the target hardware address
field (aka ar$tha). This difference is handled in the ARP subsystem.CC: Stephan Gatzka
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller -
Stefan Richter says:
| As far as I can tell, it would be best to ignore max_rec and sspd from ARP
| and NDP but keep using the respective information from firewire-core
| instead (handed over by fwnet_probe()).
|
| Why? As I noted earlier, RFC 2734:1999 and RFC 3146:2001 were apparently
| written with a too simplistic notion of IEEE 1394 bus topology, resulting
| in max_rec and sspd in ARP-1394 and NDP-1394 to be useless, IMO.
|
| Consider a bus like this:
|
| A ---- B ==== C
|
| A, B, C are all IP-over-1394 capable nodes. ---- is an S400 cable hop,
| and ==== is an S800 cable hop.
|
| In case of unicasts or multicasts in which node A is involved as
| transmitter or receiver, as well as in case of broadcasts, the speeds
| S100, S200, S400 work and speed S400 is optimal.
|
| In case of anything else, IOW in case of unicasts or multicasts in which
| only nodes B and C are involved, the speeds S100, S200, S400, S800 work
| and speed S800 is optimal.
|
| Clearly, node A should indicate sspd = S400 in its ARP or NDP packets.
| But which sspd should nodes B and C set there? Maybe they set S400, which
| would work but would waste half of the available bandwidth in the second
| case. Or maybe they set S800, which is OK in the second case but would
| prohibit any communication with node A if blindly taken for correct.
|
| On the other hand, firewire-core *always* gives us the correct and optimum
| peer-to-peer speed and asynchronous packet payload, no matter how simple
| or complex the bus topology is and no matter in which temporal order nodes
| join the bus and are discovered.CC: Stefan Richter
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller -
Allocate FIFO address before registering net_device.
This is preparation to change the pseudo hardware address format
for firewire devices to include the offset of the FIFO for receipt
of unicast datagrams, instead of mangling ARP/NDP messages in the
driver layer.Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller -
Send L2 multicast packet via GASP (Global asynchronous stream packet) by
seeing the multicast bit in the L2 hardware address, not by seeing upper-
layer protocol address.Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller
13 Mar, 2013
11 commits
-
Since those resources are allocated on ifup, relsase them on ifdown.
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
dev->broadcast_rcv_context is always non-NULL if dev->broadcast_state is
not FWNET_BROADCAST_ERROR.Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
…struction of context.
Clear dev->broadcast_rcv_context to NULL and set dev->broadcast_state
to FWNET_BROADCAST_ERROR after descruction of broadcast context.Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter -
fwnet_broadcast_start() try to register address handler at first
if it was not registered yet; dev->local_fifo ==
FWNET_NO_FIFO_ADDR.Since dev->local_info not changed if fw_core_add_address_hander()
has failed, we do not need to set dev->local_info to
FWNET_NO_FIFO_ADDR.Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: Stefan Richter
28 Feb, 2013
3 commits
-
Convert to the much saner new idr interface.
v2: Stefan pointed out that add_client_resource() may be called from
non-process context. Preload iff @gfp_mask contains __GFP_WAIT.
Also updated to include minor upper limit check.[tim.gardner@canonical.com: fix accidentally orphaned 'minor'[
Signed-off-by: Tejun Heo
Acked-by: Stefan Richter
Signed-off-by: Tim Gardner
Signed-off-by: Stefan Richter
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
fw_device_init() didn't check whether the allocated minor number isn't
too large. Fail if it goes overflows MINORBITS.Signed-off-by: Tejun Heo
Suggested-by: Stefan Richter
Acked-by: Stefan Richter
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
idr_destroy() can destroy idr by itself and idr_remove_all() is being
deprecated. Drop its usage.Signed-off-by: Tejun Heo
Cc: Stefan Richter
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
22 Feb, 2013
1 commit
-
Pull trivial tree from Jiri Kosina:
"Assorted tiny fixes queued in trivial tree"* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (22 commits)
DocBook: update EXPORT_SYMBOL entry to point at export.h
Documentation: update top level 00-INDEX file with new additions
ARM: at91/ide: remove unsused at91-ide Kconfig entry
percpu_counter.h: comment code for better readability
x86, efi: fix comment typo in head_32.S
IB: cxgb3: delay freeing mem untill entirely done with it
net: mvneta: remove unneeded version.h include
time: x86: report_lost_ticks doesn't exist any more
pcmcia: avoid static analysis complaint about use-after-free
fs/jfs: Fix typo in comment : 'how may' -> 'how many'
of: add missing documentation for of_platform_populate()
btrfs: remove unnecessary cur_trans set before goto loop in join_transaction
sound: soc: Fix typo in sound/codecs
treewide: Fix typo in various drivers
btrfs: fix comment typos
Update ibmvscsi module name in Kconfig.
powerpc: fix typo (utilties -> utilities)
of: fix spelling mistake in comment
h8300: Fix home page URL in h8300/README
xtensa: Fix home page URL in Kconfig
...
29 Jan, 2013
1 commit
-
Conflicts:
drivers/devfreq/exynos4_bus.cSync with Linus' tree to be able to apply patches that are
against newer code (mvneta).
21 Jan, 2013
2 commits
-
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller -
It is wrong to set skb->ip_summed to CHECKSUM_UNNECESSARY unless
the device has already checked it.Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller
09 Jan, 2013
1 commit
-
Correct spelling typo in printk within various drivers.
Signed-off-by: Masanari Iida
Signed-off-by: Jiri Kosina