Bug 47396
| Summary: | Forcing reinitialization of enabled devices | ||
|---|---|---|---|
| Product: | [Retired] eCos | Reporter: | Jesper Skov <jskov> | 
| Component: | PCI | Assignee: | ecc-bugs-int | 
| Status: | CLOSED WONTFIX | QA Contact: | ecc-bugs-int | 
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | CVS | ||
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | i386 | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2003-06-20 16:00:58 UTC | Type: | --- | 
| Regression: | --- | Mount Type: | --- | 
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| 
        
          Description
        
        
          Jesper Skov
        
        
        
        
        
          2001-07-05 06:56:49 UTC
        
       >>>>> "Mark" == Mark Salter <msalter> writes: >>>>> Jesper Skov writes: >> Yesterday I found that using a PCI device from a RAM application >> which was enabled from RedBoot is impossible. >> The reason is that the PCI library ignores enabled devices. Mark> How so? Mark> I wonder >> if we should change that - so if the library is asked to configure >> a device, it will do so, regardless of it's enabled/disabled state. Mark> Once its configured, you can't always reconfigure without a PCI Mark> bus reset. cyg_pci_configure_device() should do nothing if the Mark> device has already been configured (presumably by Mark> cyg_pci_configure_bus()). Is there something wrong with that? Hm, I'm not really sure now. OK, problem is that on Malta all devices are configured and enabled by RedBoot on bootup. When a RAM startup application tries to configure devices, they end up getting bogus BAR settings - or rather, the dev_info BAR entries are bogus. Possibly because cyg_pci_get_device_info doesn't do the right thing. cyg_pci_configure_device contains this: // If device is already active, just return true as // cyg_pci_get_device_info has presumably filled in // the base_map already. if ((dev_info->command & CYG_PCI_CFG_COMMAND_ACTIVE) != 0) return true; To fed up with it all to investigate further now. I'll open a bug though. Jesper The problem happens with the Via Rhine controller/driver on the Malta board.
Enable the driver by applying the below patch:
Index: ecos.db
===================================================================
RCS file: /local/cvsfiles/ecc/ecc/ecos.db,v
retrieving revision 1.248
diff -u -5 -r1.248 ecos.db
--- ecos.db	2001/06/28 17:27:44	1.248
+++ ecos.db	2001/07/05 13:53:47
@@ -897,11 +897,11 @@
 
 package CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA {
 	alias 		{ "MIPS Malta board ethernet driver" malta_eth_driver }
 	hardware
 	directory
devs/eth/mips/malta
-
script
	mips_mips32_malta_eth_drivers.cdl
+
script
	mips_mips32_malta_eth_drivers2.cdl
         description     "Ethernet driver for MIPS Malta board."
 }
 
 # end-sanitize-malta
 # start-sanitize-hs7729pci
@@ -3263,11 +3263,11 @@
                           CYGPKG_HAL_MIPS_MIPS32
                           CYGPKG_HAL_MIPS_MALTA
                           CYGPKG_DEVS_FLASH_INTEL_28FXXX
                           CYGPKG_DEVS_FLASH_MALTA
                           CYGPKG_IO_PCI
-                          CYGPKG_DEVS_ETH_AMD_PCNET
+                          CYGPKG_DEVS_ETH_VIA_RHINE
                           CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA
         }
         set_value CYGHWR_HAL_MIPS_MIPS32_CORE "4Kc"
         description "
            The malta_mips32_4Kc target provides the packages needed to run
