On Malta all devices are configured by RedBoot. That means that by the time an application wants to configure a device, it gets it wrong (since the device has been activated). RedBoot should probably only enable the devices it uses. But even so, the problem persists if the app tries to use the same devs. The solution is (probably) to force a device init if PCI lib is asked to configure a device - even if it is enabled.
>>>>> "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