Dell Vostro 1310 + Broadcom 4312 wifi card + retro kernel

How to do things, solutions, recipes, tutorials
Post Reply
Message
Author
User avatar
clarf
Posts: 613
Joined: Wed 13 Jun 2007, 19:22
Location: The old Lone Wolf

Dell Vostro 1310 + Broadcom 4312 wifi card + retro kernel

#1 Post by clarf »

Hi,

I recently got a new laptop a Dell Vostro 1310, I tried different Puppy 2 versions (kernel 2.6.18.1) and 4 series with retro kernel (2.6.21.7). I found some problems regarding wireless, SATA disk, etc.

Boot: First impression, Puppy boots really slow and it can´t recognize HD drives, checking dmesg or using pfix=debug show problems with SATA:

dmesg or boot_info file (kernel 2.6.18.1 and 2.6.21.7):

Code: Select all

ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata1.00: qc timeout (cmd 0xec)
ata1.00: failed to IDENTIFY (I/O error, err_mask=0x104)
ata1: port is slow to respond, please be patient
ata1: port failed to respond (30 secs)
ata1: COMRESET failed (device not ready)
ata1: hardreset failed, retrying in 5 secs
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata1.00: qc timeout (cmd 0xec)
ata1.00: failed to IDENTIFY (I/O error, err_mask=0x104)
ata1: port is slow to respond, please be patient
ata1: port failed to respond (30 secs)
ata1: COMRESET failed (device not ready)
ata1: hardreset failed, retrying in 5 secs
...
Also you see the following code on kernel 2.6.18.1:

Code: Select all

...
irq 10: nobody cared (try booting with the "irqpoll" option)
 [<c0134692>] __report_bad_irq+0x22/0x90
 [<c01347c8>] note_interrupt+0x98/0xc0
 [<c0133ff9>] __do_IRQ+0xa9/0xc0
 [<c01049b5>] do_IRQ+0x25/0x50
 [<c010316a>] common_interrupt+0x1a/0x20
 [<c011ad00>] __do_softirq+0x30/0xb0
 [<c011adb5>] do_softirq+0x35/0x40
 [<c01049ba>] do_IRQ+0x2a/0x50
 [<c010316a>] common_interrupt+0x1a/0x20
 [<c01342ac>] setup_irq+0x7c/0x170
 [<f885b8e0>] usb_hcd_irq+0x0/0x60 [usbcore]
 [<c013451f>] request_irq+0x7f/0xa0
 [<f885bc54>] usb_add_hcd+0x1e4/0x2f0 [usbcore]
 [<f885b8e0>] usb_hcd_irq+0x0/0x60 [usbcore]
 [<f8863850>] usb_hcd_pci_probe+0x190/0x350 [usbcore]
 [<c022e861>] pci_call_probe+0x11/0x20
 [<c022e8ba>] __pci_device_probe+0x4a/0x60
 [<c022e8ef>] pci_device_probe+0x1f/0x40
 [<c027fb33>] driver_probe_device+0x53/0xa0
 [<c027fc00>] __driver_attach+0x0/0x80
 [<c027fc7b>] __driver_attach+0x7b/0x80
 [<c027f078>] bus_for_each_dev+0x58/0x80
 [<c0222470>] kobject_add+0x60/0x100
 [<c027fc95>] driver_attach+0x15/0x20
 [<c027fc00>] __driver_attach+0x0/0x80
 [<c027f599>] bus_add_driver+0x69/0xa0
 [<c0280129>] driver_register+0x59/0x90
 [<c022eb5e>] __pci_register_driver+0x3e/0x60
 [<f884300f>] ehci_hcd_init+0xf/0x12 [ehci_hcd]
 [<c0131432>] sys_init_module+0xe2/0x160
 [<c0102e9d>] sysenter_past_esp+0x56/0x79
handlers:
[<f885b8e0>] (usb_hcd_irq+0x0/0x60 [usbcore])
Disabling IRQ #10

These errors and the slow boot time are solved adding "acpi=off" parameter to puppy boot. :D

Without this parameter the internal HD is unusable and even worst booting the original Windows 7 OS caused a restore procedure (note that HD information is intact but Windows found something wrong...)

Wireless:

It was not recognized by Network wizard, I checked the device:

Code: Select all

# lspci -nn | grep 14e4
06:00.0 Class 0280: 14e4:4315 (rev 01)
The [14e4:4315] part is the PCI-ID and it identifies a Broadcom 4312 Chip.

I tried to compile latest SAT Broadcom driver (hybrid for 32 bit) in Puppy 214X:

1. Create a new directory: mkdir hybrid_wl
2. Go to that directory: cd hybrid_wl
3. Untar: tar -xzf <path>/hybrid-portsrc_x86_32-v5_100_82_38.tar.gz

Then I have a src and lib sub directory plus a Linux 2.6 external makefile (Makefile). The lib sub directory has the pre-built binary, wlc_hybrid.o_shipped.

To make a Linux loadable kernel module (LKM) just run:

#make

In fact executing "make" on /hybri_wl, this command internally executes the full comand:
make -C /lib/modules/<2.6.xx.xx>/build M=`pwd`
It creates some wl files, I copied the file wl.ko to /lib/modules/<kernel-version>/kernel/net/

Later, I executed;
depmod
for driver dependencies, later I loaded the following drivers in the order:

1.

Code: Select all

modprobe ieee80211
2.

Code: Select all

