Patchwork mainboard.c: init() still being called?

login
register
about
Submitter Jens Rottmann
Date 2010-08-25 16:10:39
Message ID <4C75407F.5080002@LiPPERTEmbedded.de>
Download mbox | patch
Permalink /patch/1799/
State New
Headers show

Comments

Jens Rottmann - 2010-08-25 16:10:39
Hi,

sorry for the delay, I'm continually jumping between projects and especially if
a customer wants something I have to immediately drop everything else.

I wrote:
>> [...] separate the configuration _data_ from the _code_ that writes it into
>> the chip.  [...]  I had guessed that this is the purpose why there
>> is a struct mainboard_config in the mainboard's chip.h, just as there is a
>> struct superio_..._config in all superio's chip.h.

Myles wrote:
> The device tree isn't for options. It's for immutable properties of the
> mainboard.

I'm not sure why things like 'register "com1_address" = "0x3E8"', which is in
devicetree.cb, and which is changable in most standard BIOSes' Setup, are
considered more immutable than an option switching RS232 to RS485 (via some
mainboard logic).

In this sense I experimented doing this:

chip mainboard/CONFIG_MAINBOARD_DIR
    # Bit0 turns off Live LED, bit1 switches Com1 to RS485, bit2 same for Com2
    register "sio_gp1x_config" = "0x01"
    chip northbridge/amd/lx
        device pci_domain 0 on
        ...

i.e. make the mainboard the root device of the device tree - seemed plausible to
me, somehow. This compiles and boots fine, but the 'register' statement still
doesn't have any effect, sio_gp1x_config in the mainboard's chip.h still isn't
set - hmm, tough luck ... Why have a struct mainboard_config if it can't be
used? Maybe it should be removed completely??

> I think you need Kconfig variables for both of those things.

Ok, then I'll take this approach instead - and tripped over something else:

The vendor's Kconfig looks like this:
choice
	prompt "Mainboard model"
	source board/1
	...
endchoice

This means you can't put any (visible) options in the board's Kconfig, because
they'd all end up _inside_ the choice instead of as seperate options. So you'd
have to put them all in the vendor Kconfig - but this would soon become very
ugly with all the "depends on"s once the list of boards and options grows. And
board specific options just belong in the board specific Kconfig, not in the
vendor's.

So I did this:
choice
	prompt "Mainboard model"
	config BOARD_1
		bool "Board 1"
endchoice
source board/1

This made the board Kconfig:
config BOARD_1
	bool "Board 1"
	select FOO

lose the BOARD_1 option. But I needed something to attach the selects to:
config BOARD_SPECIFIC_OPTIONS # dummy
	def_bool y
	select FOO

(Dependencies skipped for simplicity, see attached full patch.) This works fine,
but I don't like the dummy config option BOARD_SPECIFIC_OPTIONS, which is always
y and doesn't actually configure anything.

- Does anyone have a better idea, avoiding the dummy option?
- I'm going to use the same scheme for the RoadRunner-LX and also for the 2
additional boards I'm planning to base on this. Maybe this restructuring should
be applied to all boards/vendors?? I've seen there is one other board with a
private config option, which is so far kept in the vendor's Kconfig.

Any comments are most welcome.

Thanks and cheers,
Jens
sio_gp1x_config can no longer be set from devicetree.cb, so convert this into a
Kconfig option instead. And while I'm at it, also add option for SMC_CONFIG so
user doesn't have to mess around in C files.

Signed-off-by: Jens Rottmann <JRottmann@LiPPERTEmbedded.de>
---
Jens Rottmann - 2010-08-27 14:24:51
Myles wrote:
> It looks like the register at gpio_address + 0x18
> (GPIOL_PULLUP_ENABLE) is getting written in cs5536.c and
> spacerunner-lx/mainboard.c.

No, that's fine. These are not normal r/w registers, they set and clear bits
only by writing 1-bits. Writing 0-bits has no effect. The writes in cs5536.c
and mainboard.c address different bits so are independent of each other.

Patrick wrote:
> Am 25.08.2010 18:10, schrieb Jens Rottmann:
> > i.e. make the mainboard the root device of the device tree - seemed
plausible to
> > me, somehow. This compiles and boots fine, but the 'register' statement still
> > doesn't have any effect, sio_gp1x_config in the mainboard's chip.h still isn't
> > set - hmm, tough luck ... Why have a struct mainboard_config if it can't be
> > used? Maybe it should be removed completely??
> That mechanism could be fixed to work correctly again. Attached patch
> should do that.

Tried chip mainboard / register ... in several locations but couldn't get it
to work, sometimes it wouldn't compile or else the mainboard's enable_dev +
init weren't called at all.

However, as I said in my last mail, I'll go for the Kconfig approach now, just
as Myles suggested.

In my last mail I described some restructuring to make (user visible) options
in the board specific Kconfig files possible (i.e. don't source from within
choice/endchoice). Another change I'd like to add is to move MAINBOARD_VENDOR
and MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID to the vendor's Kconfigs.

I'm going to try and prepare a patch for _all_ vendors/boards. If someone is
already doing this or has objections or suggestions how to do this better
(like how to avoid the dummy option!) please tell me before I waste too much time.

Cheers,
Jens
Jens Rottmann - 2010-08-30 15:47:23
Hi,

> In my last mail I described some restructuring to make (user visible) options
> in the board specific Kconfig files possible (i.e. don't source from within
> choice/endchoice). Another change I'd like to add is to move MAINBOARD_VENDOR
> and MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID to the vendor's Kconfigs.
> 
> I'm going to try and prepare a patch for _all_ vendors/boards. If someone is
> already doing this or has objections or suggestions how to do this better
> (like how to avoid the dummy option!) please tell me before I waste too much time.

Ok, here is it. Turned out larger than I had expeced, so I bzip2ed it. Hope
you like it.

This applies _on top_ of Andreas Schultz's "[PATCH 3/3] support for Lanner
EM-8510 Board", so his patch doesn't need to be changed.

