20170522_jeffrey - silenceuncrio/diary GitHub Wiki
0900
review
engineering notebook
0925
็นผ็บๅๆ uboot nand flash driver strength ็ธ้็ code
u-boot-imx\2015.04-r0\git\drivers\mtd\nand\nand.c
void nand_init(void)
{
#ifdef CONFIG_SYS_NAND_SELF_INIT
board_nand_init();
#else
int i;
for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
nand_init_chip(i);
#endif
printf("%lu MiB\n", total_nand_size / 1024);
#ifdef CONFIG_SYS_NAND_SELECT_DEVICE
/*
* Select the chip in the board/cpu specific driver
*/
board_nand_select_device(nand_info[nand_curr_device].priv, nand_curr_device);
#endif
}
static void nand_init_chip(int i)
{
struct mtd_info *mtd = &nand_info[i];
struct nand_chip *nand = &nand_chip[i];
ulong base_addr = base_address[i];
int maxchips = CONFIG_SYS_NAND_MAX_CHIPS;
if (maxchips < 1)
maxchips = 1;
mtd->priv = nand;
nand->IO_ADDR_R = nand->IO_ADDR_W = (void __iomem *)base_addr;
if (board_nand_init(nand))
return;
if (nand_scan(mtd, maxchips))
return;
nand_register(i);
}
u-boot-imx\2015.04-r0\git\drivers\mtd\nand\mxs_nand.c
/*!
* This function is called during the driver binding process.
*
* @param pdev the device structure used to store device specific
* information that is used by the suspend, resume and
* remove functions
*
* @return The function always returns 0.
*/
int board_nand_init(struct nand_chip *nand)
{
struct mxs_nand_info *nand_info;
int err;
nand_info = malloc(sizeof(struct mxs_nand_info));
if (!nand_info) {
printf("MXS NAND: Failed to allocate private data\n");
return -ENOMEM;
}
memset(nand_info, 0, sizeof(struct mxs_nand_info));
err = mxs_nand_alloc_buffers(nand_info);
if (err)
goto err1;
err = mxs_nand_init(nand_info);
if (err)
goto err2;
memset(&fake_ecc_layout, 0, sizeof(fake_ecc_layout));
nand->priv = nand_info;
nand->options |= NAND_NO_SUBPAGE_WRITE;
nand->cmd_ctrl = mxs_nand_cmd_ctrl;
nand->dev_ready = mxs_nand_device_ready;
nand->select_chip = mxs_nand_select_chip;
nand->block_bad = mxs_nand_block_bad;
nand->scan_bbt = mxs_nand_scan_bbt;
nand->read_byte = mxs_nand_read_byte;
nand->read_buf = mxs_nand_read_buf;
nand->write_buf = mxs_nand_write_buf;
nand->ecc.read_page = mxs_nand_ecc_read_page;
nand->ecc.write_page = mxs_nand_ecc_write_page;
nand->ecc.read_oob = mxs_nand_ecc_read_oob;
nand->ecc.write_oob = mxs_nand_ecc_write_oob;
nand->ecc.layout = &fake_ecc_layout;
nand->ecc.mode = NAND_ECC_HW;
nand->ecc.bytes = 9;
nand->ecc.size = 512;
nand->ecc.strength = 8;
return 0;
err2:
free(nand_info->data_buf);
free(nand_info->cmd_buf);
err1:
free(nand_info);
return err;
}
้้็ nand->ecc.strength
ๅจ nand.h
็่งฃ้็บ max number of correctible bits per ECC step
ๅฎๆด็่จป่งฃๅฆไธ
/**
* struct nand_ecc_ctrl - Control structure for ECC
* @mode: ECC mode
* @steps: number of ECC steps per page
* @size: data bytes per ECC step
* @bytes: ECC bytes per step
* @strength: max number of correctible bits per ECC step
* @total: total number of ECC bytes per page
* @prepad: padding information for syndrome based ECC generators
* @postpad: padding information for syndrome based ECC generators
* @layout: ECC layout control struct pointer
* @priv: pointer to private ECC control data
* @hwctl: function to control hardware ECC generator. Must only
* be provided if an hardware ECC is available
* @calculate: function for ECC calculation or readback from ECC hardware
* @correct: function for ECC correction, matching to ECC generator (sw/hw)
* @read_page_raw: function to read a raw page without ECC
* @write_page_raw: function to write a raw page without ECC
* @read_page: function to read a page according to the ECC generator
* requirements; returns maximum number of bitflips corrected in
* any single ECC step, 0 if bitflips uncorrectable, -EIO hw error
* @read_subpage: function to read parts of the page covered by ECC;
* returns same as read_page()
* @write_subpage: function to write parts of the page covered by ECC.
* @write_page: function to write a page according to the ECC generator
* requirements.
* @write_oob_raw: function to write chip OOB data without ECC
* @read_oob_raw: function to read chip OOB data without ECC
* @read_oob: function to read chip OOB data
* @write_oob: function to write chip OOB data
*/
struct nand_ecc_ctrl {
nand_ecc_modes_t mode;
int steps;
int size;
int bytes;
int total;
int strength;
int prepad;
int postpad;
struct nand_ecclayout *layout;
void *priv;
void (*hwctl)(struct mtd_info *mtd, int mode);
int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
uint8_t *ecc_code);
int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
uint8_t *calc_ecc);
int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
uint8_t *buf, int oob_required, int page);
int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
const uint8_t *buf, int oob_required);
int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
uint8_t *buf, int oob_required, int page);
int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
uint32_t offs, uint32_t len, uint8_t *buf, int page);
int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
uint32_t offset, uint32_t data_len,
const uint8_t *data_buf, int oob_required);
int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
const uint8_t *buf, int oob_required);
int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
int page);
int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
int page);
int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
int page);
};
่ Avnet FAE ๅไบซ็ Influence of Pin Setting on System Function and Performance
7.1 DSE
ๆๅฐ็ drive strength
The drive strength enable (DSE) can be explained as series resistance between an ideal driverโs output and its load. To achieve maximal transferred power, the impedance of the driver has to match the load impedance.
้็ไพๆฏไธไธๆจฃ็ๆฑ่ฅฟ
่ฉฆ่ๅพ CPU ็ User Manual ไธๆ
0955
Chapter 4 External Signals and Pin Multiplexing
4.1 Overview
The chip contains a limited number of pins, most of which have multiple signal options.
These signal to pin and pin to signal options are selected by the input-output multiplexer
called IOMUX. The IOMUX is also used to configure other pin characteristics, such as
voltage level, drive strength, and hysteresis.
็ไพ้ไธๆฌกๆนๅๆฏๅฐ็
1035
ๆๅจ user manual ๆพๅฐ่ท nand drive strength ็ธ้็ๅญ็ผๅ ๅๅบไพ
- 30.5.253 SW_PAD_CTL_PAD_NAND_RE_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_RE_B)
- Field - 5โ3 DSE
- Description
Drive Strength Field Select one out of next values for pad: NAND_RE_B 000 DSE_0_output_driver_disabled_ โ output driver disabled; 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_ โ R0(260 Ohm @ 3.3V, 150 [email protected], 240 Ohm for DDR) 010 DSE_2_R0_2 โ R0/2 011 DSE_3_R0_3 โ R0/3 100 DSE_4_R0_4 โ R0/4 101 DSE_5_R0_5 โ R0/5 110 DSE_6_R0_6 โ R0/6 111 DSE_7_R0_7 โ R0/7
- 30.5.254 SW_PAD_CTL_PAD_NAND_WE_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_WE_B)
- 30.5.255 SW_PAD_CTL_PAD_NAND_DATA00 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00)
- 30.5.256 SW_PAD_CTL_PAD_NAND_DATA01 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA01)
- 30.5.257 SW_PAD_CTL_PAD_NAND_DATA02 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA02)
- 30.5.258 SW_PAD_CTL_PAD_NAND_DATA03 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA03)
- 30.5.259 SW_PAD_CTL_PAD_NAND_DATA04 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA04)
- 30.5.260 SW_PAD_CTL_PAD_NAND_DATA05 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA05)
- 30.5.261 SW_PAD_CTL_PAD_NAND_DATA06 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA06)
- 30.5.262 SW_PAD_CTL_PAD_NAND_DATA07 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA07)
- 30.5.263 SW_PAD_CTL_PAD_NAND_ALE SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_ALE)
- 30.5.264 SW_PAD_CTL_PAD_NAND_WP_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B)
- 30.5.265 SW_PAD_CTL_PAD_NAND_READY_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_READY_B)
- 30.5.266 SW_PAD_CTL_PAD_NAND_CE0_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_CE0_B)
- 30.5.267 SW_PAD_CTL_PAD_NAND_CE1_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_CE1_B)
- 30.5.268 SW_PAD_CTL_PAD_NAND_CLE SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_CLE)
- 30.5.269 SW_PAD_CTL_PAD_NAND_DQS SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DQS)
1045
้ฃ่ฆๆ้บผ็ฅ้็ฎๅ็ๆซๅญๅจ็ๅผ็บไฝๅข
ไปฅ 30.5.255 SW_PAD_CTL_PAD_NAND_DATA00 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00)
็บไพ
SW_PAD_CTL Register
Address: 20E_0000h base + 40Ch offset = 20E_040Ch
ๅฉ็จ U-Boot ็ md
ๅ mw
...
md - memory displayset.
...
mw - memory write (fill) ....
...
่ฎๅฐ IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00
็ๅผ็บ 0000b0b1h
=> md 020e040c
020e040c: 0000b0b1 ....
่กจ็คบ 5โ3 DSE
็ๅผ็บ 110b
่กจ็คบ 110 DSE_6_R0_6 โ R0/6
็ไพๅฏไปฅ่ท morris ่ไธไธๆ้บผไพๅๅฏฆ้ฉไบ
1335
ๅ ๆๆฉไธๅๅบ็ๆซๅญๅจ็ DSE ๅผๅ ๆไธๆฌก
- 30.5.253 SW_PAD_CTL_PAD_NAND_RE_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_RE_B)
- md 020e0404 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.254 SW_PAD_CTL_PAD_NAND_WE_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_WE_B)
- md 020e0408 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.255 SW_PAD_CTL_PAD_NAND_DATA00 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00)
- md 020e040c 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.256 SW_PAD_CTL_PAD_NAND_DATA01 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA01)
- md 020e0410 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.257 SW_PAD_CTL_PAD_NAND_DATA02 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA02)
- md 020e0414 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.258 SW_PAD_CTL_PAD_NAND_DATA03 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA03)
- md 020e0418 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.259 SW_PAD_CTL_PAD_NAND_DATA04 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA04)
- md 020e041c 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.260 SW_PAD_CTL_PAD_NAND_DATA05 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA05)
- md 020e0420 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.261 SW_PAD_CTL_PAD_NAND_DATA06 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA06)
- md 020e0424 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.262 SW_PAD_CTL_PAD_NAND_DATA07 SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DATA07)
- md 020e0428 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.263 SW_PAD_CTL_PAD_NAND_ALE SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_ALE)
- md 020e042c 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.264 SW_PAD_CTL_PAD_NAND_WP_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B)
- md 020e0430 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.265 SW_PAD_CTL_PAD_NAND_READY_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_READY_B)
- md 020e0434 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.266 SW_PAD_CTL_PAD_NAND_CE0_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_CE0_B)
- md 020e0438 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.267 SW_PAD_CTL_PAD_NAND_CE1_B SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_CE1_B)
- md 020e043c 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.268 SW_PAD_CTL_PAD_NAND_CLE SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_CLE)
- md 020e0440 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
- 30.5.269 SW_PAD_CTL_PAD_NAND_DQS SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_NAND_DQS)
- md 020e0444 1 - 0000b0b1h
- DSE = 110b - 110 DSE_6_R0_6 โ R0/6
1400
็ผ็พๅพ 30.5.253 ๅฐ 30.5.269 ้ 17 ๅๆซๅญๅจ็ๅผ้ฝไธๆจฃ ้ฝๆฏ 0000b0b1h
ๅฐฑไปฅ 30.5.255
็บๆบไพ็ไธไธๆฏๅ field
- HYS[16] - Hyst. Enable Field; Select one out of next values for pad: NAND_DATA00
- 0 HYS_0_Hysteresis_Disabled โ Hysteresis Disabled
- 1 HYS_1_Hysteresis_Enabled โ Hysteresis Enabled
- PUS[15:14] - Pull Up / Down Config. Field; Select one out of next values for pad: NAND_DATA00
- 00 PUS_0_100K_Ohm_Pull_Down โ 100K Ohm Pull Down
- 01 PUS_1_47K_Ohm_Pull_Up โ 47K Ohm Pull Up
- 10 PUS_2_100K_Ohm_Pull_Up โ 100K Ohm Pull Up
- 11 PUS_3_22K_Ohm_Pull_Up โ 22K Ohm Pull Up
- PUE[13] - Pull / Keep Select Field; Select one out of next values for pad: NAND_DATA00
- 0 PUE_0_Keeper โ Keeper
- 1 PUE_1_Pull โ Pull
- PKE[12] - Pull / Keep Enable Field; Select one out of next values for pad: NAND_DATA00
- 0 PKE_0_Pull_Keeper_Disabled โ Pull/Keeper Disabled
- 1 PKE_1_Pull_Keeper_Enabled โ Pull/Keeper Enabled
- ODE[11] - Open Drain Enable Field; Select one out of next values for pad: NAND_DATA00
- 0 ODE_0_Open_Drain_Disabled โ Open Drain Disabled
- 1 ODE_1_Open_Drain_Enabled โ Open Drain Enabled
- SPEED[7:6] - Speed Field; Select one out of next values for pad: NAND_DATA00
- 00 SPEED_0_low_50MHz_ โ low(50MHz)
- 01 SPEED_1_medium_100MHz_ โ medium(100MHz)
- 10 SPEED_2_medium_100MHz_ โ medium(100MHz)
- 11 SPEED_3_max_200MHz_ โ max(200MHz)
- DSE[5:3] - Drive Strength Field; Select one out of next values for pad: NAND_DATA00
- 000 DSE_0_output_driver_disabled_ โ output driver disabled;
- 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_ โ R0
- (260 Ohm @3.3V, 150 [email protected], 240 Ohm for DDR)
- 010 DSE_2_R0_2 โ R0/2
- 011 DSE_3_R0_3 โ R0/3
- 100 DSE_4_R0_4 โ R0/4
- 101 DSE_5_R0_5 โ R0/5
- 110 DSE_6_R0_6 โ R0/6
- 111 DSE_7_R0_7 โ R0/7
- SRE[0] - Slew Rate Field; Select one out of next values for pad: NAND_DATA00
- 0 SRE_0_Slow_Slew_Rate โ Slow Slew Rate
- 1 SRE_1_Fast_Slew_Rate โ Fast Slew Rate
1420
่ท morris ่้ไนๅพๅ ไปฅไธ้ข้ไธๅ field ไพ่ชฟๆด็็
- SPEED[7:6] - Speed Field
- 00 SPEED_0_low_50MHz_
- 01 SPEED_1_medium_100MHz_
- 10 SPEED_2_medium_100MHz_
- 11 SPEED_3_max_200MHz_
- DSE[5:3] - Drive Strength Field
- 000 DSE_0_output_driver_disabled_
- 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_
- 010 DSE_2_R0_2
- 011 DSE_3_R0_3
- 100 DSE_4_R0_4
- 101 DSE_5_R0_5
- 110 DSE_6_R0_6
- 111 DSE_7_R0_7
- SRE[0] - Slew Rate Field
- 0 SRE_0_Slow_Slew_Rate
- 1 SRE_1_Fast_Slew_Rate
็ฎๅ็่จญๅฎๆฏ
- SPEED[7:6] - Speed Field
- 10 SPEED_2_medium_100MHz_
- DSE[5:3] - Drive Strength Field
- 110 DSE_6_R0_6
- SRE[0] - Slew Rate Field
- 1 SRE_1_Fast_Slew_Rate
ๅ
่ชฟๆด SPEED[7:6]
ๅ SRE[0]
- SPEED[7:6] - Speed Field
- 00 SPEED_0_low_50MHz_
- DSE[5:3] - Drive Strength Field
- 110 DSE_6_R0_6
- SRE[0] - Slew Rate Field
- 0 SRE_0_Slow_Slew_Rate
ไปฅ 30.5.253 SW_PAD_CTL_PAD_NAND_RE_B SW PAD Control Register
่่จ
- md 020e0404 0000b030 1
ๅ จ้จ็ธ้็ๆซๅญๅจไธ่ตท่จญๅฎ
mw 020e0404 0000b030 1
mw 020e0408 0000b030 1
mw 020e040c 0000b030 1
mw 020e0410 0000b030 1
mw 020e0414 0000b030 1
mw 020e0418 0000b030 1
mw 020e041c 0000b030 1
mw 020e0420 0000b030 1
mw 020e0424 0000b030 1
mw 020e0428 0000b030 1
mw 020e042c 0000b030 1
mw 020e0430 0000b030 1
mw 020e0434 0000b030 1
mw 020e0438 0000b030 1
mw 020e043c 0000b030 1
mw 020e0440 0000b030 1
mw 020e0444 0000b030 1
่ฉฆ่่ผๅ ฅ linux
run bootcmd
้ๆฉๆๅ
1540
่ชฟๆดไธไธ DSE[5:3]
็ๅผไพ่ฉฆ่ฉฆ็
ๅ
่ชฟๆ 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_
ๅ ถไปไฟๆไธๅ
ๅ
จ้จ็ธ้็ๆซๅญๅจไธ่ตท่จญๅฎๆ 0000b089
mw 020e0404 0000b089 1
mw 020e0408 0000b089 1
mw 020e040c 0000b089 1
mw 020e0410 0000b089 1
mw 020e0414 0000b089 1
mw 020e0418 0000b089 1
mw 020e041c 0000b089 1
mw 020e0420 0000b089 1
mw 020e0424 0000b089 1
mw 020e0428 0000b089 1
mw 020e042c 0000b089 1
mw 020e0430 0000b089 1
mw 020e0434 0000b089 1
mw 020e0438 0000b089 1
mw 020e043c 0000b089 1
mw 020e0440 0000b089 1
mw 020e0444 0000b089 1
่ผๅ ฅ linux
run bootcmd
้ๆฉๆๅ
1550
ๅ่ชฟๆด DSE[5:3]
็ๅผๆ 111 DSE_7_R0_7
ๅ ถไปไฟๆไธๅ
ๅ
จ้จ็ธ้็ๆซๅญๅจไธ่ตท่จญๅฎๆ 0000b0b9
mw 020e0404 0000b0b9 1
mw 020e0408 0000b0b9 1
mw 020e040c 0000b0b9 1
mw 020e0410 0000b0b9 1
mw 020e0414 0000b0b9 1
mw 020e0418 0000b0b9 1
mw 020e041c 0000b0b9 1
mw 020e0420 0000b0b9 1
mw 020e0424 0000b0b9 1
mw 020e0428 0000b0b9 1
mw 020e042c 0000b0b9 1
mw 020e0430 0000b0b9 1
mw 020e0434 0000b0b9 1
mw 020e0438 0000b0b9 1
mw 020e043c 0000b0b9 1
mw 020e0440 0000b0b9 1
mw 020e0444 0000b0b9 1
่ผๅ ฅ linux
run bootcmd
้ๆฉๆๅ