modprobe ieee80211_crypt
3.

Code: Select all

modprobe ieee80211_crypt_tkip
Finally the new compiled module must be loaded:

Code: Select all

"modprobe wl"
sadly this didn´t work for Puppy 214X, I get some errors with dmesg:
wl: module license 'unspecified' taints kernel.
ACPI: PCI Interrupt 0000:06:00.0[A] -> Link [LNKD] -> GSI 11 (level, low) -> IRQ 11
PCI: Setting latency timer of device 0000:06:00.0 to 64
BUG: unable to handle kernel paging request at virtual address 00001510
printing eip:
f8d89c36
*pde = 00000000
Oops: 0002 [#1]
Modules linked in: wl ieee80211_crypt snd_pcm_oss evdev snd_mixer_oss fan thermal processor ac button battery lp parport_pc parport ohci1394 ieee1394 usb_storage snd_hda_intel snd_hda_codec snd_pcm snd_timer snd soundcore snd_page_alloc i2c_i801 i2c_core r1000 fuse unionfs nls_iso8859_1 nls_cp437 sr_mod ide_cd cdrom sg usbhid uhci_hcd ehci_hcd usbcore
CPU: 0
EIP: 0060:[<f8d89c36>] Tainted: PF VLI
EFLAGS: 00210206 (2.6.18.1 #1)
EIP is at osl_malloc+0x26/0x30 [wl]
eax: 00000000 ebx: 000014e4 ecx: dfd5b000 edx: 00000020
esi: dfd5b000 edi: f5815d94 ebp: 00004315 esp: f5815d50
ds: 007b es: 007b ss: 0068
Process modprobe.bin (pid: 9501, ti=f5814000 task=dffd8560 task.ti=f5814000)
Stack: 000014e4 00000660 f8cebf7f 000014e4 dfd5b000 f8cec769 000014e4 dfd5b000
c23b9800 000014e4 f8ccf3e5 00004000 f88c3fff e4000000 00004000 00000000
f88c0000 00000000 c011145c f88c0000 f88c4000 f4000000 f63c5280 dfd5b000
Call Trace:
[<f8cebf7f>] wlc_calloc+0xb/0x17e [wl]
[<f8cec769>] wlc_attach_malloc+0x14/0x2ea [wl]
[<f8ccf3e5>] wlc_attach+0x39/0xba8 [wl]
[<c011145c>] __ioremap+0xdc/0x100
[<f8d8a534>] wl_attach+0x154/0x400 [wl]
[<c0116a3d>] release_console_sem+0x3d/0xb0
[<c02f5d24>] pci_mmcfg_write+0x64/0x110
[<c02f5d24>] pci_mmcfg_write+0x64/0x110
[<c02f765b>] pci_write+0x2b/0x30
[<c022a239>] pci_bus_write_config_dword+0x29/0x30
[<f8d8a8ce>] wl_pci_probe+0xae/0x100 [wl]
[<c022e861>] pci_call_probe+0x11/0x20
[<c022e8ba>] __pci_device_probe+0x4a/0x60
[<c022e8ef>] pci_device_probe+0x1f/0x40
[<c027fb33>] driver_probe_device+0x53/0xa0
[<c027fc00>] __driver_attach+0x0/0x80
[<c027fc7b>] __driver_attach+0x7b/0x80
[<c027f078>] bus_for_each_dev+0x58/0x80
[<c0222470>] kobject_add+0x60/0x100
[<c027fc95>] driver_attach+0x15/0x20
[<c027fc00>] __driver_attach+0x0/0x80
[<c027f599>] bus_add_driver+0x69/0xa0
[<c0280129>] driver_register+0x59/0x90
[<c022eb5e>] __pci_register_driver+0x3e/0x60
[<f88ba00f>] wl_module_init+0xf/0x12 [wl]
[<c0131432>] sys_init_module+0xe2/0x160
[<c0102f07>] syscall_call+0x7/0xb
Code: 90 90 90 90 90 56 53 8b 5c 24 0c 8b 74 24 10 6a 20 56 e8 ae 5c 3c c7 59 85 c0 5a 74 0a 85 db 74 03 01 73 28 5b 5e c3 85 db 74 03 <ff> 43 2c 5b 31 c0 5e c3 89 f6 8b 44 24 04 85 c0 8b 4c 24 08 8b
EIP: [<f8d89c36>] osl_malloc+0x26/0x30 [wl] SS:ESP 0068:f5815d50
I was disappointed but didn´t get up so I test it with ndiswrapper:

I tried different Windows drivers on ndiswrapper without luck, then found some Linux forum and tried the following:

unzip Dell_multi-device_A17_R174291.exe
cp bcmwl5.inf /ndiswrapper_drivers
cp bcmwl5.sys /ndiswrapper_drivers


Puppy Network Wizard already comes with the option to load the .inf file for ndiswrapper and install the driver, so the following commands are not neccesary if Network wizard is used:

Code: Select all

cd /ndiswrapper_drivers
ndiswrapper -i bcmwl5.inf
# Verify ndiswrapper driver installation

Code: Select all

ndiswrapper -l
bcmwl5 : driver installed
 device (14E4:4315) present
#Puppy installation

Code: Select all

depmod
modprobe ndiswrapper
ndiswrapper -ma
At this point Puppy could see the Broadcom 4312 wireless card :D

I hope this information could be helpfull for Dell Vostro users with similar problems

Regards,
clarf

Post Reply