有关vivi中 nor flash的启动问题

[复制链接]
3355|3
 楼主| mafei20023 发表于 2008-6-17 21:27 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;代码看了好久&nbsp;,&nbsp;在ads下&nbsp;也可以读出am29lv160的ID,可是&nbsp;&nbsp;<br />放到&nbsp;vivi&nbsp;中&nbsp;&nbsp;amd_flash.c&nbsp;&nbsp;中却不行&nbsp;&nbsp;,vivi中将nor&nbsp;flash的起始地址放到了&nbsp;0x1000&nbsp;0000上,&nbsp;放到vivi中怎么也读不出ID,而是&nbsp;jtag烧写到flash里的前两个半字&nbsp;0xb,0xea00,&nbsp;&nbsp;而不是0x1,0x2249,请高手明示<br />
 楼主| mafei20023 发表于 2008-6-18 09:57 | 显示全部楼层

amd_flash.c代码 probe_new_chip

<br />#define&nbsp;pFlashAStartAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((volatile&nbsp;&nbsp;__u16&nbsp;*)0x10000000)<br />#define&nbsp;pFlashAUnlock1Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((volatile&nbsp;&nbsp;__u16&nbsp;*)(0x10000000&nbsp;+&nbsp;0x555*2))<br />#define&nbsp;pFlashAUnlock2Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((volatile&nbsp;&nbsp;__u16&nbsp;*)(0x10000000&nbsp;+&nbsp;0x2aa*2))<br />#define&nbsp;pFlashAManufacturerIDAddress&nbsp;&nbsp;&nbsp;&nbsp;((volatile&nbsp;&nbsp;__u16&nbsp;*)(0x0))<br />#define&nbsp;pFlashADeviceIDAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((volatile&nbsp;&nbsp;__u16&nbsp;*)(0x0&nbsp;+&nbsp;0x01*2))<br /><br />void&nbsp;send_reset(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock1Address&nbsp;=&nbsp;0xaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock2Address&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAStartAddress&nbsp;=&nbsp;0xf0;<br />}<br /><br />__u16&nbsp;get_manID(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;__u16&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock1Address&nbsp;=&nbsp;0xaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock2Address&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock1Address&nbsp;=&nbsp;0x90;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;*pFlashAManufacturerIDAddress;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(value);<br />}<br />__u16&nbsp;get_devID(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;__u16&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock1Address&nbsp;=&nbsp;0xaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock2Address&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;*pFlashAUnlock1Address&nbsp;=&nbsp;0x90;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay(DelayLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;*pFlashADeviceIDAddress;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(value);<br />}<br />static&nbsp;int&nbsp;probe_new_chip(struct&nbsp;mtd_info&nbsp;*mtd,&nbsp;__u32&nbsp;base,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;flchip&nbsp;*chips,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;amd_flash_private&nbsp;*private,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;struct&nbsp;amd_flash_info&nbsp;*table,&nbsp;int&nbsp;table_size)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//__u32&nbsp;mfr_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;//__u32&nbsp;dev_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;__u16&nbsp;mfr_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;__u16&nbsp;dev_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;map_info&nbsp;*map&nbsp;=&nbsp;mtd-&gtpriv;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;amd_flash_private&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;temp.device_type&nbsp;=&nbsp;DEVICE_TYPE_X16;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Assume&nbsp;X16&nbsp;(FIXME)<br />&nbsp;&nbsp;&nbsp;&nbsp;temp.interleave&nbsp;=&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;map-&gtfldrv_priv&nbsp;=&nbsp;&temp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Enter&nbsp;autoselect&nbsp;mode.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;send_reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;mfr_id&nbsp;=get_manID();<br />&nbsp;&nbsp;&nbsp;&nbsp;send_reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dev_id&nbsp;=get_devID();<br />&nbsp;&nbsp;&nbsp;&nbsp;send_reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((map-&gtbuswidth&nbsp;==&nbsp;4)&nbsp;&&&nbsp;((mfr_id&nbsp;&gt&gt&nbsp;16)&nbsp;==&nbsp;(mfr_id&nbsp;&&nbsp;0xffff))&nbsp;&&<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((dev_id&nbsp;&gt&gt&nbsp;16)&nbsp;==&nbsp;(dev_id&nbsp;&&nbsp;0xffff)))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id&nbsp;&=&nbsp;0xffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id&nbsp;&=&nbsp;0xffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.interleave&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;table_size;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((mfr_id&nbsp;==&nbsp;table.mfr_id)&nbsp;&&<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(dev_id&nbsp;==&nbsp;table.dev_id))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(chips)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Is&nbsp;this&nbsp;an&nbsp;alias&nbsp;for&nbsp;an&nbsp;already&nbsp;found&nbsp;chip?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;In&nbsp;that&nbsp;case&nbsp;that&nbsp;chip&nbsp;should&nbsp;be&nbsp;in<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;autoselect&nbsp;mode&nbsp;now.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt&nbsp;private-&gtnumchips;&nbsp;j++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__u32&nbsp;mfr_id_other;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__u32&nbsp;dev_id_other;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id_other&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wide_read(map,&nbsp;chips[j].start&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map-&gtbuswidth&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDR_MANUFACTURER<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id_other&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wide_read(map,&nbsp;chips[j].start&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map-&gtbuswidth&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDR_DEVICE_ID));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp.interleave&nbsp;==&nbsp;2)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id_other&nbsp;&=&nbsp;0xffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id_other&nbsp;&=&nbsp;0xffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((mfr_id_other&nbsp;==&nbsp;mfr_id)&nbsp;&&<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(dev_id_other&nbsp;==&nbsp;dev_id))&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Exit&nbsp;autoselect&nbsp;mode.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_cmd(map,&nbsp;base,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMD_RESET_DATA);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(private-&gtnumchips&nbsp;==&nbsp;MAX_AMD_CHIPS)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;Too&nbsp;many&nbsp;flash&nbsp;chips&nbsp;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;detected.&nbsp;Increase&nbsp;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;MAX_AMD_CHIPS&nbsp;from&nbsp;%d.
&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map-&gtname,&nbsp;MAX_AMD_CHIPS);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chips[private-&gtnumchips].start&nbsp;=&nbsp;base;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private-&gtnumchips++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;Found&nbsp;%d&nbsp;x&nbsp;%ldMiB&nbsp;%s&nbsp;at&nbsp;0x%x
&quot;,&nbsp;map-&gtname,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.interleave,&nbsp;(table.size)/(1024*1024),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.name,&nbsp;base);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtsize&nbsp;+=&nbsp;table.size&nbsp;*&nbsp;temp.interleave;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtnumeraseregions&nbsp;+=&nbsp;table.numeraseregions;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Exit&nbsp;autoselect&nbsp;mode.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;send_cmd(map,&nbsp;base,&nbsp;CMD_RESET_DATA);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(i&nbsp;==&nbsp;table_size)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;unknown&nbsp;flash&nbsp;device&nbsp;at&nbsp;0x%x,&nbsp;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;mfr&nbsp;id&nbsp;0x%x,&nbsp;dev&nbsp;id&nbsp;0x%x
&quot;,&nbsp;map-&gtname,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base,&nbsp;mfr_id,&nbsp;dev_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map-&gtfldrv_priv&nbsp;=&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;private-&gtdevice_type&nbsp;=&nbsp;temp.device_type;<br />&nbsp;&nbsp;&nbsp;&nbsp;private-&gtinterleave&nbsp;=&nbsp;temp.interleave;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;i;<br />}<br />
 楼主| mafei20023 发表于 2008-6-18 09:59 | 显示全部楼层