Index: devs/eth/mips/malta/current/cdl/mips_mips32_malta_eth_drivers2.cdl
===================================================================
RCS file: mips_mips32_malta_eth_drivers2.cdl
diff -N mips_mips32_malta_eth_drivers2.cdl
--- devs/eth/mips/malta/current/cdl/mips_mips32_malta_eth_drivers2.cdl	Sat Mar 24 05:37:44 2001
+++ devs/eth/mips/malta/current/cdl/mips_mips32_malta_eth_drivers2.cdl	Wed Jun  6 10:26:06 2001
@@ -0,0 +1,120 @@
+# ====================================================================
+#
+#      malta_eth_drivers.cdl
+#
+#      Ethernet drivers - support for AMD Rhine ethernet controller
+#      on the MIPS MALTA board.
+#
+# ====================================================================
+#####COPYRIGHTBEGIN####
+#                                                                          
+# -------------------------------------------                              
+# The contents of this file are subject to the Red Hat eCos Public License 
+# Version 1.1 (the "License"); you may not use this file except in         
+# compliance with the License.  You may obtain a copy of the License at    
+# http://www.redhat.com/                                                   
+#                                                                          
+# Software distributed under the License is distributed on an "AS IS"      
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+# License for the specific language governing rights and limitations under 
+# the License.            
+#                                                                          
+# The Original Code is eCos - Embedded Configurable Operating System,      
+# released September 30, 1998.                                             
+#                                                                          
+# The Initial Developer of the Original Code is Red Hat.                   
+# Portions created by Red Hat are                                          
+# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+# All Rights Reserved.                                                     
+# -------------------------------------------                              
+#                                                                          
+#####COPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      jskov
+# Contributors:   jskov
+# Date:           2001-04-02
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA {
+    display       "MIPS MALTA board ethernet driver"
+    description   "Ethernet driver for MIPS MALTA board."
+
+    parent        CYGPKG_IO_ETH_DRIVERS
+    active_if	  CYGPKG_IO_ETH_DRIVERS
+    active_if     CYGPKG_HAL_MIPS_MALTA
+
+    include_dir   cyg/io
+
+    # FIXME: This really belongs in the AMD_RHINE package
+    cdl_interface CYGINT_DEVS_ETH_VIA_RHINE_REQUIRED {
+        display   "VIA RHINE ethernet driver required"
+    }
+
+    define_proc {
+        puts $::cdl_system_header "/***** ethernet driver proc output start *****/"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_VIA_RHINE_INL
<cyg/io/devs_eth_mips_mips32_malta2.inl>"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_VIA_RHINE_CFG
<pkgconf/devs_eth_mips_mips32_malta.h>"
+        puts $::cdl_system_header "/*****  ethernet driver proc output end  *****/"
+    }
+
+    cdl_component CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0 {
+        display       "MALTA ethernet port 0 driver"
+        flavor        bool
+        default_value 1
+        description   "
+            This option includes the ethernet device driver for the
+            MALTA port 0."
+
+        implements CYGINT_DEVS_ETH_VIA_RHINE_REQUIRED
+        implements CYGHWR_NET_DRIVER_ETH0
+
+        cdl_option CYGNUM_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_RX_RING_SIZE {
+            display       "Size of RX ring for ETH0"
+            flavor        data
+            default_value 4
+            legal_values  { 4 8 16 32 64 128 }
+            description   "
+                This option sets the size of the RX ring."
+        }
+
+        cdl_option CYGNUM_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_TX_RING_SIZE {
+            display       "Size of TX ring for ETH0"
+            flavor        data
+            default_value 16
+            legal_values  { 4 8 1632 64 128 }
+            description   "
+                This option sets the size of the TX ring."
+        }
+
+        cdl_option CYGDAT_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_NAME {
+            display       "Device name for the ETH0 ethernet port 0 driver"
+            flavor        data
+            default_value {"\"eth0\""}
+            description   "
+                This option sets the name of the ethernet device for the
+                MALTA port 0."
+        }
+
+        cdl_component CYGSEM_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_SET_ESA {
+            display       "Set the ethernet station address"
+            flavor        bool
+            default_value 0
+            description   "Enabling this option will allow the ethernet
+            station address to be forced to the value set by the
+            configuration.  This may be required if the hardware does
+            not include a serial EEPROM for the ESA."
+            
+            cdl_option CYGDAT_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_ESA {
+                display       "The ethernet station address"
+                flavor        data
+                default_value {"{0x08, 0x88, 0x12, 0x34, 0x56, 0x78}"}
+                description   "The ethernet station address"
+            }
+        }
+    }
+}
Index: devs/eth/mips/malta/current/include/devs_eth_mips_mips32_malta2.inl
===================================================================
RCS file: devs_eth_mips_mips32_malta2.inl
diff -N devs_eth_mips_mips32_malta2.inl
--- devs/eth/mips/malta/current/include/devs_eth_mips_mips32_malta2.inl	Sat Mar 24 05:37:44 2001
+++ devs/eth/mips/malta/current/include/devs_eth_mips_mips32_malta2.inl	Fri Jun 29 13:09:36 2001
@@ -0,0 +1,98 @@
+//==========================================================================
+//
+//      devs/eth/mips/malta/include/devs_eth_mips_mips32_malta.inl
+//
+//      Malta ethernet I/O definitions.
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//            
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):   jskov
+// Contributors:jskov
+// Date:        2001-04-02
+// Purpose:     Malta ethernet defintions
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <cyg/hal/hal_intr.h>           // CYGNUM_HAL_INTERRUPT_ETHR
+
+#ifdef __WANT_CONFIG
+
+#define CYGHWR_VIA_RHINE_PCI_MEM_MAP_BASE
CYGARC_UNCACHED_ADDRESS((cyg_uint32)(&CYGMEM_SECTION_pci_window[0]))
+#define CYGHWR_VIA_RHINE_PCI_MEM_MAP_SIZE
((cyg_uint32)(CYGMEM_SECTION_pci_window_SIZE))
+
+#endif
+
+#ifdef __WANT_DEVS
+
+#ifdef CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0
+
+static rhine_priv_data via_rhine_eth0_priv_data = { 
+#ifdef CYGSEM_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_SET_ESA
+    hardwired_esa: 1,
+    esa : CYGDAT_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_ESA,
+#else
+    hardwired_esa: 0,
+#endif
+    config_esa : NULL,
+    rx_ring : NULL,
+    rx_ring_cnt : (1<<2) /*CYGNUM_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_RX_RING_SIZE*/,
+    rx_ring_log_cnt : 2,
+    tx_ring : NULL,
+    tx_ring_cnt : (1<<2) /*CYGNUM_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_TX_RING_SIZE*/,
+    tx_ring_log_cnt : 2,
+};
+
+ETH_DRV_SC(via_rhine_sc,
+           &via_rhine_eth0_priv_data, // Driver specific data
+           CYGDAT_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_NAME,
+           rhine_start,
+           rhine_stop,
+           rhine_control,
+           rhine_can_send,
+           rhine_send,
+           rhine_recv,
+           rhine_deliver,     // "pseudoDSR" called from fast net thread
+           rhine_poll,        // poll function, encapsulates ISR and DSR
+           rhine_int_vector);
+
+NETDEVTAB_ENTRY(rhine_netdev, 
+                "rhine_" CYGDAT_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0_NAME,
+                via_rhine_init, 
+                &via_rhine_sc);
+#endif // CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0
+
+struct rhine_priv_data*
+rhine_priv_array[CYGNUM_DEVS_ETH_VIA_RHINE_DEV_COUNT] = {
+#ifdef CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA_ETH0
+    &via_rhine_eth0_priv_data,
+#endif
+};
+
+#endif
+
+// EOF devs_eth_mips_mips32_malta.inl
begin 664 rhine-hack.diff.gz
M'XL("(9Q1#L``V$`Q5I[4]M($O\;?XHN<Y6"X#>$AS>[%<<6H`L83C))N-TM
ME2R-L39"TNIAPE)\]^N>D;`D"VP3I6ZJ\&,T\YM^3W<;V3'9]RXPPPT:YKCR
MZX^/BM)786+9K`M-VS5TNVG,`OH>-)EAQ'_\M-JLXK/0M]C,<F[`Q[?`<AUH
M-SI[AQ73FDR@'D']'=1]/O5$9+U>3SYO=%JM=K.UW^P<0ON@VSGH[NUM"("=
MG9W<JH-FZQVT=[OO=KM[!Y4/'Z!^>'10:[=A)W[_\*$"%?!TXYM^PZ!_?7+Y
MZ40;2)]531J=:N?RI<I?=CO:>>]LU(.'"FSHMJ4'L+'Q`%5Z!N>Z'>HP=G7?
M!!9.F>^P$$S?FC&_"K?T4,-I3<S`(R),<>F=[C/\:%H^,T+7O]\PV0SE%4Z;
MMY87-/F^2GTC,'S+"S<V:%*C%R0ECQDT#-.N[*RVML,70S),)G:1&FA4I2P'
M,'%]R+/9J%:(CPIL`G/,>J`[5FC]P^J":)P-0MT/Y_/3X."@<^09%E?!;F=_
ME^L@^4!*>'[$2CGMG:7UL=8.4MT*&[C>C\]ZZJDF#T?2F=8Y//[Z]>MZ.U<]
M3+[0+OMRI;X:-EEC[WR`6X;2J+*S^J;/<D]33N6AM"H7A78_W_PX_QBP4)OI
M=L3]YO2+DE>1UK]0)*CN?3*JQ?96S=`TFK+86V+3Q8V`=G2#MNCY[LS"K8#&
MF7AK``YC)C,A=,&/G(HLXEJ!&S6-R/>9$S;1\ILK.$>Y(7&%`T7D&ZZRE"+A
MC[.XH>HA.K0/G3UHO>ON4A`%"ID\AI:`_P7U\N\(0\H^M%O=SGZWM2_P*0"T
M:BW8:=?:G1:Y_LXFE"#P7Q&'H/AX)D#.%^2"7`!U""+/<_V0QSOT-%"FEL/F
M\=QPG=!W;9OY3R!HP62.(CCRVT$$Q_B@DIBBT;^XO%;DD]/11^E$'M+,$Q%E
M#`*KKSZ6@Y$KD\#08`)P)R@F*^#>`'CIH:3'?^&=1WY+\E/05$[1'%G?#>`R
M&MN6`6>6P9R`<;#/J!^1)+1ABS94XZ?5[5_@WHU0V_?@N"%$N&%^$OMN,"\$
MR\E09KBW'E[?CL'@S@JGG(`8K@%P':.YXU#'C3HN]^X%`T_+`$F-P:9AZ'6;
MS;N[NX;/S*D>-A"^^4H%E#8(3'4G(2488%H!IEOC*$0A1Q@@_0PK**OT`A2R
MCE&YIX*L5N=@8SVP@AI\D4>G%U<C^-)3E-YP=`T7Q]`;7L,G>3BH`;/(4U#J
MGL\"5+H/%DF:F2A6E3%^+($E1Y.;T5S@,<.:H,IMW;F)*`F[<=$C'9X?6C=3
M-"#=,<&V;JU0IULCB/D@L*SV?E!FI8W$`RZ0?LO1;>B[)I<UM_`Z2+=C9M+%
MU7>=B743^?H8[?7"8SXRB&RK]T'(;FMS,)_93`]P@XH6S7"W#[NM&K2/C@[7
M8_NGL"E3DH=<#MB,V2YRD3C,`O^QIQ?13&"7&'ZY@@V?Z62/X_NGX$"VO!9E
M??1<;C^PU=_FHN(".ZK1-=3BK^T$O88\&!2VH6?;H`BK4UC`_!FWWU<*I]20
M6MK(7RG2<)!<*"7>6)L#2>TK\N5(OABF+RTNY"B<NOY6L-T5%/T5?'-G0F>.
MB$6N'W33#P9H#MT4#Z2\>FNOWNH(R-R!<Y;*XZJR@RF$MDZAR)-T#*^>C3>*
M&-5\KK!0+\:[,D79"R59*NNH$HVTV=,I44M$-:\VB,Z!(G^6%%4LU(T0X31K
MLK':LC1>KK:*C[8<PXY,IF%1B]^,^YNFY2;/-N%8_GHN=3%F8"A`#[?M>QAC
MQ'!N`KJE*6)0A<.+E23'%UM)\A9F$_Y$-[CLL3HKJ'`T1?K/E:Q(@T3X6054
M<2$(])S4D9J_(ZS#S5C\CPG-)IM@$JAA]6&D,;T(X\._NEVB*^#!6ILRG2ZE
M:O,MC84#.((;A;A3U,;`US6K*X%N"CJ(\T&OD'-Y>`;OA;R;E+WSW'<A3>\T
M+,?^K:PS^\<G\-[[=H.)WN2%0QO3%4^,1?>B[!BF`EG1/>F*$"F[<QVR_J4.
M2K.M8D,1GLI=ZXD67AJTLEY*8V+K,]=/OHU=UTXALHD>V4F-W$X_R+AWMISG
M[N&*A[$_B;)W+A<VPYPG'0SP219$4"^(GD<&[J*8E;%;GI@O=Z3GME&Q/Y1&
M<9S@HDR?0:J(.<#%PZOS97K0E*^:(@]/-%7^KY162H%B5.L?1AF&\A7S0\R6
MB'_"R(DQJQA3#_4<:D8Y>]F'-KO1;?$H`'B`/3B$]C[L=F!_#]J=0[*Z+-@+
M"LTK-6"A4&@0<\*+(,%-([7W\<=$.EI?I*,R1=K>_W_+=+263#-1[AF9#GOG
MRV0Y$,[IZ+?S&H>'FJ6A9'T1/U3_J")LZX]JM13A<:)CX>6C36&8H9$/-<^*
M.A.<56FY!:L8822UM\QXD<8,P8&H$T$W32I%7Y1P-F`O2KCUHE@E!RLW<I@P
M)<T["VL(3&[<NPQ96:`<C=0*&7,9&Z*?23L%!:@<JH,61&\DM2/A-&*%4N\"
M<9)T!BRAR^3G!C!=%F1AJ&\2WS*@XV$^57*2=*E<G,_-5^TU<E+,T;*V(Q6H
MM4"UH]75NJC:1>=95.]#]:'UO8658>O[(7]M=^AU=X]>W^W3Z\'A8]ZY"BQA
M#4H?,RX2OSVNTKV.];0LP2NY?;WLM*1WO6S=LL;UBMR]OG.]Z@''OL5;UYTC
M^N6P==3=76Q='QWRSG6S68*L$Y$C&OTE]K7(R'(&N*`S..)'NR?3E)L7HJBQ
M>*>ED2PNEXWG6M;-U_1&GQD<K<0."Z*5V+5&M!+;UHA68M\:T4IL7)>NTQ);
MUXA68N\:T4IL7B-:B=WKTK508O\:T4IL8/\43DMJ82-:B3UL1'M-$QNWE=C%
M+CW(EC86+IJGKN_/N,Z>Z6?'5VVFHQUWK;GZ4OWL^72FFYUN99/]1+[G!O'C
MW.7-+VYN70E513WO<KFO[&PFY0'O+TYUF_ZH'>LWIK^E]$'\BLX$]8;I_V<4
MY>IR1/F^(G`FR`!HVA<,P%K_8G@LG_#Y>:.1VDKS)M1E7];.L4P\[UUJ'WNJ
M1"MZ2E^[&O9[_5-IH/4&`T52U:TM)$R+D*+=SO;6&UQ%NU2I3V+1/,/2[BS'
M=.]^;_VYO;WB>;QID@5^%I<O)F3$9@ZFPXO<4CF4FEVM.4D;>"EA@#\5;6AK
MIE%9`S-+U\0<E?^I![_"`Z2/6:/,%K4(+Q6I=M18H'>A71/3^`6Z:Q1W-9*%
M';!"T%9M+BEZ+$I939PQO#H[BP_UOVN\'54TJ1E.B`^VVN_?=[:A^?85?<:W
MS1RD[2:PG?A)6$1!^$,4C(HH"`LI>/R%3$#\'O-94_M;<[4'1BU35;YYSB)J
MY)<#T2E^RE862N,UVE_9<V-JZ!>-X@>N5S0?_S--X2/=T0(TCD*X9^9]9LR*
MYDUF$^.U)#Y5O8!%ICM0E2H8NFWCQ3GQW5N8Z$$(#N\CX:UM%B!YKFW74I&.
MOL,D<@P*QYA`.H;N!9&-@3W`!%3A61\>4X"$T42;\?_XW.;J'4HC%/NH]U&3
MAB/E>DNL0F*PRJO!8N.A*A947Z\S/N;V0K5@T4%OTM9&M`J7C>/\RO'+C[!F
MRL6OMY6=U(SN^_K][WGWF<=EG,+KXFHX^I/"V]I!-,=+SCWFD4AXVSR"(Y\2
/5@E+BNW_`4!"-A5-+0``
`
end
This bug has moved to http://bugs.ecos.sourceware.org/show_bug.cgi?id=47396 |