Cheers,
Jens
BZh91AY&SY»ËwÝd_€|0xÿÿýÿÿÿð¿ÿÿð`[ÜŸr²äǀ-X‡ÒT‚@@gß{ï[©îçh!ö=ðà³'Àž'
€pëç=yßs*ï¹_kׇ)ìÎàv;Þn¾öh]óÐòIu_3R‰ëé¢Ö=Ç
»owÓÉ Iæʇ`tô7´/F½<´r§½÷žP"y©WɾÀ»0eßXzUÝ7m–`†ÐPôhžƒÐúÏqçÀî}°ähT4Ñ@Œ€MO&“eO&šm)²š£FLM!"šjz	è…==&“ÔƐbzj4Ð4¤ 	M•JI?*~‘©µ7¥2"=F†™Ðш14	=T‘&Hô™46mÚOS#COP4€š¤ˆ!0@Tð(ž©´Ô4(òj£@ÄÓ)"€ÐÐhÒb4i¦Šf¦Œ†ðU­ã­{ÿÛZ«r«^ÿ@€kUË9ÊçåÎª» +Ê«Ü»<*©Ë¶È»<¨»lœ
òì®Û*ð*p¨¯p.Û<.ÛlªªªŠÊ÷s»ŽÛ»ƒ»ex§*îwÀåU˜S¿-m¡5†²¡¬3ZÒ«PM²¥#@
m[-ZËD"hO[ù?_ç¯Ù†П“ñÝtÍ£óstüÞ¯Gäôðú/+{6¶¯øÿ“JMU[ëm[süeZÁ½E´S­û1ã]"뜔	‚Ù™ü›êV»5ZÈfA½yâjqEÝ7”Ú“SHk†´,Y8M«4V×£enºáç^ºvæÝÙúy¹LB=‹³°ÝÜ½ÅŽí»·Yð­„ÎÒ%*»gcu€qb†Wqqë—""é9t·H][¦wUqVç(­¹f`ʽù¿Y/ÿi×ç‡S%kö¿)øþ¶7¿g
Wø·ÐÓY¬fŸ•¬ÖÙ¨Éþ´ã<ºñ£œlÝÓ¬Æoüyz=4]ùTcf&U¸ŒH±wã»AÖ»ëÝÂiR“?ÈBØP-äÃR s•E‘ÂpÆyﱪ4PxYŒß?è°Îs0y·sœ—\Ì°Â"”ª‚s¥(Â.ƒ5­}Qc—¹8P×:×,²Êü0°Yce,ž@alØ:rWÛm¢ÙÂÑU¶ZÁä./;,²ÉÑ6%³ ‹A6+‰ÅÂE䍓Ló~ѤÏÍ¥š€ý†%¢ºe䗭0†U#î·	ÄUrÊå¾èÞëëŠ1ۄhèÍÌl®X?	¨0xÿ±…VWK®
Y‘+EZïT5I•V
e”Qz¿p²Ëì¼5d±Ä†0s*©`4J¶àØ^ Üñ}íKb
´k2P|²ác…ù’ã¹únë}ïÖ§váGÁ,ÂrseºJ²žÞ6C>c'Ô*Û<†Êá©åÊûmý:ÆãÇUÖ:ÅxÜCY^ÅÄlÙÝ¥£nO¤qpƖ²áÊêcÖéPÔFÍÜZ¨Ã¤ûÝ¿:ÎÅçÉpãÞÞ$Ã*Ôm‡F¹áÍڴؘbʪÊN弄æy°@žI*¶ãl§g.pÖ»…ŒM÷2ª–`뮄ò2ÈɹMڙŠI±žnÂªg[¬"ÇRÙ×X¤†6"‹J.4'Vܲ¾¡i
…‰¦êW¤mƪÊ
?ѳÝÏuÙæ,ÖÛ¯Õö箢$È^ªª§tw°rAÛ«GkH± TF•ÍvmÛ®šGÅÕ®› ØìXƒI2ª–¼…+(ÅïF¯*ì¨A ßGÑҒ×iTƶã¡Ã*g¬N0“€ÛhÙKoˆbcµ´7cp€²ÈL¤2¯L…Õ	æÂc@ JÀ °²¹¿V"µª”@>A=ñÃÑxÈvvpâL˜-2^
îUë+ékvÚû²î·qÜ«…]¶¸JµF·¶[óqæ»Â"Lk cMÛ÷&)#®õžUO[uÇZƅŽ"»ž4ç±°ÏÖø,Š‡H)Oûrßm{¼3ôgâú¿W÷ëcÿ¯ü÷ ÙìAÁ¯Êʄ‰a¢ˆI¶«wmÏ,Âʆô†B)·MEjüon*wåĐI$‚T©$!*@R!M½›ÖñŸ§Ù¯˜ïïŒä\.ÔÚË·²êw9aC3@}{»Zr÷Dy(>^>^u‹éì_\¸ç뷉1ÎÅCч.xóvæ›™UKw›Ê'6“Á#=¸Y?­ Þ|%í¸€ª¡|;pÂûŽÔHû/îä?îççÞç;«¥¯dæª>¾‘yµæ¬nÊ¥ºq£Cdﲏ­m¿N]!€Ó¦=‹ØýÛ+,ïºÖkÙìGeX=íÆ[ç±µ­jÙUÇ-‘ÂA$EÞé£Â豞ÛIv¬øéRë+]vÂ[€;Š¯EÎEDwµŽ²š]^ýø×»ltÌn_@ÁWR.»,,xÀEG;VŽ­UKNåªåÑ$
'û×_eª·ÕÚ6ˆ¬6(Á!fM­цÔ-›6…±lTÛ¬,b¿šã‰bŒ&ému,i©HII4$¢"%–Y’"SRBh‚J4)ƒEKóÝXÒe°)	*Dª4ÐØÖ"Úoɕ	a¢ˆ]®™J»H*B‚H*To·_^*á~ÛÓNÝã³Ñû ý¥ÂíM¬»ú]NŽXPÌÐýÍ9Fû¢;Ô^ï^ÚÎÅîï_¸ç巉1ÎÅCɇ.xóvæ›™UKw›Ê'6“Á#=¸Y?`D	è‰Ü,â«b®Ãì?a•_’½Ãë!â`^|úŸdSô1½À&÷pÅþ¾¶?èŽPÅÅ»Ÿ²ÜÈY¾‘®ª•š©N1¶¶×\ªŽ…ÖJ%ÕÖ³­„ ð)9åõÅ\æoú±m–<ç#ýVù`Dì`Z”­ãâ^u¡ØmX>DkÉm¡‡g±ˆf,·²Z_ïê_bãû~¶ý­_JÒï‹zV’IZT}6ýäNø—Åñç Ä삱~˜87*×úÆ-›×G-C¾‹°Ó8°}\sßpÁû^»OãÍ¥z¿_¥xûuûMokôžÒsð9G”€~sËà­iï¼ñ"ŠˆÆUiꮺ¶,ªiËZÖc7Z@ƒ= Í5_Îk+Jóö|—âgßï˜OSçÞ?×êêhù_—[’I'²uP­?ë7ÍgÒ@ÞcÓz툛ÚÕ­o´ûÞ½^׿s~æ3­<{\3ÞW­g|ð"Ežk“ Î/Ž6Ûÿν?$Ÿn†û¬ŠÈ˜vœJâÂ-ÏS^hC\C
ÌÞÏÀ:ì}DXÞ²ù
ûöõë;M¸,âÕB-UW©ŠÜ×3ˆ®‡‘¨¹TÛ+­…qýDÜQÇ´¤YHYÍњ½[|Wr¯ZI¶bÌRíqžtŒŽ|ÕhÚGáãåÉäD#öo{ÀÁ÷‘‡HjkXyª÷imÛôÀ·1\W»^0-Ì]·÷ý~É$’nI&I$É$46B./b-E.—±*òüÏïza}š;~‚ûÚFw¶;cî³7­âэï=ÚS£½óž[BƵ§Øu¥®Ž÷½ð¬g3.Eˆ̃6´µZÖ°hÃZTd¼Å@y&5GJ`müF¶f™ê݋::Ò­iß}vqúï=ᨰllWmš²o›5$Ìj*ĄKˆd¬… x|-ûB Iû;}Ÿ‡Ãìo¿åöýðü.ܲ…
_­¿	•¼BÜùÆÈVÕ*ª‹ÿC'ªØ_+ò÷{}p;ÁÜóþ_®çÅ´Wcz°Q}»T?†›×s¿ƒ•M–=ì89¯äþGˆü¿(ó²‹ß9NÛ<öx:=ðú¬œó·4ű/ðò<|é|¬´Ô²ž˜e韺ÚÍë#Œù1àú4s@Ó²~on0æ.'cKÚØàòyM•T°4†ŽfxêßDþ#L¶!%»r%_­·hlkm?ø+qm¯Ä\֌¬U˜±‹2ÿ¼}wÛ^çó³/Mhôµqîãêæý˜$ø·Dw¥ÀŠ†ë&
7Ò¡¾4ѪT@°’ ¨ÞY_wîúÆ~Ÿòøý=2r¡Ğ©> {§îþæc1’$ˆ‰©l™4ˆˆˆ‰‘&EHˆ””ˆˆš‘f—ìç"dJ‘DDDDDDDȈ•¶M“""""&DDDDDșQDM‘RY2dLˆˆ‰‘ˆšòåÍ1˜Ç†šÙDîëÅ!‘ŠXúé4_ÑïþÏwÜܒI$‡ä{Cz+À~±ƒÆ>¨zÁ¶C³çï¬Å»¼~Ün`óçŸ@ytÈÀ0®
©ôR¸B”XO(&Ûè4Ž.ª´\5‘áã•Ç˜òðOÜs€ðø<»ñŸ9ÁÇÐ}¿`¾¼†am@¯£(1öZWœÊO]”ùÐ{¿áµë¯³ÑèõâMˆ=V½d>Òw…&¼í²,$°”™óŠÍA"PA.­›²Ah9ùlч7¨ÛpìzyåâsÚsçzFù™Ïm´ÛXÓ9g-µrÀ_ñPí¤=ϯ½Ýòú£u̲Ë=ÜË=ÀË<Ë=ÜË=E8³=ÀË=ÀË!̳̳ÔWQ]ÜË 
«Žež:Šê+¨®¢‚Š
+¨®¢ºŠê+¨®¢ºŠê(WQ@
«¨®u–FYæYê+¨¡–x(®àežÖg¨®¢¸YžàeæYã™g›Wj;™dîež¢ºŠÕÔW,œÚ¸ežg¹µp
¨îež–y–{–xWË Ë<Ú¹–y–zŠîæYàf{¹µ:̜pË=EuÔPQ]E6®â<¬ÈË#,ó,ó,ðÚ¸WQn〸
jàWڃ†Yã†Yá–NmG6®g†Y8Ww2ÈË=E¥·2ÉEÚ»†Ô‚k¸ežá–{†Yîg¸eæYeYž8e“¹µÍ«™g™g›W2È6 W2Ï2ÏS¯ÖAªß•Pä¸7•[-{ïÁÍÁpày~§ÒƒtH>>W¡k¯õvjI}Vo‚ˆ>_ø¾K–fK
>öŸS’Õ´ÿ¾RÿCû;1ÖÒz7ão™ó¾Ûü¯Â×O[ô~ƒBzz¸_§x_±ŒÐxÙÇ.÷T/·ÌƒŒpvñãðAÉÅøÙó}ÑEG9ÎTTTTTTTTs•åEEG9QQQÎTTs…EEG9QQ^Ts•ç9QÎs…G9^sœåG9ÉUTUTUPª¨¬(9›Rû”cýˆ@‹‚†ÿ–áõáÏ®½.8l߯ïÛòRÎÎÙ%G/íùu¿öԇóÏ{©ûºþ¾ÞLÖxs¬ËëpÒÿÓÿ”v¯'-uß;=;oÓ)ÇmwŠÊ'U›ößm»®;|%V4	.ÇÃåïéÓ
¯>ursž<÷ÿgêû—«ÑðÛjõøù~Â|}í¼ùj¯/ðquφÕ^ïGg–lƒOOå½éfÕ·ۗ4õàƒ‹ÿ4š @¢
¸N½ÍÐ`îÞ­QûÏÏEâ@ûˆùŸM´‡³Z|Š¿üòŸN(€n(&åדçÓd$€–”÷·éû|w;Ó þEõýa凷öé»ËÏûkÂß«—7Mý½”µHˆ,'Ðlœ¡Z³ÇCrv;ñê`9áÅ@ñᥝ};#;ÿ[é®IÛøÞµsUüà·óòz-Š—êGLy.¹-¥3n=Ö_}þœåU•:·eÖËµЖÁüd{à,ˆï=ÝåE]µ\,âzÓ×^ÿï[<_Ò©Wã‚]»ÀZåñPÁ=Ñðð¤¢j…%€±ÁNz½yýXt@:‘MÒ΃³b±&œ|Ç>©§‡‡‰7±®J:ð諭Ø{vãáÛ~ÎÙxWKtôv›{}xzëáâ3~YØóõ(óÅÆq9zçìî—æ}pw.§µmPžÐĹ´Å‰æöUS)=»½º¹WÛ¿Ú_Ëa¨ù§Üs>'̓Cð4=O™÷”ä{Ìʜ¡óÚµšð>ó3qÚk16ž‡aȸötìü¯KŽ<]:x8ðz…ø¾½W«äõÙkkN¹)?Ë11“bV ÉCü2"î8´#û ¿Ž ¿a+	ýûÇv{ppñ¼{aöñúâvÿ"°nä`ë,’Y`[*•–Ýêí+µ9ÏJˆ9戂ä柈[ ·D™.ÙŠj¤óøý¥õyrAûÊÏ=)ü30?nÂØ_Ùì—_-}VFîÃ,»ú»NŠ
-sbëP%j…`èj¹,°A$* æïZ[Â¥C\¹ Ыlm››KXÆB Â,]•ÇqL¼À–Ñ‹Q:àփ€ìð€¥Ðxl<ÍÁ­@ô$*³	®'‡g–æñš lg,ÞéðîÇ7·B°ÁÎZÖü›mÍ·¥G&ÍøñqéÆz¢ûp“ØÒYAe¡ñ`íBȏª`}Eå~ºôoú_ό¯„ÞŸ§äÊÆ:ß¹Öw¿ùÏ¢é?Ù^e¥xOÚýmOÔõ÷æfWÔû_ªâüÓ¹øæY:±ïo}^ç…ý×õŸ»åí1"ÿÇѕü¤ÐÿûKÓ?„Þxº¿-fff.“
}zžƒ°¦©ß?ìƒíûZ®¯È°úçŠ^>	äžàSÎw|F ‘Ä,´ú’\@¨<\"Ŷ+¶îV
9åæ¡õíÉ=âÖÈôU²ÇÁ†÷5ÿ½ÿ3˜ãÖ;l¢ïŒœ§íž{>nÎlœó·4ű/Ǒãó¥ò²ÓRÈwi†_<ýöÖoYgɏѠۚ“ñ{pɇ1q;XbXÆÖÇ“Êlª¥¤4r´ëÇVƒ¹p„iÙTŸÅzÀ¨í`tM™nÉýšå^þZJÍvf,׀•’ÜÅëuòٕð™ÎµŠÉP/µIÉ̪¥®ûܵ[¿çDo”u°*ßTÚ
Â{Yû7õ”ƒ¸‰×]–­y	b#ÖQêL˜¤Œ,'.½:öu¬^XŠ^0am«¢ÝŒªzõ^™®Ø©â¼wnZ_¬ñÄÎ˸çN¸õ»Ü¶íë„Å÷æüF#réP²:?B!‘Í„%6
GP7f¹‘hÔu]J4Í
¦’Z9PRŠ*ó–; ªÂ.éîçϗ¯?××ÛÙ]jÅaª²‚ÉÞ²·˜¾‘‡¾b})±l85l^ù‹ÏÎN†ƒh¾pÞhWŒÔÕ>G;CÖwÍ'¨m9g£ô1°à<RCS ä›­U`·m)±Þ-æNé¸àyMó”á;¦ëi²nl›&Ju›+s$wÎɓPpL\NsD}SÐÅä1rS‰Þ%èýÀ}>ß|žØ×ÐÎ\>¼/£é³øqþ;^	:œ™v,88"Á
M1Í¢jHƒIÓ6BÙ4âA 	8ÃMë¥Ërémº÷x†9‚É\êÇG}h¬›õX-Žïp#nÐ	æów0…c 0e­,UE„4H3APÛB¬òªêVsg¬B÷|7ˬÐáêöfAÑ ç]¬pïš«)XЏ¬{6F®*²°,Œ:v¡ácY½õb÷Ëó@õe+õ¬T;
ªC­¡Ý›ˆ«yh$&1”E ØT•Ë£vG/QBѵWÙ7ÂéÎ:z»ba+(°Ãn]£RGM»º„±0ØvBWzcj]֍K²êÚÃAG;öÍþ…Zæ¹`
åÝ]Û¦Ùa´
©@ôiŽè2j]˜w[	-&’i<«M¢-¨UÝØ»¶)„œ“Âß<Ý%ÃÏ	Øúð=1áß!b†„¡tK"ªl0ÆEˆ€ ÖÖA®¢\æö
@׍SÕ=…˜¶zâÌ]§mä4srpðó|P*ÖÑ´uɲ{NŽúøÝP\A
Т(.€+]ÕÝ%£­MžŒèôć|…²éµÌÒ™eõºÓ®=u7³Ã½H·Ã{Þ>qk[A½íìïkGYm … IÖ¹ÕÂÜbᖤA+VÅ£NîҊ	t#PР0Õà8©¨h
Ѫf«w¶¢‚dô“Á¡‰bA¨í¹rÔPˆ¸ÔR]ݸÄm¨Ûj
cd$ÑÒÐ$$ ã|ÚúŠæð±cc>EæÞAccaÜB «I#†Ê‰bÒb6Äç~]]wuØå\w杷Su:zy[¥%¨Ø°knqJï|àÙË]ÅÚmN¬Viڃ½Æ–'låp'u\<PoG¹Æj²å:5£Ç…W8ï\·²W#g‚]ÔÑq´®bǕƒ‘•Áa¹ØP8¿¡ú#ø=··Ð_J¶U<¥mžUUú>yç•UU^¯föel›ÛÖ³ÆWlçaϾ¹$º¹ÁÄã…Ç1Î8R¤,hŽ!“	ºS”­K
88V.–@8‡&k]Úb¨6ìÌÌáÓø9ëXÿ%fΙ¬ÌÌl}4ɖÀ´jZÃ]<ºtÛ®ºçWÞÚޕFڋ}kŠã[E¶s•Æ6ãWåßí—àsÁ˳IE®WQÄÿd[ðffÔwބvºðÕsœ×É~_†'ßç÷=·7]¡Ý%üG¥ydÆKóëVѱ¶É•-™L»÷i³¾­<êwæff`íá܃òËËÙÇÔ®jöI´Ë0çF\VŸÙÿ–›¹ð•Îs‰ºG—
¶Ž‹yãŸ`íÊχdtƒ ètÌâg)y잇>~Xçt¨É0™‹`œmˆÙ¶fLæ­ø­¸p±†d}óᗔZc£¶ìÃÌ2çÎË°júÙq§£©Ü—¥É8==ÄÚ¸×åzWlëéôgÛZk5k4¥Ì›YÃ+|§œãÏ
^^ãÉ
ŠÈmZ¦i[ãBED;NÂ&ßÅßµÛ·;ߊb¨ÑŒWdQñ8×CW’¹áÇ\ys}î÷#jû·85¢+@ÐèL’	&ìï³ìö»Ðúé±V8_Ê«€Žyï Ûaë$‚ù¥ñ­r
4+¤ ÏüÕø½]yߊ̓v…›?g`›ö·vÛe¶ÛjÀv¨f¨+»‚¾`*®î4ÛKåóx‚	‘D’	"ó"M”ÙK(¯«²÷S
‡‹ö;çouŒ,tsAø\4rTƒÁXIù*©Õ*d“߯îªüGTG·ê]üå§LÓ§…>³†ô¸ãU¾÷dûSî>Š{¸èÕçS‡^~žñïUŽqÓ¦«,Ö«,­V¬­V¬­nîÊ	»»(&Ê	€2‚zÎg5º[ð´jÉ1ړ÷Kï«èátïmrú6×Ïo¸WÇà(Id¢ÚH=º×žß%{nW¦¯§^›íÑ1Ÿ=ôy¯»×O©ÌïáôvßµÍãÖ½ˆÛó4Q|ý]u×zôxÃê·œonc5Ò;¶Òœy«o¢þWé¶};«=ëáüõÚ´ŒÍZ¹8˕£ž®­u§³Îøe„ƒ8µ­ç¶Ù[u¯Èâ¸ßÊ:qûo›ŽÛö'bv_³è={ÏgXìûó33ÌÏEyäm”¶ÑÊ¥Hw#ʐ×ué9¡k_J%$Úêª@®mԗ†µìÛ¡°óú\ëÓyõy/³ÂÞj_i˜99Êß{Õ­}}å+ãônÞOO/œ~[ת¼ÃT˜j^­§<§¿/y{°Ã׿>¾^Ø~tjÈf´jð8¾5îž©Ýïù33¶¦ážÿ_lÛmo¬Ð(0Û¶•ÝŽ“—fI$–‚’q7%ÝٖThÅ$ŠÔRìˆP±bÓÔr0,ÝÜq´í&£¹äzÄ ÉÐV4 zÞ°ékƒ2°@ ÀÇ low¢p÷­hUWr˜#W@ÑÂ1ÐP¶I;‡.À 4J˜»‡’YŠIÐò4H¢A š$µ¸—µº^nMÒ wÚ¼­¯g‡®Õ]¸ªí^‡¡ÃÈwæcÓì»Ny[”ê¾#㕕îžììÕrö7<pø4žÝ‹ß—Á/†rj¹¯ITø8I½r{NY†òÞ¹-ϵ‡+.àíEÎ5IÙû'¤ØáqÀmïàÉ«w—‹—Á4×»á=õ"À¶2]¬‚ÆeÔï¢p…ŒàH•’…UyÑ¢¡P׎b
U𯅶½ÍôÛh°”ê¶Í3.ÎÍ^ÕíÃ
Ž_4~Uùa‡›Æ{³ªÆ«Ò|óÞÓS3M534Õ£3M_8½Vs‚ᘻ´µ˜¼ã©•µpÃv訚¦¨6¢ K³DÏ`PA;´¸’I*
ªªªªª»*Šª¸r.rÿ"ÊcmkZÖµšf׈¾'…ଲ²ü`r
«kµ6KÍ9'²¸E8MNù¡Äë1`LÂsD°(Ñ4890eb	Ub̓p\-[åkÕ¶Ì֌ÆM­£»/§*íÏ´õjÚï_nuWOª›Õ¯U³¿e5¾·¶p8“Ó«’bmå«×/ÚùjËýóáÕW9Î=FO·ìE÷F)`îàøòƒFþ¨‚œÿ»Š8HœÆDL ‰¨§%cö<4×õ†a–3¼o§mK¥Ÿ,Wðê^y¢Äb3—»Ï>¹yrìðõÞ¢½{µÍȈþ­½Ûo¹·[Çå÷ýÓ®Žºº6£gNÕµm¶Õ_Kë÷ð>¸}žô;ö½Á¯^›Æ®¯®×ïׇ~àH Å2"B$$¢Jðç"3Û¶ú¾¥®¯{ðÕô³}ÍoÀHKʹÀð×$†&fǐñÏU£«ì»cñ>¯|¡á‡–ŽìÛ¿{l<]Ôvçu£˜~óMM?:Ÿ1€H3U˜€#0&ÓçùùÏ	½Cè/£9+ý
=4¸.o¾¦ò´&­éb4+¡þEêà~eÕv®WUÊûû›Ù_(§Î¸OÁºwv]Û»¾Ëœv{)SmM'«|ßÝ®ß
;ú¼
o§9˓…ßšÖ»y¹óc8 ·Õ¬«œÃ|̲æX—£˜¸Áú%~Œù5oKi5ñÖö×ÝSò¿)Ù6“îAÕOÄÇÏ×nþÎð»ë½Õ;ëº;Ö%è/Wνe†Ó¹±ø¿ž>”ÿ¿éÿ܉6DŸêŠ?—íÿïÉøhoØÓE€e€mÃóûŘ4žb»@¤
Ý錵DÆf1‚€@ãÑ͵¾fµ¾o›9¿k&ÕËdùÚW勒½E•;¬ÂA8;éc%o…ø´Q‘¸íJµS¶¼†‰ÿÀ¹C­M…Ü‹*¿Réˆð¥‰?éëN//Ô:Vâï€hï•Â¾»Š¢Õ9“±VŽŒ@¼jûÎýÿryûËÕ
êzñè“Ö9—º¶(y®$J8©èþ)¢åHr‡j¯@KsňÆ´˜i¬\SJð¯
mϹÏÏuKÕÏc«+Up­VÖbï1/jX+áV¡”ê|Ozz«ºWë[²¼^ßËÊË3hçÊ»"¾Óòãm»àî ›};,̳2ÊýyòGŠ8eVaX+<
–p¯Öš<X§v×e7©ö¨ý4ükDÕН!b9R¿•!‚U‹*U”†ÄT²‰„¯Oœª¹©ý¢0Û r_¬ž$좽>
õCי™™™™™èªÿ¦x NJ.¯“ÓŸ·ûó6Ûmlà$̙vH´ÊFÓ7ƒ-‚á·“>1aŬ'3}÷ÓÞ¿Vöåë·O–“om승¥´y§Ôõ>`æCœ«¶2Ì1$M¡VÊ:ËâUÅÌڊ´ùŠ\Sèo¡8&²°}¶O7ñc31±{¦ÄÚ­»+°Ìñ:D6	•W?G³ÏÅN^iÐâ¯áZT›']ÍÏÓåeŠØP¡^'ÝÛÒI’]Wˆ»»ªvM߈ñT'/ys;˜˜ö_T¾ÊZM7«vUŒ&^ÕázÝ£…]i„=ôèéºRY+«Dø%Â&ÖÒe”eŠsYC¬~%2¼n8;Ð6§Š¸Ñeå…&+	ÚIŠ›#(+(ÉȽ…4)`ʛI`#Dʘ­YJh¥o‰Fª`–’hEײù:'ߕ–S3ÄbÁ™Y*5&¥f•+Q­Þºª¯{ôÀB(¤‡ÀÈiRù-?#R8°Ò	 ‚l ÁW.]Ú¨TWaÉl3–²,#·O½7‰¶É	ß/éIq{WDìQí“‹“8˜.*öôõy¬»J>G›+«ì®*ëTçÝÖ¹'œ½KŒ±OI.®¡Âœ—LÌc2›"^'{½ZŸÜÑaºBd{‘ÒAb¸É}ªhö‡‘j»+]ŒVUxĜÞT‡2Ø]z	»KEvŽ1Ã;ôv×Ym[J–Kº*¦U4>â>ÔNëtC¡zNU2>º­B÷v9ŽÂZŽniz	ÆUÄxʹJ¹píqŒv–¼ø(oWY\{d‹Fyjø5ú·—/Š¼*ðȔ‰"Ÿ&ùnC>Êo°…Þž¿5°åwßMK+âR½ÜJç¥víã²âp8Wÿ2°pqöcÓÖ"`ØÙÂär¢£û·´Øy˟¹]õ^Œð$¿pêÕÛ|~Ù|¥ô0¸†Üè¯)Mär¯Ìv‹Æ©é@å.I7:ØRàMÕy‹ƒy_m.ˆ½‰±ó|ö+È®«µÇã÷`BrIsœ¹Ç3œã—8Ù¯¹—)8Ù&,‹,K…$ãï@ÙVï¼pÙ>ê[ÒØTîEÉ)ÍXsbN	sù¥²žËi-@É,bS×UsB£ñ½ï~}>¦fc61ôÑÎM¶ØÛlŠ·›Ë·‘æ<_<ôݍy“;éw¯½¡Àû;|.ùJн]2:ÃhÙl5)‚à*j¦Õ8ÃêL<Ø£4ö3¶ªå*û¬‘¼qRʾE®iWw d¯bKi/[Ö)âPòÑ9Ñ<ÓÊ}ƒNæÕ8*Uª§Š_›„Æ+…;RïõÝVã%TúÉÙד:fkZÖµ…
VG«6IòG4ôF\iyR⧦˜Núž
º|LÆYð/(o$ü—Ï
ð²”¼bö¯J…Øñ=î—Äáe[-ü†T¯ezw2î1Só?þÚÚ²ß	rõÃ2c3,žàø¸¦Â˜´Æ?>(˜O²úÉò¦«jUˆí¸ªýÄ\Q?f·ž^`ÌfY™ŒÃÔñ‰Ö§¦›mKˆ½Äï§*÷
ü³YñK²›ªž!¼¼¤ñçÄ°ñi],fXÐd.2莜s,Ìû®}ªlowZ¥£…Øî“·QºæÍÉÜ	ÕU’15LJÔ¬§‹òþËìlÞ»åxxÚŒ¯Ý Ý È$šnì6á±$žDÜY˜1¶2Lü^µixán÷cC^º•Þ´ãq¹Âø¬uU«éN¤åââöNÁm\ìÛÓ¬q'BÌ̱ž”rrÚh™‚ÒU__ehCŒ?/vY™™œ§$ǙÒJ¶+ÈêpJÖE'¸_®ûÎUq:­+t±z‹Æ’´]xžéåò–嘺“X§q5R¬¶Ð¥¦UF‘Й.ÒÎq燣e\|N0´——=b·F¤[ê¡ZÈxWâËWïkîtõŸ=žÇ/r‰Ê÷f‡®6îÕáò÷mÿ33kSè²H¸Y ºb³$ºÌ®ù©¾E¢uªËâý
›ôh5àöj—ff1™«™9ӌ‡e•Ð¡ËB
©ÍÝ&ÅHâʜEÆS‚“¼œ¤´« `Ú¥Z(j©Õ

…
ØÐ?š]U$»Ae¶Ùޒ%É[/j&(óNú—„§ž$×™ªnv±\G,ÌÃTð¶ýîuZ6ޛæìÍå×]wvç]¡»lßï¾Û÷®#b†…µdº âšFÒ]Üӄ¡ð)sŸŸ—Ù^¡qŠc±t£ÓÔC¡wôN±ªlEÜ£Ó]kd^Nî©ú¾[kZÌÒKÜ[~Ñwwe·e6
%?É_Pº®Qªóª¬†2–6+FÏ
±»c½•4ñ«ïëMäÄõfe™œXعàeµ¡¡‘kI±•‡**ñ¤¯J7Wµt¦Ô>•0X&¢Þ¬«¹‡á_–¡±Ñt¥ô9½‘Wº¤¯Ð.þ•zÉzž1Ñ^U“µ-«á³©óÁÁ¸$:çùìãHyÒ¼ÆßFiÝÙZ+â;Ž‹j;ŽóÍ'|_'·í•Gè^#ê¹_µÞ'¤NWo¯z6=L	(O½žêõ'$tª}
ç¬t§.›“Œ>”
¤á.Ë#-éFÞɧ
»I’¼?¯-;ë¼ÀðûiÞw=ԇ¯¹;ùøè²aŽ;–Û@ejš¥W¹W}½Ë]­wµµÖ˜g(´;1#ÖL‹páZŒÂkÈÔ¬%øø^†zµ~âÌξÏ\°'–*¤vñø0Û,™2}+32xá˜	9kZr)¬Í~
¡@Çðc}t,8!:¯eP¬ —­yYW1ajʲÀË,*™Tʦj™ªe´²Õ»çšFÖ#,å\¨{i—ªé<ǵJvïKÓ­¶fÙ¦ØÍm³Zۊî~/֘Cpùê_U:ƒ%ÛÖ®.Fþ–ffffàóÜE¶ñ•RøŸªMÈ­’å©Kml
ûþ>êè—IpÌÁŒÌÌÏA9^úpí©X#΋{•u”·;#ÅG`}:•ƒ°˜QאַÅÜø¯–¤6e»h3,fgmKÐ |sð—½Û9\¹v_~óÏ//ÑM¤Í6ˆ»Énh!rDì%nÔœ2àè(€ŠB ²ªŽ¨÷„|P ô@›QÖI6" ÃT2®²ÊºËã8ž1ªžÇj¼k‚Œ5X´X‰rü#‘ÊRÎR—¯$æ®Ô–ªÄœ'‘CØÕk©é[~tòNÅÆN€èd¯"®8j^ÉÙ£«¯JW»ó3›>¡Äª¾‹ãG/Â9ôô¤žD7žuª™H`ï«aÃsC¼ïc/†Ÿ²Æ>–hÇæ¯E—º¥y§§Ýö§nMüGue!¾¹8$µSÀCaa”£Ñê¨6÷µ¦³33; x<”7Q±ìõ×-ê·Â™Êºw©u—Wyäúªö°Ì³,ÌÌÌÌ}Ïãx¼Î¯¡m²60ãejS$aɤéb+z•êŒ-ŽâxKj¸Ø臭k‚0í‡+êt8cÒFÎèíò”¹IûÓim_§Rï„ãêwÏfÛÅÙ]¶ØbÄÎÎU"¶¡¨i`̱nãõϏ¯=^¬gV›m³fÚjì^Ô`ÄÁ؝#	‹	óû4ˆìN)bjœ/_UNf|“iu#°eUÝðÓ,ÌÏ}¹CеZyƒbUàQë4r©Îß.ñSRù{Ëô?šwQõO­ø=UèëKú«ñ>›žÜpßWš>¨âw֌®jè>їàL“¬¾UÑG°û«ÈuVձDžWÌæ\+NE1R´¬X°°´«ʧæå¶Uƒ†ª¯ŸŠ«¬0SðÈõ…Œø›o[Ž]ÊÚ¶<ŽT¶6&ýõߌ}˜·¤žš§KioÍxíÛËÑçJµK^ՙ¦MËHF¥´[%ž¥W—Å'1â2N¦SÝ]eZÆR\(qäâ£u8œk¬–¤ñ¯´áÜ+¯´®Ç]ñÛíúþ]Ûk6¯¨ärIj®ÐI$¸D»»’I†9‘„CNII(d’îF›`]·l܆\ˆ	$’ËjBT‚ˆDJŒËC.D’†F“‘ku^ªªè^‰‰‡åÕ--Mj¼«ßÖR´½¼Íç*wǦ¤ûTòA›ËQϦÊffad,0ÌðÒ³i-©„Ú¿Ev(÷¦Ø·™8”dµ¢4M’zÓ¸8*½C±66sèMÍê¹£M£ÝÇcjœÍžµ7µáR‚€:®ûk¶ÝUÊ·jˤ|ͧÒEÊ=§:ÜÕ6âU[ÍÁ<ªÚWboê‡`ÑÆ°Âa‚á_ҐÜޑàͬԅîuØSiwV«Ä\é)Ä´WZ°FOÝ]Nììw*[UÌàqßss±åW%5Å\jå:¸.sÇÜëo‹«{6»×5[oM]ï{žd€ uv­6Úë›yn5â5ɆI™|ov™b̙¥:ÑñÎdfɉaÈÊìPí•+cDɕCÐ|~ç¾»ú¼kjæsI†VXbw“caäŽäôVóx´œŠÒÌ30Ë,dÊf™™™dÌð8£ÜoDé#^g5óVӁèu.½\†–ªí)ðç]iÿúÒ`ý§ðŸËïûþßáøë‡pá®#‘2[¹¶I4~   4jÚ(gõ’I"Г@Àz8~úÙ½ä@
Â|wÎOˆqý•ÎÐ=)€€4+(MlÑ4´?bƒžže¦ÕâÊ6±k[I´Åo8Î3cøöÏièþS ÿÐî'IÌòÞñÃüü¹%ª8ó?ß
½Y\ß2:e¬>éÁ8+»ì™^“BµI
Þç!Ìä­ý_òÝégñþsç¯ÛS$ô ÷µîކ1ŒcÆ+æõWÙvûºÖÐy>ײ¾çO|¶þøöG¾¢Ù—ýPzÓúXð¶o‡;Çù¾ŠÝÃ,Ë1zªùë—LbŠ)1ŒložUáMW7Š®žòT1ØᇍeÅ}>
_ ¸ݹ·¹^vÞmýq™Wº¿Lìvå™m5©Îk–ÍaýÏÎ58µÈpÖÉÈúR·±$2çÿd”üiò}våß_wb^ÿÑþ¿ï÷<Zâ֚kÒ5ä€4ÖΞæËm¸&Kǀ:ñB…Tå7›Olþ‡!û8WlØɈõ'Zç§OqÂ|Ž*&vë5‡DÃñãë†ýxkmòÆ31nžÁ½z›Å„½R_ó‚õlÖv\0ø¿1öo0ärk“½ÇþZÕY¶«Óà
Ú 3P‰£FµQ5*ZÖf’¿¿%-âL!x$í
]ÏO>Íz_¯aTè ÇîÑ£Ú»»I@US(Ü`&
`х…•˜¨æxŸ$öõGÌ}“nŠ«‚sÔ+ev÷Û^ÿºž˜‘Z5QµkU¬F¨Šf+2ƒö÷
ìzðéáQ*Fb̃ø{Eï¹.?~,ŸÉ/ézJêsäå–e™sÛê6'™ýæø2Ñé÷ì
N›6½/3°¡÷¹|b\d__÷<ü;þo¿•¯=(Ÿm÷_:ǒÇ;šÒÚ~}«ñŒ{%­aÔ%¹
rIË'ªÉ±30,Ê8c<xîásåML,NMN¼x¦ç[Ã';µiØwG¸èzòÌ^7ç•wjՄAD#Î"D„ OÙ6P¢¬ë¿G°Ç7Ò	 ‚®7…å@õg:ð}qÃ÷2áxb™ˆÂz\¥I£‘ÕÓ3Ž¬žk‡ô[êþõ½í‡gÂxr—âOk•V°Õ¶m븂“çä¯j]|OêÊÇ/ía´ž.ù:ésíÇ3/6š3o_	Á‹=xŸÁsæþkáÂy$çrÇO{#pó:òÿÛ»³ã™‰ð¼'l_Òó:¹{{·WÚþIÓ؂Ëþй§¹½{*ú2a¥~¯™œóÒ¡_ôppÆc=«|¾ÙùŸá?—Š{)Sì+D©4gëéꘝþ1Qç6WØnƒ’ ¸".[R
Ù˜CL¶Ù¶´ÓZkff2}\i²\eûÎë§	Àéúvo†ÊÞrSk|fYŒÆc1½7Œü‡å]¿±Íª¶=†¹|5«ê ÑûôƒM³6Öµµ¾µ­5¦—hblwm8”xGæ²½çÿæÌ?_?ÞH8iÊ3{m´]²Êƒvõïíwe™f]Ñú_™|jzþï^="À‹€j]Õòr°sœå%€r"@^0ä¤l¿Ïwhô'™ÞÈg£å¶f¶ÖÒjm46œ×©Û‡Ý<m–eãõ{*z¾zƒÝ÷âÙ'ÜïWøuve™f]^0/ÛHoŠXƒÛìþˆ<H/Ÿ!J°~¾‘|™v+öò>çN7Ï?—±['®=ÿìúPz~/¥
:>=k̺¢/¥çÓgoõÕ[_§ä½Lb"1›Ñ·®¾ëñóœZ«ßY¬Íji2þã\y§“›š·ùmf33|ç‹êû¿âËÎ=K›;ñŒfbþNúö+ª=¼È{<›å™f_š{¼Æ{·ŽfW:ÆgY…ïÞ|OÍ^¢ýˆ:q™—Q‡ŽÜD3Œº1cV©®ÑTm«œâ…JÍM*÷*ïø2¾9±štÃëύ‡ŒzípõðÖ7¶¯F!-'«s‰â{o]®ì³,ËÈm˜Ë'60²vìŽsN¹™…•²_mËëœ.òTŸídó›n]uÓ_–‡@:0æ°"-œÌ"R¡€UAxÏdæyMŽó‘©ÔØòœ'4&jÆc&’¡åòqºÍåã_çþÞäðvR{³/ó;õ¶ýÎmvRc¿uÚPЮw¤ç«××-m髞UàÆ""#7Ž¦­ç{+Ê|Š•raOVÿå*;e˜ïÍsÓl»òf5‰Fråµ­jÛÛJÚ'3Ÿ5ûŽ“‡‹W£û9¡Gû ìt̖qA¥F).˜E'‹¦ãå»jîUÇE۰ߓ0ú•Ò*#Š’11É^lMºì̳˜ÌÉ¡ÌæÌ9Ó
 Ï7©ÅrÞ´­åtgprsÝVèVyŽôv|ý¥„U@>.û¤Ù$‘wnÎÛm­ƒi´Ò˜Ê’ø$£=Ù[2½¢³í½ß©®\¢àƒUƒ¾¼@:ò¸î^—®Vemó̕øÞ¿ë¶7‘Ù>_IR^¼@2ÎzqÍñ¬Û~33tA“¶Ûn
÷Û|ky±°rÍâƒ|Ý¿ï}©Â¹ø¤§8ÊCšÚó}9xú}Ÿ‚³‹ÇÕêõÙ{ŸÓÕ‚.(1ñ{¿2G²;ê'#•»ièˆ0DïÏá¢÷áç9ÅU8‚ˆõZšžãhëÙaÖ<8§ø=™™‰ËôY8e™}GN¯„é<ÃWÝa2qsî»Î¡Á{_PáAù
üœy¥sŸIÙýFZ§ê6þ}Ü°³,g¹8p‰æچÜ\{:¿»»ýè>”}/Îã^ĐðsÅD·ÉÂÓ~¨=K~®´â­¿å×ÝaíñdãÓø»ëª"ÙÁòAÎy ²s¢ÞûI‚bÔûŸ…q6õVžXvîƒ??íÚFÔïßُÙ|ÎcɊ̪ÓÒÃiØÙI@Õ
0B"ˆH߶C¾O»Ùý+rªó=/ƒ<ŠÀ"*ÕηV\–`ñhíC:sоlç:e¸5­Ø2‚PÊ<ãê1S»³Â«±à{ÿ“¯o£Žf¸6á¶ÚÛm¦ÓiÃø|îÛ¸|Ðë;z÷²2«»å½èèjà;o-›GÛ£ü¾ýkZk31c<©‘vÛg—m¶@T^Tm¶1‘vÛgŒ¹rm°9§9§{Ñ^Jæ¼Q$IDDDDD”””D–"I$ˆ‰"))(ŠJJJJ"$²RRQDDQIDQDTEDQIDD–"±””””’Q””””DDIE$”””””EXŠ$ˆˆŠJ^îßmÜKÏnµwûwzêÕ^ÛV­áßæ¼®,cÆ(ÅÂ՚û<µ|»zúy|8mÃоÉ,¨È¯–ˆ+â”8/
w2»,¶Ä<±WïÕEÏ„ºôÙ¦c35σñAÍdø¤i:QպՃAê_¡ïx‚A\¸>­øæf,ÌÌ_o3Q´i]ÕzUí,«èâƒ"ÔëÉÁìÃ1fm+M°ß\y®¼M¿8ûÐjƒŒ‡»³T†••zwë(Õàâ‘þGjµ¿3ß{ì˜upÃåNh‹ÁY•±øë/{.µçÕã½vª÷+xW…écø¼¾-r½wíùü?ô×£W½á½u­IÙ9-Ê'W$
p8¬¦ÛÖG„üTNîïTáìd,Þnµèù±—à~ٶٙŽ”ØwiÓsg ã·~^·•˜Ì™ŒÇâmª}}tœOˆëÅ9סQç½:ÜëæWFØ\ãD?óTÒpk@íëÕ²å£môß[lÛmm›>Ä#‚0ÈTÊ]üì4øÌ^Ó
{Zq9h9«ôž§q*èJ¼ôXíå–ùk†öµøzʧÂqãÃ30wèüt\}ÞÈ崣ꮉy¿´õä »’)„…Ø^[¸
Stefan Reinauer - 2010-08-30 17:04:30
On 8/30/10 5:47 PM, Jens Rottmann wrote:
> Hi,
>
>> In my last mail I described some restructuring to make (user visible) options
>> in the board specific Kconfig files possible (i.e. don't source from within
>> choice/endchoice). Another change I'd like to add is to move MAINBOARD_VENDOR
>> and MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID to the vendor's Kconfigs.
>>
>> I'm going to try and prepare a patch for _all_ vendors/boards. If someone is
>> already doing this or has objections or suggestions how to do this better
>> (like how to avoid the dummy option!) please tell me before I waste too much time.
> Ok, here is it. Turned out larger than I had expeced, so I bzip2ed it. Hope
> you like it.
>
> This applies _on top_ of Andreas Schultz's "[PATCH 3/3] support for Lanner
> EM-8510 Board", so his patch doesn't need to be changed.
Very nice, thank you!

This significantly reduces the number of changes to Kconfig when
creating a new board, starting out as a copy from another board.

Checked in as r5754

Stefan

Patch

--- src/mainboard/lippert/Kconfig	(rev 5739)
+++ src/mainboard/lippert/Kconfig	(working copy)
@@ -1,10 +1,16 @@ 
+if VENDOR_LIPPERT
+
 choice
 	prompt "Mainboard model"
-	depends on VENDOR_LIPPERT
 
 source "src/mainboard/lippert/frontrunner/Kconfig"
 source "src/mainboard/lippert/roadrunner-lx/Kconfig"
-source "src/mainboard/lippert/spacerunner-lx/Kconfig"
+
+config BOARD_LIPPERT_SPACERUNNER_LX
+	bool "Cool SpaceRunner-LX"
 
 endchoice
 
+source "src/mainboard/lippert/spacerunner-lx/Kconfig"
+
+endif # VENDOR_LIPPERT
--- src/mainboard/lippert/spacerunner-lx/Kconfig	(rev 5739)
+++ src/mainboard/lippert/spacerunner-lx/Kconfig	(working copy)
@@ -1,5 +1,7 @@ 
-config BOARD_LIPPERT_SPACERUNNER_LX
-	bool "Cool SpaceRunner-LX"
+if BOARD_LIPPERT_SPACERUNNER_LX
+
+config BOARD_SPECIFIC_OPTIONS # dummy
+	def_bool y
 	select ARCH_X86
 	select CPU_AMD_LX
 	select NORTHBRIDGE_AMD_LX
@@ -9,24 +11,37 @@ 
 	select PIRQ_ROUTE
 	select UDELAY_TSC
 	select USE_DCACHE_RAM
+	# Board is equipped with a 1 MB SPI flash, however, due to limitations
+	# of the IT8712F Super I/O, only the top 512 KB are directly mapped.
 	select BOARD_ROMSIZE_KB_512
 
 config MAINBOARD_DIR
 	string
 	default lippert/spacerunner-lx
-	depends on BOARD_LIPPERT_SPACERUNNER_LX
 
 config MAINBOARD_PART_NUMBER
 	string
 	default "Cool SpaceRunner-LX"
-	depends on BOARD_LIPPERT_SPACERUNNER_LX
 
 config IRQ_SLOT_COUNT
 	int
 	default 7
-	depends on BOARD_LIPPERT_SPACERUNNER_LX
 
 config RAMBASE
 	hex
 	default 0x4000
-	depends on BOARD_LIPPERT_SPACERUNNER_LX
+
+config ONBOARD_UARTS_RS485
+	bool "Switch on-board serial ports to RS485"
+	default n
+	help
+	  If selected, both on-board serial ports will operate in RS485 mode
+	  instead of RS232.
+
+config ONBOARD_IDE_SLAVE
+	bool "Make on-board SSD act as Slave"
+	default n
+	help
+	  If selected, the on-board SSD will act as IDE Slave instead of Master.
+
+endif # BOARD_LIPPERT_SPACERUNNER_LX
--- src/mainboard/lippert/spacerunner-lx/chip.h	(rev 5739)
+++ src/mainboard/lippert/spacerunner-lx/chip.h	(working copy)
@@ -20,11 +20,7 @@ 
 
 /* Based on chip.h from AMD's DB800 mainboard. */
 
-#include <stdint.h>
-
 extern struct chip_operations mainboard_ops;
 
 struct mainboard_config {
-	/* bit2 = RS485_EN2, bit1 = RS485_EN1, bit0 = Live LED */
-	u8 sio_gp1x_config;
 };
--- src/mainboard/lippert/spacerunner-lx/mainboard.c	(rev 5739)
+++ src/mainboard/lippert/spacerunner-lx/mainboard.c	(working copy)
@@ -29,6 +29,13 @@ 
 #include <device/pci_ids.h>
 #include "chip.h"
 
+/* Bit0 turns off Live LED, bit1 switches Com1 to RS485, bit2 same for Com2. */
+#if CONFIG_ONBOARD_UARTS_RS485
+	#define SIO_GP1X_CONFIG	0x07
+#else
+	#define SIO_GP1X_CONFIG	0x01
+#endif
+
 static const u16 ec_init_table[] = { /* hi=data, lo=index */
 	0x1900,		/* Enable monitoring */
 	0x3050,		/* VIN4,5 enabled */
@@ -41,7 +48,6 @@ 
 
 static void init(struct device *dev)
 {
-	struct mainboard_config *mb = dev->chip_info;
 	unsigned int gpio_base, i;
 	printk(BIOS_DEBUG, "LiPPERT SpaceRunner-LX ENTER %s\n", __func__);
 
@@ -65,7 +71,9 @@ 
 		outb(val >> 8, 0x0296);
 	}
 
-	outb(mb->sio_gp1x_config, 0x1220); /* Simple-I/O GP17-10 */
+	/* bit2 = RS485_EN2, bit1 = RS485_EN1, bit0 = Live LED */
+	outb(SIO_GP1X_CONFIG, 0x1220); /* Simple-I/O GP17-10 */
+
 	printk(BIOS_DEBUG, "LiPPERT SpaceRunner-LX EXIT %s\n", __func__);
 }
 
--- src/mainboard/lippert/spacerunner-lx/romstage.c	(rev 5739)
+++ src/mainboard/lippert/spacerunner-lx/romstage.c	(working copy)
@@ -41,7 +41,11 @@ 
 #include "superio/ite/it8712f/it8712f_early_serial.c"
 
 /* Bit0 enables Spread Spectrum, bit1 makes on-board SSD act as IDE slave. */
-#define SMC_CONFIG 0x01
+#if CONFIG_ONBOARD_IDE_SLAVE
+	#define SMC_CONFIG	0x03
+#else
+	#define SMC_CONFIG	0x01
+#endif
 
 #define ManualConf 1		/* No automatic strapped PLL config */
 #define PLLMSRhi 0x0000059C	/* Manual settings for the PLL */
@@ -201,4 +205,3 @@ 
 	/* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
 	return;
 }
-