Vikas Sharma ??:
Hi Brian,
Here is the output of "ifconfig -a", "prtconf -v" and "scanpci -v" commands.
Yes. your system does hit the CR.
I also came to know that there is another version of iwk packages version 1.1
released recently. Could you please, if possible, let me know if this problem
is fixed in that version? This one is available at
http://www.opensolaris.org/os/community/laptop/downloads/iwk-1.1-pkg.tar.gz
The new version makes the connect more stable, especially for chip
'pci8086,4229', just as yours. However, the problem you encountered is a
pci bridge & boot bug, not an iwk driver one. So the new version has no
relationship to the problem.
The workaround I send to you tries to manually modify the pcie bridge
configuration.
I Cc this email to [EMAIL PROTECTED], who I think is working on the
bugfix. Before the fix is available, you may try the workaround I send
to you and follow the instructions the workaround prompt to you.
I will try to install this package also to check if it helps. In the meantime,
you can send me the workaround, if available.
You can directly pkgadd the new version of the iwk though it does not
help to the current issue, then run the attached script and follow up
according to the instructions the script prompts to you step by step.
Any other questions, let me know pls.
Thanks,
Brian
Have a good day!
Regards,
V
#!/usr/bin/ksh
#set -x
typeset wifi_bus_num=255
typeset bdg_pci_str
typeset bdg_secbus_num
typeset address_found_str
typeset wifi_base_addr
typeset bdg_mem_base
typeset pcitool_bdg_str1
typeset pcitool_bdg_str2
typeset pcitool_wifi_str1
typeset pcitool_wifi_str2
typeset wifi_cmd
typeset bdg_cmd
typeset wifi_pci_str
typeset find_wifi=0
typeset find_class=0
typeset find_assigned=0
typeset bdg_b
typeset bdg_d
typeset bdg_f
typeset wifi_b
typeset wifi_d
typeset wifi_f
typeset debug=0
typeset have_pcitool=1
typeset need_hack=0
typeset noprefetch_membase_allocated=0
typeset bridge_match=0
typeset scanpcifile=scanpci.out
typeset prtconffile=prtconf.txt
if [[ `id` != *"uid=0"* ]];
then
echo "Please run this script as 'root'"
exit 1
fi
/usr/X11/bin/scanpci -v >$scanpcifile
prtconf -v >$prtconffile
exec 5<&0
exec <$scanpcifile
while read line
do
if [[ $line = "pci bus "*"device 0x4229"* || $line = "pci bus "*"device
0x4230"* ]];
then
if [[ $debug -ne 0 ]];
then
echo $line
fi
wifi_pci_str=$line
wifi_bus_num=`echo $line | awk '{print $3}'`
wifi_bus_num=${wifi_bus_num#0x00}
if [[ $debug -ne 0 ]];
then
echo "wifi_bus_num: "$wifi_bus_num
fi
find_wifi=1
wifi_b=`echo $wifi_pci_str | awk '{print $3}'`
wifi_b=${wifi_b#0x00}
wifi_d=`echo $wifi_pci_str | awk '{print $5}'`
wifi_d=${wifi_d#0x}
wifi_f=`echo $wifi_pci_str | awk '{print $7}'`
wifi_f=${wifi_f#0x}
wifi_f=${wifi_f%:}
if [[ $debug -ne 0 ]];
then
print "wifi_bdf: $wifi_b $wifi_d $wifi_f"
fi
fi
if [[ $line = *"COMMAND"* ]];
then
if [[ $find_wifi -eq 1 ]];
then
wifi_cmd=`echo $line | awk '{print $4}'`
if [[ $debug -ne 0 ]];
then
print "wifi_cmd: "$wifi_cmd
fi
break
fi
fi
done
exec 0<&5
exec 5<&-
if [[ $wifi_bus_num -eq 255 ]];
then
echo "This script doesn't apply for your system"
rm $scanpcifile
rm $prtconffile
exit 1
fi
exec 5<&0
exec <$scanpcifile
while read line
do
if [[ $line = "pci bus"* ]];
then
bdg_pci_str=$line
noprefetch_membase_allocated=0
fi
if [[ $line = *"COMMAND"* ]];
then
bdg_cmd=`echo $line | awk '{print $4}'`
fi
if [[ "$line" = *"CLASS"* ]];
then
if [[ "$line" = *"0x06 0x04"* ]];
then
find_class=1;
else
find_class=0;
fi
fi
if [[ "$line" = *"SECBUS"* ]];
then
if [[ $find_class -eq 1 ]];
then
bdg_secbus_num=`echo $line | awk '{print $4}'`
bdg_secbus_num=${bdg_secbus_num#0x}
if [[ $bdg_secbus_num = $wifi_bus_num ]];
then
bdg_b=`echo $bdg_pci_str | awk '{print $3}'`
bdg_b=${bdg_b#0x00}
bdg_d=`echo $bdg_pci_str | awk '{print $5}'`
bdg_d=${bdg_d#0x}
bdg_f=`echo $bdg_pci_str | awk '{print $7}'`
bdg_f=${bdg_f#0x}
bdg_f=${bdg_f%:}
if [[ $debug -ne 0 ]];
then
print "bdg_bdf: $bdg_b $bdg_d $bdg_f"
print "bdg_cmd: "$bdg_cmd
fi
bridge_match=1;
fi
fi
fi
if [[ "$line" = *"NOPREFETCH_MEMBASE"* ]];
then
noprefetch_membase_allocated=1
fi
if [[ $bridge_match -eq 1 ]];
then
break;
fi
done
exec 0<&5
exec 5<&-
exec 5<&0
exec <$prtconffile
while read line
do
if [[ $line = *"assigned-addresses"* ]];
then
find_assigned=1;
fi
if [[ $line = *"assigned-addresses"*"0000"* ]];
then
address_found_str=$line
else
if [[ "$line" = *"value"* ]];
then
if [[ $find_assigned -eq 1 ]];
then
address_found_str=$line
find_assigned=0;
fi
fi
fi
if [[ $line = *"8086,4229"* || $line = *"8086,4230"* ]];
then
if [[ $debug -ne 0 ]];
then
print "$address_found_str"
fi
wifi_base_addr=`echo $address_found_str | awk -F'.' '{print
$3}'`
bdg_mem_base=${wifi_base_addr%0000}
if [[ $debug -ne 0 ]];
then
print "bdg_mem_base: ""$bdg_mem_base"
fi
break;
fi
done
exec 0<&5
exec 5<&-
if [[ $noprefetch_membase_allocated -eq 0 ]];
then
echo "Warning: Your system may hit CR6419924. For detail, See"
echo "\"http://bugs.opensolaris.org/view_bug.do?bug_id=6419924\""
echo "This script tries to give you a workaround."
ls /usr/sbin/pcitool > /dev/null 2>&1
if [[ $? != 0 ]];
then
echo ""
echo "Note: You have no 'pcitool' on your system. If you are "
echo "SUN internal user and can access SWAN, Pls get one at"
echo "\"/ws/onnv-gate/proto/root_i386/usr/sbin/pcitool\","
echo "and put it under /usr/sbin/, then an autorun script "
echo "would work for you, otherwise, you have to manually "
echo "enter 'kmdb' to hack your system each time it reboots."
echo ""
echo "steps for 'kmdb' hack:"
echo " 1. Command login as root"
echo " 2. #rem_drv iwk"
echo " 3. #mdb -KF"
echo " 4. >20::wrpcicfg $bdg_b $bdg_d $bdg_f
$bdg_mem_base$bdg_mem_base"
echo " 5. >4::wrpcicfg $bdg_b $bdg_d $bdg_f 100046"
if [[ $wifi_cmd != *"6" && $wifi_cmd != *"7" ]];
then
echo " 6. >10::wrpcicfg $wifi_b $wifi_d $wifi_f
$wifi_base_addr"
echo " 7. >4::wrpcicfg $wifi_b $wifi_d $wifi_f 100046"
echo " 8. >:c"
echo " 9. #add_drv -i '\"pciex8086,4229\"
\"pciex8086,4230\"' iwk"
else
echo " 6. >:c"
echo " 7. #add_drv -i '\"pciex8086,4229\"
\"pciex8086,4230\"' iwk"
fi
have_pcitool=0;
echo "Try wifi as usual after you do the above!"
echo ""
else
echo "Check the file '/etc/rc2.d/Siwk_bdg_workaround', then try
wifi as usual!"
echo ""
fi
echo "Any questions, pls contact [EMAIL PROTECTED]"
need_hack=1;
else
echo "This script doesn't apply for your system"
rm $scanpcifile
rm $prtconffile
exit 1
fi
if [[ $have_pcitool -eq 1 && $need_hack -eq 1 ]];
then
pcitool_bdg_str1="pcitool /[EMAIL PROTECTED],0 -d
bdf=$bdg_b.$bdg_d.$bdg_f,config -o 0x20 -s 4 -w 0x$bdg_mem_base$bdg_mem_base"
if [[ $debug -ne 0 ]];
then
echo $pcitool_bdg_str1
fi
pcitool_bdg_str2="pcitool /[EMAIL PROTECTED],0 -d
bdf=$bdg_b.$bdg_d.$bdg_f,config -o 4 -s 1 -w 0x46"
if [[ $debug -ne 0 ]];
then
echo $pcitool_bdg_str2
fi
if [[ $wifi_cmd != *"6" && $wifi_cmd != *"7" ]];
then
pcitool_wifi_str1="pcitool /[EMAIL PROTECTED],0 -d
bdf=$wifi_b.$wifi_d.$wifi_f,config -o 0x10 -s 4 -w 0x$wifi_base_addr"
if [[ $debug -ne 0 ]];
then
echo $pcitool_wifi_str1
fi
pcitool_wifi_str2="pcitool /[EMAIL PROTECTED],0 -d
bdf=$wifi_b.$wifi_d.$wifi_f,config -o 4 -s 1 -w 0x46"
if [[ $debug -ne 0 ]];
then
echo $pcitool_wifi_str2
fi
fi
echo "#!/usr/bin/ksh" > /tmp/Siwk_bdg_workaround
echo "rem_drv iwk" >> /tmp/Siwk_bdg_workaround
echo $pcitool_bdg_str1 >> /tmp/Siwk_bdg_workaround
echo $pcitool_bdg_str2 >> /tmp/Siwk_bdg_workaround
if [[ $wifi_cmd != *"6" && $wifi_cmd != *"7" ]];
then
echo $pcitool_wifi_str1 >> /tmp/Siwk_bdg_workaround
echo $pcitool_wifi_str2 >> /tmp/Siwk_bdg_workaround
fi
echo "add_drv -i '\"pciex8086,4229\" \"pciex8086,4230\"' iwk" >>
/tmp/Siwk_bdg_workaround
chmod +x /tmp/Siwk_bdg_workaround
/tmp/Siwk_bdg_workaround
mv /tmp/Siwk_bdg_workaround /etc/rc2.d/
fi
rm $scanpcifile
rm $prtconffile
exit 0
_______________________________________________
networking-discuss mailing list
[email protected]