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 |