amd_flash_probe

struct&nbsp;mtd_info&nbsp;*amd_flash_probe(struct&nbsp;map_info&nbsp;*map)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Keep&nbsp;this&nbsp;table&nbsp;on&nbsp;the&nbsp;stack&nbsp;so&nbsp;that&nbsp;it&nbsp;gets&nbsp;deallocated&nbsp;after&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;probe&nbsp;is&nbsp;done.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;struct&nbsp;amd_flash_info&nbsp;table[]&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29LV160DT,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29LV160DT&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29LV160DB,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29LV160DB&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x004000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x008000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x010000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_TOSHIBA,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;TC58FVT160,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Toshiba&nbsp;TC58FVT160&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_FUJITSU,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;MBM29LV160TE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Fujitsu&nbsp;MBM29LV160TE&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_TOSHIBA,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;TC58FVB160,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Toshiba&nbsp;TC58FVB160&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x004000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x008000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x010000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_FUJITSU,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;MBM29LV160BE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Fujitsu&nbsp;MBM29LV160BE&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x004000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x008000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x010000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29LV800BB,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29LV800BB&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00100000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x004000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x008000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x010000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;15&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29F800BB,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29F800BB&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00100000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x004000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x008000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x010000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;15&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29LV800BT,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29LV800BT&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00100000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;15&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29F800BT,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29F800BT&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00100000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;15&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29LV800BB,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29LV800BB&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00100000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;15&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_ST,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;M29W800T,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;ST&nbsp;M29W800T&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00100000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;15&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x0FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_ST,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;M29W160DT,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;ST&nbsp;M29W160DT&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F0000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F8000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1FC000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_ST,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;M29W160DB,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;ST&nbsp;M29W160DB&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;4,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x04000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x004000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;2&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x008000,&nbsp;erasesize:&nbsp;0x08000,&nbsp;numblocks:&nbsp;&nbsp;1&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x010000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29BDS323D,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29BDS323D&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00400000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;3,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;48&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x300000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;15&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x3f0000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;8&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_AMD,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AM29BDS643D,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;AMD&nbsp;AM29BDS643D&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00800000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;3,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;96&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x600000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x7f0000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;8&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_ATMEL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AT49xV16x,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Atmel&nbsp;AT49xV16x&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;2,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;8&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x010000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfr_id:&nbsp;MANUFACTURER_ATMEL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_id:&nbsp;AT49xV16xT,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Atmel&nbsp;AT49xV16xT&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;0x00200000,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numeraseregions:&nbsp;2,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regions:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x000000,&nbsp;erasesize:&nbsp;0x10000,&nbsp;numblocks:&nbsp;31&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;offset:&nbsp;0x1F0000,&nbsp;erasesize:&nbsp;0x02000,&nbsp;numblocks:&nbsp;&nbsp;8&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;mtd_info&nbsp;*mtd;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;flchip&nbsp;chips[MAX_AMD_CHIPS];<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;table_pos[MAX_AMD_CHIPS];<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;amd_flash_private&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;amd_flash_private&nbsp;*private;<br />&nbsp;&nbsp;&nbsp;&nbsp;u_long&nbsp;size;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;base;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;reg_idx;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;offset;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mtd&nbsp;=&nbsp;(struct&nbsp;mtd_info*)mmalloc(sizeof(*mtd));<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!mtd)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;malloc&nbsp;failed&nbsp;for&nbsp;info&nbsp;structure
&quot;,&nbsp;map-&gtname);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(mtd,&nbsp;0,&nbsp;sizeof(*mtd));<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtpriv&nbsp;=&nbsp;map;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;memset(&temp,&nbsp;0,&nbsp;sizeof(temp));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;Probing&nbsp;for&nbsp;AMD&nbsp;compatible&nbsp;flash...
&quot;,&nbsp;map-&gtname);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((table_pos[0]&nbsp;=&nbsp;probe_new_chip(mtd,&nbsp;0,&nbsp;NULL,&nbsp;&temp,&nbsp;table,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(table)/sizeof(table[0])))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;==&nbsp;-1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;Found&nbsp;no&nbsp;AMD&nbsp;compatible&nbsp;device&nbsp;at&nbsp;location&nbsp;zero
&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map-&gtname);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfree(mtd);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;chips[0].start&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp.numchips&nbsp;=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(size&nbsp;=&nbsp;mtd-&gtsize;&nbsp;size&nbsp;&gt&nbsp;1;&nbsp;size&nbsp;&gt&gt=&nbsp;1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.chipshift++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(temp.interleave)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.chipshift&nbsp;+=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.chipshift&nbsp;+=&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Find&nbsp;out&nbsp;if&nbsp;there&nbsp;are&nbsp;any&nbsp;more&nbsp;chips&nbsp;in&nbsp;the&nbsp;map.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(base&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;temp.chipshift);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base&nbsp;&lt&nbsp;map-&gtsize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base&nbsp;+=&nbsp;(1&nbsp;&lt&lt&nbsp;temp.chipshift))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;numchips&nbsp;=&nbsp;temp.numchips;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table_pos[numchips]&nbsp;=&nbsp;probe_new_chip(mtd,&nbsp;base,&nbsp;chips,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&temp,&nbsp;table,&nbsp;sizeof(table)/sizeof(table[0]));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gteraseregions&nbsp;=&nbsp;mmalloc(sizeof(struct&nbsp;mtd_erase_region_info)&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtnumeraseregions);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!mtd-&gteraseregions)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;Failed&nbsp;to&nbsp;allocate&nbsp;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;memory&nbsp;for&nbsp;MTD&nbsp;erase&nbsp;region&nbsp;info
&quot;,&nbsp;map-&gtname);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfree(mtd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map-&gtfldrv_priv&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;reg_idx&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;temp.numchips;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;dev_size;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_size&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt&nbsp;table[table_pos]].numeraseregions;&nbsp;j++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gteraseregions[reg_idx].offset&nbsp;=&nbsp;offset&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(table[table_pos]].regions[j].offset&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.interleave);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gteraseregions[reg_idx].erasesize&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table[table_pos]].regions[j].erasesize&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.interleave;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gteraseregions[reg_idx].numblocks&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table[table_pos]].regions[j].numblocks;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(mtd-&gterasesize&nbsp;&lt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gteraseregions[reg_idx].erasesize)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gterasesize&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gteraseregions[reg_idx].erasesize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dev_size&nbsp;+=&nbsp;mtd-&gteraseregions[reg_idx].erasesize&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gteraseregions[reg_idx].numblocks;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg_idx++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;+=&nbsp;dev_size;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gttype&nbsp;=&nbsp;MTD_NORFLASH;<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtflags&nbsp;=&nbsp;MTD_CAP_NORFLASH;<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtname&nbsp;=&nbsp;map-&gtname;<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gterase&nbsp;=&nbsp;amd_flash_erase;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtwrite&nbsp;=&nbsp;amd_flash_write;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtlock&nbsp;=&nbsp;amd_flash_lock;<br />&nbsp;&nbsp;&nbsp;&nbsp;mtd-&gtunlock&nbsp;=&nbsp;amd_flash_unlock;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;=&nbsp;mmalloc(sizeof(*private)&nbsp;+&nbsp;(sizeof(struct&nbsp;flchip)&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.numchips));<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!private)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;%s:&nbsp;kmalloc&nbsp;failed&nbsp;for&nbsp;private&nbsp;structure
&quot;,&nbsp;map-&gtname);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mfree(mtd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map-&gtfldrv_priv&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(private,&nbsp;&temp,&nbsp;sizeof(temp));<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(private-&gtchips,&nbsp;chips,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(struct&nbsp;flchip)&nbsp;*&nbsp;private-&gtnumchips);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;map-&gtfldrv_priv&nbsp;=&nbsp;private;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;map-&gtfldrv&nbsp;=&nbsp;&amd_flash_chipdrv;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mtd;<br />}<br />
wb_sxck 发表于 2011-7-26 22:30 | 显示全部楼层
我也遇到了同样的问题,求回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

36

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部