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]

Reply via email to